"""example.py"""
from test_package import package_file_0
from test_package import package_file_1
...
from test_package import package_file_n
на помощь приходят importlib.import_module()
, или importlib.__import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], 0)
pip install -U import-autoload
"""__init__.py"""
from autoload import autoload
__all__ = autoload()
"""example.py"""
from test_package import *
расширенный вариант
"""main.py"""
from autoload import autoload
autoload("project_dir.test_package", pattern="package_file_[0123]")
module_name
указывает путь до пакета (каталога), пишется через точку(!), как при импортеfrom module_name import
. по-умолчанию берется путь к текущему модулю, так что одну точку можно не указывать. а две точки, как ссылка на каталог выше, должны сработать, но я не пробовалpattern
как при поиске файлов, например вfnmatch(filename, pattern)
, по-умолчанию*.py
- параметры можно комбинировать
- если нужно выбрать один файл из каталога, его лучше прописать в
pattern
, а не в хвост пути: такautoload("package.sub.name", "module")
, а не такautoload("package.sub.name.module")
- но если выбираете один файл из текущего модуля, пишите его имя в первый параметр
autoload("module")
; с точкойautoload(".", "module")
вроде бы работает, но я не проверял
- для module_name добавить обработку системных разделителей путей