23

所以我读过这个 - 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
4

7 回答 7

14

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

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

#!/usr/bin/env python2

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

#!/usr/bin/env python3

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

于 2011-09-04T18:59:08.397 回答
6

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

Archlinux 有点特殊,因为 Python 3 将使用 /usr/bin/python,尽管 Python 3 的默认可执行文件名称是 /usr/bin/python3。这很令人困惑,可以被视为一个错误,但这确实意味着您不能在 Python 2 中使用该符号链接,因为任何其他使用 Python 3 的 Archlinux 脚本如果这样做几乎肯定会中断。

所以在其他 Unices 上,将 /usr/bin/python 符号链接到 Python 2.7 是一个坏主意,在 Archlinux 上这是一个糟糕的主意。相反,只需安装您需要的所有版本并使用 /usr/bin/pythonX.X 调用它们。

于 2011-09-04T06:33:04.067 回答
6

github上有一个不错的项目,它可以帮助您使用它,称为pyenv 可以帮助您管理多个python实例

于 2013-04-22T16:27:43.490 回答
3

正如其他人所说,简短的回答是“不要这样做,它很可能会破坏你的系统”,但是,如果你主要使用 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_profileor ~/.profile(或任何您喜欢的 shell 配置文件)中,设置如下内容:\

source ~/env/bin/activate

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

这仍然可能会破坏在 shell 中启动的任何内容,但除非您从 shell 显式运行它,否则不太可能出现任何问题,此时您可以通过运行以下命令关闭虚拟环境:

deactivate

或者干脆手动运行 Python 3。

于 2016-07-23T03:20:35.870 回答
1

我知道这可能是一个非常古老的答案,但是我花了两天时间才解决了这个问题,所以我要分享一下。

管理系统中的 python 版本以在不同项目上工作而不会让你发疯的正确方法是使用pyenv及其插件pyenv-virtualenvpyenv-virtualenvwrapper,正如 Henrique Bastos 在这篇博文中所描述的那样。请注意,这种工作方式有点独立于平台,因为 pyenv 是一个 python 包,它可以在 Windows、Linux 和 Mac OSx 上非常相似地运行。

问题始于 Arch Linux。该操作系统不提供 pyenv 的 pacman 版本,因此您必须按照release 的安装部分中所述从 github 克隆它来安装它。pyenv-virtualenv 和 pyenv-virtualenvwrapper 的安装过程相同。请注意,shell 初始化配置可能不同,在我的情况下,它不适用于 ~/.bash_profile,但适用于 ~/.bashrc。

如果您的安装像我最近设置的那样非常新鲜,那么运行 pyenv 并不简单,因为 pip 需要 openSSL,即使您通过 pacman 安装它,pyenv 也看不到它。所以,如果你想安装旧版本的 Python(即 3.4.3),你会发现 shell 抱怨你没有安装 openSSL 插件,即使你有它。老实说,我第一次尝试安装时没有正确的软件包;您必须下载以下软件包

sudo pacman -S openssl
sudo pacman -S openssl-1.0
sudo pacman -S python-pyopenssl
sudo pacman -S python2-pyopenssl

我解决问题的方法是添加pyenv 安装常见问题解答中描述的标志:该解决方案最终导致我安装了我想要的 python 版本:

LDFLAGS="-L/usr/lib/openssl-1.0" \
CFLAGS="-I/usr/include/openssl-1.0" \
pyenv install -v 3.4.3

为了避免每次更新 python 安装环境时都进入 FAQs 页面,你可以在 ~/.bashrc 或任何你的 shell 中添加一个别名,如下所示:

echo alias pyenv='LDFLAGS="-L/usr/lib/openssl-1.0" \
    CFLAGS="-I/usr/include/openssl-1.0" \
    pyenv' >> ~/.bashrc

通过这种方式,您可以使用干净的 pyenv 语法正确安装 python,并以相同的方式通过其插件管理它(因为语法是 pyenv [COMMAND] [OTHERSTUFF])。

于 2018-05-12T16:13:54.243 回答
1

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

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

于 2016-06-01T07:50:57.253 回答
0

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

我想更改此链接暂时不会破坏任何内容,但将来某些软件包可能会依赖它。

于 2011-09-04T03:32:57.197 回答