Python环境安装

Pyenv

Python虚拟环境:pyenv

https://github.com/pyenv/pyenv

pyenv是Python多版本管理工具,需要管理的部分:

  • 管理Python解释器

  • 管理Python版本

  • 管理Python的虚拟环境

作用

​ Pyenv是一个python虚拟环境的管理工具。它可以下载不同版本的Python,并设定Python解释器的版本。它还可以将python版本与具体的路径绑定以实现python虚拟环境的设置。

安装pyenv

  • 安装git,并安装编译依赖:

    # yum -y install git
    
    # yum -y install gcc make patch gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel
    
  • 创建python用户,注意:必须使用普通用户来编译安装,并使用pyenv,以防止和系统python版本冲突。

    # useradd python
    # passwd python
    
  • 使用python用户登录后安装pyenv

    $ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
    
  • 在python用户的.bash_rc追加

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

    登录时自动初始化pyenv,初始化virtual env.

Pyenv命令

列出可用python版本

[python@master ~]$ pyenv install -l
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4.0

安装Python

[python@master ~]$ pyenv install 3.6.5 -v

安装对应的版本,会从网络上下载源码包编译安装,速度会比较慢。可离线安装。

离线安装

  • 提供三个文件到指定的目录
[python@master cache]$ ll
total 16812
-rw-r--r--. 1 python python 17212420 May 21  2019 Python-3.6.8.tar.xz
Python-3.6.8.tar.gz
Python-3.6.8.tgz
[python@master cache]$ pwd
/home/python/.pyenv/cache

  • 安装

    # pyenv install 3.6.5 -v 
    

    过程需要校验,编译

版本切换

[python@master ~]$ pyenv versions
* system (set by /home/python/.pyenv/version)
  3.6.8
  3.6.8/envs/v3.6.8
  v3.6.8

目前管理着2版本

global变量

设置全局版本为3.6.8

[python@master ~]$ pyenv global 3.6.8
[python@master ~]$ pyenv versions
  system
* 3.6.8 (set by /home/python/.pyenv/version)
  3.6.8/envs/v3.6.8
  v3.6.8

重新登录一次,重新读取bash_profile,依然使用3.6.8。影响面比较广,慎用。

修改回来:

[python@master ~]$ pyenv global system

shell变量

使用shell的形式,仅影响当前会话,不过会话丢失后配置也丢失。

[python@master ~]$ pyenv shell 3.6.8
[python@master ~]$ python -V
Python 3.6.8

local变量

设置为local的形式,将python版本和目录绑定。

[python@master ~]$ mkdir pydir
[python@master ~]$ cd pydir/
[python@master pydir]$ pyenv local 3.6.8
[python@master pydir]$ python -V
Python 3.6.8
[python@master pydir]$ mkdir web
[python@master pydir]$ cd web/
[python@master web]$ python -V
Python 3.6.8

而且子目录会继承环境设定。

多版本并存

再安装多一个版本,使得多版本共存。

[python@master ~]$ pyenv install 3.7.2 -v

但是这会带来问题:

  • 两个版本的python如果需要依赖包,那么不同版本所依赖的包或者包的版本可能会因冲突而无法共存。此时需要虚拟环境。
  • 同一个python版本下的不同用户,可能对开发环境的配置要求是不同的。
  • 为了使得用户所处的python环境各自独立,不影响到其他用户的环境配置,需要使用虚拟环境来进行环境隔离。

虚拟环境virtualenv

用于环境配置的隔离。

  • 设定版本衍生的虚拟版本名称

将python3.6.8版本设定一个虚拟环境名为v368

[python@master ~]$ pyenv virtualenv 3.6.8 v368
Looking in links: /tmp/tmpr0yeinpq
Requirement already satisfied: setuptools in /home/python/.pyenv/versions/3.6.8/envs/v368/lib/python3.6/site-packages (40.6.2)
Requirement already satisfied: pip in /home/python/.pyenv/versions/3.6.8/envs/v368/lib/python3.6/site-packages (18.1)

  • 安装好虚拟环境后,一般和某个目录绑定使用。

    [python@master pydir]$ pyenv local v368
    (v368) [python@master pydir]$
    

    如此只要进入pydir目录,就会使用虚拟环境了。

  • 虚拟环境实际上是3.6.8下的虚拟环境

    [python@master ~]$ pyenv versions
      system
    * 3.6.8 (set by PYENV_VERSION environment variable)
      3.6.8/envs/v368
    
    
  • 实际上,虚拟环境是一个链接文件。它直接链接到实际环境的某个路径

[python@master versions]$ ll
total 0
drwxr-xr-x. 7 python python 68 May 21  2019 3.6.8
lrwxrwxrwx. 1 python python 44 Mar 23 17:45 v368 -> /home/python/.pyenv/versions/3.6.8/envs/v368
lrwxrwxrwx. 1 python python 46 May 21  2019 v3.6.8 -> /home/python/.pyenv/versions/3.6.8/envs/v3.6.8
[python@master versions]$ pwd
/home/python/.pyenv/versions

  • 在真实环境中,开发时所使用的下载的包,都会放置到此目录下。这是真实环境下的路径。

/home/python/.pyenv/versions/3.6.8/lib/python3.6/site-packages

  • 而在虚拟环境中,下载的包会放置到此处

    /home/python/.pyenv/versions/3.6.8/envs/v368/lib/python3.6/site-packages

安装ipython,jupyter

安装ipython

python的解释器,使用python包管理器进行下载:

(v368) [python@master pydir]$ pip install ipython

默认到国外源下载,可修改为国内源:

[python@master ~]$ cd .pip/
[python@master .pip]$ cat pip.conf 
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com

安装jupyter

  • web交互式笔记,可视化界面,可实现数据持久化保存。
(v368) [python@master pydir]$ pip install jupyter
  • 设置密码
(v368) [python@master pydir]$ jupyter notebook password jaywin
Enter password: 
Verify password: 

  • 启动
(v368) [python@master pydir]$ jupyter notebook --ip=0.0.0.0

让两个环境的包一致

  • 将当前虚拟环境中,pip的安装包和版本保存

    (v368) [python@master pydir]$ pip freeze > requirement
    
  • 将虚拟环境所有的包,移植到新的环境中。如此保证两个环境的包是一致的

    (v368) [python@master pydir]$ pip install -r requirement
    

也能将site-packages完全复制过去,不过并不推荐。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐