#python #python-3.x
#python #python-3.x
Вопрос:
У меня есть два разных файла .py, оба в одном каталоге — Setup.py
amp; Main.py
. У Setup.py
меня есть следующее определение функции.
def imported_modules(send_to_reqs = False,append_mod = True) :
'''
inputs:
- send_to_reqs, boolean, optional, default true:
- If true, function will return a dictionary keys = modules, values = version that has been imported
- If false, function will write to requirements text,
- append_mod, boolean, optional, default False:
- If True, function will append to requirements
- If False, fucntion will overwrite requirements
'''
import sys
# gets list of modules imported
modules = list(set(sys.modules) amp; set(globals()))
modules_dict = {}
#iterates through the list of modules and appends a dictionary with the verison
for module_name in modules:
module = sys.modules[module_name]
modules_dict[module_name] = getattr(module, '__version__','unknown')
#writes to the reqs document
if send_to_reqs == True:
if append_mod == True:
# opens the requirements text as append only and appends the modules to it
f = open("Requirements.txt","a ")
for key, value in modules_dict.items() :
f.writelines(str(key ":" value "n" ))
f.close()
return "Requirements.txt has been updated with latest modules."
else:
# opens requirements an removes existing modules and attaches new ones.
# opens as read only and saves the previous data.
f = open('Requirements.txt', 'r')
data = f.read()
f.close()
import re, datetime
# substitutes the last updated entry with currents date and time
data = re.sub("(Last updated:) (d*-d*-d* d*:d*:d*.d*)","Last updated: " str(datetime.datetime.now()), data)
#searchs for the position of --END and gets location
a = re.search(r'(.*?)(?=--END)',data)
# uses location to get
updated_header = data[:int(a.end() 6)]
for key ,value in modules_dict.items() :
updated_header = updated_header key ":" value "n"
f = open('Requirements.txt', 'w')
f.write(updated_header)
f.close()
return "Requirements file has been replaced."
else :
return modules_dict
Моя функция выполняет некоторую логику, но по сути получает словарь импортированных модулей и записывает его в файл.
В моем Main.py
я в основном просто импортирую кучу модулей для тестирования функции. Затем я пытаюсь импортировать функцию и посмотреть, какие результаты получаются. Каждый раз, когда я выполняю, я получаю пустой список, в котором я ожидаю получить список (numpy, win32com, bs4, scipy, Setup), поскольку первое, что я делаю, это импортирую эти модули.
import numpy, win32com , bs4, scipy, Setup
send_to_reqs = True
append_mod = True
a = Setup.imported_modules(send_to_reqs, append_mod)
print(a)
Когда я создавал код, у меня было определение функции внутри Main.py
, и как только я его заработал, я перешел на Setup.py
, но теперь он всегда выводит пустой словарь. Кто-нибудь может помочь мне устранить неполадки в моем коде? почему это работает, когда его определяют в том же файле .py, но когда я записываю его в другой файл .py, но в том же каталоге, и импортирую функцию, тогда она не работает? вот часть функции, которая выполняет работу по созданию словаря
import sys
# gets list of modules imported
modules = list(set(sys.modules) amp; set(globals()))
modules_dict = {}
#iterates through the list of modules and appends a dictionary with the version
for module_name in modules:
module = sys.modules[module_name]
modules_dict[module_name] = getattr(module, '__version__','unknown')