【问题标题】:how to get the appropriate version of pip如何获得适当版本的 pip
【发布时间】:2013-09-19 20:39:05
【问题描述】:

问题

我似乎无法将我的包安装到正确的站点包目录。

背景

我想升级到 python 3.3,但我发现我仍然需要 python2.6 才能使用 yum(它没有为 python3 配置)。所以我的系统上都有。

每个版本的 pip 和 easy_install 分开???

问题是当我下载一个包并运行“python setup.py install”时,我发现它安装在python2.6中。我曾尝试使用 pip 和 easy_install,但它们也是如此。我读过一个解决方案是使用不同版本的 pip(pip_2.6 和 pip_3.3)。但我找不到下载单独版本的方法。一种解决方法是在 pip 中给出“-d PathToSitePackages”参数,但这并不优雅。

其他未使用较新版本的程序

另外一个问题是我发现当我使用sphinx等系统时,他们使用的是旧版本的python。我似乎无法弄清楚如何让他们使用较新版本的 python。

【问题讨论】:

  • 大多数 Python 软件会指定 python2python3(根据 PEP 394) - 所以他们应该默认运行他们需要的版本 - 试图强制软件使用更新版本的 python比写它们的目的是个坏主意。
  • 你是如何安装pip的?如果您通过特殊的get 脚本或easy_install 安装它,或者下载并运行python3 setup.py install,它将以pip-3.3pip-2.6 的名称安装(并添加pip 作为符号链接),所以你不必做任何事情。如果您使用的是平台/发行版软件包,可能会有差异。
  • (另外,如果你真的看pip,它只是运行pkg_resources模块中适当代码的几行Python代码。真正的胆量安装到每个Python版本的站点中-packages,所以它们不可能相互碰撞。)

标签: python pip python-sphinx python-3.3 easy-install


【解决方案1】:

首先,如果 X != V,Python 被明确设计为可以轻松同时拥有 Python X.Y 和 Python V.W。PEP 394 解释了细节,但基本上,python3 总是意味着 3.x版本,如果 python 也表示 3.x 版本,python2 将表示 2.x 版本。对于所有行为良好的紧密集成脚本,如pipipython,也应该如此。

这是一件好事,因为许多 POSIX 平台(大多数 linux 发行版、OS X 等)包含依赖于特定 Python 版本的代码,因此您必须能够拥有该版本,但通常您想要您自己的代码的更新版本。

在大多数平台上,即使 X == V,只要 Y != W,事情仍然很容易,因为默认安装也会为您提供 pythonX.Y,并且设置良好的脚本也会这样做.这部分不是 PEP 强制要求的,所以一些 linux 发行版不这样做,或者以不同的方式这样做。不过好在你只需要2.6和3.3,所以不用担心这部分。


所以,如果您只是使用 Python X.Y 以任何正常方式安装 pip,您将在 Python X.Y 的站点包中获得一些新包,可能是一个名为 pip-X.Y 的脚本(请注意,它是连字符,而不是下划线),通常是指向该脚本的符号链接 pip 和/或 pip3。因此,您无需执行任何任何操作即可获得此信息。

特别是测试这个序列(documentation 推荐的系统范围安装方式):

$ curl -O https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
$ sudo python3.3 ez_setup.py
$ curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
$ sudo python3.3 get-pip.py

…我最终就是这样。

如果您没有,您必须向我们提供有关您的平台的详细信息,您如何安装每个 Python(大概 2.6 是系统安装的一部分,但不是 3.3),以及您如何安装每个 pip .


如果您改为使用sudo yum install python-pipsudo yum install python33-pip(或python3-pip),那么您获得的确切内容取决于发行版,因此您最终可能会得到pip(例如2.6) 和 pip-3.3(对于 3.3),而不是 pip-2.6pip-3.3 和符号链接 pippip3。查看various distros' packages 的RPM 内容,类似于Red-Hat 的系统的标准名称似乎是python3-pip,带有指向pip-python3 的符号链接,有时还有其他名称。


无论如何,除非你混合和匹配不同的方法,你几乎肯定会得到一些方法来区分pip 的两个版本。


如果最坏的情况发生,并且您刚刚获得了一个名为 pip 的脚本,并且您最后安装的那个会覆盖您第一个安装的那个……您总是可以安装第一个,cp pip pip-2.6,安装第二个和mv pip pip-3.3; ln -s pip-2.6 pip; ln -s pip-3.3 pip3

或者,如果你连这个都做不到,那么脚本就很简单,像这样:

#!/usr/local/bin/python3.3
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==1.2.1','console_scripts','pip-3.3'
__requires__ = 'pip==1.2.1'
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('pip==1.2.1', 'console_scripts', 'pip-3.3')()
    )

您可以只制作一个副本,然后 s/3.3/2.6/g 复制(如果您以某种方式将不同版本的 pip 安装到不同的站点包中,您可能还必须替换 1.2.1)并且它会工作的。

但是,真的,真的不应该这样。 setuptools 和 pip 都尊重 PEP 394,任何不需要 some 规则的包管理器或其 python 3 包都是无用的。所以,如果你认为这些技巧是必要的,那么你可能之前做错了什么。

【讨论】:

  • 从 curl cmd 安装 ez_setup 后,我尝试了你的 cmds "sudo python3.3 ez_setup.py"。但似乎我的python3.3有问题:“错误:无效的Python安装:无法打开/usr/include/python3.3m/pyconfig.h(没有这样的文件或目录)”。重新安装也没有解决它:(
  • @Pswiss87:嗯,很明显,如果你的 Python 3.3 安装被破坏了,你将很难为它们安装包,而且即使你成功了也不会有什么好处……但是在这种情况下,您的问题只是缺少开发文件。我猜你是通过python3 RPM 安装的,在这种情况下,你只需要附带的python3-devel RPM。 (这就是为什么我问你是如何安装所有东西的。如果你回答了这些问题,那真的很有帮助,所以我不必试图猜测。)
  • @Pswiss87:同时,您是否尝试过安装python3-pip RPM?或者这就是你最初所做的?我很确定它会自动拉入python3-setuptools,这将直接或间接拉入python3-devel,您无需做任何事情。它会为您提供名为 pip3pip-python3 或 pip-3.3` 或 python3_pip 的名称,无论您的特定发行版的标准名称是什么。
  • 很抱歉没有看到您的问题。在按照您的建议通过 RPM 安装 python3 后,我正在使用 RHEL6,看来我的安装工作正常。但是,当我构建 pip "python3.3 setup.py install" 时,没有创建 pip-3.3 二进制文件。我不确定如何生成单独的二进制文件。
  • 如果 RHEL6 有一个 python3-pip RPM 和它的 python3,那可能是最简单的解决方案。这样,您将获得一个 pip 版本,以 Red Hat 决定命名事物的方式命名(在这种情况下,可能是 pip-python3python3_pip 或类似的,正如我之前所说的),并且您可以使用 RH 文档,在 RH 论坛上获得帮助,在您更新 python3 时自动更新您的 pip-python3,等等。
猜你喜欢
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 2018-03-02
  • 2012-04-01
相关资源
最近更新 更多