在macOS上使用python3的方法有很多,但是有一种比其他的方法都好的方法。
我第一个关于让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上应用程序的常见安装模式时,有几个选项。
Python的网站有一个macOS Python3安装程序我们可以下载和使用。如果使用包安装,则/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 项目提供了许多人所依赖的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人员来说从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 命令是专门用于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文档中的一个较长的教程
当要求对本文进行技术审查时,Moshe Zadka给我一个警告,即我的解决方案可能导致运行哪个Python的想法过于不可靠,而这个想法过于依赖外壳程序加载别名。我知道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... ## 不包括进一步的输出 ##
现在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作为简单的版本管理解决方案可以让您有一个好的开始。
英文原文地址:https://opensource.com/article/19/5/python-3-default-mac
译文地址:https://learnku.com/python/t/52007
【相关推荐:Python3视频教程 】
以上がMac 環境でデフォルトの Python バージョンを設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。