【问题标题】:python: Packages in user-site not overriding dist-packages on ubuntupython:用户站点中的包不会覆盖 ubuntu 上的 dist 包
【发布时间】:2013-12-08 23:28:36
【问题描述】:

我使用的是 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 上允许优先选择用户安装的软件包而不是系统范围安装的好方法?

【问题讨论】:

    标签: python ubuntu path installation packages


    【解决方案1】:

    在用户包之前有 dist 包实际上是有道理的恕我直言。但无论如何,你在这里有两个选择,一个坏的,一个正确的。

    不好的是重新定义 PYTHONPATH 环境变量,将本地包的目录放在站点范围的包之前。就这么简单,但是当你的系统因为你用一些不兼容的版本隐藏了一个关键包而崩溃时不要抱怨。

    在不破坏任何东西的情况下尝试特定版本的包的正确方法当然是使用 virtualenv。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-16
      • 2022-07-06
      • 1970-01-01
      • 2010-09-19
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      相关资源
      最近更新 更多