前言
經常遇到這樣的情況:
- 系統自帶的Python是2.x,自己需要Python 3.x;
- 某些機器學習的框架(如PaddlePaddle/Tensorflow)需要的版本是python3.5,但是你的系統支援的python版本較高,且無法刪除(因為某些軟體會和python產生依賴)
此時需要在系統中安裝多個Python,但又不能影響系統自帶的Python,即需要實現Python的多版本共存。pyenv就是這樣一個Python版本管理器。 pyenv可以進行全域性的 Python 版本切換,也可以給單個專案提供對應的 Python 版本。用了 「pyenv」以後,就可以很容易的安裝不同的 Python 版本,不同版本之間的切換也變得 so easy。
注意
Pyenv只會管理通過Pyenv安裝的Python版本,你自己在Python官網上下載的直接安裝的Pyenv
並不能被管理!!!
同樣除了系統自帶的python包外,其他直接安裝
的python包是識別不出來
的,即使使用的brew安裝的也識別不出來.
pyenv的安裝
- 安裝工具:brew
- 系統環境:
通過homebrew安裝
brew install pyenv
複製程式碼
但是github提示了一句話
After installation, you'll need to
add eval "$(pyenv init -)" to your profile
(as stated in the caveats displayed by Homebrew — to display them again, usebrew info pyenv). You only need to add that to your profile once.
意思就是說我們需要在profile檔案裡面新增一句
eval "$(pyenv init -)"
複製程式碼
博主親測,如果沒有這一步,後面執行pyenv global [version]
是不會成功的。
編輯.bash_profile檔案
在終端中輸入如下命令,進入當前使用者的Home目錄
cd ~
複製程式碼
輸入如下命令,開啟.bash_profile檔案
open .bash_profile
複製程式碼
如不存在,則輸入如下命令,建立檔案
touch .bash_profile
複製程式碼
編輯檔案
open -e .bash_profile
複製程式碼
在彈出的.bash_profile檔案中新增
eval "$(pyenv init -)"
複製程式碼
command + s 儲存檔案,然後在終端中輸入如下命令,重新整理之前配置的.bash_profile檔案.
source .bash_profile
複製程式碼
驗證pyenv是否安裝成功
執行如下命令:
pyenv --help
複製程式碼
上面命令列的意思是獲取 prenv 的幫助資訊。
pyenv的常用命令
上圖是官方文件中的例子,以下是整理的一些pyenv的常用命令,如果想要檢視完整命令列表,可以點選檢視pyenv命令列表
- 檢視pyenv支援哪些Python版本
pyenv install --list
複製程式碼
- 檢視已經安裝的python版本
pyenv versions
複製程式碼
- 檢視當前使用的python版本
pyenv version
複製程式碼
- 安裝一個python版本如3.5.6
pyenv install 3.5.6
複製程式碼
- 安裝完成之後需要對資料庫進行更新:
pyenv rehash
複製程式碼
- 解除安裝一個python版本如3.5.6
pyenv uninstall 3.5.6
複製程式碼
- 設定全域性python版本如3.5.6
pyenv global 3.5.6
//很多人不推薦這麼做,說是mac作業系統的檔案也會呼叫原生的2.7的python版本
//這種說法感覺有點:恐懼來自未知的感覺.持保留意見
複製程式碼
- 這個時候確認一下當前python的版本
- 設定目錄級python版本如3.5.6
pyenv local 3.5.6
複製程式碼
- 為當前shell會話設定python版本如3.5.6
pyenv shell 3.5.6
複製程式碼
常見問題解決
pyenv install [version]
下載太慢 只需要在python的官網下載你需要的python版本的tar.xz
檔案然後放到/User/.pyenv/cache
中然後再執行pyenv install [version]
就可以了
在這裡提一下:
/.pyenv
在mac中是隱藏資料夾,mac顯示隱藏資料夾的快捷鍵是:shift+command+.
- 出現
zipimport.ZipImportError: can't decompress data; zlib not available
的問題
~ pyenv install 3.5-dev
Cloning https://hg.python.org/cpython...
Installing Python-3.5-dev...
BUILD FAILED (OS X 10.11.6 using python-build 20150818)
Inspect or clean up the working tree at /var/folders/23/4kbs9t712jv1mvmw6cpjwr2m0000gn/T/python-build.20160815000934.22185
Results logged to /var/folders/23/4kbs9t712jv1mvmw6cpjwr2m0000gn/T/python-build.20160815000934.22185.log
Last 10 log lines:
File "/private/var/folders/23/4kbs9t712jv1mvmw6cpjwr2m0000gn/T/python-build.20160815000934.22185/Python-3.5-dev/Lib/ensurepip/__main__.py", line 4, in <module>
ensurepip._main()
File "/private/var/folders/23/4kbs9t712jv1mvmw6cpjwr2m0000gn/T/python-build.20160815000934.22185/Python-3.5-dev/Lib/ensurepip/__init__.py", line 209, in _main
default_pip=args.default_pip,
File "/private/var/folders/23/4kbs9t712jv1mvmw6cpjwr2m0000gn/T/python-build.20160815000934.22185/Python-3.5-dev/Lib/ensurepip/__init__.py", line 116, in bootstrap
_run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
File "/private/var/folders/23/4kbs9t712jv1mvmw6cpjwr2m0000gn/T/python-build.20160815000934.22185/Python-3.5-dev/Lib/ensurepip/__init__.py", line 40, in _run_pip
import pip
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
複製程式碼
解決方案參考#451 用如下命令就可以解決了:
~ CFLAGS="-I$(brew --prefix openssl)/include -I$(xcrun --show-sdk-path)/usr/include" \
LDFLAGS="-L$(brew --prefix openssl)/lib" \
pyenv install -v 3.5-dev
複製程式碼
pyenv global [verion]
命令失效 這個問題我已經在上面說過了,需要在bash_profile
檔案裡面新增一句
eval "$(pyenv init -)"
複製程式碼
新增方式上面已經詳細介紹過了。
最後
本文參考: