Parfois, je télécharge le code source Python à partir de github
et je ne sais pas comment installer toutes les dépendances. S'il n'y a pas de fichier requirements.txt
, 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.txt
automatiquement à partir de la section d'importation?
Si vous utilisez un environnement virtuel, pip freeze > requirements.txt
convient parfaitement. Si non, pigar sera un bon choix pour vous.
En passant, je ne m'assure pas que cela fonctionnera avec la version 2.6.
METTRE À JOUR:
Pipenv ou d’autres outils sont recommandés pour améliorer votre flux de développement.
Vous pouvez utiliser le code suivant pour générer un fichier exigences.txt:
pip install pipreqs
pipreqs /path/to/project
plus d’informations sur les pipreqs peuvent être trouvées ici .
Vous rencontrez parfois pip freeze
, mais cela enregistre tous les packages de l'environnement, y compris ceux que vous n'utilisez pas dans votre projet actuel.
Assurez-vous de lancer pip3 pour python3.7.
pip3 freeze >> yourfile.txt
Il devrait s'agir soit d'un problème de compatibilité, soit d'un bug indiquant que ce problème ne fonctionne pas. Assurez-vous d'aller dans le fichier "gelé" et supprimez tout module dont vous n'avez pas besoin. C'est la façon dont j'ai travaillé autour de cela. :)
Si le même problème que le mien, c’est-à-dire pas sur l’environnement virtuel et veut 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))
P.S: Il peut avoir quelques bibliothèques supplémentaires car il vérifie fuzzylogic.
Dans mon cas, j'utilise Anaconda. L'exécution de la commande suivante à partir de conda terminal dans mon environnement a résolu le problème et créé ce fichier txt d'exigences pour moi automatiquement:
conda list -e > requirements.txt
Ceci a été pris de ce lien Github pratos/condaenv.txt