Python 创建虚拟环境
在Python
项目中,虚拟环境是一种隔离不同项目依赖的方式,每个项目都可以有自己的虚拟环境,这样就可以避免不同项目之间的依赖冲突。
创建Python
虚拟环境的工具有很多,各有优缺点,如:
工具/方法 | 特点 |
---|---|
venv | 内置模块,轻量高效,Python 3.11 创建速度更快。 |
virtualenv | 更灵活的虚拟环境工具,支持更多自定义选项。 |
pyenv | 版本管理神器,适配多版本快速切换。 |
conda | 适合数据科学和依赖复杂项目,可轻松切换 Python 版本。 |
pip + pyproject.toml | 现代化依赖管理,与 Python 3.11 生态完美融合。 |
PDM | 新工具,支持无虚拟环境模式,开发体验更佳。 |
Docker | 容器化管理,适合生产环境和隔离复杂项目。 |
目前就使用过pyenv
和venv
。venv
内置是特点,但是是先有对应Python
版本的情况下,才能创建虚拟环境,本身不能做Python
的版本管理。pyenv
是可以管理Python
的版本的,可以随意切换需要使用的Python
,创建虚拟环境也挺方便的。
我们也可以把pyenv
和venv
结合起来,比如我之前使用pyenv
的时候,下过几个版本的Python
,在使用venv
创建虚拟环境的时候,我们可以用pyenv
下载的某个Python
版本来创建,这样虚拟环境就使用的是指定路径的Python
版本了。
使用
pyenv
问题
pyenv
安装的Python
的sqlite3
版本过低
Python
的安装包会依赖sqlite3
,但是MacOS
默认的sqlite3
版本太低了,所以我们需要安装高版本的sqlite3
,但是安装高版本的sqlite3
之后,Python
的安装包找不到sqlite3
的路径,所以我们可以在安装Python
的时候指定sqlite3
的路径。
- 不需要指定
sqlite3
路径pyenv install 3.11.9
- 需要指定
sqlite3
路径LDFLAGS="-L/usr/local/opt/sqlite/lib" CPPFLAGS="-I/usr/local/opt/sqlite/include" pyenv install 3.11.9
venv
从 Python 3.3
开始,标准库自带了 venv
模块用于创建虚拟环境。venv
的性能在 Python 3.11
中进一步提升。 venv
创建的虚拟环境只是一个包含独立 Python
解释器和相关文件的目录。如果删除虚拟环境,只需删除对应的目录即可。
使用
- 创建虚拟环境
直接使用当前的 Python
解释器创建虚拟环境。
$ python3.11 -m venv venv
可以指定 Python
解释器路径创建虚拟环境。
$ sudo ~/.pyenv/versions/3.11.9/bin/python3 -m venv venv
这里我使用了之前在pyenv
下载的Python 3.11.9
来创建虚拟环境。
- 激活虚拟环境
# Linux/macOS
$ source venv/bin/activate
# Windows
$ venv\Scripts\activate
查看虚拟环境中的 Python
版本
(venv) $ python3 --version
Python 3.11.9
查看虚拟环境中的 pip
版本及依赖
(venv) $ pip3 list
Package Version
---------- -------
pip 24.0
setuptools 65.5.0
[notice] A new release of pip is available: 24.0 -> 24.3.1
[notice] To update, run: pip install --upgrade pip
更新 pip
版本
(venv) $ pip install --upgrade pip
Requirement already satisfied: pip in ./venv/lib/python3.11/site-packages (24.0)
Collecting pip
Using cached pip-24.3.1-py3-none-any.whl.metadata (3.7 kB)
Using cached pip-24.3.1-py3-none-any.whl (1.8 MB)
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 24.0
Uninstalling pip-24.0:
Successfully uninstalled pip-24.0
Successfully installed pip-24.3.1
(venv) $ pip3 list
Package Version
---------- -------
pip 24.3.1
setuptools 65.5.0
- 退出虚拟环境
$ deactivate