virtualenvのPYTHONPATHにパスを追加するにはどうすればよいですか


97

PYTHONPATH環境変数にパスを追加しようとしています。これは、特定のvirtualenv環境からのみ表示されます。

SET PYTHONPATH=...virtualenvコマンドプロンプトで試しましたが、環境全体の変数が設定されます。

どうすればそれを達成できますか?

回答:


155

通常、ファイルを使用.pthすることで、PYTHONPATHで何かをする必要がなくなります。拡張子が.pthのファイル(ベース名は機能します)をvirtualenvのsite-packagesフォルダーにlib\python2.7\site-packages入れてください。


残念ながら、これはオーバーライドとしては機能しません。パスを追加するので、開発している場合は機能しません。
Erik Aronesty

また、絶対パスがわかっている場合、変数の意味は何ですか?
ジェイミーマーシャル

また、仮想環境のsite-packagesフォルダーに移動して、次のように.pthファイルへのシンボリックリンクを作成することもできます:ln -s path / to / somfile.pth。複数の仮想環境で同じディレクトリにアクセスできるようにする必要があるときに、これが便利だと感じました
データファン

91

を使用virtualenvしている場合は、おそらくvirtualenvwrapperも使用している必要があります。この場合、add2virtualenvコマンドを使用して、現在のvirtualenvのPythonパスにパスを追加できます。

add2virtualenv directory1 directory2 …


3
virtualenvから削除するのはどうですか?
silverdagger

1
共有ホストや同様の状況ではvenvラッパーが望ましくないという親しみやすいコメントを追加したいと思います。そのような場合、1つのvenvが有効であり、追加のインストールを行うために必要なことはすべて望ましくありません。ローカルでは事情は異なりますが、サーバー/イメージではKISSが非常に重要です。
Marc

2
これが書かれたときのコマンドの動作はわかりadd2virtualenvませんが、$ PYTHONPATHは変更されません。sys.pathが変更されます。
ForeverWintr 2016

1
@ajostergaard:すみません、私はソースを提供するべきでした。のソースコードを見ると、add2virtualenvsys.pathを変更していることがわかります。私はドキュメントがPYTHONPATH環境変数を変更するように聞こえるようにすることに同意しますが、それは正しくないようです。bitbucket.org/virtualenvwrapper/virtualenvwrapper/src/...
ForeverWintr

1
@ForeverWintr修正済みのようです-.pthファイルはsys.pathのセットアップに使用されます。docs.python.org/2/library/site.html Confused.com!
ostergaard 2016年

5

また、virtualenvの1つにシンボリックリンクを配置することもできます。

例えば。1)virtualenvをアクティブ化します。2)pythonを実行します。3)sysをインポートしてsys.pathを確認します。4)そこにpython検索パスがあります。それらのいずれかを選択します(例:site-packages)5)そこに移動し、次のようにパッケージへのシンボリックリンクを作成します。

そうすれば、virtualenvをアクティブ化しなくてもインポートできるはずです。単純に試してみてください:path-to-your-virtualenv-folder / bin / pythonをインポートしてパッケージをインポートします。


これは.pthファイルではなくシンボリックリンクを使用することに賛成だったと思います。それは私にとってもうまくいったので、振る舞い。
Gareth Davidson

3

virtualenvwrapperを使用している場合、

$ cd to the parent folder
$ add2virtualenv  folder_to_add

コンソールが表示されます

Warning: Converting "folder_to_add" to "/absoutle/path/to/folder_to_add"

それだけです、あなたは行ってもいいはずです


1
import sys
import os

print(str(sys.path))

dir_path = os.path.dirname(os.path.realpath(__file__))
print("current working dir: %s" % dir_path)

sys.path.insert(0, dir_path)

パスが乱雑にならないように、virtualenvとvirtualenvwrapperを使用することを強くお勧めします。


これを任意のpythonバージョンで動作させたい場合は、派手なf-string f "... {dir_path}"ではなく、通常の古いスタイルのstring-formatを使用してください
Guillaume S

コメントをありがとう。改定して使用しました。古い方法は扱いにくく、特異なものであり、単純なテンプレートシステムに特別なものはありません
Rubber Duck

すべてが相対的です:)
ギヨームS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.