所以我读过这个 - https://wiki.archlinux.org/index.php/Python
从这个wiki可以清楚地看到我可以通过
安装Python 2.7.2pacman -S python2
创建符号链接到python2
是否合理ln -s python2 /usr/bin/python
如果我不认为自己很快就会切换到python 3.0?或者有更好的方法来管理多个python版本,比如我通常在debian系统(update-alternatives --config python)或mac os x系统(python select)上使用的那些?
澄清:
答案 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包virtualenv和virtualenvwrapper来创建多个python环境。您可以在/ usr / bin /中引用python 2或python3二进制文件来确定虚拟环境中使用的python版本。
好处是安装在虚拟环境中的软件包不会弄乱系统正在使用的python,并且有很多方法可以自动化项目处理。