Linux--安装python虚拟环境

前戏

大家都知道我们使用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

 

posted @ 2020-04-25 20:25  邹邹很busy。  阅读(1703)  评论(1编辑  收藏  举报