Créez automatiquement requirements.txt


278

Parfois, je télécharge le code source de python githubet je ne sais pas comment installer toutes les dépendances. S'il n'y a pas de requirements.txtfichier, je dois le créer à la main. La question est: étant donné le répertoire du code source python, est-il possible de créer requirements.txtautomatiquement à partir de la section d'importation?


2
Vous pouvez le faire en exécutant pip freeze > requirements.txtenregistrer toutes vos bibliothèques python avec la version actuelle dans un requirements.txtfichier
Shaikhul

7
@Shaikhul mais cela n'aide pas dans le cas où les dépendances ne sont pas installées parce que vous venez de télécharger le paquet depuis GitHub ...
jonrsharpe

8
Veuillez noter: a) pip freezeaffichera les versions actuelles des allmodules installés sur ce système indépendamment de leur utilisation dans le projet en cours. b) pip ne listera que les modules qui ont été installés via pip
akskap

Réponses:


291

Si vous utilisez un environnement virtuel, pip freeze > requirements.txttrès bien. SINON , pigar sera un bon choix pour vous.

Soit dit en passant, je ne m'assure pas que cela fonctionnera avec 2.6.

MISE À JOUR :

Pipenv ou d'autres outils sont recommandés pour améliorer votre flux de développement.

Pour Python 3, utilisez ci-dessous

pip3 freeze > requirements.txt

3
Pour quiconque fait une erreur, je recommande d'essayer pip3 freeze > requirements.txtavant de poser une question.
baranskistad

3
J'exécute pip3 freeze > requirements.txtet je suis surpris de ne pas trouver certains packages que j'utilise tels que argparseet configparser. Est-ce parce qu'ils font partie du noyau Python? Je crois qu'une meilleure réponse est d'utiliser pipreqsci-dessous car elle ne listera que les exigences de votre projet.
Alexis.Rolland

@ Alexis.Rolland Oui, argparseet configparserappartient à la bibliothèque standard Python3, alors, qu'est-ce qui ne va pas pip3 freeze? Je ne comprends pas votre point.
damnever

11
@damnever Ok merci! pip3 freezeme donne la liste de tous les packages Python installés dans mon environnement alors que pipreqsme donne tous ceux réellement utilisés dans mon code source qui est ce que je cherchais. A part ça, rien de mal à ça.
Alexis.Rolland

1
pipenv a de sérieux problèmes, voir cette discussion: news.ycombinator.com/item?id=18612590
Justin M. Keyes

364

Vous pouvez utiliser le code suivant pour générer un fichier requirements.txt:

pip install pipreqs

pipreqs /path/to/project

plus d'informations sur les pipreqs peuvent être trouvées ici .

Parfois, vous rencontrez pip freeze, mais cela enregistre tous les packages dans l'environnement, y compris ceux que vous n'utilisez pas dans votre projet actuel.


1
@IgorBarinov est un avertissement et ne créera pas de problème à exécuter pipreqs, je l'ai installé sur python 2.6 et j'ai reçu le même avertissement, mais il crée un requirements.txtfichier, merci @DJanssens
Shaikhul

1
@Shaikhul si vous avez reçu ces avertissements, vous n'aurez pas de fichier complet, vous obtiendrez simplement une partie des exigences. Vous pouvez le vérifier sur github.com/npow/MemNN/tree/hyperopt repo. Je n'ai que 'hyperopt == 0.0.2 numpy == 1.9.2 scikit_learn == 0.16.1 theano == 0.7.0'
Igor Barinov

1
cela dit it is strongly recommended to upgrade to a newer Python version
Shaikhul

2
Excellent outil. Merci! La puissante caractéristique de celui-ci est qu'il génère exactement les packages utilisés, pas comme pip freeze!
Wesam Na

1
Cela ne fonctionne pas pour Python 3.6, si le nouveau formatage de sortie de l'instruction d'impression est uesd.
Anand CU

12

Dans mon cas, j'utilise Anaconda, donc l'exécution de la commande suivante à partir du terminal conda dans mon environnement l'a résolu et a créé ce fichier txt d'exigences pour moi automatiquement:

conda list -e > requirements.txt

Ceci est tiré de ce lien Github pratos / condaenv.txt

Si une erreur a été détectée et que vous utilisez anaconda, essayez d'utiliser l'option .yml:

conda env export > <environment-name>.yml

Pour qu'une autre personne utilise l'environnement ... Ou si vous créez un nouvel environnement sur une autre machine: conda env create -f .yml

L'option .yml a été trouvée ici


si vous n'utilisez pas un environnement virtuel, cela créera un fichier requirements.txt trop long
SBFRF

1
Est-ce que cela fonctionne réellement? Chaque fois que j'ai essayé cela, il y a des dépendances et des détails de syntaxe qui pip install requirements.txtrejettent.
conner.xyz

J'ai trouvé quelques erreurs en utilisant le .txt, alors j'ai juste ajouté l'autre option qui fonctionnait aussi avec moi ... "Utilisation du .yml" mentionné ci-dessus.
HassanSh__3571619

5

Assurez-vous d'exécuter pip3 pour python3.7.

pip3 freeze >> yourfile.txt

Avant d'exécuter la commande ci-dessus, assurez-vous d'avoir créé un environnement virtuel.

python3:

pip3 install virtualenv
python3 -m venv <myenvname> 

python2 :

pip install virtualenv
virtualenv <myenvname>

Après cela, mettez votre code source dans le répertoire. Si vous exécutez le fichier python maintenant, il ne se lancera probablement pas si vous utilisez des modules non natifs. Vous pouvez installer ces modules en cours d'exécution

pip3 install <module> or pip install <module> 

Cela ne vous affectera pas la liste complète des modules, sauf l'environnement dans lequel vous vous trouvez.

Vous pouvez maintenant exécuter la commande en haut et vous avez maintenant un fichier d'exigences qui contient uniquement les modules que vous avez installés dans l'environnement virtuel. Vous pouvez maintenant exécuter la commande en haut.

Je conseille à tout le monde d'utiliser des environnements car cela facilite les choses quand il s'agit de choses comme ça.

J'espère que cela vous a aidé.


1

Si vous rencontrez le même problème que le mien, c'est-à-dire pas sur l'environnement virtuel et que vous souhaitez requirements.txt pour un projet spécifique ou à partir du dossier sélectionné (inclut les enfants) et pipreqs ne prend pas en charge.

Vous pouvez utiliser :

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: Il peut avoir quelques bibliothèques supplémentaires lors de la vérification de fuzzylogic.


1

le meilleur moyen pour Python 3 est:

pip3 freeze > requirements.txt

ça a marché pour moi ...


0

si vous utilisez PyCharm, lorsque vous ouvrez ou clonez le projet dans PyCharm, il affiche une alerte et vous demande d'installer tous les packages nécessaires.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.