4

pipを介して他のプロジェクトに含まれるライブラリを構築しています。

次のディレクトリがあります(「venv」はvirtualenvです):

project
  \- bin
     \- run.py
  \- myproj
     \- __init__.py
     \- logger.py
  \- venv

virtualenv を有効にします。

bin/run.py には次のものがあります。

from myproj.logger import LOG

しかし、私はいつも得ます

ImportError: No module named myproj.logger

以下は、「プロジェクト」ディレクトリから機能します。

python -c "from myproj.logger import LOG"

「bin」ディレクトリから呼び出されたときに、「project」ディレクトリを pythonpath に正しく追加していません。bin ディレクトリのスクリプトから「myproj」からモジュールをインポートするにはどうすればよいですか?

4

4 に答える 4

9

virtualenvにインストールmyprojectします。その後、ハッキングなしで環境がアクティブ化されている間、任意のスクリプト (を含む) からvenvインポートできます。myprojectbin/run.pysys.path

インストールするproject/setup.pyには、myprojectパッケージを作成しproject、virtualenv がアクティブなときにディレクトリから実行します。

$ pip install -e .

インプレースでインストールされますmyproject(モジュールの変更は、myproject再インストールせずにすぐに表示されますmyproject)。

于 2013-05-29T14:30:50.413 に答える
5

ここでの解決策は、持っている virtualenv を入手してから、開発者モードでパッケージをインストールすることです。

ソース venv/bin/activate

pip インストール -e 。

myproject.loggerからインポートできますrun.py

パッケージを環境にインストールできるようにするには、setup.py ファイルも作成する必要があります。まだお持ちでない場合は、こちらの公式ドキュメントをご覧ください。

于 2013-05-29T14:14:21.257 に答える
1

現在の作業ディレクトリのみが、依存関係の解決に使用される PYTHONPATH 内にあります。そのため、ビン内でスクリプトを実行すると、プロジェクトはもうパスにありません。他の回答に示されているように、環境変数に追加するか、プログラムで sys.path リストを編集することにより、プロジェクトを PYTHONPATH に追加する一般的な方法の 1 つを使用する必要があります。

于 2013-05-29T14:16:17.290 に答える
0

PYTHONPATH にプロジェクトのパスを追加します

于 2013-05-29T14:32:27.993 に答える