2016-07-15 6 views
0

これは簡単な質問のように思えるかもしれませんが、私が見ている動作を説明する答えは見つかりませんでした。簡単なREPROケースを提供するのは難しいが、私は基本的に、このようなパッケージ構造を有する:私は1つのa.b.c.内のファイルを持つプロジェクト(のはこのaux_projectを呼びましょう)とa.b.d内のファイルを持っている別のものを持っているPythonモジュールパスはどのようにファイルシステムパスに変換されますか?

a.b.c a.b.utils

を、a.b.utilsなど(それをmain_projectと呼ぶ)。私はtests_requireを使用して、最初のプロジェクトでpytestテストの中でa.b.utilsをインポートしようとしています。 a.bは、何らかの理由でvirtualenvの代わりにaux_project/a/b/__init__.pycのソースから供給され、他のパッケージをシャドウします(つまり、a.bdまたはutilsではなく、です)。これはテストコンテキストでのみ発生します。 ipythonでは、すべてのパッケージを正常に読み込むことができ、virtualenvから正しく読み込まれます。

何奇妙なのは(私も、そのディレクトリを必要とする)

のpython == 2.7.9

私は単に は、実際のディレクトリを削除した場合、テストはvirtualenvのからpycsをロードしないことですし、すべてが動作します

何が起こっているのですか?

+0

私は、PYTHONPATHが明示的に設定されておらず、ipythonとテストが同じvenv –

答えて

0

問題は単純に、cwdがPYTHONPATHの先頭に追加されていたことです。 sys.path.pop(1)(0はテストディレクトリで、pytestの前に付いています)は動作を解決しました。

関連する問題