Как импортировать произвольный исходный файл python (чье имя файла может содержать любые символы и не всегда заканчивается .py
) в Python 3.3+?Импортировать произвольный исходный файл python. (Python 3.3+)
Я использовал imp.load_module
следующим образом:
>>> import imp
>>> path = '/tmp/a-b.txt'
>>> with open(path, 'U') as f:
... mod = imp.load_module('a_b', f, path, ('.py', 'U', imp.PY_SOURCE))
...
>>> mod
<module 'a_b' from '/tmp/a-b.txt'>
Он по-прежнему работает в Python 3.3, но согласно imp.load_module
документации, она устарела:
Устаревший начиная с версии 3.3: Ненужные грузчиками должен использоваться для загрузочных модулей, а find_module() устарел.
и imp
модуль документации рекомендуется использовать importlib
:
Примечание Новые программы должны использовать importlib вместо этого модуля.
Каков правильный способ загрузить произвольный исходный файл python в Python 3.3+ без использования устаревшей функции imp.load_module
?
Могу ли я спросить, почему вы это делаете? Я поддерживаю importlib, и я пытаюсь получить ответы от людей о том, почему они используют 'imp.load_module()' над прямым оператором импорта. Ожидаете ли вы позже импортировать модуль по имени (например, «import a_b»)? Вам все равно, что какие-либо пользовательские импортеры не будут использоваться в этом подходе? Ожидаете ли вы, что модуль будет полнофункциональным (например, определите '__name__' и' __loader__')? –
@BrettCannon, сторонняя программа регулярно (один раз в час) модифицирует текстовый файл, содержащий инструкции python (в основном, строки 'THIS = 'blah''). Имя файла не заканчивается на '.py'. Моя программа прочитала этот файл. – falsetru
@BrettCannon, мне неизвестны пользовательские импортеры. Мне все равно, что модуль будет полнофункциональным. – falsetru