Я уже знаю, что программа питон может определить его имя файла, самый простой, что я видел это существоМожет ли модуль python определить его имя файла или что он был импортирован как?
import sys
name = sys.argv[0]
Мой вопрос может код в импортируемого модуля делать то же рода вещи? Я использую python 3.5.
Я пишу большую программу, которая для удобства и расширяемости разделяется на главный раздел и «надстройки», а скорее на Audacity. Я пытаюсь упростить его расширение и СУХОЙ, в результате чего добавочный модуль просто добавляется в каталог программы, и основная программа может его поднять и использовать. Я использую стандарт именования, где имена файлов модулей имеют префикс для конкретной программы, чтобы идентифицировать их, а затем внедрять некоторые классы и данные, называемые стандартными именами.
Поскольку основная программа не знает имена дополнений раньше времени, я их импорта, как это, который, кажется, работает нормально
def get_available_modules(self, prefix=""):
""" import the files named prefix_xxx.py in this folder """
files = os.listdir(os.getcwd())
self.modules = {}
for file_name in files:
# print('examining ', file_name)
if file_name.startswith(prefix):
# print('this one looks OK ', file_name)
# strip the .py off the end
mod_name = file_name[:-3]
# strip prefix off the front
mod_ID = mod_name[len(prefix):]
self.modules[mod_ID] = __import__(mod_name)
# print('loaded modules ')
# for name in self.modules:
# print(name)
Попав модули, я могу затем получить доступ к тому, что они делают, поместить свои описания в списокBoxes или меню, создать экземпляр и показать свои панели управления и указать им ресурсы, на которых они должны работать. Однако для отладки самосогласованности я хотел бы, чтобы модуль мог определить, что он назвал, каково его имя. Я буду создавать новые функции, редактируя предыдущие, и знаю, что я не буду менять все последовательно.
Очевидно, что при запуске объектов, я могу также передать mod_ID, но это скорее похоже на то, что фокусник помещает кролика в шляпу.
Если в модуле есть какой-либо параметр, который делает его имя файла доступным для себя?
не пробовал это сам, но похоже, что это может сработать: __ loader __. Fullname см. Https://www.python.org/dev/peps/pep-0302/и http://stackoverflow.com/questions/5183601 –
Возможный дубликат [Python \ _ \ _ файл \ _ \ _ атрибута абсолютный или относительный?] (http://stackoverflow.com/questions/7116889/ python-file-attribute-absolute-or-relative) – user590028
Um, dunder name dunder ____name____ работает. Я уверен, что это возможно для R в TFM где-то! ____loader____, похоже, не имеет .fullname, по крайней мере, не на моем 3.5. –