Python 虛擬環境venv詳解
什麼是虛擬環境
- 這是 Python 3.3 的新特性:https://www.python.org/dev/peps/pep-0405/
- 假設自己電腦主機的 Python 環境稱為系統環境,而默認情況下,虛擬環境和系統環境是完全隔離的
- 每個系統環境下可以有多個虛擬環境
- 每個虛擬環境都有自己的 Python 二進制文件及單獨的包安裝目錄,可以在虛擬環境中安裝屬於自己的 Python 包,而系統環境、其他虛擬環境並不會擁有這些 Python 包
一句話總結
Python 虛擬環境主要是為不同 Python 項目創建一個隔離的環境,每個項目都可以擁有獨立的依賴包環境,而項目間的依賴包互不影響
為什麼要虛擬環境
說下背景
- 假設一個電腦包含多個 Python 項目
- 每個項目所需的 Python 版本不一致,比如:Python 2.X、Python 3.X
- 每個項目所需的依賴包不一致,比如 A 項目隻要 Selenium 相關依賴包,B 項目隻要 Appium 相關依賴包
- 不同項目用同一個依賴包,但依賴包版本可能不一致
假設現在不用虛擬環境會有什麼問題?
瞭解下第三方庫的安裝目錄
默認情況下,Python 第三方庫都是裝在系統固定目錄的,比如 Mac 電腦
>>> import site >>> site.getsitepackages() ['/usr/local/Cellar/[email protected]/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages']
電腦上所有項目都會從這個目錄去存儲、查找第三方庫(站點庫)
帶來的問題
- 不同項目使用同一個依賴包,但使用不同版本的依賴包時,意味著當開發 A 項目的時候,要裝一次依賴包 A 版本,轉開發 B 項目時,先要卸載依賴包 A 版本,再重裝 B 版本…
- 一個環境下要安裝所有項目需要的依賴包,所以當某個項目需要生成 requirement.txt 的時候,會帶上很多用不上的依賴包,要刪還得手工一個個刪….
通過 venv 操作虛擬環境
Python 3.5 後推薦使用 venv 來創建虛擬環境
創建虛擬環境
python3 -m venv fastapi_test
fastapi_test 是虛擬環境名字,可以自定義
激活虛擬環境
source <環境名稱>/bin/activate
可以看到虛擬環境中的 Package 隻有最基礎的 pip、setuptools
關閉虛擬環境
deactivate
Pycharm 項目關聯新創建的虛擬環境
先在項目目錄下創建好虛擬環境
Python Interpreter 選中虛擬環境
安裝項目所需要的庫
Pycharm 創建虛擬環境
- 選中 Python Interpreter
- 查看更多 Interpreters
- 添加一個新的 Interpreters
- 選擇 New environment,默認選項即可,確定
查看虛擬環境的目錄
剛剛創建的兩個虛擬環境的目錄其實是一樣的
bin
與虛擬環境交互的文件
>> 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/[email protected]/bin/python3.9
include
編譯 Python 包的 C 頭文件
lib
包含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
從虛擬環境生成 requirement.txt
先看看有哪些包
> 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
在激活虛擬環境下敲
pip freeze > requirement.txt
這樣生成的 requirement.txt 文件就隻包含虛擬環境中已安裝的依賴包瞭!
包管理利器 popety
TODO
到此這篇關於Python 虛擬環境venv詳解的文章就介紹到這瞭,更多相關Python 虛擬環境venv內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 虛擬環境及venv和virtualenv的區別說明
- 解決virtualenv -p python3 venv報錯的問題
- pycharm設置虛擬環境與更換鏡像教程
- 10 個Python中Pip的使用技巧分享
- PyCharm軟件無法安裝lxml庫的問題及解決