在Archlinux上管理多个Python版本的“正确方法”

时间:2011-09-04 02:37:08

标签: python python-3.x archlinux

所以我读过这个 - https://wiki.archlinux.org/index.php/Python

从这个wiki可以清楚地看到我可以通过

安装Python 2.7.2
pacman -S python2

创建符号链接到python2

是否合理
ln -s python2 /usr/bin/python

如果我不认为自己很快就会切换到python 3.0?或者有更好的方法来管理多个python版本,比如我通常在debian系统(update-alternatives --config python)或mac os x系统(python select)上使用的那些?

澄清:

  • 我想知道的是 - 在archlinux系统上管理各种python版本的“最佳实践”是什么?
  • 我是archlinux的新手,但熟悉ubuntu,debian和mac os x

6 个答案:

答案 0 :(得分:13)

我认为你根本不应该创建任何这样的符号链接。特别是如果你要发布一些你的python代码,你不应该假设用户在/ usr / bin / python中有python2或python3。

如果您的脚本需要python2,请使用:

#!/usr/bin/env python2

如果您的脚本需要python3,请使用:

#!/usr/bin/env python3

这样,即使对Python进行更新,您的脚本也能正常工作。您的脚本实际需要的版本也将更加清晰。

答案 1 :(得分:5)

大多数unices已经拥有/ usr / bin / python。覆盖那个是一个坏主意,因为这是系统中所有软件包使用的Python版本,并且更改它可能会破坏它们。安装Python 2.7软件包时,可执行文件应该安装为/usr/bin/python2.7(如果不是,我会声称Archlinux已损坏),当你想运行Python 2.7时,最好使用它。

Archlinux有点特殊,因为它将使用/ usr / bin / python for Python 3,尽管Python 3的默认可执行文件名是/ usr / bin / python3。这是令人困惑的,可以看作是一个错误,但它确实意味着你不能使用Python 2的符号链接,因为任何其他使用Python 3的Archlinux脚本几乎肯定会破坏你。

所以在其他Unices上,symlinking / usr / bin / python到Python 2.7是一个坏主意,在Archlinux上它是一个糟糕的主意。而只需安装所需的所有版本,并使用/usr/bin/pythonX.X进行调用。

答案 2 :(得分:4)

github上有一个不错的项目,它可以帮助你解决它pyenv 什么可以帮助您管理多个python实例

答案 3 :(得分:1)

正如其他人所说,简短的回答是“不要这样做,它很可能会破坏你的系统”,但是,如果你大多使用Python 2,你仍然可以在你的shell中设置你的个人默认值(和仍然可以随时切换到Python 3。为此,首先成为root并安装python2-virtualenv

# pacman -S python2-virtualenv

然后创建一个使用Python 2的虚拟环境(这将在环境中自动安装Python,setuptools,wheel和pip):

$ virtualenv -p /usr/bin/python2 --system-site-packages ~/env # (Or wherever you want your environment to live)

如果您只想使用本地安装的软件包(例如,使用pip安装的软件包而不是pacman安装的软件包),请在创建环境时删除--system-site-packages选项。

现在在~/.bash_profile~/.profile(或您喜欢的任何shell配置文件中),设置如下内容:\

source ~/env/bin/activate

这将激活虚拟环境,使您的默认版本为Python 2。

这仍然可能会破坏在shell中启动的任何内容,但除非您明确地从shell运行它,否则不可能有任何内容,此时您可以通过运行来关闭虚拟环境:

deactivate

或者只是手动运行Python 3。

答案 4 :(得分:0)

不,没有更好的方法可以做到这一点。 python符号链接是Python 3包的一部分。

我想改变这个链接暂时不会破坏任何东西,但有些包可能会在将来依赖它。

答案 5 :(得分:0)

我只是偶然发现了这篇文章,没有任何暗示,但我想知道没有人提到过virtualenvs。我也使用ArchLinux,我使用python包virtualenvvirtualenvwrapper来创建多个python环境。您可以在/ usr / bin /中引用python 2或python3二进制文件来确定虚拟环境中使用的python版本。

好处是安装在虚拟环境中的软件包不会弄乱系统正在使用的python,并且有很多方法可以自动化项目处理。