端午節有雷陣雨,很差出門,正好有一個python程序要調試,可構建環境是python 2.7.5,一個較老的環境了,而新程序是基於python3寫的,看來要切換python到舊版本調試,想方便的切換python版本,就想到了python版本切換工具。網上搜索了一下,pyenv可堪此任。pyenv支持linux、windows,且linux下支持更完美,我是win10,如下實操就以win10爲例了。html
機器原來安裝了python3.8.x,採用pip安裝pyenv,pip install pyenv。node
爲在windows下隨時訪問pyenv,須要將安裝的pyenv執行文件加入路徑中,另外也須要加入pyenv的shims墊片目錄(這個名詞挺神奇的吧,其實後面會講到,這個操做確實挺神奇的,且聽後面分解)。
加入PYENV環境變動到系統變量中,個人值以下:
PYENV = C:\Users\Admin\AppData\Local\Programs\Python\pyenv-winpython
將pyenvr.bat的路徑加入系統path變量中,另外將這個shims墊片目錄也加入path變量中,完成後,以下所示:
PATH = %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;%SYSTEMROOT%\System32\OpenSSH\;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;C:\Program Files\nodejs\;%PYENV%\bin;%PYENV%\shims;linux
文不表深意,上圖:git
至此,pyenv已經成功安裝,可用了,打開一個命令窗口(win+R, 輸入cmd回車),輸入pyenv,會顯示pyenv的版本號及經常使用命令,安裝成功。github
>pyenv pyenv 1.2.4 Usage: pyenv <command> [<args>] Some useful pyenv commands are: commands List all available pyenv commands duplicate Creates a duplicate python environment local Set or show the local application-specific Python version global Set or show the global Python version shell Set or show the shell-specific Python version install Install a Python version using python-build uninstall Uninstall a specific Python version rehash Rehash pyenv shims (run this after installing executables) version Show the current Python version and its origin versions List all Python versions available to pyenv exec Runs an executable by first preparing PATH so that the selected Python which Display the full path to an executable whence List all Python versions that contain the given executable See `pyenv help <command>' for information on a specific command. For full documentation, see: https://github.com/pyenv-win/pyenv-win#readme
pyenv install --list
查看可安裝的python版本shell
pyenv install 3.8.0
安裝python 3.8.0windows
pyenv install 2.7.5
安裝python 2.7.5app
更新pyenv命令:
pyenv rehash工具
我但願平時使用python 3.8.0版本,設置經常使用的版本爲該版本,命令以下:pyenv global 3.8.0,運行後,之後使用python時,都會缺省使用該版本。
我是要調試舊版本python程序,在本目錄下,須要特定的python版本,故採用在本目錄設定特定版本的方式,命令以下:pyenv local 2.7.5,這樣,之後只要進入這個目錄,運行python就是python 2.7.5。
>python Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> >>>
先安裝setuptools,下載:https://pypi.org/project/setu...,解壓,運行python setup.py install。
再安裝pip,下載:https://pypi.org/project/pip/...,解壓,運行python setup.py install。
更新pyenv命令:pyenv rehash
pyenv的工做原理其實很簡單,將它本身管理的Python目錄插到環境變量裏,這樣一來系統在搜索Python的時候第一個找到的就是pyenv管理的Python環境。這個插到最前面的路徑就叫作墊片(shims),也就是%PYENV%shims目錄。
當執行pyenv命令的時候,它會有global(當前系統)、local(當前目錄)、shell三個等級來管理python環境,按照如下順序來決定要使用的Python版本:
優先級shell > local > global
若是PYENV_VERSION環境變量存在,則使用該變量指定的python版本。你可使用pyenv shell 命令來在當前shell環境中設置該環境變量。
若是當前目錄中存在文件:.python-version,則使用該變量指定的python版本。你能夠用pyenv local 命令來修改當前目錄的.python-version文件。
如何上面2個變量不存在,則自底向上搜索各層上級目錄,找到的第一個.python-version就是要使用的python版本, 直到到達文件系統根目錄,即全局的$(pyenv root)/version文件。可使用 pyenv global 命令來修改。若是全局版本文件不存在, pyenv假設你使用系統安裝的Python. (換句話說就是未安裝pyenv時環境變量中找到的Python)。
[global] timeout = 6000 index-url = https://mirrors.aliyun.com/pypi/simple/ trusted-host = mirrors.aliyun.com
再使用pip安裝軟件,快捷如飛。
pyenv shims 顯示shims下的文件
pyenv rehash 生成shims目錄及相關文件,如python, pip等
pyenv install --list 查看可安裝的python版本
pyenv install 3.8.0 安裝python 3.8.0版本
pyenv global 3.8.0 在全局指定python運行的版本號
pyenv local 2.7.5 在當前目錄下生成python版本文件,在本目錄下運行python時,運行採用該版本文件中指定的版本
pyenv shell 2.7.5 在當前命令窗口指定運行的python版本,本窗口中運行python時會採用該指定的版本
pyenv shell --unset 在當前命令窗口內去除指定的python版本,會採用local或global設定的python版本
pyenv version 查看當前處於激活狀態的版本,括號中內容表示這個版本是由哪條途徑激活的(global、local、shell)
pyenv versions 查看當前pyenv已安裝的全部版本,處於激活狀態的版本前以 * 標示。
>pyenv versions * 2.7.5 (set by D:\01xxx\source\python\.python-version) 3.8.0
pyenv uninstall 2.7.5 卸載一個版本
pyenv rehash 爲全部已安裝的可執行文件 (如:~/pyenv/versions/*/bin/*
) 建立 shims,所以,每當你增刪了 Python 版本或帶有可執行文件的包(如 pip)之後,都應該執行一次本命令主要執行代碼:pyenv-winlibexecpyenv.vbspyenv各python版本的安裝路徑:pyenv-winversions