Pyenv使您可以轻松地在多个版本的Python之间切换。这很简单,不引人注目,并且遵循单用工具的Unix传统,这些工具做得很好。
该项目是从Rbenv和Ruby-Build分配的,并为Python进行了修改。
PATH
中添加目录来起作用。如果您安装了自制的,则下面的MacOS部分的自制选项也将起作用。
curl https://pyenv.run | bash
有关更多详细信息,请访问我们的其他项目:https://github.com/pyenv/pyenv-installer
这将使您使用最新版本的Pyenv,并使您易于分叉并在上游贡献任何更改。
$HOME/.pyenv
(但是您可以在其他地方安装它): git clone https://github.com/pyenv/pyenv.git ~/.pyenv
cd ~/.pyenv && src/configure && make -C src
上面“ Linux”部分的选项也可以使用,但建议使用自酿作用以用于基本使用。
更新自制并安装Pyenv:
brew update
brew install pyenv
如果您想安装(并更新到)Pyenv的最新开发负责人,而不是最新版本,则运行:
brew install pyenv --head
然后按照其余的后安装步骤开始,从为Pyenv设置外壳环境。
选修的。修复brew doctor
的警告““ config”脚本在系统或自制目录之外存在”
如果您要从链接链接到python(例如tkinter或numpy)的来源(通常情况下,只有当您是这种公式的开发人员,或者您拥有MacOS的EOL版本的MacOS,prepuilt Botoles to python of tkinter或numpy都可以构建自制公式(通常是这种情况)不再提供,您正在使用这样的公式)。
为了避免他们意外地与Pyenv提供的Python链接,请在您的交互式外壳的配置中添加以下行:
BASH/ZSH:
alias brew= ' env PATH="${PATH//$(pyenv root)/shims:/}" brew '
鱼:
alias brew= " env PATH=(string replace (pyenv root)/shims '' "$ PATH " ) brew "
Pyenv不正式支持Windows,也不在Windows子系统以外的Windows中用于Linux。此外,即使在那里,它安装的Pythons不是本机Windows版本,而是在虚拟机中运行的Linux版本 - 因此您将无法获得特定于Windows的功能。
如果您在Windows中,我们建议使用 @Kirankotari的pyenv-win
Fork - 它确实安装了本机Windows Python版本。
以下设置应适用于绝大多数用户的常见用例。有关详细信息和更多配置选项,请参见高级配置。
库存BASH启动文件之间的变化很大,它们之间的来源在哪些情况下以什么顺序以及它们执行的其他配置。因此,在所有环境中获取Pyenv的最可靠方法是将pyenv配置命令附加到.bashrc
(用于交互式壳)和Bash使用的配置文件(用于登录Shells)。
首先,将命令添加到~/.bashrc
中,通过在终端中运行以下内容:
echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.bashrc
echo ' command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.bashrc
echo ' eval "$(pyenv init -)" ' >> ~ /.bashrc
然后,如果您有~/.profile
, ~/.bash_profile
或~/.bash_login
,请在此处添加命令。如果您没有这些,请创建一个~/.profile
并在此处添加命令。
~/.profile
echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.profile
echo ' command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.profile
echo ' eval "$(pyenv init -)" ' >> ~ /.profile
~/.bash_profile
: echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.bash_profile
echo ' [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.bash_profile
echo ' eval "$(pyenv init -)" ' >> ~ /.bash_profile
BASH警告:在某些系统中,将BASH_ENV
变量配置为指向.bashrc
。在这样的系统上,您几乎应该肯定地将eval "$(pyenv init -)"
列入.bash_profile
,而不是.bashrc
。否则,您可能会观察到奇怪的行为,例如pyenv
进入无限循环。有关详细信息,请参见#264。
echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.zshrc
echo ' [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.zshrc
echo ' eval "$(pyenv init -)" ' >> ~ /.zshrc
如果您也希望将Pyenv添加到非相互作用的登录外壳中,也要将命令添加到~/.zprofile
或~/.zlogin
中。
如果您有FISH 3.2.0或更新,请进行交互执行:
set -Ux PYENV_ROOT $HOME /.pyenv
fish_add_path $PYENV_ROOT /bin
否则,执行下面的摘要:
set -Ux PYENV_ROOT $HOME /.pyenv
set -U fish_user_paths $PYENV_ROOT /bin $fish_user_paths
现在,将其添加到~/.config/fish/config.fish
:
pyenv init - | source
对于PATH
变化生效。
exec " $SHELL "
在尝试安装新的Python版本之前,安装Python构建依赖项。
您现在可以开始使用Pyenv。
如果您已从Pyenv版本2.0.x-2.2.x升级
启动逻辑和说明已在2.3.0中进行了更新。 2.0.0-2.2.5的先前,更复杂的配置方案仍然有效。
PYENV_ROOT
指向Pyenv将存储其数据的路径。 $HOME/.pyenv
是默认值。如果您通过GIT结帐安装了Pyenv,我们建议将其设置为克隆它的位置。pyenv
添加到您的PATH
中eval "$(pyenv init -)"
以作为外壳功能将pyenv
安装到外壳中,启用垫片和自动完成eval "$(pyenv init --path)"
而不是启用垫片,而无需集成外壳要安装其他Python版本,请使用pyenv install
。
例如,要下载并安装Python 3.10.4,运行:
pyenv install 3.10.4
运行pyenv install -l
提供了所有可用版本的列表。
注意:如果您在安装Python版本时遇到困难,请访问有关常见构建问题的Wiki页面。
注意:如果要使用代理进行下载,请设置http_proxy
和https_proxy
环境变量。
注意:如果您希望以更长的构建时间成本更快地解释器,请参阅Python-Build的Realme的最高性能。
除uninstall
外,所有PYENV子命令自动解析了相应版本行中最新版本的完整前缀。
pyenv install
选择了最新的已知版本,而其他子命令选择了最新的安装版本。
例如安装,然后切换到最新的3.10版本:
pyenv install 3.10
pyenv global 3.10
您可以运行pyenv latest -k <prefix>
以查看pyenv install
如何解决特定的前缀,或者pyenv latest <prefix>
以查看其他子命令如何解决它。
有关详细信息,请参见pyenv latest
文档。
对于以下Python发行版,Pyenv应用用户提供的补丁,以增加对某些较新环境的支持。尽管我们没有积极维护这些补丁,但由于现有版本永远不会改变,因此可以肯定地假设它们将继续工作,直到这些环境的后期版本发生了进一步的不兼容的变化。
要选择PyenV安装的Python作为要使用的版本,请运行以下命令之一:
pyenv shell <version>
- 仅选择当前壳会话pyenv local <version>
- 每当您在当前目录中(或其子目录)时自动选择pyenv global <version>
- 为您的用户帐户选择全球例如,选择上述新安装的Python 3.10.4作为您的首选版本:
pyenv global 3.10.4
现在,每当您调用python
, pip
等时,将运行Pyenv提供的3.10.4安装的可执行文件,而不是系统python。
将“ system
”作为版本名称将选择重置为您的系统提供的Python。
有关更多详细信息,请参阅了解Shims并了解Python版本的选择,以了解选择的工作方式以及有关其使用情况的更多信息。
随着时间的流逝,您将在$(pyenv root)/versions
目录中积累Python版本。
要删除旧的Python版本,请使用pyenv uninstall <versions>
。
另外,您可以简单地rm -rf
要删除的版本的目录。您可以使用pyenv prefix
命令,例如pyenv prefix 2.6.8
找到特定python版本的目录。但是请注意,插件可能会在卸载上运行其他操作,您也需要手工执行这些操作。例如,Pyenv-Virtualenv还删除了与已卸载版本相关的任何虚拟环境。
运行pyenv commands
以获取所有可用子命令的列表。使用--help
运行一个子命令以获取帮助,或者查看命令参考。
请注意,您安装的PYENV插件可能会添加自己的子命令。
如果您已使用Homebrew安装了Pyenv,请使用以下方式升级:
brew upgrade pyenv
要从释放到Pyenv的最新开发负责人,请使用:
brew uninstall pyenv
brew install pyenv --head
然后,您可以像往常一样使用brew upgrade pyenv
进行升级。
如果您已使用Pyenv-installer安装了Pyenv,则可能会有Pyenv-Update插件,该插件将升级Pyenv和所有已安装的插件:
pyenv update
如果您使用Pyenv-Installer或Git Checkout安装了Pyenv,则还可以随时使用Git升级安装。
要升级到最新开发版本的Pyenv,请使用git pull
:
cd $( pyenv root )
git pull
要升级到PYENV的特定版本,请查看相应的标签:
cd $( pyenv root )
git fetch
git tag
git checkout v0.1.0
Pyenv的简单性使得临时禁用它或从系统中卸载。
为了禁用Pyenv管理Python版本,只需从Shell启动配置中删除pyenv init
Inboccations即可。这将从PATH
中删除Pyenv Shims目录,并且像python
这样的未来调用将执行Python版本,就像Pyenv之前一样。
pyenv
仍可以在命令行上访问,但是您的Python应用不会受版本切换的影响。
要完全卸载Pyenv,请从Shell启动配置中删除所有Pyenv配置线,然后删除其根目录。这将删除在$(pyenv root)/versions/
Directory下安装的所有Python版本:
rm -rf $( pyenv root )
如果您已经使用软件包管理器安装了PYENV,则作为最后一步,请执行Pyenv软件包删除。例如,用于自制:
brew uninstall pyenv
Pyenv提供了一种简单的方法,可以通过插件扩展和自定义其功能 - 就像创建插件目录并将Shell脚本丢弃在其某个子路上的shell脚本一样简单,并在某些时刻需要运行的任何额外逻辑。
主要的想法是,您可以将大多数内容放在$PYENV_ROOT/<whatever>
下,也可以将您放在$PYENV_ROOT/plugins/your_plugin_name/<whatever>
下。
请参阅Wiki上的插件,以了解如何安装和使用插件以及一些有用的现有插件的目录,以满足共同需求。
请参阅Wiki上的创作插件,以编写您自己的插件。
在高级别上,Pyenv使用将SHIM可执行文件注入您的PATH
,确定您的应用程序已指定了哪个Python版本,并将您的命令传递到正确的Python安装。
当您运行诸如python
或pip
类的命令时,您的shell(bash / zshrc / ...)通过目录列表进行搜索,以查找带有该名称的可执行文件。该目录列表生活在一个称为PATH
环境变量中,列表中的每个目录都被一个结肠隔开:
/usr/local/bin:/usr/bin:/bin
从左到右搜索PATH
中的目录,因此列表开头的目录中的可执行文件优先于另一个。在此示例中, /usr/local/bin
目录将首先搜索,然后/usr/bin
,然后是/bin
。
Pyenv通过在PATH
前部插入垫片目录来工作:
$(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin
通过称为Rehashing的过程,Pyenv在该目录中维护Shims,以匹配每个安装版本的Python的每个Python命令 - python
, pip
等。
Shims是轻巧的可执行文件,只需将您的命令传递给Pyenv即可。因此,在安装了Pyenv时,当您运行时,例如pip
,您的操作系统将执行以下操作:
PATH
以获取名为pip
的可执行文件PATH
开头找到命名pip
的Pyenv垫片pip
的垫片,然后将命令传递到Pyenv当您执行垫片时,pyenv通过以下顺序从以下来源读取该版本来确定使用哪种python版本:
PYENV_VERSION
环境变量(如果指定)。您可以使用pyenv shell
命令在当前的shell会话中设置此环境变量。
当前目录中的应用程序特定于.python-version
文件(如果存在)。您可以使用pyenv local
命令来修改当前目录的.python-version
文件。
第一个.python-version
文件通过搜索每个父目录找到(如果有),直到达到文件系统的根源为止。
全局$(pyenv root)/version
文件。您可以使用pyenv global
命令修改此文件。如果不存在全局版本文件,则PYENV假设您要使用“系统” Python(见下文)。
特殊版本的名称“ system
”是指在Shims PATH
进入后使用PATH
(换句话说,如果Pyenv Shims不在PATH
上)。请注意,Pyenv认为这些安装在其控制之外,并且不会试图以任何方式进行检查或区分它们。因此,例如,如果您在MacOS上,并且拥有OS捆绑的Python 3.8.9和HomebrewStalled Python 3.9.12和3.10.2-对于Pyenv,这仍然是一个单一的“ system
”版本,而这些版本首先是哪个版本您指定的可执行名称下的PATH
将运行。
注意:您可以同时激活多个版本,包括多个版本的Python2或Python3。这允许平行使用Python2和Python3,并且使用tox
之类的工具需要。例如,要指示Pyenv首先使用Python和Python3(例如2.7.9和3.4.2),但还具有Python 3.3.6、3.2.1和2.5.2,您首先pyenv install
distlove the Mistss the Mistres版本,然后设置pyenv global system 3.3.6 3.2.1 2.5.2
。然后,您将可以使用适当的pythonX
或pythonX.Y
名称调用任何这些版本。您还可以手工指定.python-version
文件中的多个版本,并由Newlines隔开。以#
开头的行被忽略。
pyenv which <command>
在您通过垫片调用<command>
时,将显示哪个实际可执行文件。例如,如果您选择了3.3.6、3.2.1和2.5.2,则选择了3.3.6和2.5.2,并且您的系统Python为3.2.5, pyenv which python2.5
应该显示$(pyenv root)/versions/2.5.2/bin/python2.5
pyenv which python3
- $(pyenv root)/versions/3.3.6/bin/python3
and pyenv which python3.2
由于跌落到您的系统python的路径(见下文)。
如果所选的Python安装中的任何一个相应的可执行文件都不存在,则SHIMS也落在PATH
上的任何事物。这使您可以使用系统上其他地方安装的任何程序,只要它们没有被选定的Python安装遮盖。
一旦Pyenv确定了您的应用程序指定了哪个版本的Python,便将命令传递到相应的Python安装。
每个Python版本都安装在其自己的目录中,该$(pyenv root)/versions
。
例如,您可能已经安装了这些版本:
$(pyenv root)/versions/2.7.8/
$(pyenv root)/versions/3.4.2/
$(pyenv root)/versions/pypy-2.4.0/
就PYENV而言,版本名称只是$(pyenv root)/versions
下的目录。
跳过本节,除非您必须知道外壳配置文件中的每一行。
另外,请参见控制Pyenv行为的环境变量的环境变量部分。
pyenv init
是唯一越过将额外命令加载到外壳中的命令。来自RVM,有些人可能反对这个想法。这是eval "$(pyenv init -)"
实际上的方法:
设置垫片路径。这就是允许Pyenv透明地拦截和重定向python
, pip
等的调用。它将$(pyenv root)/shims
预付给您的$PATH
。它还在PATH
上删除了$(pyenv root)/shims
的任何其他实例,该实例允许多次调用eval "$(pyenv init -)"
而无需重复的PATH
条目。
安装自动完成。这是完全可选的,但非常有用。采购$(pyenv root)/completions/pyenv.bash
将设置该设置。 ZSH和FISH也有完成。
重新调整垫片。您需要不时地重建垫片文件。在INIT上执行此操作,请确保一切都是最新的。您随时可以手动运行pyenv rehash
。
将pyenv
安装到当前外壳中作为外壳功能。该位也是可选的,但允许Pyenv和插件更改当前外壳中的变量。诸如pyenv shell
之类的命令工作是必需的。 SH调度员不会做任何疯狂的事情,例如Override cd
或破解您的Shell提示,但是如果出于某种原因您需要pyenv
成为真实的脚本而不是外壳功能,则可以安全地跳过它。
eval "$(pyenv init --path)"
仅项目1和3。
要准确查看引擎盖下发生的事情,请运行pyenv init -
或pyenv init --path
。
eval "$(pyenv init -)"
应该在任何交互式Shell的启动(包括嵌套外壳)上运行,例如从编辑器调用的壳体),以便您获得完成和便利性壳功能。
可以使用eval "$(pyenv init --path)"
来代替eval "$(pyenv init -)"
来启用垫片,而没有外壳集成。在其他一些逻辑已将可能会影响PATH
的垫片的路径预先处理后,它也可以用来将其撞到PATH
的前部。
~/.profile
将每个用户bin
目录PATH
~/.bashrc
之后。这需要在这些发行版中附加pyenv init
呼叫~/.profile
以及~/.bashrc
因为系统的PIP将非根用户安装的模块可执行文件放置在那些用户bin
目录中。如果您不想使用pyenv init
和Shims,那么您仍然可以从Pyenv为您安装Python版本的能力中受益。只需运行pyenv install
,您就会发现以$(pyenv root)/versions
安装的版本。
您可以根据需要手动执行或对称性链接,也可以使用pyenv exec <command>
在您想要<command>
时会受到当前配置的Pyenv版本选择的影响。
pyenv exec
通过准备$(pyenv root)/versions/<selected version>/bin
PATH
<command>
的环境中的路径,与EG RVM相同。
您可以在以下环境变量中影响Pyenv的运作方式:
姓名 | 默认 | 描述 |
---|---|---|
PYENV_VERSION | 指定要使用的Python版本。 另请参阅 pyenv shell | |
PYENV_ROOT | ~/.pyenv | 定义了Python版本和垫片所在的目录。 另请参见 pyenv root |
PYENV_DEBUG | 输出调试信息。 另外为: pyenv --debug <subcommand> | |
PYENV_HOOK_PATH | 参见Wiki | 搜索pyenv钩子的结肠分离列表。 |
PYENV_DIR | $PWD | 目录开始搜索.python-version 文件。 |
有关环境变量,请参见Python-Build的README中的特殊环境变量,可用于自定义构建。
PYENV源代码托管在GitHub上。即使您不是Shell Hacker,它也很干净,模块化且易于理解。
使用蝙蝠执行测试:
bats test
bats/test/<file>.bats
随时在问题跟踪器上提交拉动请求和文件错误。
有关提交更改的更多详细信息,请参见贡献。
请参阅ChangElog.md。
麻省理工学院许可证