如何在virtualenv中向PYTHONPATH添加路径


97

我正在尝试向PYTHONPATH环境变量添加路径,该路径仅在特定的virtualenv环境中可见。

SET PYTHONPATH=...在virtualenv命令提示符下进行了尝试,但这为整个环境设置了变量。

我该如何实现?

Answers:


155

通常,您可以通过使用.pthfiles来避免对PYTHONPATH做任何事情。只需在您的virtualenv的site-packages文件夹中放入一个扩展名为.pth的文件(任何基本名称均有效),例如lib\python2.7\site-packages,将包含软件包的目录的绝对路径作为其唯一内容。


不幸的是,这不能作为替代。它附加了路径,所以如果您要开发它就行不通。
Erik Aronesty,

另外,如果您知道绝对路径,那么变量的意义是什么?
杰米·马歇尔

您还可以导航到虚拟环境的site-packages文件夹,并创建指向.pth文件的符号链接,如下所示:ln -s path / to / somfile.pth。当我需要在多个虚拟环境中可以访问同一目录时,我发现这很有用
Data-phile

91

如果使用virtualenv,则可能还应该使用virtualenvwrapper,在这种情况下,可以使用add2virtualenv命令将路径添加到当前virtualenv的Python路径:

add2virtualenv directory1 directory2 …


3
如何从virtualenv中删除?
silverdagger

1
我想添加一个友好的注释,即在共享主机和类似情况下,不需要venv包装器。在这种情况下,一个阀是有效的,因此不需要进行额外安装。在本地,情况有所不同,但是在服务器/映像上,KISS确实很重要。
2016年

2
我不确定该命令在编写时如何工作,但add2virtualenv不会修改$ PYTHONPATH,而是修改sys.path。
ForeverWintr

1
@ajostergaard:对不起,我应该提供消息来源。如果查看的源代码add2virtualenv,则可以看到它正在修改sys.path。我同意文档听起来像是在修改PYTHONPATH环境变量,但这似乎是不正确的。bitbucket.org/virtualenvwrapper/virtualenvwrapper/src/…–
ForeverWintr

1
@ForeverWintr我已纠正-.pth文件用于设置sys.path。docs.python.org/2/library/site.html Confused.com!
ostergaard

5

您也可以尝试将符号链接放入您的virtualenv之一。

例如。1)激活您的virtualenv 2)运行python 3)导入sys并检查sys.path 4)您将在那里找到python搜索路径。选择其中一个(例如站点软件包)5)转到其中,并创建指向您软件包的符号链接,例如:ln -s您要导入的软件包名称路径

这样,即使不激活virtualenv,您也应该能够导入它。只需尝试:进入您的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字符串f“ ... {dir_path}”
Guillaume S

感谢您的评论。我修改使用。旧的方法麻烦且特质,简单的模板系统也没有花哨的东西
Rubber Duck

一切都是相对的:)
Guillaume S'1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.