python 多版本管理(pyenv)

01 – Python 簡介和安裝

01 – Python 簡介和安裝

1. Python 簡介

編程風格

  • 面向過程:以指令為中心,圍繞指令去組織數據

  • 面向對象:以數據為中心,圍繞數據去組織指令

  • 函數式編程

應用領域

  • Web 程序

    • mod_wsgi

    • web 框架:Flash

  • GUI 開發:Tkinter、wxPython 或 PyQT

  • 操作系統

  • 其它:NumPy

Python 程序的執行流程

pvm.jpg

Python 的實現

  • CPython:原始、標準的實現方式

  • JPython:用于與 Java 語言集成的實現

  • IronPython:用于與 .NET 框架集成的實現

Python 性能優化工具

  • Psyco:已被 PyPy 替代

  • Pypy:Python 實現的 Python 解釋器

  • Shedskin:Python 編譯器,能夠將 python 代碼轉換成優化的 C++ 代碼

CentOS 6.x Python 版本為 2.6,升級為 3.5.2 的方法有:

  • 編譯安裝

  • pyenv(推薦,多版本共存)

2. 安裝 pyenv

  • pyenv:用于管理多個 python 版本,它可為每個工作目錄設定使用指定的 python 版本,而不影系統自帶的 python。

[GitHub] https://github.com/yyuu/pyenv

安裝依賴包

CentOS

$ sudo yum install git gcc make patch zlib-devel gdbm-devel openssl-devel sqlite-devel bizp2-devel readline-devel python-pip

ubuntu

$ sudo apt-get install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev

安裝 pyenv

### 如果要改變 pyenv 安裝目錄,可以 export PYENV_ROOT=<安裝目錄>
$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
  % Total    % Received % Xferd    Average Speed   Time    Time     Time  Current
                                   Dload  Upload   Total   Spent    Left  Speed
104  2089  104  2089    0     0    529      0  0:00:03  0:00:03 --:--:--  1673
Initialized empty Git repository in /root/.pyenv/.git/
remote: Counting objects: 13213, done.
remote: Compressing objects: 100% (46/46), done.
remote: Total 13213 (delta 19), reused 0 (delta 0), pack-reused 13164
Receiving objects: 100% (13213/13213), 2.35 MiB | 40 KiB/s, done.
Resolving deltas: 100% (9184/9184), done.
Initialized empty Git repository in /root/.pyenv/plugins/pyenv-doctor/.git/remote: Counting objects: 26, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 26 (delta 10), reused 26 (delta 10), pack-reused 0
Unpacking objects: 100% (26/26), done.
Initialized empty Git repository in /root/.pyenv/plugins/pyenv-installer/.git/
remote: Counting objects: 221, done.
remote: Total 221 (delta 0), reused 0 (delta 0), pack-reused 221
Receiving objects: 100% (221/221), 3.30 MiB | 41 KiB/s, done.
Resolving deltas: 100% (105/105), done.
Initialized empty Git repository in /root/.pyenv/plugins/pyenv-update/.git/
remote: Counting objects: 29, done.
remote: Total 29 (delta 0), reused 0 (delta 0), pack-reused 29Unpacking objects: 100% (29/29), done.
Initialized empty Git repository in /root/.pyenv/plugins/pyenv-virtualenv/.git/
remote: Counting objects: 1800, done.remote: Total 1800 (delta 0), reused 0 (delta 0), pack-reused 1800
Receiving objects: 100% (1800/1800), 517.53 KiB | 62 KiB/s, done.
Resolving deltas: 100% (1230/1230), done.
Initialized empty Git repository in /root/.pyenv/plugins/pyenv-which-ext/.git/
remote: Counting objects: 39, done.
remote: Total 39 (delta 0), reused 0 (delta 0), pack-reused 39
Unpacking objects: 100% (39/39), done.

WARNING: seems you still have not added 'pyenv' to the load path.

# Load pyenv automatically by adding
# the following to ~/.bash_profile:

export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

設置 pyenv 環境變量

$ cat>>.bashrc<<EOF

### pyenv settings
export PYENV_ROOT="\$HOME/.pyenv"
export PATH="\$PYENV_ROOT/bin:\$PATH"
eval "\$(pyenv init -)"
eval "\$(pyenv virtualenv-init -)"
EOF

重新加載 bash 環境

$ source .bashrc

3. pyenv 使用

$ pyenv help
Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
   commands    List all available pyenv commands   
   local       Set or show the local application-specific Python version   
   global      Set or show the global Python version   
   shell       Set or show the shell-specific Python version   
   install     Install a Python version using python-build   
   uninstall   Uninstall a specific Python version   
   rehash      Rehash pyenv shims (run this after installing executables)   
   version     Show the current Python version and its origin   
   versions    List all Python versions available to pyenv   
   which       Display the full path to an executable   
   whence      List all Python versions that contain the given executable
   
See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/yyuu/pyenv#readme
  • install:安裝指定的 python 版本,--list可列出 GitHub 上所有可用的 python 版本

  • rehash:每次安裝新的 python 版本之后,使用 rehash 更新數據庫清單

  • local <version>:創建.python-version,用于設置當前目錄的 python 版本,通過刪除.python-version--unset可恢復至默認 python 版本

  • global :切換全局默認 python 版本,慎用

  • uninstall:卸載某個版本,包括虛擬環境

  • version:查看當前目錄使用的 python 版本

  • versions:顯示本地已安裝的可使用的 python 版本

DEMO

$ pyenv install --list | grep 3.5.2
  3.5.2  
  pypy3.3-5.2-alpha1-src  
  pypy3.3-5.2-alpha1

$ pyenv install 3.5.2 -v
/tmp/python-build.[時間戳]
Downloading Python-3.5.2.tgz...-> https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz

注意:這里也可能是Python-3.5.2.tar.xz。經過測試,根據實際情況會有所不同,-_##

該命令會從官網上下載 python 的源代碼,并解壓到 /tmp 目錄下,然后在 /tmp 中執行編譯工作。 若依賴包沒有安裝,則會出現編譯錯誤,需要在安裝依賴包后重新執行該命令。

如果網絡不太好,用 pyenv 下載會比較慢,可以先執行該命令,然后到 /tmp/python-build.[時間戳] 目錄下查看要下載的文件的文件名,然后自己到官方網站下載,并將文件放在 ~/.pyenv/cache 目錄下(不存在,新建即可)。pyenv 會檢查文件的完整性,若確認無誤,則不會再重新下載,直接解包編譯安裝。

$ pyenv rehash
$ mkdir project_1st project_2nd

$ pyenv versions
* system (set by /data/mallux/.pyenv/version)
  3.5.2

$ ( cd project_lst && pyenv local 3.5.2 && pyenv local)
3.5.2

$ ( cd project_2nd && pyenv local system && python -V)
Python 2.6.6

4. pyenv-virtualenv

pyenv virtualenv 是 pyenv  的插件,為  UNIX 系統上 python virtualenvs 提供 pyenv-virtual 命令,它可以為 pyenv 管理的 python 版本運行提供隔離的虛擬環境。在此虛擬環境下的操作,例如安裝第三方模塊以及修改庫搜索路徑等,都不會在原始的 python 環境里直接操作,從而保證了各 python 版本本身的純凈。

典型案例CentOS 6.x 默認python 2.6,系統很多應用依賴于此版本,因此需要保留。如果想使用最新的IPython(需要python 2.7以上版本支持)來代替默認的python shell,如果不基于 virtualenv 環境,是無法使用 ipython 的。

因此,對于每一個 python 的工程項目,我們都必須使用pyenv virtualenv命令來建立虛擬環境。

[GitHub] https://github.com/yyuu/pyenv-virtualenv

安裝

安裝pyenv時,已克隆到相應的 .pyenv 插件目上錄中,因此該步驟可跳過,相應的 pyenv virtualenv環境變量也在前面設置過了。

Check out pyenv-virtualenv into plugin directory

$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

(Optioal):Add pyenv virtualenv-init to your shell to enable auto-activation of virtualenvs. This is entirely optional but pretty useful. See “Activate virtualenv” below.

$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

Restart your shell to enable pyenv-virtualenv

$ exec "$SHELL"

virtualenv 命令

Usage: pyenv virtualenv [-f|--force] [VIRTUALENV_OPTIONS] [version] <virtualenv-name>
       pyenv virtualenv --version       
       pyenv virtualenv --help

  -f/--force       Install even if the version appears to be installed already

建立虛擬 python 環境

$ mkdir virtual ; cd virtual
$ pyenv virtualenv 3.5.2 pyenv
$ pyenv versions
* system (set by /data/mallux/.pyenv/version)
  3.5.2  
  3.5.2/envs/pyenv  
  pyenv

  $ pyenv local pyenv
  (pyenv) [mallux@c6-Host virtual]$

5. 安裝 IPython 和 Jupyter

[ipython] http://ipython.org/
[jupyter] https://jupyter.readthedocs.io/

  • ipython:是一個 python 的交互式 shell,比默認的 python shell 好用得多,支持變量自動補全,自動縮進,支持 bash shell 命令,內置了許多很有用的功能和函數。

  • jupyter:IPython notebook 的分離項目,提供 web 應用的 IDE,特別適合剛開始學習 python 。

配置 pip 國內源

$ mkdir $HOME/.pip
$ cat>$HOME/.pip/pip.conf<<EOF
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
 
[install]
trusted-host = mirrors.aliyun.com
EOF

安裝jupyteripython:需要 python>=2.7 支持

(pyenv) [mallux@c6-Host virtual]$ pip install --upgrade ipython jupyter

運行 ipython 和 jupyter

(pyenv) [mallux@c6-Host virtual]$ ipython
Python 3.5.2 (default, Jul  3 2016, 02:57:35)
Type "copyright", "credits" or "license" for more information.

IPython 4.2.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]:
$ nohup jupyter notebook --ip=0.0.0.0 --no-browser &

jupyter.jpg

原創文章,作者:影·隨行,如若轉載,請注明出處:http://www.www58058.com/23588

(1)
影·隨行影·隨行
上一篇 2016-07-10
下一篇 2016-07-11

相關推薦

  • vim編輯器-練習題

    1 、復制/etc/profile至/tmp/目錄,用查找替換命令刪除/tmp/profile文件中的行首的空白字符 #cp /etc/profile /tmp #vim /tmp/profile :%s/^[[:space:]]\+// 2 、復制/etc/rc.d/init.d/functions 文件至/tmp 目錄,用查找替換命令為/tmp/func…

    Linux干貨 2016-08-15
  • Linux的用戶,組及文件權限管理

    Linux用戶與組的創建,刪除,屬性修改,文件權限管理

    Linux干貨 2018-02-24
  • 源碼編譯安裝http

    為什么需要編譯安裝軟件?   1、軟件在編譯期間需要配置:比如需要指定安裝路徑,定制模塊等功能;   2、軟件需要統一安裝路徑:在編譯安裝時可以方便指定這些路徑;   3、需要最新的版本:對于某些軟件來說可能需要最新的版本。 編譯前的準備工作:     1、安裝開發工具:make、gcc等…

    Linux干貨 2016-08-24
  • 馬哥教育網絡班21期+第7周課程練習

    馬哥教育網絡班21期+第7周課程練習 創建一個10G分區,并格式為ext4文件系統;    a.要求block大小為2048,預留空間百分比為2,卷標為MYDATA,默認掛載屬性包含acl;    b.掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不能更新文件的訪問時間戳; #&…

    Linux干貨 2016-08-22
  • mysql基礎

      mysql基礎 數據模型: 數據模型:層次模型、網狀模型、關系模型、…… 關系模型: 二維關系:表     行:row, entity     列:colume, attribution 索引:數據結構,輔助完成數據查找;  &nbsp…

    Linux干貨 2016-11-01
  • Linux基礎知識(二)-bash基礎特性,文件管理命令

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及相關示例演示。 2、bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內答及其示例演示 4、文件的元數據信息有哪些,分別表示什么含義,如何査看?如何修改文件的時間戳信息。 5、如何定義一個命令的別名,如何在命令中引用另一個命令的執行結果? 6、顯示/var目錄下所有以l開頭,以一個小寫字母結…

    Linux干貨 2016-09-26
欧美性久久久久