簡體   English   中英

Pip freeze for only 項目需求

[英]Pip freeze for only project requirements

當我運行pip freeze > requirements.txt時,它似乎包含所有已安裝的包。 似乎是記錄在案的行為。

但是,我做錯了一些事情,因為現在在與 Django 沒有業務的項目中包括 Django 之類的東西。

我如何獲得這個項目的需求? 或者將來如何安裝 package 和pip以用於此項目。 我想我錯過了一些關於virtualenv的東西。

pipreqs 可以為特定項目節省時間。 只是

pip install pipreqs
#then
pipreqs path/to/project

Github 頁面

我已經嘗試了pipreqspigar並發現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文檔)與其他答案中提到的使用pigarpipreqs的兩個替代功能相比,因為pip freeze列出了有效的 package 名稱

截至 2022 年 2 月,三者之間的不完全比較

標准\工具 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-package1my-package2 (包名稱),它們安裝在my/package1my/package2 ,它們由 Python 的命令import my.package1import 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 freezepip 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM