Иногда я загружаю исходный код python из github
и не знаю, как установить все зависимости. Если нет requirements.txt
файла я должен создать его руками. Вопрос: Учитывая питон каталог исходного кода можно создать requirements.txt
автоматически из раздела импорта?
Автоматически создавать требования .txt
Ответ 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.