Python 虛擬環(huán)境venv詳解
什么是虛擬環(huán)境
- 這是 Python 3.3 的新特性:https://www.python.org/dev/peps/pep-0405/
- 假設(shè)自己電腦主機(jī)的 Python 環(huán)境稱為系統(tǒng)環(huán)境,而默認(rèn)情況下,虛擬環(huán)境和系統(tǒng)環(huán)境是完全隔離的
- 每個(gè)系統(tǒng)環(huán)境下可以有多個(gè)虛擬環(huán)境
- 每個(gè)虛擬環(huán)境都有自己的 Python 二進(jìn)制文件及單獨(dú)的包安裝目錄,可以在虛擬環(huán)境中安裝屬于自己的 Python 包,而系統(tǒng)環(huán)境、其他虛擬環(huán)境并不會(huì)擁有這些 Python 包
一句話總結(jié)
Python 虛擬環(huán)境主要是為不同 Python 項(xiàng)目創(chuàng)建一個(gè)隔離的環(huán)境,每個(gè)項(xiàng)目都可以擁有獨(dú)立的依賴包環(huán)境,而項(xiàng)目間的依賴包互不影響
為什么要虛擬環(huán)境
說下背景
- 假設(shè)一個(gè)電腦包含多個(gè) Python 項(xiàng)目
- 每個(gè)項(xiàng)目所需的 Python 版本不一致,比如:Python 2.X、Python 3.X
- 每個(gè)項(xiàng)目所需的依賴包不一致,比如 A 項(xiàng)目只要 Selenium 相關(guān)依賴包,B 項(xiàng)目只要 Appium 相關(guān)依賴包
- 不同項(xiàng)目用同一個(gè)依賴包,但依賴包版本可能不一致
假設(shè)現(xiàn)在不用虛擬環(huán)境會(huì)有什么問題?
了解下第三方庫的安裝目錄
默認(rèn)情況下,Python 第三方庫都是裝在系統(tǒng)固定目錄的,比如 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']
電腦上所有項(xiàng)目都會(huì)從這個(gè)目錄去存儲(chǔ)、查找第三方庫(站點(diǎn)庫)
帶來的問題
- 不同項(xiàng)目使用同一個(gè)依賴包,但使用不同版本的依賴包時(shí),意味著當(dāng)開發(fā) A 項(xiàng)目的時(shí)候,要裝一次依賴包 A 版本,轉(zhuǎn)開發(fā) B 項(xiàng)目時(shí),先要卸載依賴包 A 版本,再重裝 B 版本...
- 一個(gè)環(huán)境下要安裝所有項(xiàng)目需要的依賴包,所以當(dāng)某個(gè)項(xiàng)目需要生成 requirement.txt 的時(shí)候,會(huì)帶上很多用不上的依賴包,要?jiǎng)h還得手工一個(gè)個(gè)刪....
通過 venv 操作虛擬環(huán)境
Python 3.5 后推薦使用 venv 來創(chuàng)建虛擬環(huán)境
創(chuàng)建虛擬環(huán)境
python3 -m venv fastapi_test
fastapi_test 是虛擬環(huán)境名字,可以自定義
激活虛擬環(huán)境
source <環(huán)境名稱>/bin/activate

可以看到虛擬環(huán)境中的 Package 只有最基礎(chǔ)的 pip、setuptools
關(guān)閉虛擬環(huán)境
deactivate
Pycharm 項(xiàng)目關(guān)聯(lián)新創(chuàng)建的虛擬環(huán)境

先在項(xiàng)目目錄下創(chuàng)建好虛擬環(huán)境
Python Interpreter 選中虛擬環(huán)境

安裝項(xiàng)目所需要的庫

Pycharm 創(chuàng)建虛擬環(huán)境

- 選中 Python Interpreter
- 查看更多 Interpreters
- 添加一個(gè)新的 Interpreters
- 選擇 New environment,默認(rèn)選項(xiàng)即可,確定

查看虛擬環(huán)境的目錄

剛剛創(chuàng)建的兩個(gè)虛擬環(huán)境的目錄其實(shí)是一樣的
bin
與虛擬環(huán)境交互的文件
>> 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
include
編譯 Python 包的 C 頭文件
lib
包含Python 版本的副本(python3.9),以及安裝每個(gè)依賴包的 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
從虛擬環(huán)境生成 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
在激活虛擬環(huán)境下敲
pip freeze > requirement.txt

這樣生成的 requirement.txt 文件就只包含虛擬環(huán)境中已安裝的依賴包了!
包管理利器 popety
TODO
到此這篇關(guān)于Python 虛擬環(huán)境venv詳解的文章就介紹到這了,更多相關(guān)Python 虛擬環(huán)境venv內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python虛擬環(huán)境venv用法詳解
- python3.6的venv模塊使用詳解
- python虛擬環(huán)境模塊venv使用及示例
- Python3 venv搭建輕量級(jí)虛擬環(huán)境的步驟(圖文)
- python3利用venv配置虛擬環(huán)境及過程中的小問題小結(jié)
- 解決virtualenv -p python3 venv報(bào)錯(cuò)的問題
- Python venv虛擬環(huán)境配置過程解析
- 淺談關(guān)于Python3中venv虛擬環(huán)境
- Python虛擬環(huán)境venv的使用方法
- 使用venv重建python虛擬環(huán)境的步驟實(shí)現(xiàn)
相關(guān)文章
python數(shù)據(jù)可視化matplotlib繪制折線圖示例
這篇文章主要為大家介紹了python數(shù)據(jù)可視化matplotlib繪制折線圖的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Python結(jié)合spaCy?進(jìn)行簡易自然語言處理
這篇文章主要為大家介紹了Python結(jié)合spaCy進(jìn)行簡易自然語言處理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Python調(diào)用ctypes使用C函數(shù)printf的方法
這篇文章主要介紹了Python調(diào)用ctypes使用C函數(shù)printf,需要的朋友可以參考下2017-08-08
python字符串加密解密的三種方法分享(base64 win32com)
這篇文章主要介紹了python字符串加密解密的三種方法,包括用base64、使用win32com.client、自己寫的加密解密算法三種方法,大家參考使用吧2014-01-01
一文詳解如何打包python程序?yàn)榭蓤?zhí)行文件
這篇文章主要介紹了如何打包python程序?yàn)榭蓤?zhí)行文件的相關(guān)資料,PyInstaller是一個(gè)將Python程序打包為可執(zhí)行文件的工具,以下是使用PyInstaller將Python程序打包為可執(zhí)行文件的步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04
Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)盾牌篇
相信大多數(shù)8090后都玩過太空射擊游戲,在過去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來自己動(dòng)手實(shí)現(xiàn)它,在編寫學(xué)習(xí)中回顧過往展望未來,在本課中,我們將為玩家添加一個(gè)盾牌以及一個(gè)用于顯示盾牌等級(jí)的欄2022-08-08

