当 virtualenv 和系统站点包有冲突的依赖时会发生什么?

What happens when virtualenv and system site packages have conflicting dependencies?

如果您的虚拟环境具有依赖于 numpy-1.12 的包 X,并且您的系统站点具有依赖于 numpy-1.8 的包 Y ,当你这样做时会发生什么

import X
import Y

import Y
import X

?

(假设您使用

创建了虚拟环境
virtualenv --system-site-packages

或符号链接 Y)

在安装时解决依赖关系,而不是在导入时。因此,源代码中语句 import Ximport Y 的顺序与您的问题无关紧要。

安装在 virtualenv 中的包将在这里获胜,因为这将是遍历时第一次找到 numpy sys.path。检查属性 numpy.__file__ 会告诉您它是从哪里拾取的,您可以 运行 python -m site 查看为什么 numpy 首先从该位置拾取的详细信息.

实际上,软件包通常不会指定硬固定到特定版本号的依赖项,但它们会指定某个范围(或者根本不指定版本限制)。