如何解決Python包依賴問題
以簡潔高效(指編程較為高效, 而不是運行速度)出名的Python, 在包依賴問題上有時候讓人撓頭.
一些新手複製了Github上的項目準備運行, 很多時候會在包依賴這一步上卡個半天.
(這裡推薦新手最好在基於Linux的系統或者Mac上, 一些包[比如Scrapy的Win32相關依賴]可能無法直接通過包管理工具安裝, 會讓新手從入門到放棄).
其他涉及到項目需要到其他機器部署時, 也會遇到包依賴問題.
通過pip輸出依賴
這個命令可能是很多同學用來輸出依賴的命令, 但它輸出的是當前環境下(筆者默認你使用的是Python的虛擬環境)的所有包, 也就是輸出當前你安裝的全部非Python標準庫包)
筆者在自己終端上試了一下, 輸出的文件如下: (這裡暴露了我沒有按項目建虛擬環境的爛習慣(逃)
對於按項目建環境的同學, 這種輸出方式是沒有多大問題的.
只要部署的時候在終端鍵入 就可以安裝好依賴了, 但是對於沒有嚴格區分項目環境的同學, 一次性安裝了其他的包, 並不是一個好的解決方案.
通過pipreqs庫輸出依賴
如這個庫的名稱所示, 就是為了方便管理依賴而生.
與pip直接導出全部不同, pipreqs只導出指定項目下Python文件import的庫用法如下
這裡我切換到一個Django項目目錄下, 打開requirements.txt, 內容是:
瞬間清爽不少.
通過Pipenv管理依賴
Pipenv, 彙集了Pip,Pipfile和Virtualenv的功能,是一個強大的命令行工具。
這裡展示最簡單的用法
安裝好庫.
切換到項目根目錄
終端鍵入
如果你尚未建立 那麼將會得到一個空白的 文本文件
此時我們在命令行中使用 , 會在Pipefile寫入對應包信息, 之後用戶要安裝依賴時, 使用 即可.
如果你已經建立, 終端上會輸出以下信息:
上面的輸出意思是:
找到了requirements.txt, 但不是Pipfile, 正在轉換...Pipefile現在將包含固定版本信息, 如果你的requirements.txt中已包含.我們推薦升級你的Pipefile到指定版本...
輸出Pipenv文件, 得到以下內容:
可以清楚的看到整個文件結構
第一個是[source]是安裝庫所在源, 第二個是依賴庫的信息, 第三個是當你開發環境所需要的包, 最後一個是Python版本.
當你需要區分開發環境和正式版本發布環境時, 可以使用以下命令:
如果正式版本發布時, 鍵入 , 將不會安裝dev標記的包除非其他開發人員鍵入 , 才會安裝所有包.
入門小白, 歡迎大家指出錯誤, 技術交流
今日作者: 光光同學_
不愛看電影的攝影師不是好的程序員
※整理的最全 python常見面試題
※關於Python的20個關鍵詞和45個最佳案例
TAG:Python |