一.venv独立运行环境(虚拟环境)
一般每个不同的项目都会依赖各自的库,有些库的版本不一样会引起冲突,为了解决这个问题,需要使用虚拟环境
,Python可以在每个项目目录下创建各自的虚拟环境
,项目所依赖的包就在当前目录环境下
,这样避免了库版本的冲突
,也方便相同操作系统间可以快速的拷贝项目运行。
二.如何实现
-
创建目录,这里把venv命名为
test101env
,因此目录名为test101env:[root@robot-DOM-server test]# mkdir test101env [root@robot-DOM-server test]# cd test101env/ [root@robot-DOM-server test101env]#
-
第二步,创建一个独立的Python运行环境:
[root@robot-DOM-server test101env]# python3 -m venv .
查看当前目录,可以发现有几个文件夹和一个
pyvenv.cfg
文件:ls
-
命令
python3 -m venv <目录>
可以创建一个独立的Python运行环境- 观察bin目录的内容,里面有python3、pip3等可执行文件,
实际上是链接到Python系统目录的软链接
。
- 观察bin目录的内容,里面有python3、pip3等可执行文件,
-
继续进入
bin目录
,Linux/Mac用source activate
,Windows用activate.bat
激活该venv环境:source activate
-
- 注意到
命令提示符变了
,有个(test101env)前缀
,表示当前环境是一个名为test101env
的Python环境。
-
正常安装各种第三方包,并运行python命令:
pip3 install jinja2
-
运行python命令
(test101env) [root@localhost bin]# python3 Python 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import jinja2 >>> exit()
- 在
venv
环境下,用pip安装的包都被安装到test101env
这个环境下,具体目录是test101env/lib/python3.x /site-packages
,因此,系统Python环境不受任何影响。也就是说,test101env环境
是专门针对test101这个应用创建的。
- 在
-
退出当前的test101env环境,使用
deactivate
命令:deactivate
- 此时就回到了正常的环境,现在pip或python均是在系统Python环境下执行。
- 此时就回到了正常的环境,现在pip或python均是在系统Python环境下执行。
三.原理
venv是如何创建“独立”的Python运行环境的呢?
- 原理很简单,就是
把系统Python链接或复制一份到venv的环境
,用命令source activate进入一个venv环境时
,venv会修改相关环境变量
,让命令python和pip均指向当前的venv环境
。
如果不再使用某个venv,如何删除?
- 例如test101env,删除它也很简单。首
先确认该venv没有处于“激活”状态
,然后直接把整个目录test101env删掉就行
。
小结
- venv为应用提供了
隔离的Python运行环境
,解决了不同应用间多版本的冲突问题
。
如何优雅的部署Python应用到Linux服务器?
四.在Linux服务器上简单部署一个Python项目
1.安装Python3环境
安装Python3环境
2.部署python应用
1. 将本地开发环境的依赖项目生成清单文件
-
在项目所在目录执行命令:
pip freeze > requirements.txt
-
将当前项目使用的python解释器中的依赖包保存到
requirements.txt
文件中- 清单文件将会生成在当前项目目录下,内容如下所示:
- 清单文件将会生成在当前项目目录下,内容如下所示:
2.将Python项目上传到服务器
3.为项目创建虚拟环境
- 将项目拷贝至服务器上后,进入项目文件中,用命令:
python -m venv env_name
创建虚拟环境,- 其中env_name 为虚拟环境的名称
- 启动创建的虚拟环境:通过命令
source 环境名称/bin/activate
,虚拟环境激活之后,对应的环境名会出现在命令行 - 关闭虚拟环境的命令:
deactivate
4.安装对应项目的依赖包
-
虚拟环境启动之后,在虚拟环境中安装我们对应项目的依赖了,命令:
pip3 install -r requirements.txt
安装项目的依赖包(requirements.txt
为项目收集的依赖包地址)- 执行下载requirements文件内依赖名命令
- 当前虚拟环境存放在已下载好的
- 执行下载requirements文件内依赖名命令
-
如果对应的Linux环境中未配置国内镜像源,导致依赖包安装缓慢,可以通过命令
pip install -i 国内镜像源地址 -r requirements.txt
安装项目依赖包- 如果没有requirements.txt,也可以直接使用命令:
pip install 第三方库名
进行安装
- 如果没有requirements.txt,也可以直接使用命令:
5.运行主程序文件
- 在虚拟环境可以直接通过命令:
python xx.py 运行程序文件
,但是该命令无法让主程序文件处于后台运行状态,一旦关闭会话页面,程序就会停止
- 为了让程序能够在后台运行,可以使用命令:
nohup python xx.py
,该命令可以让程序文件处于后台运行 状态,并且能够将运行日志收集到nohup.out文件中。