如何升级Python以及已安装的软件包?

时间:2013-01-14 23:47:18

标签: python package setuptools distutils distutils2

如果我使用Python 2.6安装多个软件包(例如使用easy_install)然后我想升级到Python 2.7,有没有办法升级Python然后自动“导入”所有这些已安装的软件包?或者他们必须重新安装?

两个相关的问题:(1)如果一个软件包安装在Python 2.6软件包目录中,将它导入到新的Python的PYTHONPATH中是否合法,如Python 2.7,或者所有软件包必须是用Python 2.7重新安装? (2)如果我使用easy_install,我如何告诉它使用较新的Python?例如。 2.7而不是2.6?或者我应该使用Python 2.7重新安装easy_install来执行此操作?感谢。

1 个答案:

答案 0 :(得分:3)

首先,这是您要使用pip而不是easy_install的众多原因之一。 (您仍然需要easy_install来获取pip本身,但除此之外,请不要再次触摸它。)如果您使用pip,则可以这样:

pip freeze > modules.dump

这将为您提供已安装的所有模块及其版本号的列表。大多数情况下,您只需获取模块列表(line.split('==')[0] for line in f)并将其传递给pip install

但这是为了将来的参考。对于今天,您必须通过查看site-packages目录将自己拼凑在一起。幸运的是,很多事情最终都会以foo_bar-1.2.3.4-blah-blah.egg结束,所以你要做的就是猜测包是否在PyPI上被命名为foo-barfoo_bar,通常即使你猜错了,{ {1}}或easy_install无论如何都会得到正确的结果。所以,你不能完全自动化它,但你可以接近。

但是,不管怎样,你确实需要重新安装。任何需要C扩展代码的东西都必须重新编译。纯Python包可能不需要更改,但它们可能,并且您比抱歉更安全。此外,如果您尝试复制某些内容而不是其他内容,那么您将会对依赖项进行大量混乱。

  

(1)如果一个软件包安装在Python 2.6软件包目录中,将它导入到较新Python的PYTHONPATH(如Python 2.7)中是否合法,还是必须使用Python 2.7重新安装所有软件包?

不要这样做;如上所述,重新安装它们。

  

(2)如果我使用easy_install,我怎么能告诉它使用更新的Python?例如。 2.7而不是2.6?或者我应该使用Python 2.7重新安装easy_install来执行此操作?感谢。

您需要2.7 pip。您通常可以使用2.7 easy_install和2.6运行,例如easy_install,但反过来并不能保证正常工作。

无论如何你也不想这样做。如果你想要并行使用两个版本的Python,你需要两个版本的python2.6 $(which easy_install) - 通常你希望最终得到easy_installeasy_install-2.6easy_install-2.7作为符号链接到无论你认为哪一个"主要"蟒。