有人可以向我解释一下ubuntu 9.04中python的用途吗?

我正在尝试启动 virtualenv ,而 - no-site-packages 标志似乎对ubuntu无效。我用 easy_install (我已升级到 setuptools 0.6c9 )安装 virtualenv 1.3.3 ,似乎所有内容都安装到 /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 吗?
  8. 感谢任何能够解决此问题的人!

有帮助吗?

解决方案

我很想通过使网站包成为dist-packages的链接来破解它,但我想这可能会影响你想要安装除ubuntu dist之外的一些扩展的其他情况。除了调整virtualenv的来源(ubuntu和virtualenv如此受欢迎,我不会惊讶地发现已经存在调整版本),我想不出对1的另一个答案。

Re 2,如果你使用的是/ usr / local / bin / python,你应该使用lib的/ usr / local版本(包括site-packages),反之如果你正在使用/ usr / bin / python

Re 3,如果你从源代码安装了/ usr / bin / python的扩展名(不是通过easy_install或者来自ubuntu的发行版),那里会有一些东西。

重新4,是的,路径上的早期条目优先。

Re 5,easy_install很容易就是它的名字 - 它做了很多黑暗的魔法,尽管它很方便,它已被小心地排除在标准的python库之外,因为我们python提交者之间的共识是为了方便起见,暗黑魔法是"易于"只在表面上。

Re 6,我认为这是对easy_install的ubuntu修改 - 如果这是正确的那么它定义了Canonical或其他ubuntu维护者做出集体决定的地方。

Re 7,对不起,不知道 - 我手边没有合理的ubuntu来检查。

其他提示

我相信Mike Orr的答案来自 virtual-env邮件列表似乎是最好的。注意OP在这两个地方都发布了这个问题。

邮件的原始内容:

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

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

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

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

virtualenvs以这种方式运行良好,虽然我没有尝试过--no-site-packages。

  

我正在尝试启动virtualenv和--no-site-packages标志   似乎与ubuntu无关。我安装了virtualenv 1.3.3   easy_install(我已升级到setuptools 0.6c9)

这些版本都在Ubuntu 9.04中,所以你要加倍努力 你自己在当地安装它们。

  

和一切   似乎安装到/usr/local/lib/python2.6/dist-packages

  

我假设在使用apt-get安装软件包时,它放在/中   usr / lib / python2.6 / dist-packages /?

  
      
  1. 它是先到先得的路径吗?如果我有一个新的   安装在/usr/local/lib/python2.6/dist-中的XYZ包版本   / usr / lib /中的包/和旧版(来自ubuntu repos / apt-get)   python2.6 / dist-packages,当我导入xyz时导入哪一个?   我假设这是基于路径列表的,是吗?
  2.   

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

  
      
  1. 为什么这么混乱?我有什么东西吗?   在这里失踪?
  2.   

没有详细记录。我通过扫描网络来解决这个问题。

  
      
  1. 这会影响点子吗?
  2.   

是的,pip会自动安装到 在/ usr / local / lib目录/ pythonVERSION / site-packages中。使用“pip install -E $ VIRTUAL_ENV packagename"安装到virtualenv。

除非您正在构建系统管理工具或构建可被视为新系统服务的东西,否则您不应该触及Ubuntu的Python安装。

如果您正在使用Ubuntu开发或部署Python应用程序,请始终从源代码构建您自己的Python,将其编译并将其用于部署。这样你就可以将所有目录放在正确的位置,virtualenv将正常工作。如果您将在服务器上部署多个Python应用程序,那么在某些地方生成Python,例如 / home / python / opt / python 或您主目录之外的某个地方。确保您对开发人员组( users ?)具有写权限,以便人们可以轻松添加包。

这也允许你有两层包。那些作为内部标准工具的工具可以安装在您的Python发行版中,并作为您部署的tarball的一部分,并且只有特定于应用程序的软件包才能在virtualenv中。

不要升级或修改安装了Ubuntu系统的Python。

好吧,我有一个Ubuntu 9.04,很快就尝试设置一些带有站点包的沙箱和一个没有的沙箱。事情进展顺利。

我采用的方法的唯一区别是我使用了Ubuntu的python-virtualenv包(1.3.3)。并假设它被Ubuntu团队调整以适应Ubuntu设置。

总结一段时间后禁用easy_installed virtualenv,使用打包的python-virtualenv ,看看它是否符合您的期望。

事实上,我们使用类似的设置进行生产而没有任何问题。亚历克斯已经回答了休息。

另一种解决方法:
https://stackoverflow.com/a/17265840/202168

必须记住在你需要它的每个virtualenv中这样做,但不依赖于黑客或特殊版本的virtualenv

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top