python pyenv
即使对于有经验的开发人员,管理本地Python开发环境仍然是一个挑战。 尽管有完善的软件包管理策略 ,但仍需要另一步骤来确保您在需要时运行所需的Python版本。
为什么Python版本重要?
起初这是一个奇怪的概念,但是编程语言会像其他任何软件一样发生变化。 它们具有错误,修复和更新,就像您喜欢的任何API和任何其他软件一样。 再次类似地,不同的发行版由称为语义版本的三位数标识。
😭😭😭 pic.twitter.com/yt1Z2439W8
-Denny Perez(@ dennyperez18) 2019年5月28日
多年来,Python 2是编程语言的常用主要版本。 在2020年1月,Python 2 终止了生命 ,从那时起,Python的核心维护者将仅支持Python 3。 Python 3稳步发展,并定期发布新更新。 这对我来说定期获取这些更新很重要。
最近,我试图在依赖于Python 3.5.9的macOS上运行一个项目,该版本尚未安装在系统上。 认为Python软件包管理器pip可以安装它似乎是合乎逻辑的*,但事实并非如此:
$ pip
install python3.5.9
Collecting python3.5.9
ERROR: Could not
find a version that satisfies the requirement python3.5.9
( from versions: none
)
ERROR: No matching distribution found
for python3.5.9
(上面的注释:我知道这对经验丰富的Python开发人员没有意义,但是在当时对我来说是有意义的。我会很高兴地谈论为什么我仍然认为应该这样做。)
安装和设置pyenv
幸运的是,存在pyenv可以解决这一系列复杂性。 首先,我需要安装pyenv。 我可以从源代码自己克隆和编译它,但是我更喜欢通过Homebrew软件包管理器来管理这样的软件包:
$ brew install pyenv
为了通过pyenv使用Python版本,必须了解shell的PATH变量。 PATH通过命令名称确定shell在哪里搜索文件。 您必须确保外壳程序能够找到pyenv运行的Python版本,而不是默认安装的版本 (通常称为system version )。 如果不更改路径,则结果如下:
$
which python
/ usr
/ bin
/ python
那是Python的系统版本。
要正确设置pyenv,可以在Bash或zsh中运行以下命令:
$ PATH =$ ( pyenv root ) / shims: $PATH
现在,如果您检查Python的版本,您会看到它是pyenv管理的版本:
$
which python
/ Users
/ my_username
/ .pyenv
/ shims
/ python
该export语句(PATH =)仅会对此shell实例进行更改,因此使其成为永久更改,您需要将其添加到dotfiles中。 由于zsh正式是macOS的默认外壳,因此我将重点介绍它。 将相同的语法附加到〜/ .zshrc文件中:
$ echo 'PATH=$(pyenv root)/shims:$PATH' >> ~ / .zshrc
现在,每次我们在zsh中运行命令时,它将使用pyenv版本的Python。 请注意,我在回声中使用了单引号,因此它不会评估和扩展命令。
.zshrc文件仅管理zsh实例,因此请确保检查您的外壳程序并编辑关联的dotfile。 如果需要仔细检查默认外壳是什么,可以运行echo $ SHELL 。 如果是zsh,请使用上面的命令。 如果使用Bash,请将〜/ .zshrc更改为〜/ .bashrc 。 如果您想了解更多信息,可以在pyenv的自述文件中深入了解路径设置 。
使用pyenv管理Python版本
既然pyenv已受控制,我们可以看到它只有系统Python可用:
$ pyenv versions
system
如上所述,您绝对不希望使用该版本(有关更多信息,请阅读Why )。 既然pyenv设置正确,我希望它具有我经常使用的一些不同版本的Python。
有一种方法可以通过运行pyenv install --list来查看pyenv可以访问的所有不同存储库中的所有Python版本。 这是一个冗长而庞大的清单,可能会在将来对您有所帮助。 现在,我坚持在Python下载页面上找到的每个点发布的最新版本(3.5.x或3.6.x,其中x是最新的)。 考虑到这一点,我将安装3.5.9和3.8.0:
$ pyenv
install 3.5.9
$ pyenv
install 3.8.0
这将需要一段时间,因此请喝点茶(或阅读上面的链接之一)。 有趣的是,输出遍历了该版本Python的下载和构建。 例如,输出显示该文件直接来自Python.org 。
安装完所有内容后,您可以设置默认值。 我喜欢生活在最前沿,因此将全局默认Python版本设置为最新版本:
$ pyenv global 3.8.0
该版本立即设置在我的shell中。 确认:
$ python
-V
Python 3.8.0
我要运行的项目仅适用于Python 3.5,因此我将在本地设置该版本并确认其正在使用中:
$ pyenv
local 3.5.9
$ python
-V
Python 3.5.9
因为我在pyenv中使用了local选项,所以它在当前目录中添加了一个文件来跟踪该信息。
$ cat
. python
- version
3
. 5
. 9
现在,我终于可以为想要的项目设置虚拟环境,并确保我正在运行正确版本的Python。
$ python
-m venv venv
$
source .
/ venv
/ bin
/ activate
( venv
) $
which python
/ Users
/ mbbroberg
/ Develop
/ my_project
/ venv
/ bin
/ python
要了解更多信息,请查看有关在Mac上管理虚拟环境的本教程。
结语
默认情况下,运行多个Python版本可能是一个挑战。 我发现以pyenv开头可以确保我拥有需要设置的Python版本,以在需要它们时运行。
您还有其他初学者或中级Python问题吗? 发表评论,我们将在以后的文章中考虑它们。
python pyenv