[英]Pip freeze for only project requirements
當我運行pip freeze > requirements.txt
時,它似乎包含所有已安裝的包。 這似乎是記錄在案的行為。
但是,我做錯了一些事情,因為現在在與 Django 沒有業務的項目中包括 Django 之類的東西。
我如何獲得這個項目的需求? 或者將來如何安裝 package 和pip
以用於此項目。 我想我錯過了一些關於virtualenv
的東西。
我已經嘗試了pipreqs
和pigar
並發現pigar
更好,因為它還能生成關於它在哪里使用的信息,它還有更多的選擇。
我用這個命令
編輯:感謝 Addisson Klinke 的建議
pip freeze -r requirements.txt |grep -B100 "pip 凍結" |grep -v "pip 凍結"
pip freeze -r requirements.txt | sed '/freeze/,$ d'
當我運行pip freeze -r requirements.txt
,輸出類似於
APScheduler==3.2.0
Eve==0.6.4
Eve-Elastic==0.3.8
## The following requirements were added by pip freeze:
arrow==0.8.0
Cerberus==0.9.2
我有一個這樣的需求文件
APScheduler
Eve
Eve-Elastic
所以我得到這個輸出和sed
來刪除我不想要的依賴項。
首先將其輸出到文件
pip freeze -q -r requirements.txt | sed '/freeze/,$ d' > requirements-froze.txt
這將只輸出帶有版本的庫
APScheduler==3.2.0
Eve==0.6.4
Eve-Elastic==0.3.8
然后替換需求文件
mv requirements-froze.txt requirements.txt
我仍然建議使用官方pip freeze > requirements.txt
(文檔)與其他答案中提到的使用pigar
和pipreqs
的兩個替代功能相比,因為pip freeze
列出了有效的 package 名稱。
標准\工具 | pip 凍結 > requirements.txt | 豬油 | pipreqs |
---|---|---|---|
姓名不匹配 (1) | Package my-package==1.0.0 |
模塊my_package == 1.0.0 |
模塊my_package==1.0.0 |
模塊重載(二) | 所有包my-package1==1.0.0 , my-package2==2.0.0 |
沒有任何 | 頂層模塊(版本顯示0.0.0) my==0.0.0 |
僅顯示直接使用的包 | 不 | 是的 | 是的 |
最少的內容 | 是的 | 不 | 是的 |
(1) 模塊和 package 名稱之間可能存在不匹配,例如my-package
(包名稱)與my_package
(模塊名稱)。
(2) 可以有多個包使用相同的頂級文件夾,例如my-package1
和my-package2
(包名稱),它們安裝在my/package1
和my/package2
,它們由 Python 的命令import my.package1
和import my.package2
。 請注意,pipreqs 為不存在的 package my
注釋版本 0.0.0。
我知道這些是非常特殊的情況,但我希望向人們提供這個概述可以幫助理解限制並避免可能的錯誤。
這是基於之前評論的簡化版本: https : //stackoverflow.com/a/40026169/4052041
mv requirements.txt requirements.txt.bak
pip freeze -q -r requirements.txt.bak | awk '/.*pip freeze.*/ {exit} {print}' > requirements.txt
激活virtualenv
后,執行python -E -m pip freeze
。 -E
標志表示,根據python --help
,忽略 PYTHON* 環境變量(例如 PYTHONPATH) ,因此 pip 它不會訪問全局site-packages
。
如果您使用的是 linux,那么請使用sed
pip freeze | sed 's/==.*$/''/' > requirements.txt
我對pip freeze
有同樣的問題。 在我的情況下,問題是我在沒有激活我的項目虛擬環境的情況下運行了pip freeze
。 我激活了虛擬環境並且pip freeze > requirements.txt
工作正常。
因此,請確保通過在 Windows 上運行<virtualenv folder name>\\Scipts\\activate
或在 Linux 上運行source <virtualenv folder name>\\bin\\activate
來激活您的項目虛擬環境。
如果virtualenv
具有全局訪問權限,您應該使用-l
或--local
選項運行pip freeze
, pip freeze -l
根據pip freeze 文檔
-l, --local
如果在具有全局訪問權限的 virtualenv 中,請不要輸出全局安裝的包。
我剛剛遇到了同樣的問題,這是我找到的解決問題的方法。
首先在你的項目目錄下創建venv,然后激活它。
對於 Linux/MacOS: python3 -m venv ./venv
source myvenv/bin/activate
對於 Windows: python3 -m venv .\\venv
env\\Scripts\\activate.bat
現在pip freeze > requirements.txt
應該只接受項目中使用的庫。
注意:如果您已經開始了您的項目,則必須重新安裝所有庫才能將它們凍結在 pip 中。
pip install pipreqs,
pipreqs>requirements.txt
這很容易工作
我確實遇到過同樣的情況。 激活虛擬環境並執行后
pip3 freeze > requirements.txt
仍然收集所有 package 安裝在我的 WSL ubuntu 22.04
安裝“pipreqs”並輸入pipreqs> requirements.txt 后,我的 Wsl 卡住了。
最好的解決方案是pip3 freeze -l > requirments.txt
它只收集了我的本地 package 用於我的開發。
在 windows 和 Lunix Pipdeptree中有一個 package 對我有用。安裝后,您可以使用 Pipdeptree 生成僅包含頂級包的 requirements.txt 文件。
Windows:
pipdeptree -f --warn silence | findstr /r "^[a-zA-Z0-9\-]" > requirements.txt
盧尼克斯:
pipdeptree -f --warn silence | grep -E '^[a-zA-Z0-9\-]+' > requirements.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.