venv是自 3.3 版本之后添加的官方库 , 自 3.6 版本之后 , 成为官方推荐的多环境管理工具。也就是说 , 你不需要安装任何第三方库就可以实现多环境管理了。

注意:python3.3版本之后自带的模块 , 只支持3.3版本之后的 , 不支持2.x

  1. 虚拟环境管理

    使用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.cfg

    bin下面是pippython等一些可执行环境

    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
  2. 激活虚拟环境

    [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了 , 如下:

  3. 在虚拟环境下安装包 , 启动项目

    (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
    ​

    这样 , 我们只要激活虚拟环境后 , 在虚拟环境下启动项目 , 即可实现跟其他项目环境隔离了。

    注意:项目代码不需要放在虚拟环境目录下 , 任意位置即可 , 只需要激活对应虚拟环境。

  4. 退出虚拟环境:

    (projenv1) [root@host-192-168-71-25 projenv1]# deactivate 
    [root@host-192-168-71-25 projenv1]# 
  5. 优缺点分析

    • venvpython3自带的 , 不需要额外安装库就能运行。

    • 只能在3.3版本以后 , 2.x用不了

    • venv过于简单 , 没有额外的api。只能创建个虚拟环境 , 不能指定系统不存在的python环境版本 , 不能查看环境列表。


参考链接

python多环境管理(venv与virtualenv) - doublexi - 博客园


熊熊