我使用的是ubuntu 13.04。在python中开发时,我有时希望使用某些软件包的新版本而不是ubuntu附带的软件包。在这些情况下,我习惯的方法是仅将软件包安装到我的用户帐户,例如像这样(对于软件包six
):
$ pip install --user --upgrade six
这正确地在我的主目录中的某处安装了最新版本(1.4.1)。但是,当我加载刚刚安装的软件包时,python选择在系统范围内安装的版本:
$ python -c "import six; print six; print six.__version__"
<module 'six' from '/usr/lib/python2.7/dist-packages/six.pyc'>
1.2.0
这在我看来是奇怪的行为;应首选用户手动安装的软件包。我在Arch Linux上尝试过相同的过程,首先加载用户站点包。我的sys.path
:
$ python -c "import sys; print sys.path"
['', '/home/jostein/.local/lib/python2.7/site-packages/enaml-0.5.1-py2.7.egg', '/usr/lib/python2.7/dist-packages', '/home/jostein/Programming/scikit-image', '/home/jostein/Programming/reconstruct', '/home/jostein/Programming/ptychography', '/home/jostein/Programming', '/home/jostein', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/jostein/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/ubuntuone-client', '/usr/lib/python2.7/dist-packages/ubuntuone-control-panel', '/usr/lib/python2.7/dist-packages/ubuntuone-couch', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol', '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']
/usr/lib/python2.7/dist-packages
出现在与用户相关的任何内容之前,这可能是问题的原因。
有没有人知道在ubuntu上允许用户安装的软件包优于系统级安装的好方法?
答案 0 :(得分:1)
在用户包之前使用dist包实际上是有意义的恕我直言。但无论如何,你有两种选择,一种是坏的,一种是正确的。
糟糕的是重新定义PYTHONPATH环境变量,以便在站点范围的包之前放置本地包的目录。它就像这样简单,但是当系统中断时不要抱怨,因为你用一些不兼容的版本遮蔽了一个关键包。
尝试包的特定版本而不破坏任何东西的正确方法当然是使用virtualenv。