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

Can VirtualEnv create symlinks in the current directory?

我越来越多地尝试使用 VirtualEnv,我遇到了一些通过 popen() 之类的方式调用 python 的项目,但无论出于何种原因,脚本都没有正确找到网站包。

对于此类项目,以与

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

目录的根目录似乎可以工作。

有没有办法让 VirtualEnv 为我做这个,或者我是否必须为此包装一个脚本?

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

我一直在做的是,当我创建一个环境并从命令行激活它时,我然后将软件包 pip 安装到虚拟环境中。它比原始安装快得多,因为如果您要使用的模块已经存在于您的机器上,您只是让您的环境知道。

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

在 Anaconda 和 VirutalEnv 中,我的模块在停用和重新激活后仍然存在。但是我不确定 VirtualEnv 在 python 2.7.

的独立版本中如何工作

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

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

您为什么会遇到这个问题

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

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

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

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

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

如果您从包含 /lib/ 内容的 git 存储库中克隆了您的副本(这是一个糟糕的想法),您将收到提交到该存储库中的任何包,但没有别的.因此,如果您的应用程序需要的外部包不在回购协议中,它将失败。

您的 symlink 代码似乎表明您正在将 virtualenv 文件夹中的 symlink 执行到您自己的本地包文件夹中...如果这是它工作的原因,那么问题很可能是你一开始没有正确使用 virtualenv,事实上你是 运行 你的应用程序在你的本地机器上,而不是在 virtualenv.

如何'script'它

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

如果您依赖的包不在 PyPi 上(鉴于您已经提到 'legacy',我猜这很有可能),您可以通过其他方式来管理它。

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