【发布时间】:2023-04-05 16:20:01
【问题描述】:
为什么 sys.path 在我的 virtualenv 目录之前包含 /usr/...?
我用--system-site-packages创建了virtualenv
sys.path 现在看起来像这样:
/home/my-virtualenv/src/foo
/usr/lib/python2.7/site-packages <--- /usr paths should be below
/usr/lib64/python2.7/site-packages
/home/my-virtualenv/lib/python27.zip
/home/my-virtualenv/lib64/python2.7
/home/my-virtualenv/lib64/python2.7/plat-linux2
/home/my-virtualenv/lib64/python2.7/lib-tk
/home/my-virtualenv/lib64/python2.7/lib-old
/home/my-virtualenv/lib64/python2.7/lib-dynload
/usr/lib64/python2.7
/usr/lib/python2.7
/usr/lib64/python2.7/lib-tk
/home/my-virtualenv/lib/python2.7/site-packages
我希望我的 virtualenv (/usr...) 之外的所有路径都位于 virtualenv 的路径之下。
否则会发生疯狂的事情:我用 pip 安装一个包。 Pip 告诉我新版本已安装 (pip freeze | grep -i ...) 但导入确实使用来自 /usr/lib/python2.7/site-packages 的版本
我不能在我的上下文中使用--no-site-packages。
有没有办法对sys.path进行排序?
为什么我使用 system-site-packages
似乎没有直接的方法可以在 virtualenv 中使用全局站点包中的单个库。看到这个问题: make some modules from global site-packages available in virtualenv
有些像 python-gtk 这样的包很难在 virtualenv 中安装。
【问题讨论】:
-
“我不能在我的上下文中使用
--no-site-packages”:请详细说明。 -
@Kevin 我可以解释一下,但是会发生什么变化?我不能在我的上下文中使用 --no-site-packages - 就是这样。问题是关于排序 sys.path :-)
-
坦率地说,
--system-site-packages坏了。将所有东西都安装到 virtualenv 中几乎总是更好。您的情况(显然)不同这一事实使我很难在没有更多信息的情况下为您提供有用的答案。 -
这个限制(没有
--no-site-packages)是因为一些共享的全局包吗?如果是这样,为什么不在 virtualenv 中复制它们? -
我更新了问题并添加了“为什么我使用 system-site-packages”部分
标签: python path pip virtualenv