pyenv 入門介紹

2022-08-23 22:12:15 字數 3646 閱讀 9007

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 框架的...