開頭
之前一直都在用python解釋器和virtualenv來管理python的虛擬環境,但是被老大吐槽不好用之后,換了一種新的管理方式,那就是
pyenv + pyenv-virtualenv的使用
先裝pyvenv,用pyvenv裝python,然后用pyenv-virtualenv管理
pyenv 的參考文檔 https://github.com/pyenv/pyenv
什么是pyenv
簡單的說,pyenv是管理python版本的工具。安裝pyenv后,可以管理各種python版本,並且各個版本的環境完全獨立,互不干擾, 不用你每次需要解釋器的時候到處去找安裝包,很好的管理的python版本
安裝pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
如果你使用 bash,就依次執行如下命令:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
如果你使用 zsh,就依次執行如下命令:
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
在使用 pyenv 之前,重新初始化 shell 環境,執行如下命令
exec $SHELL
然后就可以使用pyenv了,簡單的命令如下
# 查看當前版本
pyenv version
# 查看所有版本
pyenv versions
# 查看所有可安裝的版本
pyenv install --list
# 安裝指定版本
pyenv install 3.6.5 -v
# 安裝新版本后rehash一下
pyenv rehash
# 刪除指定版本
pyenv uninstall 3.5.2
# 指定全局版本
pyenv global 3.6.5
# 指定多個全局版本, 3版本優先
pyenv global 3.6.5 2.7.14
# 實際上當你切換版本后, 相應的pip和包倉庫都是會自動切換過去的
當pyenv install 出錯的時候,可以參考 https://blog.csdn.net/BigData_Mining/article/details/100100375
或者 下載很慢的時候 可以參考 https://www.cnblogs.com/Sungeek/p/10036033.html 離線安裝
當出現切換版本無法切換的情況一般是因為用pyenv指定了local版本。
解決方法:
取消設置local版本:
pyenv local --unset
就可以自由的切換版本了
pyenv global 3.6.5
# 查看目前版本
pyenv versions
因為本人用的是wsl的系統所以會出現如下的情況:
pyenv版本成功切換了但python版本不變的情況,且出現 如下的報錯
sourece 的時候出現
WARNING: `pyenv init -` no longer sets PATH.
Run `pyenv init` to see the necessary changes to make to your configuration.
執行python的時候出現
zsh: command not found: python
這時候是因為python命令沒有加軟連接的導致找不到python,所以在終端中輸入
sudo ln -s /usr/bin/python3.6 /usr/bin/python
wsl默認自帶了python3.6.9的解釋器
然后根據提示執行
pyenv init

將這部分腳本復制到你的~/.zshrc下(將之前的export加進來的先刪掉)
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
然后執行刷新
source ~/.zshrc

這時候,pyenv就可以正常運行啦!(md,搞了好久)
什么是pyenv-virtualenv
pyenv-virtualenv 是一個管理 python 虛擬環境的 pyenv 插件,具體可以查看 pyenv-virtualenv 文檔。https://github.com/pyenv/pyenv-virtualenv
python 虛擬環境相當於一個獨立的 python 版本,有自己獨立的目錄,也可以獨立的安裝第三方庫,而不會相互干擾
安裝pyenv-virtualenv
從 Github 克隆 pyenv-virtualenv 倉庫
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
會放到~/.pyenv的plugins的目錄下,需要先確認是否有這個目錄
然后將命令寫到zshrc中
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
然后哦執行
pyenv virtualenvs # 第一次執行應該是沒有環境的
# 從當前版本創建一個虛擬環境
$ pyenv version
3.7.7 (set by /home/keke/.pyenv/version)
$ pyenv virtualenv venv37
# 稍等一下,就可以看到環境創建成功,兩種方式查看
1、pyenv versions
2、 pyenv virtualenvs

激活關閉虛擬環境
pyenv activate <virtualenv-name>
pyenv deactivate
或者
pyenv local <virtualenv-name>
#取消設置
pyenv local --unset
如果報錯 則輸入以下兩句
$ echo 'eval "$(pyenv init -)"' >> ~/.zshrc
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
$ exec $SHELL
$ source ~/.zshrc
至此 則成功啟動
常用命令
pyenv命令集
pyenv install --list
查詢所有可以安裝的版本
pyenv install 2.7.14
安裝所需的版本
pyenv uninstall
卸載特定的Python版本。
pyenv version
顯示當前活動的Python版本
pyenv global 2.7.14
Python的全局設置,整個系統生效
pyenv global 2.7.14
Python的局部設置,當前目錄生效
pyenv local --unset
取消設置
更多參考GitHub...
pyenv-virtualenv命令集:
pyenv virtualenv 2.7.14 venv2714
制定版本創建virtualenv
pyenv virtualenvs
列出現有virtualenvs
pyenv activate virtualenv的名稱
激活pyenv virtualenv
pyenv deactivate
停用pyenv virtualenv
pyenv uninstall my-virtual-env
刪除現有virtualenv
特殊情況
遇到pyenv切換了但是python版本卻不改變的問題,需要修改 bashrc 里面的內容,參考

完。
