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.178linux.com/23588

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

相关推荐

  • 定制SecureCRT配色

    定制SecureCRT配色 SecureCRT默认的配色方案不怎么喜欢,结合网上其他人的总结+自己的探索,总结怎样定制自己的配色。配出自己喜欢的界面,还是会很有成就感的。 使用SecureCRT自带主题 效果图 图中个文件的类型: compress.tar.gz 压缩文件 directory 目录 file.txt 普通文件&n…

    Linux干货 2017-09-03
  • Linux之文件管理及范例

    1、Linux上的文件管理命令   目录管理类命令:mkdir,rmdir    mkdir [OPTION]… DIRECTORY…     -p: 自动按需创建父目录;     -v: verbose,显示…

    Linux干货 2016-09-27
  • N26-第六周作业-邢岩

    马哥门徒-N26-邢岩      一直以来都用windows 的word来编辑文件,从今天开始,我又学会了新的编辑文件方式了,掩饰不住愉悦的心情!没错,就是vim 编辑器,一个神奇的编辑器!让我来详细介绍一下这个神器是如何使用的吧。     vim:vim其实就是(VI IMproved) vi增强…

    Linux干货 2017-02-26
  • bash脚本编程之流程控制if、for、while、until简介

    概述     之前介绍了一些bash脚本编程的变量、运算、条件测试的一些基础内容,了解了脚本实际上就是一些语句加上一些流程控制组合起来,实现某种功能的可执行文件。我们知道,条件测试的目的,实际就是为了实现一种流程的控制,那么本篇就简单介绍一下bash里面常见的流程控制语句,包括选择、循环等内容,具体包括以下几个部分: …

    Linux干货 2016-08-18
  • yum仓库搭建

    两台主机: 一台centos7  客户机 一台centos6  服务器 准备工作 1.查看是否共享服务是否可用 httpd或vsftpd 是否安装。确认安装之后选择vsftpd为共享服务/var/www/html和/var/ftp/pub为共享目录。 这里使用vsftpd,/var/ftp/pub这个目录为共享目录 在这个目录下建立一个独立的文件夹 [roo…

    2017-12-01
  • sed简介及常见用法

    sed是一个文本流处理器,配合正则表达式用可以实现很多文本处理操作。 和grep一样,sed是一行一行的处理的。sed处理文本时,首先会将源文件复制一份到内存中,然后将文本一行一行拿到模式空间内进行操作,最后输出到标准输出,即屏幕上。 在模式空间中,每一行都会根据用户给的条件进行匹配,匹配到了进行编辑后输出,没有匹配到,直接输出到标准输出。sed除了模式空间…

    2018-01-04