翻译:在Mac上将Python 3设置为默认的正确和错误方法

说明

弃用:Python 2.7将于2020年1月1日到期,请升级您的Python,因为在此日期后将不再维护Python 2.7。pip的未来版本将不再支持Python 2.7。

对于新买的Mac Book Pro来说,默认的安装是 Python 2.7的版本。如何设置默认的版本为Python 3 呢?

这有什么难的?

macOS随附的Python版本与Python建议用于开发的版本已经过时。正如XKCD指出的那样,Python运行时有时也具有可笑的挑战。
在这里插入图片描述
那有什么计划?我的计算机上已经有数十个Python解释器,而且我不知道如何有效地管理它们。我不想下载最新版本,将其移到我的路径中,然后每天称呼它(或使用brew install python3,它会执行类似的操作)。我认为这会以一种非常令人沮丧的方式导致线路中断,我不知道如何进行故障排除。我认为最好的方法是淘汰并替换我正在运行的任何版本的Python,以明确,明确地切换到最新和最伟大的版本。

我们可以做(但不应该做)

现在我们知道了不该做的事情,让我们看一下我们可以做的事情。当我们考虑macOS上应用程序的常见安装模式时,有两种选择。

使用Python 3作为macOS默认设置

Python的网站上有一个macOS Python 3安装程序,我们可以下载和使用。如果使用软件包安装,则/usr/local/bin/中将提供python3填充。

别名是必须的,因为不能更改/ usr / bin /中存储的Python二进制文件。别名的好处是它特定于我们的命令行外壳。由于默认情况下使用zsh,因此将以下内容放入.zshrc文件中:

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

如果您使用默认的Bash shell,则可以将此相同的文本附加到.bashrc中:

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

查看 Python版本

$ python --verions
# python 3.7.1

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

让Homebrew管理Python 3

该Homebrew提供适用于MacOS,许多人依靠免费和开源的包管理器。它赋予Apple用户类似于apt-get或yum的功能。如果您是Homebrew用户,则可能已经安装了Python。要快速检查,请运行:

$ brew list | grep python
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) *
## further output not included ##

好,太棒了!Homebrew维护人员已将默认的Python瓶更新为指向最新版本。由于Homebrew维护者比我们大多数人更依赖于更新发行版,因此我们可以通过以下命令使用Homebrew的Python 3版本:

$ brew update && brew upgrade python

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

# If you added the previous alias, use a text editor to update the line to the following
alias python=/usr/local/bin/python3

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

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

如果我们仍然需要Python 2怎么办?

对于Python的新手来说,从Python 3开始是有意义的。但是,我们仍然需要Python 2的人(例如,为仅在Python 2中可用的Python项目做出贡献)可以继续使用可用的默认macOS Python二进制文件在/usr/bin/python中:

$ /usr/bin/python
>>> print("This runtime still works!")
This runtime still works!

Homebrew非常棒,甚至为Python 2提供了不同的公式:

# If you need Homebrew's Python 2.7 run
$ brew install python@2

在任何时候,我们都可以从外壳程序的配置文件中删除别名,以使用系统上的默认Python副本返回。

不要忘记将pip更新为pip3!

该PIP命令是Python包专门默认的包管理器。尽管我们将默认的Python命令更改为版本3,但如果它在以前的版本中,我们必须单独为pip命令添加别名。首先,我们需要检查使用的版本:

# Note that this is a capital V (not lowercase)
$ 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用作软件包管理器,因此我们在安装Python 3时便知道它已安装pip3。默认路径应与Python 3相同,但是我们可以通过要求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文档中更长的教程

我们应该怎么做

当要求对本文进行技术审查时,Moshe Zadka向我警告说,我的解决方案可能导致运行哪个Python的想法不可靠,而该想法过于依赖于shell加载别名。我知道Moshe熟悉Python,但我不知道他是许多 Python教程的作者,还是即将出版的有关macOS上Python开发的书。他遵循一项核心原则,帮助40位同事在macOS系统上安全,一致地开发Python:

“所有Python开发的基本前提是永远不要使用系统Python。您不希望 Mac OS X的’默认Python’是’python3’。您永远不必关心默认的Python。”

我们如何停止关心默认值?Moshe建议使用pyenv来管理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...
## further output not included ##

现在已经通过pyenv安装了Python 3,我们希望将其设置为pyenv环境的全局默认版本:

$ pyenv global 3.7.3
# and verify it worked
$ pyenv version
3.7.3 (set by /Users/mbbroberg/.pyenv/version)

pyenv的力量来自对外壳路径的控制。为了使其正常工作,我们需要将以下添加到我们的配置文件(.zshrc对我来说,可能的.bash_profile):

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

该命令后,我们的dotfile(.zshrc为zsh中或.bash_profile中的Bash的)应该包括这些行:

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

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

I start by resetting the current shell

Alternatively, start a new terminal instance

$ 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感到困惑。

接下来配置Python

熟悉此工作流程后,您可以使用pyenv来管理Python的多个版本。对于依赖关系管理,使用虚拟环境也是必不可少的。我在文章中提到了如何使用内置的venv库,Moshe建议使用 virtualenvwrapper来管理虚拟环境

从一开始就做

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

参考

https://opensource.com/article/19/5/python-3-default-mac

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值