昨天,我编辑了virtualenv的bin/activate
脚本,以便设置PYTHONPATH
环境变量以包含某些外部包的开发版本。我必须执行此操作,因为程序包的setup.py
使用distutils
并且不支持develop
命令àlasetuptools
。设置PYTHONPATH
在终端中使用Python解释器时可以正常工作。
然而,刚才我在PyCharm中打开了项目设置,发现PyCharm并不知道有问题的外部包 - PyCharm既没有列出外部包也没有路径。当然,这是因为PyCharm没有(并且不能可靠地)解析或获取bin/activate
脚本。我可以在PyCharm项目设置中手动添加路径,但这意味着我必须重复自己(一次在bin/activate
,再一次在PyCharm项目设置中)。那不是干,那很糟糕。
在site-packages
中创建指向外部包的符号链接几乎完美。这样,至少PyCharm的源编辑器可以找到包,终端中的Python解释器也是如此。但是,PyCharm仍然没有在项目设置中列出包,我不确定是否可以这样做。
那么我怎么能以这样的方式将外部包添加到我的virtualenv /项目中......
答案 0 :(得分:1)
即使某个软件包未使用setuptools
pip
monkeypatches setup.py
强制它使用setuptools
。
也许您可以删除PYTHONPATH
黑客和pip install -e /path/to/package
。
答案 1 :(得分:0)
一种选择是动态添加路径:
try:
import foo
except ImportError:
sys.path.insert(0. "/path/to/your/package/directory")
import foo
但它不是最佳解决方案,因为该代码很可能无法进入应用程序的最终版本。另一个选项(更合适的imho)是为包创建简单的setup.py文件,并使用develop参数在virtualenv中部署它:
python setup.py develop
http://packages.python.org/distribute/setuptools.html#development-mode
答案 2 :(得分:-1)
这是对ndpu答案的改进,无论实际文件在何处,它都可以使用。
您可以取消引用符号链接,然后在导入本地导入之前设置sys.path
。
import os.path
import sys
# Ensure this file is dereferenced if it is a symlink
if __name__ == '__main__' and os.path.islink(__file__):
try:
sys.path.remove(os.path.dirname(__file__))
except ValueError:
pass
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
# local imports go here