如何获得适当的pip版本

时间:2013-09-19 20:39:05

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

问题

我似乎无法将我的软件包安装到正确的site-packages目录。

背景

我想升级到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。

1 个答案:

答案 0 :(得分:1)

首先,如果X!= V PEP 394解释了详细信息,那么Python的显式设计是为了让Python XY和Python VW同时变得容易,但基本上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 XY以任何常规方式安装pip,您将在Python XY的站点包中获得一些新包,可能是一个名为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),以及你如何安装每个{{1 }}


如果您改为pipsudo yum install python-pip(或sudo yum install python33-pip),那么您所获得的完全取决于发行版,因此您可能最终只会说, ,python3-pip(适用于2.6)和pip(适用于3.3),而非pip-3.3pip-2.6以及符号链接pip-3.3pip。查看various distros' packages的RPM内容,看起来类似Red-Hat的系统的标准名称是pip3,带有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

你可以复制一份副本和s / 3.3 / 2.6 / g副本(如果你以某种方式将不同版本的#!/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')() ) 安装到不同的站点包中,你可能还需要替换1.2.1)它会起作用。

但是,它真的,真的不应该来这个。 setuptools和pip都遵循PEP 394,任何不必拥有某些规则或其python 3包的包管理器都是无用的。所以,如果你认为这些技巧是必要的,你可能早些时候做错了。