天天看點

使用pyenv管理不同版本的python

經常遇到這樣的情況:

系統自帶的 Python 是 2.6,自己需要 Python 2.7 中的某些特性;

系統自帶的 Python 是 2.x,自己需要 Python 3.x;

<a></a>

在終端執行如下指令以安裝 pyenv 及其插件:

<code>$ curl -L https:</code><code>//raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash</code>

安裝完成後,根據提示将如下語句加入到 <code>~/.bashrc</code> 中:

<code>export PYENV_ROOT=</code><code>"$HOME/.pyenv"</code>

<code>export PATH=</code><code>"$PYENV_ROOT/bin:$PATH"</code>

<code>eval </code><code>"$(pyenv init -)"</code>

<code>eval </code><code>"$(pyenv virtualenv-init -)"</code>   <code># 這句可以不加</code>

然後重新開機終端即可。

<code>$ pyenv install --list</code>

該指令會列出可以用 pyenv 安裝的 Python 版本。清單很長,僅列舉其中幾個:

<code>2.7</code><code>.</code><code>8</code>   <code># Python </code><code>2</code> <code>最新版本</code>

<code>3.4</code><code>.</code><code>1</code>   <code># Python </code><code>3</code> <code>最新版本</code>

<code>anaconda2-</code><code>4.1</code><code>.</code><code>0</code>  <code># 支援 Python </code><code>2.6</code> <code>和 </code><code>2.7</code>

<code>anaconda3-</code><code>4.1</code><code>.</code><code>0</code>  <code># 支援 Python </code><code>3.3</code> <code>和 </code><code>3.4</code>

其中 2.7.8 和 3.4.1 這種隻有版本号的是 Python 官方版本,其他的形如 <code>anaconda2-4.1.0</code> 這種既有名稱又有版本後的屬于 “衍生版” 或發行版。

在編譯 Python 過程中會依賴一些其他庫檔案,因而需要首先安裝這些庫檔案,已知的一些需要預先安裝的庫如下。

在 CentOS/RHEL/Fedora 下:

<code>sudo yum install readline readline-devel readline-</code><code>static</code>

<code>sudo yum install openssl openssl-devel openssl-</code><code>static</code>

<code>sudo yum install sqlite-devel</code>

<code>sudo yum install bzip2-devel bzip2-libs</code>

在 Ubuntu下:

<code>sudo apt-</code><code>get</code> <code>update</code>

<code>sudo apt-</code><code>get</code> <code>install make build-essential libssl-dev zlib1g-dev</code>

<code>sudo apt-</code><code>get</code> <code>install libbz2-dev libreadline-dev libsqlite3-dev wget curl</code>

<code>sudo apt-</code><code>get</code> <code>install llvm libncurses5-dev libncursesw5-dev</code>

使用者可以使用 <code>pyenv install</code> 安裝指定版本的 python。如果你不知道該用哪一個,推薦你安裝 anaconda3 的最新版本,這是一個專為科學計算準備的發行版。

<code>$ pyenv install anaconda3-</code><code>4.1</code><code>.</code><code>0</code> <code>-v</code>

<code>/tmp/python-build.</code><code>20170108123450.2752</code> <code>~</code>

<code>Downloading Anaconda3-</code><code>4.1</code><code>.</code><code>0</code><code>-Linux-x86_64.sh...</code>

<code>-&gt; https:</code><code>//repo.continuum.io/archive/Anaconda3-4.1.0-Linux-x86_64.sh</code>

執行該指令後,會從給定的網址中下載下傳安裝檔案 <code>Anaconda3-4.1.0-Linux-x86_64.sh</code>。但由于檔案很大,通常下載下傳需要很久。建議的做法是,先執行以上指令然後馬上中斷安裝,這樣就知道 pyenv 要下載下傳的檔案的連結。然後使用者自己用其他更快的方式(比如wget、迅雷等等)從該連結中下載下傳安裝檔案,并将安裝檔案移動到 <code>~/.pyenv/cache</code> 目錄下(該目錄預設不存在,使用者要自行建立)。

以本文說的情況為例:

執行 <code>pyenv install anaconda3-4.1.0 -v</code> 擷取下載下傳連結

用wget從下載下傳連結中擷取檔案 <code>Anaconda3-4.1.0-Linux-x86_64.sh</code>

将安裝包移動到 <code>~/.pyenv/cache/Anaconda3-4.1.0-Linux-x86_64.sh</code>

重新執行 <code>pyenv install anaconda3-4.1.0 -v</code> 指令。該指令會檢查 cache 目錄下已有檔案的完整性,若确認無誤,則會直接使用該安裝檔案進行安裝。

安裝過程中,若出現編譯錯誤,通常是由于依賴包未滿足,需要在安裝依賴包後重新執行該指令。

在安裝 Python 或者其他帶有可執行檔案的子產品之後,需要對資料庫進行更新:

<code>$ pyenv rehash</code>

<code>$ pyenv versions</code>

<code>* system (</code><code>set</code> <code>by /home/seisman/.pyenv/version)</code>

<code>anaconda3-</code><code>4.1</code><code>.</code><code>0</code>

其中的星号表示目前正在使用的是系統自帶的 python。

<code>$ pyenv global anaconda3-</code><code>4.1</code><code>.</code><code>0</code>

<code>system</code>

<code>* anaconda3-</code><code>4.1</code><code>.</code><code>0</code> <code>(</code><code>set</code> <code>by /home/seisman/.pyenv/version)</code>

目前全局的 python 版本已經變成了 anaconda3-4.1.0。也可以使用 <code>pyenv local</code> 或 <code>pyenv shell</code> 臨時改變 python 版本。

<code>$ python</code>

<code>Python </code><code>3.5</code><code>.</code><code>2</code> <code>(Anaconda </code><code>4.1</code><code>.</code><code>0</code><code>, Sep </code><code>10</code> <code>2014</code><code>, </code><code>17</code><code>:</code><code>10</code><code>:</code><code>18</code><code>)</code>

<code>[GCC </code><code>4.4</code><code>.</code><code>7</code> <code>20120313</code> <code>(Red Hat </code><code>4.4</code><code>.</code><code>7</code><code>-</code><code>1</code><code>)] on linux</code>

<code>Type </code><code>"help"</code><code>, </code><code>"copyright"</code><code>, </code><code>"credits"</code> <code>or </code><code>"license"</code> <code>for</code> <code>more information.</code>

<code>&gt;&gt;&gt;</code>

輸入 <code>python</code> 即可使用新版本的 python;

系統自帶的腳本會以 <code>/usr/bin/python</code> 的方式直接調用老版本的 python,因而不會對系統腳本産生影響;

使用 <code>pip</code> 安裝第三方子產品時會自動按照到目前的python版本下,不會和系統子產品發生沖突。

使用 <code>pip</code> 安裝子產品後,可能需要執行 <code>pyenv rehash</code> 更新資料庫;

<code>pyenv uninstall</code> 解除安裝某個版本

<code>pyenv update</code> 更新 pyenv 及其插件

<a href="https://github.com/yyuu/pyenv" target="_blank">https://github.com/yyuu/pyenv</a>

2013-10-04:初稿;

2014-10-07:将 Python 依賴包一段的位置提前;

2016-07-30:使用 <code>pyenv-installer</code> 安裝;

本文轉自奔跑在路上部落格51CTO部落格,原文連結http://blog.51cto.com/qiangsh/1937184如需轉載請自行聯系原作者

qianghong000