【问题标题】:Pip can't upgrade a built-in package in ubuntu 15.04Pip 无法升级 ubuntu 15.04 中的内置包
【发布时间】:2015-07-31 14:54:57
【问题描述】:

我似乎不再能够升级已安装在 Ubuntu 15.04 中的软件包。 Pip 仍然有效,将包安装到/usr/local/python2.7/dist-packages,但路径在顶部列出了/usr/python2.7/dist-packages,甚至PYTHONPATH 也无法在该行之上获得任何东西。我相信这适用于较旧的 Ubuntu。我一直试图在/usr/python/site.py 中找到一些东西,但它似乎做对了。添加-S 似乎确实阻止了非本地版本位于顶部。我相信我在两台电脑上看到过这个。

需要这样做的一些示例:更新以获得所需的功能/错误修复(在我的情况下为 PILLOW),而无需 APT 卸载将该软件包列为要求的一堆软件包。

编辑: 为了澄清,问题是:我想重新排序目录搜索顺序以恢复 Ubuntu 14.10 行为。在许多系统上有更好的方法可以做到这一点,但我想使用内置的 apt 包装,只使用一两个(潜在的)较新的包,如 IPython 等,而不是使用 virtual-env 和 Anacoda(两者我在其他系统上使用)。看起来我想要的行为是记录在案的 Debian 行为,所以我不确定它为什么要重新排序路径。

这里是演示问题的路径,注意PYTHONPATH变量在中间,有两个git文件夹:

>>> sys.path
['',
'/usr/lib/python2.7/dist-packages', 
'/usr/local/lib/python2.7/dist-packages/requests-2.6.0-py2.7.egg', 
'/usr/local/lib/python2.7/dist-packages/octave_kernel-0.10.0-py2.7.egg',
'/home/username/git/maya',
'/home/username/git/udaq/pyUDAQ',
'/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', 
'/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages/PILcompat', 
'/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/wx-3.0-gtk2']

作为参考,我有一个运行 14.04 的匹配系统,它具有完全预期的行为。两个PYTHONPATH 目录首先出现,然后是本地dist-packages 在内置之上。

【问题讨论】:

  • 我认为让pipapt 争夺包裹是一个非常糟糕的主意。一个更简洁的方法是改用virtualenvs
  • 我希望能够将我的计算机交给遵循指示但不太了解的人。告诉他“ipython notebook”比告诉他先激活一个虚拟环境更容易。不过,这通常是个好主意。
  • 在这种情况下:切换到anaconda 并将软件包安装到根环境中。那么condapip 现在是你的包管理器,apt 不会干扰。

标签: python python-2.7 ubuntu pip


【解决方案1】:

pip 中有一个-t switch。它允许您配置 pip 安装包的目录。

您可以在config file 中设置目录,而无需在每次安装或升级软件包时指定它

但一般来说升级apt安装的包是个坏主意

【讨论】:

  • 我不想推倒/usr/python中的包,我只想让/usr/local/python先被搜索。不过谢谢!
  • @HenrySchreiner 好的,但是我很惊讶,因为来自PYTHONPATH 的路径将在标准解释器路径之前添加到sys.path。你能用更多信息更新你的帖子吗?如何修改PYTHONPATHprint sys.path 输出什么?
  • @HenrySchreiner relevant documentation link
  • 我会在我再次访问互联网后立即执行此操作(可能是明天)。基本上,前 4-6 行甚至高于 PYTHONPATH 条目,通过在 PYTHONPATH 中放置一些愚蠢的东西然后查看 sys.path 中条目的位置来进行测试。
【解决方案2】:

使用 virtualenv

安装虚拟环境

$ sudo apt-get install python-virtualenv

在MYENV目录下创建环境

$ virtualenv MYENV

在当前 shell 中激活环境(您的应用程序的启动脚本也需要此环境)

$ . MYENV/bin/activate

使用位于 MYENV 目录(您拥有)中的 venv 中的 pip/python

(MYENV)$ pip ...  

【讨论】:

  • 如果您使用的是 ubuntu 和 16.04 或更高版本,您可能需要 sudo apt-get install virtualenv 而不是 python-virtualenv
猜你喜欢
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 2020-08-21
  • 2019-03-20
  • 2016-05-26
相关资源
最近更新 更多