add2virtualenv(virtualenv wrapper)无法与scipy配合使用

6
我希望创建一个virtualenv,其中不包含全局python包,但包含共享的scipy分发;安装scipy需要相当长的时间,我不想经常执行此操作。
所以我运行了add2virtualenv /Library/Python/2.7/site-packages/scipy,并在运行add2virtualenv后显示目录已添加。(我进行了双重检查,这是正确的目录)。 然后我发出workon myfile以确保重新加载工作目录。 然而,当我尝试加载scipy时,出现了ImportError: No module named scipy。这是意外的。
有人在非全局站点包virtualenv中使用过全局scipy吗?

1
add2virtualenv将指定目录添加到PYTHONPATH。因此,您应该添加整个site-package以导入scipy。 - rubik
1
另一种解决方案应该是在虚拟环境的site-package中建立scipy目录的符号链接。 - rubik
谢谢。所以我误解了add2virtualenv的使用方式。除了符号链接之外,是否有任何使添加特定软件包变得容易的命令? - Okke
我不知道virtualenvwrapper是如何工作的,但我不这样认为... 对我来说,符号链接似乎是一个好的解决方案。毕竟,虚拟环境中的许多模块都是符号链接到site-package中的。 - rubik
我通常的做法是创建一个带有 --no-system-site-packages 参数的“基础”虚拟环境,然后在其中使用 pip 安装 scipy、numpy 等库。之后,每当我想要一个新的“一次性”虚拟环境来进行实验时,我会使用 cpvirtualenv 命令来克隆它。 - ali_m
1个回答

3
所以,总结一下,实际问题在于必须使用包含要导入的软件包的目录,而不是特定的软件包。也就是说,不是使用以下内容:
add2virtualenv /Library/Python/2.7/site-packages/scipy

我应该

add2virtualenv /Library/Python/2.7/site-packages

注意:这个解决方案的缺点是您不仅会包含scipy,还会包含/Library/Python/2.7/site-packages中的任何其他包。


另一种节省空间的解决方案是在虚拟环境的site-package内建立scipy目录的符号链接。在您的虚拟环境中,可以通过以下方式完成:

cdsitepackages
ln -s /Library/Python/2.7/site-packages/scipy scipy

所有荣誉归@rubik所有(请查看评论)

如果您的网站包路径与此处使用的路径不同,请查看答案来查找您的网站包路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接