两个环境
- 版本环境
- 版本环境的意思是可以控制当前python的全局版本号以及所有跟此版本号有关的lib
- 虚拟环境
- 为了隔离不同项目所依赖的python包,避免所有的项目依赖的包都放在同一个文件夹下面,造成混轮的版本依赖关系,删不好删,改不好改,所以以依赖的包为划分标准,对类似爬虫,人工智能、web等不同的包依赖,给予隔离,叫做虚拟环境
- 两者混淆点
- 用不同的python解释器,就可以创造两种版本的的虚拟环境,这才是两个概念混淆的关键所在,例如用python2生成的虚拟环境,就是python2的虚拟环境,用python3生成的就是python3,但实际上两者还是有明确区分的。
软件包 & 包?
- 两者都可用pip来进行安装,只在虚拟环境情况下有较大分别
- python的软件包:是依赖于python解释器的软件包,本身可能要编译以及执行,执行过程中可能调用python解释器依赖的其他包;
- 包:不是一个独立软件,只是在运行环境中,被项目加载并执行,没有编译联动执行的环节
虚拟环境
- 虚拟环境的python解释器不是一个实际解释器,venv也不是完整的python解释器环境,可以理解为原基础环境的一个快捷方式,最终运行起来后,还是由原来生成虚拟环境的解释器进行解释,只不过在 form import 包时,是从虚拟环境的site-package中提取,而不是从基础包的site-package中提取,所以就保证了包的隔离。
- 因此vitualenv 解决的是虚拟环境的问题,如果操作系统只有python3,那么virtualenv只是为了不同项目而创建的不同虚拟环境而已,并不是拷贝了原始解释器以及解释器的依赖的各类包,虚拟环境中的解释器也无法代替原始解释器,因此通过pip安装的包里如果本身就是软件,而这个软件要依赖原始解释器,那么虚拟环境是运行不起来的,这个要明确,会报一些找不到依赖包的错误,因此非纯粹的 python 包(如uwsgi)不要在虚拟环境中用pip来安装,容易造成一种可以成功安装并执行的错觉
conda 和 virtualenv的区别
- virtualenv 主要工作是为不同项目分离不同的虚拟环境,至于虚拟环境依赖的python版本,virtualenv 是控制不了的,因为虚拟环境的解释器的快捷方式指向他的创造者
- conda 比 virtualenv 更强的一点在于,能将整个环境在执行 conda activate pythonXXX 时既创建了有个新的虚拟环境,也基于了一种版本环境
- python -m venv XXX 命令是 python3 编译器自带的一个创建虚拟环境的命令,与 virtualenv 的唯一区别是 virtualenv 还支持 python2
- conda 和 virtualenv 更强的一个功能是可以为这个新创建的版本环境装软件,对于像 uwsgi 这种软件来说,要基于原始 python 解释器进行安装,而不是在虚拟环境中,因此这里强调一点,conda 创建的既是一个虚拟环境又是一个独立的版本环境,在这个版本环境中,一切都是隔离独立的,这个是非常强的,因此 conda install uwsgi 可以为这个版本环境安装 uwsgi,当你用 pip install uwsgi 时,这里的 pip 为何默认安装到 mac 版本的下的 python 版本里面,这个还为细细研究,所以在版本环境中,使用 pip install uwsgi 时,编译器采用 mac 最原始的 python 解释器,这就造成版本错误,所以还是要用 conda install uwsgi -c conda-forge 来安装
- 其他类似的 uwsgi 的软件都应该采用 conda 进行安装,这样能保证这些执行软件的依赖被锁定在当前 python 的虚拟环境中
虚拟环境和版本环境不同导致的问题
- 如果虚拟环境用的是 python3.7 其安装的依赖包就是 3.7 的,而使用版本环境 3.8 来运行,有可能有包版本冲突问题
- 所以虚拟环境要和版本环境的解释器版本一致,那个版本环境创建的虚拟环境,就按照那个版本环境来运行 uwsgi,否则会出现版本不兼容,报代码错误问题
conda环境下安装并执行uwsgi正确方式
- 采用 conda 创建的版本环境 python3.8 中,切换到 venv 虚拟环境下,执行 pip install -r requirement.txt 安装所有依赖包
- deactivate venv 环境,conda activate python38 切到 conda 版本环境中
- 执行 conda install -c conda-forge uwsig (-c 是渠道的意思,conda-forge 这个镜像渠道有很全的软件包)
- 然后将配置文件 uwsig.ini——>home 指向虚拟目录
[uwsgi]
# Django manage.py 所在文件夹路径
chdir = /Users/senwang/workspace/python-api/
module = plus.wsgi:application
# 启用master进程管理
master = true
# 绑定的 UNIX socket
http = 127.0.0.1:8888
# uwsgi的进程数
processes = 1
# 最大请求处理数,之后重新生成进程
max-requests = 5000
# 退出时清理环境
vacuum = true
# python的安裝路径
home=/Users/senwang/workspace/python-api/venv/
Original: https://blog.csdn.net/wangsenling/article/details/124167502
Author: 森叶
Title: Mac 下virtualenv pipenv venv conda 区别解读 及 conda 安装 uwsgi 注意事项
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/770981/
转载文章受原作者版权保护。转载请注明原作者出处!