it-swarm.com.de

Anforderungs.txt automatisch erstellen

Manchmal lade ich den Python-Quellcode von github herunter und kann nicht alle Abhängigkeiten installieren. Wenn es keine requirements.txt-Datei gibt, muss ich sie von Hand erstellen. Die Frage ist: Kann man requirements.txt im Python-Quellcode-Verzeichnis automatisch aus dem Importbereich erstellen?

145
Igor Barinov

Wenn Sie eine virtuelle Umgebung verwenden, reicht pip freeze > requirements.txt aus. Wenn nicht, dann ist pigar eine gute Wahl für Sie.

Ich versichere übrigens nicht, dass es mit 2.6 funktioniert.

UPDATE:

Pipenv oder andere Tools werden zur Verbesserung Ihres Entwicklungsflusses empfohlen.

152
damnever

Sie können den folgenden Code verwenden, um eine Datei Requirements.txt zu generieren:

pip install pipreqs

pipreqs /path/to/project

weitere Informationen zu Pipreqs finden Sie hier .

Manchmal stoßen Sie auf pip freeze, aber dies speichert alle Pakete in der Umgebung, einschließlich der Pakete, die Sie nicht in Ihrem aktuellen Projekt verwenden. 

210
DJanssens

Stellen Sie sicher, dass Sie pip3 für python3.7 ausführen.

pip3 freeze >> yourfile.txt

Es sollte entweder ein Kompatibilitätsproblem oder ein Fehler sein, dass nur "pip" nicht funktioniert. Stellen Sie sicher, dass Sie zu der 'eingefrorenen' Datei gehen und alle Module löschen, die Sie nicht benötigen. Dies ist die Art, wie ich daran gearbeitet habe. :)

0
johnyjohnny

Wenn Sie das gleiche Problem haben wie ich, dh nicht in der virtuellen Umgebung und die Datei requirements.txt für ein bestimmtes Projekt oder aus dem ausgewählten Ordner (einschließlich untergeordneter Ordner) und pipreqs unterstützt nicht.

Sie können verwenden:

import os
import sys
from fuzzywuzzy import fuzz
import subprocess

path = "C:/Users/Username/Desktop/DjangoProjects/restAPItest"


files = os.listdir(path)
pyfiles = []
for root, dirs, files in os.walk(path):
      for file in files:
        if file.endswith('.py'):
              pyfiles.append(os.path.join(root, file))

stopWords = ['from', 'import',',','.']

importables = []

for file in pyfiles:
    with open(file) as f:
        content = f.readlines()

        for line in content:
            if "import" in line:
                for sw in stopWords:
                    line = ' '.join(line.split(sw))

                importables.append(line.strip().split(' ')[0])

importables = set(importables)

subprocess.call(f"pip freeze > {path}/requirements.txt", Shell=True)

with open(path+'/requirements.txt') as req:
    modules = req.readlines()
    modules = {m.split('=')[0].lower() : m for m in modules}


notList = [''.join(i.split('_')) for i in sys.builtin_module_names]+['os']

new_requirements = []
for req_module in importables:
    try :
        new_requirements.append(modules[req_module])

    except KeyError:
        for k,v in modules.items():
            if len(req_module)>1 and req_module not in notList:
                if fuzz.partial_ratio(req_module,k) > 90:
                    new_requirements.append(modules[k])

new_requirements = [i for i in set(new_requirements)]

new_requirements

with open(path+'/requirements.txt','w') as req:
    req.write(''.join(new_requirements))

P.S: Es kann ein paar zusätzliche Bibliotheken geben, da es nach Fuzzylogic sucht.

0
TheVishal

In meinem Fall verwende ich Anaconda. Durch Ausführen des folgenden Befehls von Conda Terminal in meiner Umgebung wurde das Problem gelöst und diese Textdatei wurde automatisch für mich erstellt:

conda list -e > requirements.txt

Dies wurde von diesem Github-Link pratos/condaenv.txt

0