読者です 読者をやめる 読者になる 読者になる

水底

ScalaとかC#とかネットワークとか

Pythonのimportで見事ハマる

(環境: Windows10-anaconda/python3, Debian8.5-anaconda/python3)

TL;DR

循環インポートしてた

タイトル通り. python様に「おめぇのpackage認めねーから!」とお叱りを受ける.

調べると大体以下の解決策がヒットする

  • ルートパスが解決できていないのでPYTHONPATHをプロジェクトルートに設定する
  • sys.path.append("/path/to/dir")でパスを追加する
  • 自作package化するためにpackageにしたいディレクトリに空の__init__.pyというファイルを作成する
  • 自作packageを呼び出す際はimportで.pyを含めない

(上2つはパスの解決のため, 3つ目はディレクトリ構造をpackageと認識させるため(python3.3以降は不要らしい), 4つ目は拡張子を除いた文字列がモジュール名と認識されるというルールのため)

が, どれを試しても解決しなかった. エラー内容はno module named ~~ is not a packageといったもののみで上記以外見当付かず. PyCharmを利用していたのでそちらも確認したがエラーのサジェストは一切なし. 動かなくなった前後の変更点を端から試したところ循環インポート, 実際には(エントリポイントのpy -> とあるモジュールA, とあるモジュールA -> エントリポイントのpy)となっていた. この循環インポートをなくしたところ実行できるようになった, めでたし. (エラーサジェスト欲しかった…)