Python 虚拟环境主要是为不同 Python 项目创建一个隔离的环境,每个项目都可以拥有独立的依赖包环境,而项目间的依赖包互不影响
假设现在不同虚拟环境会有什么问题?
默认情况下,Python 第三方库都是装在系统固定目录的,比如 Mac 电脑
>>> import site >>> site.getsitepackages() ['/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages']
电脑上所有项目都会从这个目录去存储、查找第三方库(站点库)
Python 3.5 后推荐使用 venv 来创建虚拟环境
python3 -m venv fastapi_test
fastapi_test 是虚拟环境名字,可以自定义
source <环境名称>/bin/activate
可以看到虚拟环境中的 Package 只有最基础的 pip、setuptools
deactivate
先在项目目录下创建好虚拟环境
刚刚创建的两个虚拟环境的目录其实是一样的
与虚拟环境交互的文件
>> ll total 72 -rw-r--r-- 1 polo staff 8.6K Sep 14 09:26 Activate.ps1 -rw-r--r-- 1 polo staff 1.9K Sep 14 09:26 activate -rw-r--r-- 1 polo staff 882B Sep 14 09:26 activate.csh -rw-r--r-- 1 polo staff 2.0K Sep 14 09:26 activate.fish -rwxr-xr-x 1 polo staff 269B Sep 14 08:40 pip -rwxr-xr-x 1 polo staff 269B Sep 14 08:40 pip3 -rwxr-xr-x 1 polo staff 269B Sep 14 08:40 pip3.9 lrwxr-xr-x 1 polo staff 9B Sep 14 08:40 python -> python3.9 lrwxr-xr-x 1 polo staff 9B Sep 14 08:40 python3 -> python3.9 lrwxr-xr-x 1 polo staff 39B Sep 14 08:40 python3.9 -> /usr/local/opt/python@3.9/bin/python3.9
编译 Python 包的 C 头文件
包含Python 版本的副本(python3.9),以及安装每个依赖包的 site-packages 文件夹
>> pwd /Users/polo/Downloads/FastAPI_project/fastapi_test/lib/python3.9/site-packages >> ll total 224 drwxr-xr-x 3 polo staff 96B Sep 14 09:27 __pycache__ drwxr-xr-x 5 polo staff 160B Sep 14 08:40 _distutils_hack -rw-r--r-- 1 polo staff 152B Sep 14 08:40 distutils-precedence.pth drwxr-xr-x 28 polo staff 896B Sep 14 09:27 fastapi drwxr-xr-x 8 polo staff 256B Sep 14 09:27 fastapi-0.68.1.dist-info drwxr-xr-x 8 polo staff 256B Sep 14 08:40 pip drwxr-xr-x 10 polo staff 320B Sep 14 08:40 pip-21.1.1.dist-info drwxr-xr-x 7 polo staff 224B Sep 14 08:40 pkg_resources drwxr-xr-x 53 polo staff 1.7K Sep 14 09:27 pydantic drwxr-xr-x 9 polo staff 288B Sep 14 09:27 pydantic-1.8.2.dist-info drwxr-xr-x 41 polo staff 1.3K Sep 14 08:40 setuptools drwxr-xr-x 11 polo staff 352B Sep 14 08:40 setuptools-56.0.0.dist-info drwxr-xr-x 27 polo staff 864B Sep 14 09:27 starlette drwxr-xr-x 8 polo staff 256B Sep 14 09:27 starlette-0.14.2.dist-info drwxr-xr-x 8 polo staff 256B Sep 14 09:27 typing_extensions-3.10.0.2.dist-info -rw-r--r-- 1 polo staff 107K Sep 14 09:27 typing_extensions.py
> pip list Package Version ----------------- -------- fastapi 0.68.1 pip 21.1.1 pydantic 1.8.2 setuptools 56.0.0 starlette 0.14.2 typing-extensions 3.10.0.2
在激活虚拟环境下敲
pip freeze > requirement.txt
这样生成的 requirement.txt 文件就只包含虚拟环境中已安装的依赖包了!