本文介绍介绍3种方式使用虚拟环境

  • python自带模块venv
  • pyenv (重点)
  • pipenv

python自带venv

快速创建和python同版本虚拟环境,不同项目那环境报依赖不受影响,基本够用。

1python3.6 -m venv .virtualenv
2source .virtualenv/bin/active

pyenv安装

centos 6.9环境

安装Python编译依赖

1yum -y install gcc make patch gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel

创建用户python

1useradd python 
2passwd  python

使用python用户登录后安装Pyenv

1curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
2#下载的 pyenv-installer 是一个shell脚本。

注意:

  1. https://github.com/pyenv/pyenv-installer 有安装文档

  2. 如果curl出现 curl: (35) SSL connect error ,是nss版本低的问题,更新它。 可能需要

    配置一个有较新包的yum源

1[updates]
2name=CentOS-Updates
3baseurl=https://mirrors.aliyun.com/centos/6.9/os/x86_64 
4gpgcheck=0
5
6#然后更新nss
7$ yum update nss

在python用户的~/.bash_profile中追加

1export PATH="/home/python/.pyenv/bin:$PATH"
2eval "$(pyenv init -)"
3eval "$(pyenv virtualenv-init -)"
4source ~/.bash_profile # 这样当用户启动的时候,会执行用户的.bash_profile中的脚本,就会启动pyenv。 安装好的pyenv就在~/.pyenv中

pyenv使用

1 python --version
2 python -V
3 echo $PATH
4# 可以看到当前系统Python路径

img

安装指定版本python

1pyenv help install       
2pyenv install --list    # 列出所有可用版本

在线安装指定版本 这样的安装可能较慢,为了 提速,可是选用cache方法。 使用缓存方式安装 在~/.pyenv目录下,新建cache目录,放入下载好的待安装版本的文件。 不确定 要哪一个文件,把下载的3个文件都放进去。

1 pyenv install 3.5.3 -v #安装3.5.3版本
2 pyenv install 3.6.4 #安装3.6.4版本

pyenv的python版本控制

1pyenv version # version 显示当前的python版本
2pyenv versions # versions 显示所有可用的python版本,和当前版本

img

global 全局设置

1pyenv global 3.5.3

可以看到所有受pyenv控制的窗口中都是3.5.3的 python版本了。 这里用global是作用于非root用户python用户上, 如果是root用户安装,请不要使 用global,否则影响太大。比如,这里使用的CentOS6.9就是Python2.6,使用了global就成了3.x, 会带来很不好的影响。

1pyenv global system #全局使用系统的版本

shell 会话设置 影响只作用于当前会话

1pyenv shell 3.5.3

local本地设置(目录)

使用pyenvlocal设置从当前工作目录开始向下递归都继承这个设置。

1 pyenv local 3.5.3

演示

设置好$ pyenv global 3.5.3 后 退出进入

img

virtualenv 虚拟环境设置

为什么要使用虚拟环境? 因为刚才使用的Python环境都是一个公共的空间,如果多个项目使用不同 Python版本开发,或者使用不同的Python版本部署运行,或者使用同样的版本开发的但不同项目使 用了不同版本的库,等等这些问题都会带来冲突。最好的解决办法就是每一个项目独立运行自己的 “独立小环境”中。 使用插件,在plugins/pyenv-virtualenv中

1 pyenv virtualenv 3.5.3 crmao353

img

使用python 3.5.3版本创建出一个独立的虚拟空间。

img

可以在版本列表中存在,就和3.5.3是一样的,就是一个版本了。 真实目录在~/.pyenv/versions /下,以后只要使用这个虚拟版本,包就会按照到这些对应的目录下去,而不是使用3.5.3。

img

img

pipenv使用

 1pipenv 虚拟环境 和项目绑定。
 2pip3.6  install pipenv 
 3cp  /Library/Frameworks/Python.framework/Versions/3.6/bin/pipenv  /usr/local/bin/pipenv
 4mkdir ~/code/crmao
 5cd ~/code/crmao
 6pipenv install .       #安装虚拟环境
 7pipenv shell           #进入虚拟环境
 8exit                   #退出虚拟环境
 9
10#安装包
11pipenv install flask
12pipenv install request
13
14#卸载包
15pipenv uninstall flask 
16
17#打印包依赖 
18pipenv graph 
19
20(crmao) bash-3.2$ pipenv graph
21Flask==1.1.1
22  - click [required: >=5.1, installed: 7.0]
23  - itsdangerous [required: >=0.24, installed: 1.1.0]
24  - Jinja2 [required: >=2.10.1, installed: 2.10.3]
25    - MarkupSafe [required: >=0.23, installed: 1.1.1]
26  - Werkzeug [required: >=0.15, installed: 0.16.0]
27
28 pipenv --venv
29	查看虚拟环境目录
30	/Users/mac/.local/share/virtualenvs/crmao-Zixx_9wl
31	
32pipenv --python 3.6	 #指定某一python版本创建环境

pip 使用

pip 是Python的包管理工具,3.x的版本直接带了,2.x的没自带可以直接使用。 和yum一样为了使用国内镜像, 如下配置。 Linux系统 配置文件在~/.pip/pip.conf

1mkdir ~/.pip
2vim ~/.pip/pip.conf   # 内容如下
1[global]
2index-url=https://mirrors.aliyun.com/pypi/simple/
3trusted-host=mirrors.aliyun.com

img

img

导出包

虚拟环境的好处就在于和其他项目运行环境隔离。每一个独立的环境都可以使用pip命令导出已经安 装的包,在另一个环境中安装这些包。

1(crmao353) [python@node web]$ pip freeze > requirement
2(crmao353) [python@node web]$ mkdir ~/crmao/projects/pro1 
3(crmao353) [python@node web]$ cd ~/crmao/projects/pro1
4[python@node pro1]$ pyenv install --list
5[python@node pro1]$ pyenv install 3.6.4
6[python@node pro1]$ pyenv virtualenv 3.6.4 crmao364 
7[python@node pro1]$ pyenv local crmao364
8(crmao364) [python@node pro1]$ mv ../web/requirement  ./
9(crmao364) [python@node pro1]$ pip install -r requirement

指定源安装

1pip install Flask -i http://pypi.douban.com/simple   -- trusted-host pypi.douban.com
2pip install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com