![](/img/trans.png)
[英]pipreqs not including all libraries used in requirements.txt
[英]How to create requirements.txt in Python with actually used libraries?
我發現 Colab 預安裝的庫和 AWS Sagemaker 預定義的內核一樣方便,但是在收集requirements.txt
文件時,這種便利變得非常煩人,因為我最終得到了許多我在項目中沒有實際使用的庫。 我知道我可以在一開始就創建一個虛擬,但我想知道是否有辦法避免它。
我最近發現了水印,它部分地解決了這個問題。 盡管如此,要使這個解決方案完美契合,它仍然存在兩個問題,我將在下面舉例說明,並且您可以在 Colab 中輕松重現。
!pip install fastai --upgrade
!pip install voila
!jupyter serverextension enable voila --sys-prefix
!pip install watermark
from fastai.vision.all import *
from fastai.vision.widgets import *
%load_ext watermark
%watermark --iversion
fastai
和voila
都沒有出現在 output 中,因為我沒有運行 import fastai 並將 voila 作為擴展加載。
%watermark -p fastai
這將為例如fastai
但我希望能夠自動生成而無需手動檢查丟失的包。
雖然這不是 IPython 魔法,但我編寫了這個小 python 腳本(您可以將它復制為一個單元格並運行)。
它的工作原理是查看導入的模塊,將它們與 pip 安裝的發行版中的模塊進行交叉引用,然后根據該信息創建一個requirements.txt
。
from pip._internal.utils.misc import get_installed_distributions
import sys
#import numpy as np # imported to test whether numpy shows up, which it does!
def get_imported_packages():
p = get_installed_distributions()
p = {package.key:package.version for package in p}
imported_modules = set(sys.modules.keys())
imported_modules.remove('pip')
modules = [(m, p[m]) for m in imported_modules if p.get(m, False)]
return modules
def generate_requirements(filepath:str, modules):
with open(filepath, 'w') as f:
for module, version in modules:
f.write(f"{module}=={version}")
generate_requirements('requirements.txt', get_imported_packages())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.