简介
构建和维护一个高效、可靠的 Python 开发环境至关重要。为了实现这一目标,开发者可以选择多种工具来搭建自己的开发环境,包括但不限于 virtualenv、venv、conda、pipenv、poetry 以及 pyenv。每种工具都有其独特的特点和优势,但本文档将重点介绍在 Windows 系统下,如何利用 pyenv-win 和 Poetry 这两个工具来构建一个 Python 开发环境。
pyenv-win 是 pyenv(一个流行的多版本 Python 管理工具,面向与 MacOS 和 Linux 系统)的 Windows 版本(表述不严谨,其实 pyenv-win 和 pyenv 是两个独立(由不同的小组维护)的命令行工具,pyenv-win 在 Windows OS下实现了 pyenv 的功能)。它为开发者在同一 Windows OS 下提供了安装、管理,切换多个 Python 版本的解决方案。对于不同项目需要不同 Python 版本的开发者来说非常有用。
Poetry是一个 Python 依赖管理和打包工具。类似于 virtualenv、venv、conda、pipenv 所实现的功能。比较而言,Poetry 使用 pyproject.toml
文件来定义项目的依赖和配置,该方法提供了比传统 setup.py
文件更清晰、更直观的依赖声明方式。此外,Poetry 自带的依赖解析器能够自动解决依赖冲突,确保项目依赖的一致性和项目的可重复性。
安装指南
前提条件
- Windows 7 或更高版本。
- PowerShell 5 或更高版本(推荐使用 PowerShell 7)。
- git。
安装 pyenv-win
pyenv-win 官方提供了多种安装方式,具体可以查看:pyenv for windows。 这里,推荐使用 Git Commands的方式。
- 打开 Windows 系统的终端(Windows Terminal)软件。如下图所示:


左边显示的 Powershell 5,Windows 10 或者 11 自带。而右边的是 Powershell 7,需要单独安装。这两个版本均可以使用,但推荐使用 Powershell 7。可以在打开的终端界面中输入如下命令,确认 Powershell 的版本:
|
|
-
安装 pyenv-win:在终端中使用
git clone
命令,将 pyenv-win 克隆到 “$HOME/.pyenv
” 目录。1
git clone https://github.com/pyenv-win/pyenv-win.git "$HOME/.pyenv"
- 在终端中使用
git clone
命令的前提是需要您在您的电脑中已经安装了 git 这个工具,具体可以参考官方安装流程:https://git-scm.com/downloads/ - “
$HOME/.pyenv
” 目录指的是当前用户名下的,名为.pyenv
的文件夹。比如我在终端中输入如下命令:
则会显示我的电脑用户名的路径$HOME
C:\Users\rolfz
。 - 所以
git clone https://github.com/pyenv-win/pyenv-win.git "$HOME/.pyenv"
的意思是将 github 上名为pyenv-win
的 repo 内容复制到我电脑用户名(即C:\Users\rolfz
)下的,名为.pyenv
的文件夹下。当执行完改行命令后,如果在终端中使用dir
或者ls
命令,你将会看见多出了一个.pyenv
的文件夹。如果进入这个文件夹,您将会看见如下类似的内容:
|
|
|
|
如果你能看见 .pyenv
文件夹,其内容类似于这里展示的,那么可以认为安装已经成功了,但这时还不能在终端中使用 pyenv
命令安装 Python。我们还得添加一些有关的 Windows OS 的环境变量。
-
配置环境变量:可以借助于官方提供的命令实现。
1 2 3 4 5
[System.Environment]::SetEnvironmentVariable('PYENV',$env:USERPROFILE + "\.pyenv\pyenv-win\","User") [System.Environment]::SetEnvironmentVariable('PYENV_ROOT',$env:USERPROFILE + "\.pyenv\pyenv-win\","User") [System.Environment]::SetEnvironmentVariable('PYENV_HOME',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")
以上命令也是在终端中执行。实现的功能就是在 Windows OS 中添加三个分别名为 PYENV
,PYENV_ROOT
,PYENV_HOME
的三个环境变量,且其值分别为$HOME\.pyenv\pyenv-win\
, $HOME\.pyenv\pyenv-win\
, $HOME\.pyenv\pyenv-win\
。这也意味着,我们可以手动将其添加到系统的环境变量中。如果打开系统的环境变量的设置界面,就可以看见类似于如图所示的内容:
到此为止,我们还不能在终端中使用 pyenv
命令来安装 Python。还需要最后将该命令的路径添加到系统的路径中。请参阅第4布。
-
在用户路径中添加
pyenv
命令的路径:同上,可以借助于官方提供的命令实现。1
[System.Environment]::SetEnvironmentVariable('path', $env:USERPROFILE + "\.pyenv\pyenv-win\bin;" + $env:USERPROFILE + "\.pyenv\pyenv-win\shims;" + [System.Environment]::GetEnvironmentVariable('path', "User"),"User")
执行完以上命令后,在系统配置环境变量的界面中的Path变量中可以看见增加了两条,分别为:$HOME\.pyenv\pyenv-win\bin
, $HOME\.pyenv\pyenv-win\shims
。如上图所示。
-
重启终端:关闭并重新打开 终端 以应用以上更改。
-
验证安装:在重新打开的终端中运行以下命令。如果安装成功,将显示 pyenv 版本。
1
pyenv --version # 返回 pyenv 3.1.1
由于网络原因,建议将以下变量添加到系统或者用户的环境变量中:
PYTHON_BUILD_MIRROR_URL
为国内镜像站点,如 https://mirrors.huaweicloud.com/python/。- 同时设置
PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM
的值为1
- 设置完这两个环境变量后,为了使其生效,同样需要重启终端。
- NOTE:需要在重启后的终端中执行
pyenv update
,更新 pyenv的索引(这个过程需要些时间)。当然,如果您在终端中执行该命令后,能看见类似于如下所示的显示,证明 国内镜像站点 设置成功,否则,需要检查环境变量的设置。
|
|
关于在 Windows OS 中安装 pyenv-win 到此就结束了。下节将简单介绍如何使用 pyenv
管理 Python 版本,同时也建议参考官方教程,或者在终端中执行 pyenv help
命令。该命令会显示出 pyenv
所支持的所有功能。如下所示:
|
|
使用 pyenv-win
- 基本用法说明
从前面的介绍可知,执行 pyenv help
命令可以查看 pyenv
的基本用法。输出的结果包括了 pyenv
支持的一系列子命令,其格式为 pyenv <command> [<args>]
。其中 pyenv
是主命令;<command>
表示子命令,是您希望 pyenv
执行的具体操作。例如,help
, install
、global
、local
等。这部分需要您根据需求指定。[<args>]
表示可选参数或参数列表(args 是 “arguments” 的缩写)。参数是传递给子命令的额外信息,用于具体化或补充命令的执行。例如,当您运行 pyenv install <version>
时,<version>
就是参数,表示需要安装的具体 Python 版本。
命令行工具通常有以下约定:
- 方括号
[ ]
表示内容是可选的,即某些命令可能不需要额外的参数。例如:pyenv versions
这条命令无需参数,直接列出已安装的 Python 版本。 - 如果参数没有方括号,表示是必需的,命令无法省略。例如:
pyenv install <version>
, 这里的<version>
就是必需的,必须指定要安装的具体 Python 版本。 - 尖括号
< >
中的内容表示占位符,是你需要根据实际情况替换的部分。例如:pyenv install 3.13.1
。其中3.13.1
就是占位符<version>
的具体替代内容。
- 常用命令
这里仅介绍个人使用平频率比较高的命令。其他的请参考官方说明。
|
|
可能值得说明的是 rehash
子命令。按照官方说明,在使用 pip
安装或卸载任何库,或者修改某个 Python 版本文件夹中的文件后,咱们必须运行 pyenv rehash
命令来更新 pyenv
的 shims
。并且该命令必须在 .pyenv
文件夹之外运行,不能在 .pyenv
文件夹内部执行。这是什么意思呢?
比如说,我们通过 pip install black
安装了一个新的 black
库,按照以上说明,我们就应该执行 pyenv rehash
,以此保证这些新安装的可执行文件可以正常使用。如果此时不运行 pyenv rehash
,那么,我们可能会遇到以下问题:
-
新安装的可执行文件无法被识别或使用。比如说前面安装的
black
库的可执行文件就不会被添加到pyenv
的shims
中。结果就是在终端中运行这些命令时,可能会提示如下错误:1
black: command not found
-
旧版本的可执行文件被错误使用:比如,卸载了某些库或更新了它们的版本(如通过
pip uninstall
或pip install --upgrade
),但没有运行pyenv rehash
,pyenv
的shims
可能仍然指向旧的文件路径。这会导致卸载的工具仍然可以运行(虽然它实际上已经被删除),该工具版本就不是刚刚更新的最新版本。 -
环境不一致:这个和第二个问题类似,因为
pyenv
通过shims
管理不同 Python 版本及其相关的库和工具。如果没有运行pyenv rehash
,新添加或删除的库可能不会正确应用到当前的环境中,导致环境中的库和工具与实际的 Python 安装内容不一致。
最后,巧妙应用 pyenv help [<command>]
可以解决大多数 pyenv
的使用方法问题。
安装 Poetry
-
在 终端 中运行官方提供的安装脚本:
1
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -
值得说明的是,官方提供的原始安装脚本为:
|
|
唯一的区别是我将最后面的 py
改为了 python
。这里的 py
或者修改后的 python
指的是在系统终端中能运行的 python
命令 (在终端中执行该命令,正常情况下应该能进入 Python 的解释器里,如下图所示)。
由于前面我使用了 pyenv
来安装和管理系统的 Python 版本,通常情况下,在终端中能够执行的,启动 Python 的解释器的命令为 python
, 而非 py
。
- 配置环境变量(如果安装脚本未自动完成):这一步很重要,按照最新的安装脚本,通常会在执行完 Poetry 的安装后,会提示将 Poetry 的安装路径添加到系统的环境变量中。请一定仔细阅读出现的提示。通常,Poetry 会被安装在
C:\Users\用户名\AppData\Roaming\Python\Scripts
或C:\Users\用户名\.poetry\bin
。根据提示,执行相关命令,或者将 Poetry 的安装路径手动添加到用户的 Path 环境变量中。比如我的系统的环境变量如下(用红框标记的有关 Poetry 内容):
-
验证安装:重新打开 PowerShell 并运行以下命令来验证 Poetry 安装成功:
1
poetry --version # 返回类似 Poetry (version 1.8.5) 表示已安装成功
使用 Poetry 管理项目依赖
关于 poetry
的使用,同样建议参考官方文档。可能值得说明的是,可以设置 poetry
的 in-project
配置项值为 true
,使其在创建新的项目环境时,将其置于项目文件夹中。具体命令如下:
|
|
同 pyenv
,巧妙应用 poetry [help] [<command>]
可以解决大多数 poetry
的使用方法问题。