【发布时间】:2012-05-31 02:54:55
【问题描述】:
我正在尝试向 PYTHONPATH 环境变量添加一个路径,该路径仅在特定的 virtualenv 环境中可见。
我在 virtualenv 命令提示符下尝试了SET PYTHONPATH=...,但这会为整个环境设置变量。
我如何做到这一点?
【问题讨论】:
标签: python virtualenv
我正在尝试向 PYTHONPATH 环境变量添加一个路径,该路径仅在特定的 virtualenv 环境中可见。
我在 virtualenv 命令提示符下尝试了SET PYTHONPATH=...,但这会为整个环境设置变量。
我如何做到这一点?
【问题讨论】:
标签: python virtualenv
using .pth files 通常可以避免使用 PYTHONPATH 做任何事情。只需在您的 virtualenv 的站点包文件夹中放置一个扩展名为 .pth 的文件(任何基本名称都可以),例如lib\python2.7\site-packages,包含您的包的目录的绝对路径作为其唯一内容。
【讨论】:
venv文件不应该被跟踪,如何跟踪这个文件?
.pth 文件,Pylance 将无法识别我的其他模块文件夹。谢谢!
如果您使用的是virtualenv,您可能也应该使用virtualenvwrapper,在这种情况下,您可以使用add2virtualenv 命令将路径添加到当前virtualenv 的Python 路径:
add2virtualenv directory1 directory2 …
【讨论】:
add2virtualenv 没有修改 $PYTHONPATH,而是修改了 sys.path。
add2virtualenv 的源代码,您可以看到它正在修改 sys.path。我同意这些文档听起来像是修改了 PYTHONPATH 环境变量,但这似乎是不正确的。 bitbucket.org/virtualenvwrapper/virtualenvwrapper/src/…
您也可以尝试将符号链接添加到您的虚拟环境之一。
例如。 1)激活你的virtualenv 2)运行蟒蛇 3) 导入 sys 并检查 sys.path 4)你会在那里找到python搜索路径。选择其中之一(例如站点包) 5)去那里创建符号链接到你的包,如: ln -s path-to-your-package name-with-which-you'll-be-importing
这样你应该能够在不激活你的 virtualenv 的情况下导入它。只需尝试:path-to-your-virtualenv-folder/bin/python 并导入你的包。
【讨论】:
如果你使用的是 virtualenvwrapper,
$ cd to the parent folder
$ add2virtualenv folder_to_add
控制台将显示
Warning: Converting "folder_to_add" to "/absoutle/path/to/folder_to_add"
就是这样,你应该很高兴
【讨论】:
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 以避免路径混乱。
【讨论】:
正如上面@crimeminister 所建议的那样,您可以使用virtualenvwrapper 然后add2virtualenv 就像@Aneesh Panoli 所建议的那样。如果add2virtualenv 在pip install virtualenvwrapper 之后不起作用,那么follow instructions in the top voted answer by @chirinosky here。对我有用。
【讨论】: