gpt4 book ai didi

python - Ubuntu + virtualenv = 一团糟? virtualenv 讨厌 dist-packages,想要 site-packages

转载 作者:太空狗 更新时间:2023-10-29 17:11:31 26 4
gpt4 key购买 nike

有人可以向我解释一下 python 在 ubuntu 9.04 中发生了什么吗?

我正在尝试启动 virtualenv,而 --no-site-packages 标志似乎对 ubuntu 没有任何作用。我用 easy_install 安装了 virtualenv 1.3.3(我已经升级到 setuptools 0.6c9),所有的东西似乎都安装到了 /usr/local/lib/python2.6/dist-packages

假定当使用 apt-get 安装包时,它被放置在 /usr/lib/python2.6/dist-packages/ 中?

问题是,还有一个 /usr/local/lib/python2.6/site-packages 也只是空着。看起来(通过查看 virtualenv 中的 path)这是 virtualenv 用作备份的文件夹。因此即使我忽略了 --no-site-packages,我也无法从我的任何 virtualenv 访问我的本地系统包。

所以我的问题是:

  1. 如何让 virtualenv 指向其中一个 dist-packages
  2. 我应该将它指向哪些 dist-packages? /usr/lib/python2.6/dist-packages/usr/local/lib/python2.6/dist-packages/
  3. /usr/lib/python2.6/site-packages 有什么意义?里面什么都没有!
  4. 路径上是先到先得吗?如果我在 /usr/local/lib/python2.6/dist-packages/ 中安装了较新版本的软件包 XYZ,并且在 中安装了旧版本(来自 ubuntu repos/apt-get)/usr/lib/python2.6/dist-packages,当我import xyz 时导入了哪个?我假设这是基于路径列表,是吗?
  5. 这到底为什么这么令人困惑?有什么我遗漏的吗?
  6. 在哪里定义 easy_install 应该安装到 /usr/local/lib/python2.6/dist-packages
  7. 这也会影响 pip 吗?

感谢任何能解决这个问题的人!

最佳答案

我相信 Mike Orr 来自 the virtual-env mailing list 的回答似乎是最好的。请注意,OP 在两个地方都发布了这个问题。

邮件原始内容:

多年前,Debian 创建了/usr/local/lib/pythonVERSION/site-packages,并编译 Python 二进制文件以将其包含在默认搜索中小路。 Ubuntu 一如既往地遵循了 Debian 的领导。 python 开发人员不喜欢这样,因为你会受到干扰使用相同站点包的本地安装的/usr/local/bin/python目录。 Ubuntu 最终决定放弃站点包并使用dist-packages 相反,他们发明了一个名称,所以它不会干扰任何事情。如果你用谷歌搜索它,在 Python 错误跟踪器或 distutils SIG 或这样的。

系统工作,至少如果你使用 Ubuntu virtualenv 包。有些人在使用本地安装的 virtualenv 时遇到问题Ubuntu 因为没有添加神奇的 sys.path 条目或某物。我不确定 --no-site-packages 因为我从不使用该选项:我从 Ubuntu 包中运行 PIL 和 mysqldb,因为它有时很难编译它们的 C 依赖项。 (需要正确的头文件,Python 忽略头文件等)

所以 Ubuntu Python 包进入/usr/lib/pythonVERSION/dist-包。或者那个 python-support目录出于某种原因。本地安装的 Python 包进入/usr/local/lib/pythonVERSION/dist-packages 默认情况下。每当我安装我运行的 Ubuntu 9.04 系统:

$ sudo apt-get 安装 python-setuptools (6.0c9)$ sudo apt-get 安装 python-virtualenv (1.3.3)$ sudo easy_install pip$ sudo pip install virtualenvwrapper

虽然我还没有尝试过 --no-site-packages,但 virtualenvs 以这种方式工作得很好。

I'm trying to spin up virtualenv, and the --no-site-packages flag seems to do nothing with ubuntu. I installed virtualenv 1.3.3 with easy_install (which I've upgraded to setuptools 0.6c9)

这些版本都在 Ubuntu 9.04 中,所以你让它变得更难了自己在本地安装它们。

and everything seems to be installed to /usr/local/lib/python2.6/dist-packages

I assume that when installing a package using apt-get, it's placed in / usr/lib/python2.6/dist-packages/ ?

  1. Is it first come first serve on the path? If I have a newer version of package XYZ installed in /usr/local/lib/python2.6/dist- packages/ and and older one (from ubuntu repos/apt-get) in /usr/lib/ python2.6/dist-packages, which one gets imported when I import xyz? I'm assuming this is based on the path list, yes?

sys.path 按顺序扫描。唯一有趣的是 .pth eggs比某些人预期的更早或更晚进入路径。但是如果你正在使用 pip 来做它能做的一切(即除了安装 pip本身,预编译的鸡蛋,以及一个本地目录的快照复制而不是鸡蛋链接),无论如何你不会有很多 .pth 鸡蛋。

  1. Why the hell is this so confusing? Is there something I'm missing here?

它没有很好的记录。我通过浏览网页弄明白了。

  1. Will this affect pip as well?

是的,pip会自动安装到/usr/local/lib/pythonVERSION/站点包。使用“pip install -E$VIRTUAL_ENV packagename"安装到 virtualenv 中。

关于python - Ubuntu + virtualenv = 一团糟? virtualenv 讨厌 dist-packages,想要 site-packages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1215610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com