簡體   English   中英

如何使用實際使用的庫在 Python 中創建 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  

fastaivoila都沒有出現在 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.

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