python 虚拟环境详解

知识扫盲

基本概念

  • 任何python项目都基于python的虚拟环境,
  • 一台服务器很有可能有多个python虚拟环
  • 虚拟环境之间是隔离的
  • 不同项目可以拥有不同版本的python虚拟环境

这里python的虚拟环境和java的jdk环境有点类似,但是python项目可以通过cmd命令指定虚拟环境,而java项目我们一般只能通过ide(eclipse、idea)来指定jdk编译项目。而且python的虚拟环境包含当前python项目所有的依赖包(所有),是一个独立的完整体。

python的虚拟环境非常有利于项目的迁移,迁移的时候带上虚拟环境即可,虚拟环境中包含当前项目所有的第三方包。

运行原理

virtualenv是如何创建“独立”的Python运行环境的呢?原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/Scripts/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境。
image.png
注意上图中针对不同的操作系统有不同的activate
打开任何一个文件都可查到关于环境变量的设置。
image.png

虚拟环境的管理

正因为python虚拟环境的特性,我们一般在新建项目时都会给项目创建一个独立的虚拟环境。随着项目越来越多。我们肯定需要对虚拟环境进行管理,比如虚拟环境的创建,销货、激活、禁用等。

一般python自带默认的虚拟环境创建工具,前提是我们需要安装相应的组件

pip install virtualenv

但是我们一般不用python自带的virtualenv来管理虚拟环境。本文这里推荐virtualenvwrapper-win来管理虚拟环境。因为virtualenvwrapper-win可以实现统一管理虚拟环境。效果图如下
image.png
同样使用virtualenvwrapper-win也要先安装

pip install virtualenvwrapper-win

安装完成后需要配置环境变量来指定python虚拟环境的根目录,上图中本文演示的python虚拟环境根目录就是D:\python-venv。环境变量名是:WORKON_HOME。默认创建的虚拟环境位于C:\Users\username\envs

virtualenvwrapper-win 命令介绍

  • 新建虚拟环境
mkvirtualenv <虚拟环境名称>
  • 查看安装的所有虚拟环境
#或者lsvirtualenv
workon
  • 进入或切换虚拟环境
workon <虚拟环境名称>
  • 进入虚拟环境的site-packages目录
cdsitepackages
  • 退出虚拟环境
deactivate
  • 列出site-packages目录的所有软件包
lssitepackages
  • 查看虚拟环境下的安装包
pip list
  • 删除虚拟环境
rmvirtualenv test1(虚拟环境名称)

以上是关于python虚拟环境的常用命令。比较重要的是在使用任何python命令之前或者pip等命令之前,先要想想当前在哪个虚拟环境下使用,然后激活当前虚拟环境。激活命令如下:

source venv/Scripts/activate

注意windows环境下执行如下命令:

#切换到当前虚拟环境下
cd venv/Scripts/
activate

虚拟环境的迁移

python编译

python严格意义上来说开发完成后是不需要编译的,直接copy项目到服务器上即可部署。python项目中使用到的第三方依赖包一般都是通过pip install 来安装(注意使用命令之前要激活当前项目的虚拟环境)

python部署

因为python项目不需要编译,所以部署一般只需要copy整个项目到生产环境即可,当然也可以基于第三方插件打包,比如打包成exe安装软件。本文不介绍打包。所以在部署的时候就涉及到python虚拟环境的迁移,因为项目的依赖包都在python虚拟环境中。

  • copy虚拟环境
    第一种迁移方式是直接copy真个虚拟环境,这种方式注意copy后需要修改部分文件。
    image.png
    复制文件后,我们如果要使用该虚拟环境需要激活,激活命令其实就是执行上图的脚本文件,不同os系统执行的文件不同。前面说过虚拟环境的激活过程核心其实就是设置环境变量。所以我们需要改脚本中的关于虚拟环境的文件目录的内容。
    image.png
    记得按照不同的os改不同的文件,不放心就所有文件涉及到环境变量目录的地方都改一遍。
  • requirements
    首先我们需要通过freeze 来生成requirements.txt文件,requirements.txt文件存储的其实就是当前虚拟环境所以安装的第三方依赖包。有了这个文件,我们就可以基于该文件在任何环境上重新下来安装第三方依赖包。这种迁移方式可以减少文件的复制迁移过程。
pip freeze > requirements.txt

image.png
迁移时,我们首先要在生产环境上创建一个虚拟环境,然后激活当前虚拟环境,然后执行install 命令:

pip freeze -r requirements.txt

以上两种方式各有优缺点,建议使用requirements模式,当然requirements模式首先是要创建虚拟环境。

python 的打包

python中比较常用的python转exe方法有三种,分别是cx_freeze,py2exe,PyInstaller。py2exe恐怕是三者里面知名度最高的一个,但是同时相对来说它的打包质量恐怕也是最差的一个。pyinstaller打包很好,但是操作工序较为复

本文推荐使用cx-freeze具体教程请官网

flask

flask框架,用于python web项目开发,仅仅作为记录,本文不介绍。

falsk的几种模式

https://www.jianshu.com/p/8825536984eb

flask_socketio

https://flask-socketio.readthedocs.io/en/latest/

flask

https://dormousehole.readthedocs.io/en/latest/deploying/wsgi-standalone.html#gunicorn

评论

公众号:mumuser

企鹅群:932154986

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×