Mac 下virtualenv pipenv venv conda 区别解读 及 conda 安装 uwsgi 注意事项

两个环境

  1. 版本环境
  2. 版本环境的意思是可以控制当前python的全局版本号以及所有跟此版本号有关的lib
  3. 虚拟环境
  4. 为了隔离不同项目所依赖的python包,避免所有的项目依赖的包都放在同一个文件夹下面,造成混轮的版本依赖关系,删不好删,改不好改,所以以依赖的包为划分标准,对类似爬虫,人工智能、web等不同的包依赖,给予隔离,叫做虚拟环境
  5. 两者混淆点
  6. 用不同的python解释器,就可以创造两种版本的的虚拟环境,这才是两个概念混淆的关键所在,例如用python2生成的虚拟环境,就是python2的虚拟环境,用python3生成的就是python3,但实际上两者还是有明确区分的。

软件包 & 包?

  1. 两者都可用pip来进行安装,只在虚拟环境情况下有较大分别
  2. python的软件包:是依赖于python解释器的软件包,本身可能要编译以及执行,执行过程中可能调用python解释器依赖的其他包;
  3. 包:不是一个独立软件,只是在运行环境中,被项目加载并执行,没有编译联动执行的环节

虚拟环境

  1. 虚拟环境的python解释器不是一个实际解释器,venv也不是完整的python解释器环境,可以理解为原基础环境的一个快捷方式,最终运行起来后,还是由原来生成虚拟环境的解释器进行解释,只不过在 form import 包时,是从虚拟环境的site-package中提取,而不是从基础包的site-package中提取,所以就保证了包的隔离。
  2. 因此vitualenv 解决的是虚拟环境的问题,如果操作系统只有python3,那么virtualenv只是为了不同项目而创建的不同虚拟环境而已,并不是拷贝了原始解释器以及解释器的依赖的各类包,虚拟环境中的解释器也无法代替原始解释器,因此通过pip安装的包里如果本身就是软件,而这个软件要依赖原始解释器,那么虚拟环境是运行不起来的,这个要明确,会报一些找不到依赖包的错误,因此非纯粹的 python 包(如uwsgi)不要在虚拟环境中用pip来安装,容易造成一种可以成功安装并执行的错觉

conda 和 virtualenv的区别

  1. virtualenv 主要工作是为不同项目分离不同的虚拟环境,至于虚拟环境依赖的python版本,virtualenv 是控制不了的,因为虚拟环境的解释器的快捷方式指向他的创造者
  2. conda 比 virtualenv 更强的一点在于,能将整个环境在执行 conda activate pythonXXX 时既创建了有个新的虚拟环境,也基于了一种版本环境
  3. python -m venv XXX 命令是 python3 编译器自带的一个创建虚拟环境的命令,与 virtualenv 的唯一区别是 virtualenv 还支持 python2
  4. 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 来安装
  5. 其他类似的 uwsgi 的软件都应该采用 conda 进行安装,这样能保证这些执行软件的依赖被锁定在当前 python 的虚拟环境中

虚拟环境和版本环境不同导致的问题

  1. 如果虚拟环境用的是 python3.7 其安装的依赖包就是 3.7 的,而使用版本环境 3.8 来运行,有可能有包版本冲突问题
  2. 所以虚拟环境要和版本环境的解释器版本一致,那个版本环境创建的虚拟环境,就按照那个版本环境来运行 uwsgi,否则会出现版本不兼容,报代码错误问题

conda环境下安装并执行uwsgi正确方式

  1. 采用 conda 创建的版本环境 python3.8 中,切换到 venv 虚拟环境下,执行 pip install -r requirement.txt 安装所有依赖包
  2. deactivate venv 环境,conda activate python38 切到 conda 版本环境中
  3. 执行 conda install -c conda-forge uwsig (-c 是渠道的意思,conda-forge 这个镜像渠道有很全的软件包)
  4. 然后将配置文件 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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球