Подтвердить что ты не робот

Автоматически создавать требования .txt

Иногда я загружаю исходный код python из github и не знаю, как установить все зависимости. Если нет requirements.txt файла я должен создать его руками. Вопрос: Учитывая питон каталог исходного кода можно создать requirements.txt автоматически из раздела импорта?

4b9b3361

Ответ 1

Если вы используете виртуальную среду, pip freeze > requirements.txt просто отлично. Если нет, то сигар станет для вас хорошим выбором.

Кстати, я не гарантирую, что он будет работать с 2.6.

ОБНОВЛЕНИЕ:

Pipenv или другие инструменты рекомендуются для улучшения процесса разработки.

Ответ 2

Вы можете использовать следующий код для генерации файла requirements.txt:

pip install pipreqs

pipreqs /path/to/project

больше информации, связанной с pipreqs, можно найти здесь.

Иногда вы сталкиваетесь с pip freeze, но это сохраняет все пакеты в среде, включая те, которые вы не используете в текущем проекте.

Ответ 3

В моем случае я использую Anaconda, поэтому выполнение следующей команды из терминала conda в моей среде решило ее и автоматически создало для меня этот текстовый файл требований:

conda list -e > requirements.txt

Это было взято из этой ссылки Github pratos/condaenv.txt

Ответ 4

Обязательно запустите pip3 для python3.7.

pip3 freeze >> yourfile.txt

Перед выполнением вышеуказанной команды убедитесь, что вы создали виртуальную среду.

python3:

pip3 install virtualenv
python3 -m venv <myenvname> 

python2:

pip install virtualenv
virtualenv <myenvname>

После этого поместите ваш исходный код в каталог. Если вы сейчас запустите файл python, вероятно, он не запустится, если вы используете не собственные модули. Вы можете установить эти модули под управлением

pip3 install <module> or pip install <module> 

Это не повлияет на весь список модулей, кроме среды, в которой вы находитесь.

Теперь вы можете выполнить команду сверху, и теперь у вас есть файл требований, который содержит только модули, установленные в виртуальной среде. Теперь вы можете запустить команду сверху.

Я советую всем использовать окружение, поскольку это облегчает задачу, когда дело доходит до подобных вещей.

Надеюсь, это помогло.

Ответ 5

Если вы столкнулись с той же проблемой, что и моя, т.е. не в виртуальной среде, и хотите require.txt для конкретного проекта или из выбранной папки (включая детей) и pipreqs не поддерживает.

Вы можете использовать:

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.: У него может быть несколько дополнительных библиотек, так как он проверяет fuzzylogic.