mac下利用pyenv管理多個版本的python

前言

經常遇到這樣的情況:

系統自帶的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]是不會成功的

在終端中輸入如下命令,進入當前用戶的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版本

安裝一個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
這個時候確認一下當前python的版本



確認當前python的版本

發現已經更改為3.5.6了

設置目錄級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
/<module>

解決方案參考#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 -)"

添加方式上面已經詳細介紹過了。

最後

如果你覺得本文對你有幫助,希望可以關注並轉發,這樣我會更有動力更新的。