当 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 X
和 import Y
的顺序与您的问题无关紧要。
安装在 virtualenv 中的包将在这里获胜,因为这将是遍历时第一次找到 numpy sys.path
。检查属性 numpy.__file__
会告诉您它是从哪里拾取的,您可以 运行 python -m site
查看为什么 numpy
首先从该位置拾取的详细信息.
实际上,软件包通常不会指定硬固定到特定版本号的依赖项,但它们会指定某个范围(或者根本不指定版本限制)。
如果您的虚拟环境具有依赖于 numpy-1.12
的包 X
,并且您的系统站点具有依赖于 numpy-1.8
的包 Y
,当你这样做时会发生什么
import X
import Y
或
import Y
import X
?
(假设您使用
创建了虚拟环境virtualenv --system-site-packages
或符号链接 Y
)
在安装时解决依赖关系,而不是在导入时。因此,源代码中语句 import X
和 import Y
的顺序与您的问题无关紧要。
安装在 virtualenv 中的包将在这里获胜,因为这将是遍历时第一次找到 numpy sys.path
。检查属性 numpy.__file__
会告诉您它是从哪里拾取的,您可以 运行 python -m site
查看为什么 numpy
首先从该位置拾取的详细信息.
实际上,软件包通常不会指定硬固定到特定版本号的依赖项,但它们会指定某个范围(或者根本不指定版本限制)。