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。
麻省理工學院許可證