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

11 浏览
0 Comments

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

有人可以向我解释一下在Ubuntu 9.04中Python的情况吗?\n我试图启动virtualenv,但是在Ubuntu上--no-site-packages标志似乎没有作用。我用easy_install安装了virtualenv 1.3.3(我已经升级到setuptools 0.6c9),一切似乎都安装在/usr/local/lib/python2.6/dist-packages。\n我猜当使用apt-get安装包时,它会被放置在/usr/lib/python2.6/dist-packages/中,对吗?\n问题是,还有一个/usr/local/lib/python2.6/site-packages,但是里面什么都没有。看起来(通过在virtualenv中查看路径),这是virtualenv用作备份的文件夹。因此,即使我省略--no-site-packages,我也无法从任何我的virtualenv中访问我的本地系统包。\n所以我的问题是:\n1. 我如何让virtualenv指向其中一个dist-packages?\n2. 我应该指向哪个dist-packages?/usr/lib/python2.6/dist-packages还是/usr/local/lib/python2.6/dist-packages/?\n3. /usr/lib/python2.6/site-packages的目的是什么?里面什么都没有!\n4. 路径上的先来后到吗?如果我在/usr/local/lib/python2.6/dist-packages/中安装了一个更新的XYZ软件包版本,并且在/usr/lib/python2.6/dist-packages中安装了一个较旧的版本(来自Ubuntu存储库/apt-get),当我导入xyz时,哪个版本会被导入?我假设这是基于路径列表的,是吗?\n5. 为什么这么令人困惑?我是否遗漏了什么?\n6. 定义了easy_install应该安装到/usr/local/lib/python2.6/dist-packages的位置在哪里?\n7. 这会影响pip吗?\n感谢任何能够澄清这个问题的人!

0
0 Comments

Ubuntu的Python安装应该只用于构建系统管理工具或创建新的系统服务。如果你使用Ubuntu开发或部署Python应用程序,应该总是从源代码构建自己的Python,然后打包并部署使用它。这样你就能确保所有的目录都在正确的位置,virtualenv也能正常使用。如果你要在服务器上部署多个Python应用程序,可以将Python安装在像/home/python/opt/python这样的地方,而不是你的主目录。确保你对开发者组(users?)有写入权限,这样人们可以轻松地添加包。

这也允许你拥有两个层次的包。你公司内部的标准工具可以安装在你的Python发行版中,并作为你部署的tarball的一部分,只有特定于应用程序的包才会在virtualenv中。

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

0
0 Comments

在Ubuntu上使用virtualenv会遇到一些问题,其中一个问题是virtualenv不支持dist-packages目录,而是要求使用site-packages目录。这个问题的原因可能是由于Ubuntu和virtualenv都非常流行,可能存在一些经过修改的版本来解决这个问题。

解决方法之一是通过将site-packages目录链接到dist-packages目录来解决。但这种方法可能会影响其他需要从Ubuntu发行版以外的地方安装扩展的情况。

另一种解决方法是根据使用的Python解释器来决定使用的库的位置。如果使用的是/usr/local/bin/python,则应该使用/usr/local版本的库(包括site-packages目录),反之亦然。

还有一种情况是,如果从源代码安装了在/usr/bin/python上使用的扩展(而不是通过easy_install或者从Ubuntu发行版安装),则会出现这个问题。

此外,路径上先出现的条目优先级更高。

此外,easy_install虽然在名称上很容易,但实际上使用了许多黑魔法,尽管它很方便,但由于我们Python开发者的共识是,为了方便而进行深层黑魔法的东西只是在表面上看起来很“easy”,所以它被谨慎地从标准Python库中排除。

关于re6,我认为这是Ubuntu对easy_install进行的修改,如果是这样的话,则在Canonical或其他Ubuntu维护人员做出集体决策的地方定义。

对于re7,抱歉,我不清楚,我手头没有一个相对较新的Ubuntu来检查。

总之,我希望能够继续使用easy_install/pip进行更新。在我的系统中,没有/usr/local/bin/python,只有/usr/bin/python。看起来easy_install将所有内容安装到/usr/local/lib/python2.x/,而apt-get将所有内容安装到/usr/lib/python2.x/。我已经使用easy_install -U setuptools来更新easy_install。它应该使用源代码包,而不再使用Ubuntu的版本。希望有一个9.04版本的系统可以对此进行更详细的解释。

0
0 Comments

在Ubuntu上使用virtualenv时出现问题的原因是Ubuntu采用了dist-packages而不是site-packages。解决方法是使用Ubuntu的virtualenv包,或者手动安装Python包时指定安装路径为dist-packages。

0