鉴于virtualenv不便于对虚拟环境集中管理 , 所以推荐直接使用virtualenvwrappervirtualenvwrapper提供了一系列命令使得和虚拟环境工作变得便利。它把你所有的虚拟环境都放在一个地方。

  1. 安装virtualenvwrapper(确保virtualenv已安装)

    pip3 install virtualenv 
    pip3 install virtualenvwrapper 
    pip3 install virtualenvwrapper-win  #Windows使用该命令

    virtualenvwrapper默认将所有的虚拟环境放在~/.virtualenvs目录下管理 , 可以修改环境变量WORKON_HOME来指定虚拟环境 的保存目录。

  2. 安装完成后 , 需要进行一些配置。在你的 shell 配置文件 ( 如 ~/.bashrc~/.zshrc/etc/profile ) 中添加以下内容:

    export WORKON_HOME=$HOME/.virtualenvs
    export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3  # 根据实际情况修改 Python 解释器路径
    source /usr/local/bin/virtualenvwrapper.sh

    保存配置文件后 , 执行以下命令使配置生效:

    [root@host-192-168-71-25 ~]# . /etc/profile
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/premkproject
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/postmkproject
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/initialize
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/premkvirtualenv
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/postmkvirtualenv
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/prermvirtualenv
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/postrmvirtualenv
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/predeactivate
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/postdeactivate
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/preactivate
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/postactivate
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/get_env_details
  3. virtualenvwrapper使用

    创建虚拟环境mkvirtualenv ,创建的同时 , 还默认激活了虚拟环境

    [root@host-192-168-71-25 ~]# mkvirtualenv projectenv7
    created virtual environment CPython3.9.18.final.0-64 in 241ms
      creator CPython3Posix(dest=/root/.virtualenvs/projectenv7, clear=False, no_vcs_ignore=False, global=False)
      seeder FromAppData(download=False, pip=bundle, setuptools=bundle, via=copy, app_data_dir=/root/.local/share/virtualenv)
        added seed packages: pip==25.1.1, setuptools==80.9.0
      activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/projectenv7/bin/predeactivate
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/projectenv7/bin/postdeactivate
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/projectenv7/bin/preactivate
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/projectenv7/bin/postactivate
    virtualenvwrapper.user_scripts creating /root/.virtualenvs/projectenv7/bin/get_env_details
    (projectenv7) [root@host-192-168-71-25 ~]# 
    ​

    虚拟环境目录不会放到当前目录下了 , 它默认装在了/root/.virtualenvs , 所有的虚拟环境都会放到这个目录下

    (projectenv7) [root@host-192-168-71-25 ~]# ll /root/.virtualenvs/
    total 48
    -rwxr-xr-x 1 root root 135 Aug 10 22:34 get_env_details
    -rw-r--r-- 1 root root  96 Aug 10 22:34 initialize
    -rw-r--r-- 1 root root  73 Aug 10 22:34 postactivate
    -rw-r--r-- 1 root root  75 Aug 10 22:34 postdeactivate
    -rwxr-xr-x 1 root root  66 Aug 10 22:34 postmkproject
    -rw-r--r-- 1 root root  73 Aug 10 22:34 postmkvirtualenv
    -rwxr-xr-x 1 root root 110 Aug 10 22:34 postrmvirtualenv
    -rwxr-xr-x 1 root root  99 Aug 10 22:34 preactivate
    -rw-r--r-- 1 root root  76 Aug 10 22:34 predeactivate
    -rwxr-xr-x 1 root root  91 Aug 10 22:34 premkproject
    -rwxr-xr-x 1 root root 130 Aug 10 22:34 premkvirtualenv
    -rwxr-xr-x 1 root root 111 Aug 10 22:34 prermvirtualenv
    drwxr-xr-x 5 root root  97 Aug 10 22:37 projectenv7
    (projectenv7) [root@host-192-168-71-25 ~]# ll /root/.virtualenvs/projectenv7/
    total 12
    drwxr-xr-x 2 root root 4096 Aug 10 22:37 bin
    -rw-r--r-- 1 root root  194 Aug 10 22:37 CACHEDIR.TAG
    drwxr-xr-x 3 root root   23 Aug 10 22:37 lib
    drwxr-xr-x 3 root root   23 Aug 10 22:37 lib64
    -rw-r--r-- 1 root root  209 Aug 10 22:37 pyvenv.cfg
    (projectenv7) [root@host-192-168-71-25 ~]# 
    ​

    如果想要指定python版本 , 可以使用--python命令

    (projectenv7) [root@host-192-168-71-25 ~]# mkvirtualenv --python=/usr/bin/python3.12 projectenv8
    ​
    ​
    # 有环境变量可以简化
    (projectenv8) [root@host-192-168-71-25 ~]# mkvirtualenv --python=python3.11 projectenv9

    查看当前的虚拟环境目录

    (projectenv9) [root@host-192-168-71-25 ~]# workon 
    projectenv7
    projectenv8
    projectenv9

    切换虚拟环境

    (projectenv9) [root@host-192-168-71-25 ~]# workon projectenv7
    (projectenv7) [root@host-192-168-71-25 ~]# python -V
    Python 3.9.18
    (projectenv7) [root@host-192-168-71-25 ~]# workon projectenv8
    (projectenv8) [root@host-192-168-71-25 ~]# python -V
    Python 3.12.9
    (projectenv8) [root@host-192-168-71-25 ~]# workon projectenv9
    (projectenv9) [root@host-192-168-71-25 ~]# python -V
    Python 3.11.11

    退出虚拟环境

    (projectenv9) [root@host-192-168-71-25 ~]# deactivate 
    [root@host-192-168-71-25 ~]# 

    删除虚拟环境

    [root@host-192-168-71-25 ~]# rmvirtualenv projectenv9
    Removing projectenv9...
    [root@host-192-168-71-25 ~]# ll .virtualenvs/
    total 48
    -rwxr-xr-x 1 root root 135 Aug 10 22:34 get_env_details
    -rw-r--r-- 1 root root  96 Aug 10 22:34 initialize
    -rw-r--r-- 1 root root  73 Aug 10 22:34 postactivate
    -rw-r--r-- 1 root root  75 Aug 10 22:34 postdeactivate
    -rwxr-xr-x 1 root root  66 Aug 10 22:34 postmkproject
    -rw-r--r-- 1 root root  73 Aug 10 22:34 postmkvirtualenv
    -rwxr-xr-x 1 root root 110 Aug 10 22:34 postrmvirtualenv
    -rwxr-xr-x 1 root root  99 Aug 10 22:34 preactivate
    -rw-r--r-- 1 root root  76 Aug 10 22:34 predeactivate
    -rwxr-xr-x 1 root root  91 Aug 10 22:34 premkproject
    -rwxr-xr-x 1 root root 130 Aug 10 22:34 premkvirtualenv
    -rwxr-xr-x 1 root root 111 Aug 10 22:34 prermvirtualenv
    drwxr-xr-x 5 root root  97 Aug 10 22:37 projectenv7
    drwxr-xr-x 5 root root  97 Aug 10 22:43 projectenv8
    ​

    virtualenvwrapper 提供环境名字的tab补全功能。当您有很多环境 , 并且很难记住它们的名字时 , 这就显得很有用。

    workon 也能停止您当前所在的环境 , 所以您可以在环境之间快速的切换。

  4. 优缺点分析

    • 它就是基于virtualenv的封装 , 将所有虚拟环境整合在一个目录下 , 默认 ( ~/.virtualenvs )

    • 提供了很多api , 可以管理(新增 , 删除 , 复制 , 切换)虚拟环境

    • 支持tab补全 , 切换环境很方便。


参考链接

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


熊熊