mac 下如何正确地设置默认 python 版本? | python优质外文翻译 | python 技术论坛-金年会app官方网

python

在macos上使用python3的方法有很多,但是有一种比其他的方法都好的方法。

更新于2020年5月15日

不该做什么

我第一个关于让python3成为系统默认的python版本的想法是,删除旧版本的python然后将新版本的python添加进去:

# 我认为这个方法会起作用 # 首先, 我先找到旧版本python的文件 $ which python /usr/bin/python # 然后, 我将它移动到一个其他的位置 $ sudo mv /usr/bin/python /usr/bin/pythzuihouon2 # 最后, 我将新版本python的文件移动到之前的路径 $ sudo mv $pathtobinary/python3 /usr/bin/python

该方法虽然使用了python主要版本之间通常执行的操作 /usr/bin/ ,但是我很快就发现了这是一个错误的方法:

$ sudo mv /usr/bin/python /usr/bin/python2 mv: rename /usr/bin/python to /usr/bin/python2: operation not permitted

值得庆幸的是, macos保护了我,使我不至于破坏一些我不完全理解的东西。进一步的研究证明,这正是我们不应该做的事情。

我们可以做什么(也不应该做什么)

现在我们知道什么是不应该做的,那么让我们看看我们可以做些什么。当我们考虑macos上应用程序的常见安装模式时,有几个选项。

使用python3作为macos的默认安装模式

python的网站有一个我们可以下载和使用。如果使用包安装,则/usr/local/bin/中将提供可用的python3

别名是必须的,因为存储在/usr/bin/中的python二进制文件无法更改。别名的优点是它可以具体指定我们的命令行所使用的shell。由于我默认使用zsh,所以我将以下内容放入.zshrc文件中:

$ echo "alias python=/usr/local/bin/python3.7" >> ~/.zshrc

如果您使用的是默认的bash shell,您可以将此相同的文本追加到您的.bashrc

$ echo "alias python=/usr/local/bin/python3.7" >> ~/.bashrc

该策略有效,但是对于python将来的更新并不是理想的选择。这意味着我们必须记住要检查网站并下载新文件,因为python不包含用于更新的命令行方式。

用homebrew管理python 3

项目提供了许多人所依赖的macos的免费开源软件包管理器。它提供了apple用户类似于apt-get *或yum *的功能。如果您是homebrew用户,则可能已经安装了python。要快速检查,请运行:

$ brew list | grep python

如果python在命令下显示,则表明已安装。让我们看一下它是什么版本:

$ brew info python python: stable 3.7.3 (bottled), head interpreted, interactive, object-oriented programming language https://www.python.org/ /usr/local/cellar/python/3.7.2_1 (8,437 files, 118mb) * ## 不包含其他输出 ##

好的,太好了! homebrew维护人员已将默认的python bottle更新为指向最新版本。由于homebrew维护者在更新发行版方面比我们大多数人更可靠,因此我们可以通过以下命令使用homebrew的python 3版本:

$ brew update && brew upgrade python

现在,我们要将别名(从上面)指向homebrew管理的python副本:

# 如果你添加了上面的别名,请使用文本编辑器将行更新为以下内容 alias python=/usr/local/bin/python3

确保上面的路径指向我们环境中homebrew安装python的位置,我们可以运行brew info python查找路径信息。

这种使用homebrew管理我们的python环境的方法是一个很好的起点,在当时对我来说很有意义。

假若我们依旧需要python 2呢?

对任何一个新的python人员来说从python3开始都是有意义的。但是,我们那些仍然需要python2的人-例如,为了给仅在python2中可用的python项目做贡献-可以继续用macos下默认在/usr/bin/python可用的python二进制文件:

$ /usr/bin/python >>> print("这次运行仍然有效!") 这次运行仍然有效!

homebrew是如此的美妙,它甚至未python2提供了一种不同的方式:

# 如果你需要homebrew's python 2.7 运行 $ brew install python@2

在任何时候,我们可以从我们的shell的配置文件中移除别名,退出使用系统默认拷贝的python。

不要忘记更新pip到pip3!

** pip 命令是专门用于python软件包的默认软件包管理器。尽管我们将默认的python命令更改为版本3,但如果在以前的版本中,我们必须单独对 pip **命令起别名。首先,我们需要检查使用的版本:

# 注意这是一个大写v (不是小写) $ pip -v pip 19.0.3 from /library/python/2.7/site-packages/pip-19.0.3-py2.7.egg/pip (python 2.7)

为了确保我们正在安装的包适配我们新版本的python,我们将会用另外一个别名指向pip的适配版本。因为在当前环境下我们正在使用homebrew作为我们的包管理器,我们知道安装python3的时候他会安装pip3.默认路径应该与python3相同,但是我们可以通过让shell去寻找的方式来确保这一点:

$ which pip3 /usr/local/bin/pip3

现在我们知道了位置,我们将会添加它到shell的配置文件中,就像我们之前做的那样:

$ echo "alias pip=/usr/local/bin/pip3" >> ~/.zshrc  # or for bash $ echo "alias pip=/usr/local/bin/pip3" >> ~/.bashrc

最后我们可以通过打开一个新的shell或者重置我们当前的shell并查看指向的内容来确认运行中的pip指向的是pip3.

# this command reloads the current shell without exiting the session # alternatively, exit the shell and start a new one $ exec $0 # now we can look to see where pip points us $ which pip pip: aliased to /usr/local/bin/pip3

我们可以避免使用homebrew来更新pip,但是那需要python文档中的一个

我们应该做什么

当要求对本文进行技术审查时,给我一个警告,即我的金年会app官方网的解决方案可能导致运行哪个python的想法过于不可靠,而这个想法过于依赖外壳程序加载别名。我知道moshe熟悉python,但我不知道他是许多 python教程的作者,还是即将出版的有关macos上python开发的书。他遵循一项核心原则,帮助40位同事在macos系统上安全且一致地开发python:

“所有python开发的基本前提是永远不要使用系统python。您不要 mac os x的’默认python’为’python3’。您永远不必关心默认的python。”

我们该怎样停止关心默认值呢?moshe推荐使用 去管理python的环境(想对配置pyenv有一个更深入的了解,)。该工具将管理python的多个版本,并被描述为”简单,易懂且遵循unix的一站式工具传统,可以很好地完成工作。”

虽然有其他可以用,但最简单的方式是从homebrew开始:

$ brew install pyenv 🍺  /usr/local/cellar/pyenv/1.2.10: 634 files, 2.4mb

现在让我们安装最新的python版本(截至撰写本文时为3.7.3):

$ pyenv install 3.7.3 python-build: use openssl 1.0 from homebrew python-build: use readline from homebrew downloading python-3.7.3.tar.xz... -> https://www.python.org/ftp/python/3.7.3/python-3.7.3.tar.xz installing python-3.7.3... ## 不包括进一步的输出 ##

现在python3已经通过pyenv安装了,我们想为pyenv环境设置它为全局默认的版本:

$ pyenv global 3.7.3 # 验证它生效了 $ pyenv version 3.7.3 (set by /users/mbbroberg/.pyenv/version)

pyenv的强大之处在于它对我们shell路径的控制。为了使其正常工作,我们需要将以下内容添加到我们的配置文件中(对我来说是.zshrc *,可能对您来说是.bash_profile *):

$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.zshrc

执行该命令后,我们的点文件(对于zsh为.zshrc **,对于bash为.bash_profile **)应包括以下行:

if command -v pyenv 1>/dev/null 2>&1; then   eval "$(pyenv init -)" fi

我们还需要删除我们在以上部分中使用的别名,因为它们会阻止正确使用pyenv。删除它们后,我们可以确认pyenv正在管理我们的python 3版本:

#我先重置当前的shell # 或者,启动一个新的终端实例 $ exec $0 $ which python /users/mbbroberg/.pyenv/shims/python $ python -v python 3.7.3 $ pip -v pip 19.0.3 from /users/mbbroberg/.pyenv/versions/3.7.3/lib/python3.7/site-packages/pip (python 3.7)

现在我们可以确定我们正在使用python 3.7.3,并且pip会与之一起更新,而无需在版本之间进行任何手动别名。使用moshe的建议来使用版本管理器(pyenv),使我们能够轻松地接受将来的升级,而不必对在给定时间运行的python感到困惑。

##从一开始就做

如果您刚刚开始在macos上进行python开发,请进行必要的配置,以确保从一开始就使用正确的python版本。安装python 3(带或不带homebrew)以及使用别名可以让您开始编码,但是从长远来看,这并不是一个好的策略。使用pyenv作为简单的版本管理金年会app官方网的解决方案可以让您有一个好的开始。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 cc 协议,如果我们的工作有侵犯到您的权益,请及时联系金年会app官方网。

原文地址:

译文地址:https://learnku.com/python/t/52007

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
网站地图