Crea automaticamente requisito.txt


278

A volte scarico il codice sorgente di Python githube non so come installare tutte le dipendenze. Se non è presente alcun requirements.txtfile, devo crearlo manualmente. La domanda è: data la directory del codice sorgente di Python è possibile creare requirements.txtautomaticamente dalla sezione di importazione?


2
Puoi farlo eseguendo pip freeze > requirements.txtsalverà tutte le tue librerie Python con la versione corrente in requirements.txtfile
— Shaikhul

7
@Shaikhul ma questo non aiuta nel caso in cui non hai installato le dipendenze perché hai appena scaricato il pacchetto da GitHub ...
— jonrsharpe,

8
Nota: a) pip freezescaricherà le versioni correnti dei allmoduli installati su quel sistema indipendentemente dall'utilizzo nel progetto corrente. b) pip elencherà solo i moduli che sono stati installati tramite pip
— akskap il

Risposte:


290

Se usi l'ambiente virtuale, va pip freeze > requirements.txtbene. In caso contrario , il maiale sarà una buona scelta per te.

A proposito, non assicuro che funzionerà con 2.6.

AGGIORNAMENTO :

Pipenv o altri strumenti sono consigliati per migliorare il flusso di sviluppo.

Per Python 3 utilizzare di seguito

pip3 freeze > requirements.txt

3
Per tutti gli errori, consiglio di provare pip3 freeze > requirements.txtprima di porre una domanda.
— baranskistad,

3
Eseguo pip3 freeze > requirements.txte sono sorpreso di non trovare alcuni pacchetti che sto effettivamente usando come argparsee configparser. È perché fanno parte del core di Python? Credo che una risposta migliore debba essere usata di pipreqsseguito perché elenca solo i requisiti utilizzati dal progetto.
— Alexis.Rolland,

@ Alexis.Rolland Sì, argparsee configparserappartiene alla libreria standard Python3, quindi, cosa c'è che non va pip3 freeze? Non capisco il tuo punto.
— Damnever

11
@damnever Ok grazie! pip3 freezemi dà l'elenco di tutti i pacchetti Python installati nel mio ambiente mentre pipreqsmi dà tutti quelli effettivamente utilizzati nel mio codice sorgente, che è quello che stavo cercando. Inoltre, non c'è niente di sbagliato in questo.
— Alexis.Rolland il

1
pipenv ha seri problemi, vedi questa discussione: news.ycombinator.com/item?id=18612590
— Justin M. Keyes

364

È possibile utilizzare il seguente codice per generare un file requisito.txt:

pip install pipreqs

pipreqs /path/to/project

maggiori informazioni relative ai pipreq sono disponibili qui .

A volte ti imbatti pip freeze, ma questo salva tutti i pacchetti nell'ambiente inclusi quelli che non usi nel tuo progetto attuale.


1
@IgorBarinov è un avvertimento e non creerà un problema da eseguire pipreqs, l'ho installato su Python 2.6 e ho ricevuto lo stesso avvertimento ma crea un requirements.txtfile, grazie @DJanssens
— Shaikhul

1
@Shaikhul se ricevi questi avvisi non avrai un file completo, otterrai solo una parte dei requisiti. Puoi controllarlo su github.com/npow/MemNN/tree/hyperopt repo. Ho solo 'hyperopt == 0.0.2 numpy == 1.9.2 scikit_learn == 0.16.1 theano == 0.7.0'
— Igor Barinov

1
che diceva it is strongly recommended to upgrade to a newer Python version
— Shaikhul il

2
Ottimo strumento. Grazie! La potente funzione che genera esattamente i pacchetti utilizzati, non come il congelamento del pip!
— Wesam,

1
Questo non funziona per Python 3.6, se la formattazione dell'output della nuova istruzione di stampa è uesd.
— Anand CU

12

Nel mio caso, utilizzo Anaconda, quindi eseguendo il seguente comando dal terminale conda all'interno del mio ambiente lo ho risolto e creato automaticamente questo file txt di requisiti per me:

conda list -e > requirements.txt

Questo è stato preso da questo link Github pratos / condaenv.txt

Se si è verificato un errore e si utilizza anaconda, provare a utilizzare l'opzione .yml:

conda env export > <environment-name>.yml

Per altre persone di utilizzare l'ambiente ... O se si sta creando un nuovo ambiente su un'altra macchina: conda env create -f .yml

L'opzione .yml è stata trovata qui


se non si utilizza un ambiente virtuale, verrà creato un file Requisito.txt troppo lungo
— SBFRF

1
Funziona davvero? Ogni volta che ho provato questo, ci sono dipendenze e particolari di sintassi che pip install requirements.txtrifiutano.
— conner.xyz,

Ho trovato alcuni errori usando il .txt, quindi ho aggiunto anche l'altra opzione che ha funzionato anche con me ... "Usare il .yml" di cui sopra.
— HassanSh__3571619

5

Assicurati di eseguire pip3 per python3.7.

pip3 freeze >> yourfile.txt

Prima di eseguire il comando sopra riportato, assicurarsi di aver creato un ambiente virtuale.

python3:

pip3 install virtualenv
python3 -m venv <myenvname> 

python2 :

pip install virtualenv
virtualenv <myenvname>

Dopodiché inserisci il tuo codice sorgente nella directory. Se esegui ora il file Python, probabilmente non verrà avviato Se stai utilizzando moduli non nativi. È possibile installare quei moduli in esecuzione

pip3 install <module> or pip install <module> 

Ciò non influirà sull'intero elenco di moduli tranne l'ambiente in cui ci si trova.

Ora puoi eseguire il comando in alto e ora hai un file dei requisiti che contiene solo i moduli installati nell'ambiente virtuale. Ora puoi eseguire il comando in alto.

Consiglio a tutti di usare gli ambienti in quanto semplifica le cose quando si tratta di cose come questa.

Spero che questo abbia aiutato.


1

Se affrontare lo stesso problema del mio, cioè non nell'ambiente virtuale e desidera Requisit.txt per un progetto specifico o dalla cartella selezionata (include i figli) e pipreqs non è supportato.

Puoi usare :

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))

PS: potrebbe avere alcune librerie aggiuntive mentre controlla fuzzylogic.


1

il modo migliore per Python 3 è:

pip3 freeze > requirements.txt

ha funzionato per me ...


0

se stai usando PyCharm, quando apri o cloni il progetto in PyCharm mostra un avviso e ti chiede di installare tutti i pacchetti necessari.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.