Linux 下的 Python 多版本管理(pyenv)

簡(jiǎn)介
提到 Python 環(huán)境管理,更多人可能會(huì)首先想到 virtualenv。但與用于創(chuàng)建獨(dú)立包環(huán)境的 virtualenv 不同,pyenv 的作用僅限于維護(hù)不同版本的 Python。它的使用不依賴(lài)于 Python,是一個(gè)簡(jiǎn)單、獨(dú)立的純 shell 腳本工具。pyenv 也以 pyenv-virtualenv 插件的形式支持 virtualenv,強(qiáng)烈建議使用。安裝后比較方便的是可以在你 cd 到項(xiàng)目目錄時(shí)自動(dòng)切換相應(yīng)的虛擬環(huán)境,而不用老是 source.

軟件環(huán)境
Linux 下安裝 pyenv 前需要做一些準(zhǔn)備工作,詳情參考 Requirements 頁(yè)面。
Ubuntu(Deepin) 系統(tǒng)就需要先執(zhí)行如下命令:

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm

手動(dòng)安裝

  1. 將 pyenv 檢出到你想安裝的目錄。建議路徑為:$HOME/.pyenv
 $ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
  1. 添加環(huán)境變量。PYENV_ROOT 指向 pyenv 檢出的根目錄,并向 $PATH 添加 $PYENV_ROOT/bin 以提供訪(fǎng)問(wèn) pyenv 這條命令的路徑
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
  1. 向 shell 添加 pyenv init 以啟用 shims 和命令補(bǔ)完功能
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
  1. 重啟 shell(因?yàn)樾薷牧?$PATH)
$ exec "$SHELL"

pyenv主要的命令

pyenv versions
查看當(dāng)前 pyenv 可檢測(cè)到的所有版本,處于激活狀態(tài)的版本前以 * 標(biāo)示。

$ pyenv versions
 2.5.6
 2.6.8
*2.7.6 (set by /home/yyuu/.pyenv/version)
 3.3.3
 jython-2.5.3
 pypy-2.2.1

pyenv version
查看當(dāng)前處于激活狀態(tài)的版本,括號(hào)中內(nèi)容表示這個(gè)版本是由哪條途徑激活的(global、local、shell)

$ pyenv version
2.7.6 (set by /home/yyuu/.pyenv/version)

pyenv install
使用 python-build(一個(gè)插件) 安裝一個(gè) Python 版本,到 $PYENV_ROOT/versions 路徑下。

$ pyenv install -v 2.7.3

建議添加 -v 參數(shù)用于顯示細(xì)節(jié)。python-build 會(huì)首先嘗試從一個(gè)鏡像站點(diǎn)下載包,此時(shí)可以去 /tmp/python-build.xxx 里面關(guān)心一下下載速度。如果太慢,可以直接在 shell 里 ctrl-c 終止此次下載,然后 python-build 會(huì)自動(dòng)去 python.org/ftp 下載。不一定哪個(gè)更快。

pyenv uninstall
卸載一個(gè)版本

$ pyenv uninstall 2.7.3

pyenv rehash
為所有已安裝的可執(zhí)行文件 (如:~/.pyenv/versions//bin/) 創(chuàng)建 shims,因此,每當(dāng)你增刪了 Python 版本或帶有可執(zhí)行文件的包(如 pip)以后,都應(yīng)該執(zhí)行一次本命令

$ pyenv install 2.7.3
$ pyenv rehash

pyenv global
設(shè)置全局的 Python 版本,通過(guò)將版本號(hào)寫(xiě)入 ~/.pyenv/version 文件的方式。

$ pyenv global 3.4.0

pyenv local
設(shè)置面向程序的本地版本,通過(guò)將版本號(hào)寫(xiě)入當(dāng)前目錄下的 .python-version 文件的方式。通過(guò)這種方式設(shè)置的 Python 版本優(yōu)先級(jí)較 global 高。pyenv 會(huì)從當(dāng)前目錄開(kāi)始向上逐級(jí)查找 .python-version 文件,直到根目錄為止。若找不到,就用 global 版本。

$ pyenv local 2.7.3

取消設(shè)置本地版本

$ pyenv local --unset

pyenv shell
設(shè)置面向 shell 的 Python 版本,通過(guò)設(shè)置當(dāng)前 shell 的 PYENV_VERSION 環(huán)境變量的方式。這個(gè)版本的優(yōu)先級(jí)比 local 和 global 都要高。--unset 參數(shù)可以用于取消當(dāng)前 shell 設(shè)定的版本。

$ pyenv shell pypy-2.2.1
$ pyenv shell --unset

安裝本地Python

  1. 先把源碼下載到本地
$ pyenv install 3.5.0                                                                                                                                                                           
$ Downloading Python-3.5.0.tgz...
$ https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz

https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz下載到本地

  1. 計(jì)算sha64位碼(拷貝的別人的代碼)
# -*- coding:utf-8 -*-
import os
import hashlib
import sys
__author__ = 'dave'
def get_hash(filepath):
    if not os.path.exists(filepath):
        print('File not exists.')
        return
    # algo = hashlib.md5()
    algo = hashlib.sha256()
    with open(filepath, 'rb') as f:
        while True:
            data = f.read(4096)
            if not data:
                break
            algo.update(data)
    return algo.hexdigest()
if __name__ == '__main__':
    md5sum = get_hash('Python-3.5.0.tar.xz')
    print(md5sum)
    print(len(md5sum))

然后把文件名改成sha64位碼

  1. 終端進(jìn)入python安裝文件所在的文件夾, 運(yùn)行
    python3 -m http.server
    或者
    python2 -m SimpleHTTPServer
  2. 新開(kāi)一個(gè)終端窗口,運(yùn)行
    export PYTHON_BUILD_MIRROR_URL="http://127.0.0.1:8000/"
    或者
    export PYTHON_BUILD_MIRROR_URL="http://0.0.0.0:8000/"
  3. 運(yùn)行 pyenv install 3.5.0 很快就安裝完成了.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容