pyenv是做什么的
pyenv是用來更方便的管理/切換python版本的.
github上通過homebrew安裝介紹的非常簡單.主要是對相關知識點不熟悉造成很多問題.
首先必須明白的是:
通過homebrew安裝:
brew install pyenv
如果報錯brew命令沒找到,說明需要安裝homebrew, 參考新Mac安裝python3和虛擬環境第 2-4 節完成安裝 homebrew 的安裝。
非Mac普通Linux使用以下命令安裝pyenv
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash 或者 git clone https://github.com/yyuu/pyenv.git ~/.pyenv
查看是否安裝成功
pyenv -v
如果正常打印了版本號說明安裝成功pyenv 1.2.6
配置環境變量
查看當前shell是zsh還是bash, 如果是bash選擇下面的方式一,如果是zsh選擇方式二
dscl . -read /Users/$USER UserShell
方式1 編輯.bash_profile文件
終端執行命令:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >>~/.bash_profile echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >>~/.bash_profile echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi'>>~/.bash_profile
方式2 編輯~/.zshrc 文件,
終端執行命令:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >>~/.zshrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >>~/.zshrc echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi'>>~/.zshrc
生效環境變量
如果是bash
source ~/.bash_profile
如果是zsh
source ~/.zshrc
異常情況:如果碰到下面這個問題
WARNING: `pyenv init -` no longer sets PATH.
Run `pyenv init` to see the necessary changes to make to your configuration.
解決方案是對剛才所設置的環境變量一點小改動。打開剛才的環境變量文件 .zshrc 或者 .bash_profile
"vim ~/.bash_profile"或者"vim ~/.zshrc"
應該可以看到下面這段內容
export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv init -)" # 這行需要改動 fi
改成下面這樣
export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv init --path)" fi
參考:https://github.com/pyenv/pyenv/issues/1906
查看所有的python版本(pyenv管理的所有版本)
$ pyenv versions
* system (set by /Users/xxx/.pyenv/version)
* 表示當前正在使用的版本,system表示用的是系統python版本
查看可安裝python版本
$ pyenv install --list Available versions: 2.1.3 2.2.3 2.3.7 ...
選擇版本進行安裝
$ pyenv install 3.7.3
查看所有安裝的版本
$ pyenv versions * system (set by /Users/xxx/.pyenv/version) 3.7.3
可以看到多了一個3.7.3版,*表示當前使用的版本
切換版本
$ pyenv global 3.5.5 # 全局切換
$ python -V # 驗證一下是否切換成功
system
* 3.7.3 (set by /Users/admin/.pyenv/version)
*表示當前使用的版本
注意,此處需要重啟終端對應版本才會正式生效
此處用也可用local,只對當前目錄生效
$ pyenv local 3.5.5 # 當前目錄及其目錄切換 $ python -V # 驗證一下是否切換成功
同樣此處需要重啟終端對應版本才會正式生效
有時設置了pyenv local版本后,再設置global會發現沒有生效,可以嘗試:
pyenv local --unset
解除local設置。
要切換回系統版本,用同樣命令:
$ pyevn global system
卸載python版本
$ pyenv uninstall 3.7.3
奇怪的問題
安裝完成后,使用python運行程序是可能會碰到下面這個問題,圖片來源:pycharm destroy _stat destroy os cleanup[3] wiping _warning wiping _codecs,問題就是運行python程序的時候不停的輸出destroy和clean信息。
這個問題的原因可能是下面兩種,
1、python命令和pytest命令用混了,比如本來應該使用pytest -sv test_aaa.py但是輸入命令的時候卻使用了python -sv test_aaa.py, 這個時候會報上面這個錯誤。
2、在未知是否安裝python的情況下,重新安裝了python,解決辦法是卸載當前系統中已有的所有python3和pyenv, 隨后重新安裝pyenv, 並使用pyenv安裝python3
卸載python3的方式:
網上很多卸載方式是這樣的
對於 Mac 自帶的 Python,其框架目錄為:
System/Library/Frameworks/Python.framework
而我們安裝的 Python,其(默認)框架目錄為:
/Library/Frameworks/Python.framework
接下來,我們就分別(在 Mac 終端進行)刪除上面所提到的三部分。
第 1 步,刪除框架:
sudo rm -rf /Library/Frameworks/Python.framework/Versions/x.x
第 2步,刪除應用目錄:
sudo rm -rf "/Applications/Python x.x"
第 3 步,刪除指向 Python 的連接:
cd /usr/local/bin/ ls -l /usr/local/bin | grep '../Library/Frameworks/Python.framework/Versions/x.x' | awk '{print $9}' | tr -d @ | xargs rm
但是我的卸載過程並非如此順利,第一步就卡主了,因為我的 /Library/Frameworks/Python.framework/Versions目錄不存在。
我的方式
終端依次輸入以下命令
python3 import os os.sys.path
復制打印出來的第一個路徑,退出python執行模式,刪除剛才復制的路徑 。
刪除完python3的路徑后,使用下面的命令卸載pyenv
brew uninstall pyenv
重啟電腦,重新安裝pyenv, 並通過pyenv安裝一個python3