python - example - Crear automáticamente require.txt
python import from parent directory (5)
En mi caso, uso Anaconda, por lo que ejecutar el siguiente comando desde la terminal conda dentro de mi entorno lo resolvió y creó este archivo txt de requisitos para mí automáticamente:
conda list -e > requirements.txt
Esto fue tomado de este enlace de Github pratos/condaenv.txt
A veces descargo el código fuente de
github
desde
github
y no sé cómo instalar todas las dependencias.
Si no hay un archivo require.txt, tengo que crearlo a mano.
La pregunta es: dado el directorio del código fuente de Python, ¿es posible crear
requirements.txt
automáticamente desde la sección de importación?
Puede usar el siguiente código para generar un archivo require.txt:
pip install pipreqs
pipreqs /path/to/project
Puede encontrar más información relacionada con pipreqs here .
A veces te encuentras con
pip freeze
, pero esto guarda todos los paquetes en el entorno, incluidos los que no usas en tu proyecto actual.
Si enfrenta el mismo problema que el mío, es decir, no está en el entorno virtual y quiere require.txt para un proyecto específico o de la carpeta seleccionada (incluye elementos secundarios ) y pipreqs no es compatible.
Puedes usar :
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))
PD: puede tener algunas bibliotecas adicionales, ya que comprueba fuzzylogic.
Asegúrese de ejecutar pip3 para python3.7.
pip3 freeze >> yourfile.txt
Antes de ejecutar el comando anterior, asegúrese de haber creado un entorno virtual.
python3:
pip3 install virtualenv
python3 -m venv <myenvname>
python2 :
pip install virtualenv
virtualenv <myenvname>
Después de eso, ponga su código fuente en el directorio. Si ejecuta el archivo python ahora, probablemente no se iniciará si está utilizando módulos no nativos. Puedes instalar esos módulos corriendo
pip3 install <module> or pip install <module>
Esto no afectará su lista completa de módulos, excepto el entorno en el que se encuentra.
Ahora puede ejecutar el comando en la parte superior y ahora tiene un archivo de requisitos que contiene solo los módulos que instaló en el entorno virtual. Ahora puede ejecutar el comando en la parte superior.
Aconsejo a todos que usen entornos, ya que facilita las cosas cuando se trata de cosas como esta.
Espero que esto haya ayudado.