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

Cal*_*eng 19 python archlinux python-3.x

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

从这个wiki可以清楚地看到我可以通过安装Python 2.7.2

pacman -S python2
Run Code Online (Sandbox Code Playgroud)

我为python2创建一个符号链接是否合理

ln -s python2 /usr/bin/python
Run Code Online (Sandbox Code Playgroud)

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

澄清:

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

hou*_*oft 13

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

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

#!/usr/bin/env python2
Run Code Online (Sandbox Code Playgroud)

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

#!/usr/bin/env python3
Run Code Online (Sandbox Code Playgroud)

这样,即使通过Python更新,您的脚本也能正常工作.您的脚本实际需要的版本也将更加清晰.

  • 这里有很多错误的信息,这个答案是完全正确的.[PEP-394](http://www.python.org/dev/peps/pep-0394/)非常清楚.所有类似unix的系统都应该将`python2`指向2.x版本,将`python3`指向3.x版本,其中`python`指向其中任何一个版本的发行版.Arch是一个前沿的发行版,它完美地跟随PEP. (9认同)

Len*_*bro 5

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

Archlinux有点特殊,因为它将使用/ usr/bin/python作为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调用它们.

  • 我不喜欢这个答案,[PEP](http://www.python.org/dev/peps/pep-0394/)很清楚 - "python2"是2.x的某个版本,`python3`是3.x的某个版本,`python`将给你2或3,没有保证.Arch完全遵循Python惯例,它绝对不是一个bug. (3认同)

Azd*_*325 5

github 上有一个很好的项目,它可以帮助您处理它,称为pyenv 什么可以帮助您管理多个 python 实例