質問を少し変更しても構わないと思っている場合は、これを回避できます。
パッケージへの唯一のエントリポイントが制御されている場合。testsuite package/.../module.py
たとえば、呼び出しのようなことをしてコードをテストするだけです。
import firstthing
次に、最初に行うことはであり、package/firstthing.py には次のものがあることを確認できます。
import sys
import os.path
packageDir = os.path.split(__name__)[0]
sys.path[:] = sys.path+[packageDir] # or maybe you want it first...
主な注意点は、エントリポイントを通過しないと python ファイルを実行できないことです。Python で作成するすべてのプロジェクトで常にこれを実行したいと思っていますが (相対インポートを適切に機能させるため)、個人的にはこれは非常に不便であり、あきらめました。
2 番目の選択肢もあります。パッケージが python パスで別のパッケージを必要とすることを指定することは、それほど不合理ではありません。このパッケージは、主要なハッキングを実行するユーティリティ パッケージである可能性があります。たとえば、パッケージの名前が「x」のimport x
場合、インスペクト モジュールを使用してインタプリタ スタックでリフレクションを実行し、インポート元のモジュールを特定できます。次に、パッケージのルートが見つかるまで (特別なインジケーター ファイルやマニフェストなどをチェックして) 親ディレクトリを上って、一種の「os.walk の逆方向」を実行できます。次に、コードは、Pythonパスの上記の変更をプログラムで実行しますsys.path
. 上記と同じですが、ひどいエントリポイントを通過することなく、任意の python ファイルを実行するなどの操作を自由に行うことができます。
シェル環境を完全に制御できる場合は、$PYTHONPATH を拡張してパッケージ ディレクトリを含めることもできますが、これは多くの点で非常に脆弱であり、むしろ洗練されていません。