venv是 Python 3 中的一个内置模块,它提供了一种创建 Python 虚拟环境的方法。虚拟环境是一种隔离 Python 环境的机制,它可以让我们在同一台机器上使用不同的 Python 解释器和库,而不会互相干扰。在 Python 2 中,可以使用第三方工具如virtualenv来创建虚拟环境,达到与venv相似的效果。
如果不使用虚拟环境,可能会遇到以下问题:
使用虚拟环境可以解决上述问题,它提供了一种隔离 Python 环境的机制,可以在不同的 Python 工程中使用不同的 Python 版本和第三方库版本,从而避免版本冲突,简化开发和维护,以及方便迁移。因此,建议在开发 Python 程序时使用虚拟环境。
要创建一个虚拟环境,需要使用venv模块提供的venv命令。例如,要在当前目录下创建一个名为myenv的虚拟环境,可以运行以下命令:
python3 -m venv myenv
然后通过以下方式激活虚拟环境:
source myenv/bin/activate
一旦激活了虚拟环境,我们就可以使用pip安装所需的第三方库,并在该虚拟环境中运行 Python 程序。当完成工作后,可以使用deactivate命令退出虚拟环境。在使用 venv 前,我本地安装的 requests 库如下:
➜ python_test pip3 list | grep requests
requests 2.28.1
创建一个虚拟环境后,激活虚拟环境后,就多了 (myenv) ➜提示符,同时使用 pip3 list 来查看是没有安装 requests 库的
python3 -m venv myenv
➜ python_test source myenv/bin/activate
(myenv) ➜ python_test pip3 list | grep requests
WARNING: You are using pip version 20.2.3; however, version 23.0.1 is available.
然后我安装一个 requests 库,发现安装了一个更新的版本 2.28.2
(myenv) ➜ python_test pip3 install requests
Collecting requests
Using cached requests-2.28.2-py3-none-any.whl (62 kB)
Requirement already satisfied: charset-normalizer<4,>=2 in ./myenv/lib/python3.8/site-packages (from requests) (3.1.0)
Requirement already satisfied: certifi>=2017.4.17 in ./myenv/lib/python3.8/site-packages (from requests) (2022.12.7)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in ./myenv/lib/python3.8/site-packages (from requests) (1.26.14)
Requirement already satisfied: idna<4,>=2.5 in ./myenv/lib/python3.8/site-packages (from requests) (3.4)
Installing collected packages: requests
Successfully installed requests-2.28.2
WARNING: You are using pip version 20.2.3; however, version 23.0.1 is available.
执行 deactivate 命令
(myenv) ➜ python_test deactivate
➜ python_test
由于虚拟环境提供了一种隔离 Python 环境的机制,因此不同的工程可以在同一个虚拟环境中使用不同的 Python 版本和第三方库,而不会相互干扰。但是 venv 本身并不涉及 Python 版本的管理,它只是用于创建和管理 Python 虚拟环境。
要管理不同的 Python 3 版本,我们需要安装多个版本的 Python,并使用不同的路径来区分它们。
最后,欢迎大家关注,谢谢。