VirtualEnv可以在当前目录中创建符号链接吗?

时间:2016-08-05 22:30:56

标签: python virtualenv

我试图越来越多地使用VirtualEnv,而且我遇到了一些通过类似popen()之类的东西来调用python的项目,无论出于何种原因,这些脚本都不是正确找到网站包。

对于此类项目,以与

类似的方式对站点包进行符号链接
ln -s env/lib/python2.7/site-packages/<package> <package>

目录的根目录似乎有效。

有没有办法让VirtualEnv为我这样做,或者我将不得不为此包装一个脚本?

2 个答案:

答案 0 :(得分:1)

简短的回答是,不,virtualenv工具本身无法管理您的包依赖关系;它通常依赖于pip这样的工具来实现。

http://docs.python-guide.org/en/latest/dev/virtualenvs/

您遇到此问题的原因

这取决于您env的创建方式 - 压缩文件与github克隆,github存储库中包含的内容,例如:它包含env/lib内容

如果没有@tripleee建议您添加的具体信息,那么很难提出确切答案,但要回到第一原则......

当您通过调用virtualenv env创建新的virtualenv时,它会创建一个env文件夹,其中包含pip,setuptools和(最近)轮安装在以下文件夹中

env/bin
env/include
env/lib/python2.7/site-packages/

如果您已将.py文件复制到env文件夹(例如env/app.py),并且您的应用依赖于非pip,setuptools或wheel的外部包,那么它将失败,因为它未能在/site-packages/文件夹中找到该包。

如果您从包含/lib/内容的git仓库克隆了您的副本(这是一个可怕的想法),您将收到任何已提交到仓库的软件包,但没有别的。因此,如果您的应用所需的外部包不在回购中,则会失败。

您的符号链接代码似乎建议您将virtualenv文件夹中的符号链接添加到您自己的本地包文件夹中...如果这是使它工作的原因,则问题可能是您不是首先正确使用virtualenv,实际上您在本地计算机上运行应用程序,而不是virtualenv内。

如何编写脚本&#39;它

管理包和依赖项的典型方法是使用pip freeze > requirements.txtpip install -r requirements.txt的组合,这正是上面链接中建议的。

如果您依赖的软件包不在PyPi上(并且鉴于您已经提到过#&#39;遗产&#39;,我猜这很可能),还有其他方法可以管理这个。

http://docs.python-guide.org/en/latest/shipping/packaging/

答案 1 :(得分:0)

我不是100%确定我正在回答您的确切问题,因为它没有明确说明什么类型的包。但是,整个星期都在VirtualEnv工作,我不得不使用其他地方的一些模块(对于我在anaconda中),所以我会试一试。

我一直在做的是,当我创建一个环境并从命令行激活它时,我将pip安装到虚拟环境中。它比原始安装快得多,因为如果您要使用的模块已经存在于您的计算机上,那么您只需要了解您的环境。

我创建了一个文本文件,其中包含我需要的所有模块,因此我可以在新环境中从cmd重新运行它,并立即安装所有模块。

在Anaconda&amp; VirutalEnv,我的模块在停用和重新激活后仍然存在。但我不确定VirtualEnv如何在独立版本的python 2.7中运行。