您好,登錄后才能下訂單哦!
如何搭建Python項目虛擬環(huán)境,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
virtualenv 是一個創(chuàng)建隔絕的 Python 環(huán)境的工具。它會創(chuàng)建一個包含所有必要的可執(zhí)行文件的文件夾,用來使用 Python 工程所需要的包。換句話說,我們可以用 virtualenv 給各個項目創(chuàng)建各自的 Python 環(huán)境,各個的環(huán)境之間安裝的包相互獨立,互不影響。通過激活 avtive
相應的 Python 環(huán)境來使用相應的 Python 環(huán)境。這里為了方便管理不同的 Python 環(huán)境,我們使用 virtualenvwrapper 來對 Python 虛擬環(huán)境進行管理。
virtualenv 和 virtualenvwrapper 的安裝很簡單,一條命令即可:
pip install virtualenv # 安裝virtualenv pip install virtualenvwrapper # 安裝virtualenvwrapper
virtualenv 是不需要配置的,它的使用直接是在項目文件夾里執(zhí)行命令 virtualenv proEnv
,就會在當前項目目錄下生成proEnv的目錄,目錄下會包含 bin,include,lib,local 這四個文件夾和一個 pip-selfcheck.json 文件。當該虛擬環(huán)境被激活后 source proEnv/bin/activate
,所有執(zhí)行的 pip 安裝程序都會安裝在當前虛擬環(huán)境文件夾 proEnv 中。不過這樣就導致下面的問題:
不方便管理--激活,消活 deactivate
,環(huán)境切換等
無法重用--存放在指定項目目錄下
而 virtualenvwrapper 能完美解決這些問題。
virtualenvwrapper 的配置如下:
# 1.在~/.bashrc文件結尾添加下面(根據特定環(huán)境而定) source /usr/local/bin/virtualenvwrapper.sh # 2. 重新加載配置 source $HOME/.bashrc
# 創(chuàng)建環(huán)境 mkvirtualenv proEnv [-p python3.7] # 在$HOME/.virtualenvs/目錄下創(chuàng)建項目python環(huán)境 # 列舉所有環(huán)境 lsvirtualenv # 切換環(huán)境 workon proEnv # 退出環(huán)境 deactivate # 刪除環(huán)境 revirtualenv proEnv
pipenv 是 Pipfile 主要倡導者、requests 作者 Kenneth Reitz 寫的一個命令行工具,主要包含了 Pipfile、pip、click、requests 和 virtualenv,能夠有效管理 Python 多個環(huán)境,各種第三方包及模塊。
pipenv 所解決的問題:
不同項目依賴不同的第三方庫、包版本問題( virtualenv 也可以解決)
同一個項目不同環(huán)境使用不用的第三方庫問題(比如 autopep8 , pylint , pep8 等只有開發(fā)環(huán)境需要)
pipenv的特性:
pipenv 集成了 pip,virtualenv 兩者的功能,且完善了兩者的一些缺陷。
過去用 virtualenv 管理 requirements.txt 文件可能會有問題,Pipenv 使用 Pipfile 和 Pipfile.lock,后者存放包的依賴關系,查看依賴關系是十分方便。
各個地方使用了哈希校驗,無論安裝還是卸載包都十分安全,且會自動公開安全漏洞。
通過加載 .env 文件簡化開發(fā)工作流程。
支持 Python2 和 Python3,在各個平臺的命令都是一樣的。
TIPS:
《Flask Web開發(fā)實戰(zhàn)》的作者在該書中使用了 Pipenv 作為包管理工具,但是在 2019 年 8 月又發(fā)表了博文不要用 Pipenv,其核心的槽點是 pipenv 在更新第三方依賴庫時會更新所有依賴的包,其原因是對應的 packages 都是使用的星號*
,未指定特定的包版本。所以在更新/同步等操作時會將所有未指定版本 (使用星號*
)的第三方庫給更新了。這里強烈建議生產環(huán)境的第三方庫都指定版本。Pipfile.lock 文件更像是當前環(huán)境的一個快照,并不是指之前安裝的第三方依賴庫的版本就是確定的,除非你在 Pipfile 中限定好版本。
pipenv 的安裝很簡單,一條命令即可:
# 安裝pipenv包來管理依賴庫 python3 -m pip install pipenv # 設置環(huán)境變量,在項目目錄創(chuàng)建虛擬環(huán)境.venv export PIPENV_VENV_IN_PROJECT=1
常見的 Pipfile 配置如下所示:
[[source]] name = "aliyun" url = "https://mirrors.aliyun.com/pypi/simple" verify_ssl = true [dev-packages] autopep8 = "*" pylint = "*" pep8 = "*" [packages] flask = "==1.1.2" [requires] python_version = "3.7"
創(chuàng)建虛擬環(huán)境
# 開發(fā)環(huán)境安裝 Pipfile 中第三方依賴 pipenv intall -d # 生成環(huán)境安裝 Pipfile 中第三方依賴 pipenv install # 安裝requirements.txt中的依賴庫(項目遷移) pipenv install -r requirements.txt # 將pipenv的依賴庫生成requirements.txt(項目遷移) pipenv run pip freeze > requirements.txt
使用環(huán)境
# 直接在虛擬環(huán)境中運行 pipenv run python test.py # 激活虛擬環(huán)境,再運行腳本 pipenv shell && python test.py && exit
安裝卸載第三方依賴
# 安裝第三方依賴庫,并加到 Pipfile 的開發(fā)環(huán)境中 pipenv install -d pylint # 安裝指定版本的第三方依賴庫,并加到 Pipfile 的生成環(huán)境中 pipenv install Flask==1.1.2 # 卸載第三方依賴庫,并更新 Pipfile pipenv uninstall Flask
查看依賴包
# 查看當前環(huán)境依賴的包 pipenv graph
pipenv 是基于 Pipfile,結合 pip 和 virtualenv來幫助開發(fā)者進行依賴管理,所以要想搞明白虛擬環(huán)境的原理其實只要把 virtualenv 的原理搞明白即可。 這里我們使用 pytyhon:3.7-stretch
鏡像進行實驗(不使用alpine鏡像是因為它默認的 shell 是 ash,而不是 bash)。
虛擬環(huán)境的特點有二:
Python版本固定。即使系統的Python升級了,虛擬環(huán)境中的仍然不受影響,保留開發(fā)狀態(tài)。
所有Python軟件包,都只在這個環(huán)境生效。一旦退出,則回到用戶/系統的默認環(huán)境中。
所以猜測 virtualenv 是通過改變 shell 的 PATH 來實現指定的 Python 版本,而對應的軟件包是各自維護在各自的虛擬環(huán)境目錄中的。
echo $PATH
Python 命令的查找路徑
pip list
查看當前環(huán)境的依賴庫
python -m site
打印當前 Python 環(huán)境和 site-packages 相關調試信息
# 啟動容器 docker run -it --rm python:3.7-stretch bash # 安裝virtualenv和virtualenvwrapper pip install virtualenv virtualenvwrapper # 在 $HOME/.bashrc 文件結尾添加 source /usr/local/bin/virtualenvwrapper.sh echo "source /usr/local/bin/virtualenvwrapper.sh" >> $HOME/.bashrc # 重新加載配置 source $HOME/.bashrc # 創(chuàng)建虛擬環(huán)境proEnv mkvirtualenv proEnv
容器當前的環(huán)境如下圖所示: 使用 workon proEnv
進入虛擬環(huán)境 proEnv 后,各參數如下圖所示:
對比 PATH 的變化,發(fā)現 virtualenv 將虛擬環(huán)境的 bin 目錄置于 PATH 的最前方,所以當在終端執(zhí)行 python 時,執(zhí)行的是 /root/.virtualenvs/proEnv/bin/python, 而不是 /usr/local/bin/python。這就是為什么 virtualenv 沒有影響本地的 Python 環(huán)境。
對比 python -m site 的結果,發(fā)現虛擬環(huán)境的 sys.path 中第三方依賴庫的目錄由 /usr/local/lib/python3.7/site-packages 換成了 /root/.virtualenvs/proEnv/lib/python3.7/site-packages。這就是為什么 pip list 看不見什么軟件包的原因,也是環(huán)境隔離的最大秘密。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。