pyenv 可以幫助你在開發或者生產環境裡安裝和管理多個 python 版本。這對於 python 開發者而言非常有用。
比如在 ubuntu 12.04 上(這個版本的 ubuntu 曾經非常流行,至今仍然驅動了很多重要系統),系統自帶的 python 版本是 2.7.6。而這個版本的 python 缺乏對乙個重要的 ssl 功能的支援—— server name indication,簡稱 sni。這樣當你在使用如 requests 這樣的 http 庫訪問一些 https api 時,就會遇到證書錯誤。
對 sni 的支援是在 python 2.7.9 時從 python 3 裡 backport 過來的。而借助 pyenv,我們就可以在一些非常古老或者不方便公升級 python 版本的系統裡用上最新版本的 python,同時完全不會影響到系統自帶的 python 版本。
首先安裝一些必要的工具和支援庫:
sudo apt-get install git build-essential libreadline-dev libsqlite3-dev libbz2-dev libssl-dev zlib1g-dev
然後獲得 pyenv 的最新版本:
git clone ~/.pyenv
然後在.bashrc
中新增三行指令,讓系統可以找到 pyenv 安裝的 python:
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
之後你需要重啟你的 shell 來讓上面新增的 3 條指令生效。你可以登出再登入,或者簡單的執行下面這個指令:
exec $shell
然後就可以用 pyenv 安裝你需要的任何 python 版本了,比如 2.7.14:
pyenv install 2.7.14
安裝完成之後,你可以通過這條指令檢視目前系統裡所有的 python 版本:
pyenv versions
你可以把某個版本設定為全域性使用:
pyenv global 2.7.14
或是只對當前所在目錄生效:
pyenv local 2.7.14
如果是設定為只對當前目錄有效,那麼在當前目錄下會產生乙個名為.python-version
的檔案,其中的內容是版本號。pyenv 就是根據這個檔案的內容來確定當前目錄應該使用哪個版本的 python。
關於 pyenv 的完整文件你可以在這裡看到:
在工作開發中,一直使用virtualenv
來管理python的包環境。很好的解決了不同專案使用不同python包的需求。對於多python版本的問題如何解決一直無解,雖然可以安裝多個
版本的python,靠絕對路徑或靠建立虛擬環境的時候指定python(virtualenv -p
)版本來解決,但總感覺不是那麼的優雅。同事推薦了pyenv
,一直沒用過,特從網上找了些資料試著配置了下,記錄如下。
pyenv 是針對 python 版本的管理,通過修改環境變數的方式實現;
virtualenv 是針對python的包的多版本管理,通過將python包安裝到乙個模組來作為python的包虛擬環境,通過切換目錄來實現不同包環境間的切換。
pyenv 的美好之處在於,它並沒有使用將不同的 $path 植入不同的 shell 這種高耦合的工作方式,而是簡單地在 $path 的最前面插入了乙個墊片路徑(shims):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin
。所有對 python 可執行檔案的查詢都會首先被這個 shims 路徑截獲,從而架空了後面的系統路徑。
pyenv 提供了自動安裝的工具,執行命令安裝即可:
1curl-l | bash
需保證系統有git
,否則需要新安裝git工具。
將 pyenv 檢出到你想安裝的目錄。建議路徑為:$home/.pyenv12
$cd$git clonegit: .pyenv
新增環境變數。pyenv_root 指向 pyenv 檢出的根目錄,並向 $path 新增 $pyenv_root/bin 以提供訪問 pyenv 這條命令的路徑12
$echo'export pyenv_root="$home/.pyenv"'>>~/.bash_profile
$echo'export path="$pyenv_root/bin:$path"'>>~/.bash_profile
這裡的 shell 配置檔案(~/.bash_profile)依不同 linux 而需作修改——zsh:~/.zshenv;ubuntu:~/.bashrc
向 shell 新增 pyenv init 以啟用 shims 和命令補完功能
1$echo'eval "$(pyenv init -)"'>>~/.bash_profile
配置檔案的位置同上一條一樣需要修改
重啟 shell(因為修改了 $path)
1$exec$shell
python配置
python切換
python優先順序
shell > local > global
使用自動安裝pyenv 後,它會自動安裝部分外掛程式,通過pyenv-virtualenv
外掛程式可以很好的和virtualenv
結合:12
3456
78910
[root@linux3311~]# cd .pyenv/plugins/
[root@linux3311 plugins]# ll
insgesamt24
drwxr-xr-x.4root root409619.jun05:17pyenv-doctor
drwxr-xr-x.5root root409619.jun05:18pyenv-installer
drwxr-xr-x.4root root409619.jun05:18pyenv-update
drwxr-xr-x.7root root409619.jun05:18pyenv-virtualenv
drwxr-xr-x.4root root409619.jun05:18pyenv-which-ext
drwxr-xr-x.5root root409619.jun05:17python-build
使用pyenv 來管理python,使用 pyenv-virtualenv 外掛程式來管理多版本 python包。
此時,還需注意,當我們將專案執行的 env 環境部署到生產環境時,由於我們的python 包是依賴python 的,需要注意生產環境的python版本問題(詳見 這裡)。
pyenv多版本管理
多版本管理 多虛擬環境virtualenv pyenv用於多個python版本的管理,virtualenv用於相同版本各種模組包環境的隔離 可能的依賴包 yum install gcc gcc c yum install readline devel yum install y bzip2 bzip...
Pyenv基礎環境搭建
1.環境準備 rhel7.4最小化安裝,關閉防火牆和selinux 2.配置阿里源 3.安裝git及依賴環境關係 4.盡量不要使用root使用者安裝,新建使用者 python 6.新增環境變數 7.配置生效 8.pyenv version 檢視當前執行的python的版本 versions pyen...
hadoop yarn 入門介紹
編者按 對於業界的大資料儲存及分布式處理系統來說,hadoop 是耳熟能詳的卓越開源分布式檔案儲存及處理框架,對於 hadoop 框架的介紹在此不再累述,隨著需求的發展,yarn 框架浮出水面,依然光榮復興的 部落格給我們做了很詳細的介紹,讀者通過本文中新舊 hadoop mapreduce 框架的...