当前位置:  开发笔记 > 编程语言 > 正文

Ubuntu + virtualenv =乱七八糟?virtualenv讨厌dist-packages,想要网站包

如何解决《Ubuntu+virtualenv=乱七八糟?virtualenv讨厌dist-packages,想要网站包》经验,为你挑选了2个好方法。

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

我正试图旋转virtualenv,--no-site-packages旗帜似乎与ubuntu无关.我安装virtualenv 1.3.3easy_install(我已经升级到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只是坐在那里是空的.看起来(通过查看patha virtualenv),这是virtualenv用作备份的文件夹.因此,即使我想省略--no-site-packages,我也无法从我的任何virtualenv访问我的本地系统包.

所以我的问题是:

    我如何virtualenv指向其中一个dist-packages

    我应该指出哪些包装?/usr/lib/python2.6/dist-packages要么/usr/local/lib/python2.6/dist-packages/

    有什么意义/usr/lib/python2.6/site-packages?那里什么都没有!

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

    为什么这么混乱?这里有什么我想念的吗?

    easy_install应该安装到哪里定义/usr/local/lib/python2.6/dist-packages

    这会影响pip吗?

感谢任何能够清除这一点的人!



1> Jorge Vargas..:

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

邮件原始内容:

几年前,Debian创建了/ usr/local/lib/pythonVERSION/site-packages,并编译了Python二进制文件,将其包含在默认搜索路径中.Ubuntu一如既往地跟随Debian的领先地位.Python开发人员不喜欢这样,因为你会使用相同的site-packages目录干扰本地安装的/ usr/local/bin/python.Ubuntu最终决定放弃网站包并使用dist-packages,这是他们发明的一个名字,因此它不会干扰任何东西.如果你谷歌它,在Python bug跟踪器中的某个地方或者干扰SIG等等,那里的故事就在那里.

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

所以Ubuntu Python包进入/ usr/lib/pythonVERSION/dist-packages.或者那个python-support目录出于某种原因.本地安装的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无效.我用easy_install安装了virtualenv 1.3.3(我已升级到setuptools 0.6c9)

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

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

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

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

sys.path按顺序扫描.唯一有趣的是,.pth鸡蛋在路径中的早期或晚些时间比某些人期望的要早.但是如果你正在使用pip它可以做的一切(即除了安装pip本身,预编译的鸡蛋,以及本地目录的快照,而不是鸡蛋链接),你不会有很多.pth鸡蛋.

    为什么这么混乱?这里有什么我想念的吗?

它没有很好的记录.我通过扫描网络弄明白了.

    这会影响点子吗?

是的,pip将自动安装到/ usr/local/lib/pythonVERSION/site-packages.使用"pip install -E $ VIRTUAL_ENV packagename"安装到virtualenv中.



2> Alex Martell..:

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

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

Re 3,如果您从源(不是通过easy_install或从ubuntu的发行版)安装/ usr/bin/python的扩展,那么将会有一些东西.

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

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

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

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

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有