python虚拟环境在开发与生产环境下的使用

任何技术的存在与发展,都是为了解决实际的问题,如果没有这个前提,技术就没有立足之地,python虚拟环境这种技术,就是最好的证明。

1. 第三方库安装在哪里

每当我们使用pip命令安装第三方库时,第三方库都会被安装到python的site-packages目录下,以我的电脑为例,我的python3.6的安装目录为

/Library/Frameworks/Python.framework/Versions/3.6

在该目录下,有一个lib文件夹,继续向下寻找

lib/python3.6/site-packages

python脚本里引用第三方库时,解释器就会到这个目录下寻找第三方库。

如果你并不知道自己的python安装到了哪里,在python交互式解释器中通过sys.path命令就可以获得所使用的python环境

➜  mypro python3
Python 3.6.3 (v3.6.3:2c5fed86e0, Oct  3 2017, 00:32:08)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages']

2. 同一个第三方库的不同版本

第三方库不会一成不变,开发者会对它进行升级改造,发布新的版本,而对于使用者来说,就产生了一个小小的麻烦。

我有两个项目,A 和 B,A是一个老项目,B是一个新开发的项目,巧合的是他们都用到了同一个第三方库C,但他们的版本不一致,A项目用的是C1.0,B项目用的是C2.0。

如果C2.0完全兼容1.0,在同一台机器上,我就可以安装好C2.0,这样A和B两个项目都可以正常运行,但如果2.0 不完全兼容1.0,那么安装了2.0 A项目就不能正常运行了,安装了1.0,B项目又不能正常运行,你说说,该咋办。

3. 虚拟环境

在一台机器上,不同的项目需要使用同一个第三方库的不同版本,甚至需要不同的python版本,那么就可以使用虚拟环境技术。

虚拟环境技术将创建不同的环境,在这方面,virtualenv 是非常流行的创建虚拟环境的库。

以下是安装使用过程

3.1 安装

pip install virtualenv

3.2 创建新虚拟环境

mkdir mypro
cd mypro
virtualenv --no-site-packages venv

第三步,创建出虚拟环境,virtualenv 命令会根据基线环境创建出一个虚拟环境,venv就是虚拟环境所在的目录,这个基线环境如果你不指定,那么virtualenv命令会自己寻找,想要指定的话使用-p 进行设置,以我的电脑环境为例

virtualenv -p /Library/Frameworks/Python.framework/Versions/3.6 --no-site-packages venv

如果你是windows电脑,则可以写成

virtualenv -p c:\Python36\python.exe venv

基线环境要根据你电脑实际安装python的文件夹来定,加上--no-site-packages 这个配置,就表明,基线环境里的第三方库不会被复制到虚拟环境里,这样,虚拟环境就是一个非常干净的环境。

进入文件夹venv ,可以看到3个目录

bin     include lib

在bin目录下,有pip,python等可执行程序,在lib/python3.6目录下是标准库文件,也会有site-packages 目录用于存储第三方库。

这个虚拟环境,简直就是基线环境的复制品

3.3 进入虚拟环境

source venv/bin/activate

执行上面的命令后,才算是真正的进入到了虚拟环境,现在,如果执行python命令,所使用的就是venv/bin/python, 使用pip3命令,用的也是venv/bin/pip3, 所安装的第三方库,也会被安装到 venv/lib/python3.6/site-packages/ 目录下,这样就实现了项目之间的环境隔离,为每个项目创建一个虚拟环境,安装适合项目的第三方库。

3.4 退出虚拟环境

deactivate

退出虚拟环境后,所使用的就是基线环境了,在虚拟环境中,除了python环境是隔离的,其他的都是和基线环境相同的。

4. Pycharm自带虚拟环境

pycharm自带虚拟环境了,每创建一个项目,就会为这个项目创建一个虚拟环境,原本是为了方便用户的,但很多初学者对于python的学习还不够深入,因此遇到很多麻烦。

每个项目都可以配置python解释器,当你在pycharm里运行代码时,就是这个python解释器在执行代码,默认使用的是虚拟环境里的python解释器。

但如果你第三方库安装在基线环境下,而你的项目配置的解释器用的虚拟环境的,那么这个第三方库就无法使用了,这个时候你有两个选择,第一个方法是将项目的python解释器修改成基线环境,或者说主环境的python解释器,第二个是通过pycharm在虚拟环境里安装第三方库。

4.1 配置项目的python解释器

按照如下步骤进行配置
pycharm配置python解释器

先找到preferences
pycharm设置preferences

再找到project interpreter ,在右上方配置python解释器。

4.2 通过pycharm安装第三方库

不管解释器配置成哪一个,你都可以通过pycharm来安装第三方库

点击上图下部绿色框内的加号按钮,就可以搜索并安装第三方库

pycharm安装第三方库

在最上面的输入框内输入想要安装的库名称,在备选项里选择想要安装的库,最后点击下方的 Install Package 按钮,就可以完成安装。

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案