venv是自 3.3 版本之后添加的官方库 , 自 3.6 版本之后 , 成为官方推荐的多环境管理工具。也就是说 , 你不需要安装任何第三方库就可以实现多环境管理了。
注意:python3.3版本之后自带的模块 , 只支持3.3版本之后的 , 不支持2.x
虚拟环境管理
使用
venv创建虚拟隔离环境:[root@host-192-168-71-25 ~]# ll /usr/bin/python* lrwxrwxrwx 1 root root 25 Aug 7 01:01 /usr/bin/python -> /etc/alternatives/python3 lrwxrwxrwx. 1 root root 9 Apr 13 2024 /usr/bin/python3 -> python3.9 -rwxr-xr-x 1 root root 15448 Jul 2 09:20 /usr/bin/python3.11 -rwxr-xr-x 1 root root 15448 Jul 2 15:09 /usr/bin/python3.12 -rwxr-xr-x. 1 root root 15568 Apr 13 2024 /usr/bin/python3.9 [root@host-192-168-71-25 ~]# python3.9 -m venv /data/projenv1它会创建
/data/myproj目录 , 下面如下:[root@host-192-168-71-25 ~]# ll /data/projenv1/ total 4 drwxr-xr-x 2 root root 166 Aug 10 18:37 bin drwxr-xr-x 2 root root 6 Aug 10 18:37 include drwxr-xr-x 3 root root 23 Aug 10 18:37 lib lrwxrwxrwx 1 root root 3 Aug 10 18:37 lib64 -> lib -rw-r--r-- 1 root root 70 Aug 10 18:37 pyvenv.cfgbin下面是pip、python等一些可执行环境pyvenv.cfg是我们的配置文件 , 为什么叫pyvenv, 因为这个库的前身就叫pyvenv。而我们的
site-packages就在lib目录下。[root@host-192-168-71-25 ~]# ls /data/projenv1/bin/ activate activate.csh activate.fish Activate.ps1 pip pip3 pip3.9 python python3 python3.9 [root@host-192-168-71-25 ~]# ls /data/projenv1/include/ [root@host-192-168-71-25 ~]# ls /data/projenv1/lib/python3.9/site-packages/ _distutils_hack distutils-precedence.pth pip pip-21.2.3.dist-info pkg_resources setuptools setuptools-53.0.0.dist-info激活虚拟环境
[root@host-192-168-71-25 ~]# cd /data/projenv1/ [root@host-192-168-71-25 projenv1]# . bin/activate (projenv1) [root@host-192-168-71-25 projenv1]# python -V Python 3.9.18 激活后 , 你使用的
python, 指向的就是虚拟环境里的python了 , 如下:在虚拟环境下安装包 , 启动项目
(projenv1) [root@host-192-168-71-25 projenv1]# pip install sqlalchemy Collecting sqlalchemy Downloading sqlalchemy-2.0.42-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB) |████████████████████████████████| 3.2 MB 457 kB/s Collecting greenlet>=1 Downloading greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (582 kB) |████████████████████████████████| 582 kB 65.9 MB/s Collecting typing-extensions>=4.6.0 Downloading typing_extensions-4.14.1-py3-none-any.whl (43 kB) |████████████████████████████████| 43 kB 1.5 MB/s Installing collected packages: typing-extensions, greenlet, sqlalchemy Successfully installed greenlet-3.2.4 sqlalchemy-2.0.42 typing-extensions-4.14.1 WARNING: You are using pip version 21.2.3; however, version 25.2 is available. You should consider upgrading via the '/data/projenv1/bin/python3.9 -m pip install --upgrade pip' command. 发现安装的包会放在当前环境目录下的
lib里面。(projenv1) [root@host-192-168-71-25 projenv1]# ls lib/python3.9/site-packages/sqlalchemy connectors dialects event exc.py future inspection.py orm __pycache__ schema.py testing util cyextension engine events.py ext __init__.py log.py pool py.typed sql types.py 这样 , 我们只要激活虚拟环境后 , 在虚拟环境下启动项目 , 即可实现跟其他项目环境隔离了。
注意:项目代码不需要放在虚拟环境目录下 , 任意位置即可 , 只需要激活对应虚拟环境。
退出虚拟环境:
(projenv1) [root@host-192-168-71-25 projenv1]# deactivate [root@host-192-168-71-25 projenv1]#优缺点分析
venv是python3自带的 , 不需要额外安装库就能运行。只能在
3.3版本以后 ,2.x用不了venv过于简单 , 没有额外的api。只能创建个虚拟环境 , 不能指定系统不存在的python环境版本 , 不能查看环境列表。
参考链接
python多环境管理(venv与virtualenv) - doublexi - 博客园