【问题标题】:add2virtualenv (virtualenv wrapper) does not work with scipyadd2virtualenv(virtualenv 包装器)不适用于 scipy
【发布时间】:2025-12-01 15:45:01
【问题描述】:

我想创建一个没有全局 python 包的 virtualenv,但使用共享的 scipy 发行版;安装 scipy 需要相当长的时间,我不想太频繁地完成这些动作。

所以我运行 add2virtualenv /Library/Python/2.7/site-packages/scipy 并在运行 add2virtualenv 后显示目录已添加。 (我仔细检查了,它是正确的目录)。 然后我发出workon myfile 以确保重新加载工作目录。 但是,当我尝试加载 scipy 时,它是一个 ImportError: No module named scipy。这是意料之外的。

有没有人在非全局站点包 virtualenv 中使用全局 scipy?

【问题讨论】:

  • add2virtualenv 将指定目录添加到 PYTHONPATH。因此,您应该添加整个站点包以导入 scipy。
  • 另一种解决方案应该是在虚拟环境的站点包内符号链接 scipy 目录
  • 谢谢。所以我误解了应该使用 add2virtualenv 的方式。是否没有可以轻松添加特定包的命令? (除了符号链接?)
  • 我不知道 virtualenvwrapper 是如何工作的,但我不这么认为......对我来说,符号链接似乎是一个很好的解决方案。毕竟,virtualenv 的站点包中的许多模块都是符号链接的。
  • 我通常做的是创建一个带有--no-system-site-packages、pip install scipy、numpy 等的“基础”virtualenv,然后在我想要一个新的“一次性”时使用cpvirtualenv 克隆它virtualenv 乱搞。

标签: python macos scipy virtualenv virtualenvwrapper


【解决方案1】:

所以,总结一下,这里的实际问题是必须使用包含要导入的包的目录,而不是具体的包。也就是说,而不是

add2virtualenv /Library/Python/2.7/site-packages/scipy

应该是

add2virtualenv /Library/Python/2.7/site-packages

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


另一种节省空间的解决方案可能是在虚拟环境的站点包内对 scipy 目录进行符号链接。这可以通过以下方式在您的虚拟环境中完成:

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

所有学分都归@rubik(见 cmets)

查看this 答案以查找您的站点包路径,以防它与此处使用的路径不同。

【讨论】: