簡(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)安裝
- 將 pyenv 檢出到你想安裝的目錄。建議路徑為:$HOME/.pyenv
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
- 添加環(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
- 向 shell 添加 pyenv init 以啟用 shims 和命令補(bǔ)完功能
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
- 重啟 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
- 先把源碼下載到本地
$ 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下載到本地
- 計(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位碼
- 終端進(jìn)入python安裝文件所在的文件夾, 運(yùn)行
python3 -m http.server
或者
python2 -m SimpleHTTPServer - 新開(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/" - 運(yùn)行
pyenv install 3.5.0很快就安裝完成了.