前戏
大家都知道我们使用pip安装python库的时候,是去pypi下载的地址:https://pypi.python.org/pypi
并不是所有的扩展库都支持 pip 命令安装。对于个别库来可能只提供了压缩包文件,或者我们安装的环境并不能上网。这个时候就不能 pip 命令安装了。
比如要安装django, Django-1.10.2.tar.gz 文件进行下载,然后进行解压,进入解压目录,通过“python”命令安装。Django-1.10.2>python setup.py install
还有一种是wheel,本质上是一个 zip 包格式,它使用 .whl 扩展名,用于 Python 模块的安装。
Django 提供了.whl 文件的安装包。同样先下载 Django-1.10.2-py2.py3-none-any.whl 文件。.whl文件的安装,同样需要使用 pip 命令...pypackage>pip install Django-1.9.7-py2.py3-none-any.whl
有些时候由于网络的原因,我们可以指定-i参数进行下载
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:https://pypi.douban.com/simple/
可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple
例如:pip install -i https://pypi.douban.com/simple/ requests,这样就会从豆瓣这边的镜像去安装requests库。
linux虚拟环境virtualenv(不推荐)
在我们进行项目开发的时候,往往不同的项目使用的不同版本的库,比如有些项目使用django1.x开发,有些项目使用django2.x开发。这时候最好的方式就是安装虚拟环境了,在不同的项目下使用不同的虚拟环境
virtualenv
可以在系统中建立多个不同并且相互不干扰的虚拟环境。以宿主机的python解释器为主体,然后复制的多个虚拟环境。
1.通过豆瓣云下载
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
2.通过virtualenv命令,创建第一个新的虚拟环境
把虚拟环境全部装在/opt/my-venv下,先创建my-venv,在进入到里面执行如下命令
[root@HH my-venv]# virtualenv --no-site-packages --python=python3 venv1
参数解释
--no-site-packages 创建一个干净,隔离宿主机环境的虚拟环境
--python=python3 #指定你的虚拟环境,以哪个解释器为base环境,我的这个是以我机器上的python3解释器为主体
创建完成之后在venv1的bin下会有一个activate文件
[root@HH venv1]# cd bin/ [root@HH bin]# ls activate activate.fish activate_this.py easy_install pip pip3.6 python3 python-config activate.csh activate.ps1 activate.xsh easy_install-3.6 pip3 python python3.6 wheel
3.激活虚拟环境,切换宿主机环境,进入虚拟环境的环境变量
source /opt/my-venv/venv1//bin/activate
4.检查环境变量PATH,检查是否正确激活了虚拟环境
[root@HH bin]# source /opt/my-venv/venv1//bin/activate (venv1) [root@HH bin]# echo $PATH /opt/my-venv/venv1/bin:/opt/python36/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
可以看到我们的python解释器默认使用我们虚拟环境的解释器
5.检查你当前的python3和pip3来自于哪里
(venv1) [root@HH bin]# which python3 /opt/my-venv/venv1/bin/python3
(venv1) [root@HH bin]# which pip3 /opt/my-venv/venv1/bin/pip3
可以看到python3和pip3都来自虚拟环境
6.使用venv1虚拟环境,安装一个django1.11.11
(venv1) [root@HH bin]# pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.11.11
安装完查看
(venv1) [root@HH bin]# pip3 list Package Version ---------- ------- Django 1.11.11 pip 19.2.3 pytz 2019.2 setuptools 41.2.0 wheel 0.33.6
8.退出虚拟环境
(venv1) [root@HH bin]# deactivate [root@HH bin]#
requirements.txt
假设我们在本地开发环境,准备好了项目+依赖包环境,现在需要将项目上传至服务器,上线发布,那么就要保证服务器的python环境一致性。
我们可以通过freeze导出当前python环境的包
安装freeze
pip install freeze
导出当前环境的包
pip3 freeze > requirements.txt
这将会创建一个 requirements.txt 文件,其中包含了当前环境中所有包及 各自的版本的简单列表。如下所示
上传至服务器后,在服务器下创建virtualenv,在venv中导入项目所需的模块依赖
pip3 install -r requirements.txt
linux虚拟环境virtualenvwrapper(推荐)
virtualenv 的一个最大的缺点就是:每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就需要我们记住每个虚拟环境所在的目录。并且还有可能你忘记了虚拟环境放在哪。。。
一种可行的解决方案是,将所有的虚拟环境目录全都集中起来,例如/opt/my-venv/,并且针对不同的目录做不同的事。
使用virtualenvwrapper管理你的虚拟环境(virtualenv),其实他就是统一管理虚拟环境的目录,并且省去了source的步骤。
1.下载安装
pip3 install virtualenvwrapper
执行脚本,让当前机器支持virtualenvwrapper,但是有一个问题,重启后,退出会话后,这个功能就失效了
2.配置全局变量,让每次登陆linux时候,就加载这个virtualenvwrapper.sh脚本文件,使得virtualenvwrapper这个工具生效
打开这个用户环境变量配置文件,写入以下信息,export 就是读取一段shell变量的命令
vim ~/.bashrc #这个文件代表用户环境变量,每次登陆时候加载
export WORKON_HOME=~/Envs # 设置virtualenv的统一管理目录 export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' # 添加virtualenvwrapper的参数,生成干净隔绝的环境 export VIRTUALENVWRAPPER_PYTHON=/opt/python36/bin/python3.6 # 指定python解释器,(这个得根据你自己机器环境来配) source /opt/python36/bin/virtualenvwrapper.sh # 执行virtualenvwrapper安装脚本,这个脚本放在你的python3.6解释器bin目录下(自己的目录)
[root@HH bin]# pwd /opt/python36/bin [root@HH bin]# ls 2to3 idle3.6 pip3.6 python3.6 python3-config virtualenv-clone 2to3-3.6 pbr pydoc3 python3.6-config pyvenv virtualenvwrapper_lazy.sh easy_install-3.6 pip pydoc3.6 python3.6m pyvenv-3.6 virtualenvwrapper.sh idle3 pip3 python3 python3.6m-config virtualenv
可以看到bin下还有个 virtualenvwrapper.sh
读取文件,使得生效,此时已经可以使用virtalenvwrapper
source ~/.bashrc
至此我们就可以使用virtualenvwrapper了
virtualenvwrapper常用命令
virtualenvwrapper具有tab补全的功能,并且可以在任意目录下执行
1.mkvirtualenv创建一个虚拟环境venv
mkvirtualenv venv1
这一步会创建venv1,并且放入到WORKON_HOME变量定义目录下,并且自动激活虚拟环境
2.deactivate退出虚拟环境
deactivate
3.lsvirtualenv查看当前机器所有的虚拟环境
lsvirtualenv
4.workon激活虚拟环境,也用于在多个虚拟环境中来回切换
[root@HH bin]# workon venv2 (venv2) [root@HH bin]# workon venv1 (venv1) [root@HH bin]#
可以看到直接从一个虚拟环境切换到另一个虚拟环境
5.rmvirtualenv删除虚拟环境,也会自动找到所有的虚拟环境
[root@HH bin]# rmvirtualenv venv1 Removing venv1... [root@HH bin]# lsvirtualenv venv2 =====
6.cdvirtualenv直接进入虚拟环境的目录,此命令需要激活虚拟环境
[root@HH bin]# workon venv2 (venv2) [root@HH bin]# cdvirtualenv (venv2) [root@HH venv2]# pwd /root/Envs/venv2
7.cdsitepackages 直接进入pip3软件包的目录
(venv2) [root@HH venv2]# cdsitepackages (venv2) [root@HH site-packages]# pwd /root/Envs/venv2/lib/python3.6/site-packages