Да, это возможно. В папке, полной файлов, которые вы хотите импортировать sh, укажите все имена файлов в списке с именем __all__
в файле __init__.py
. Из программы, в которую вы будете sh импортировать файлы, вы можете импортировать их сейчас, используя from directory import *
.
. Рассмотрим следующий пример.
Структура каталогов проекта:
.
|-- main.py
`-- modules
|-- __init__.py
|-- f.py
`-- g.py
1 directory, 4 files
main.py
from modules import *
f.f1()
f.f2()
g.g1()
g.g2()
modules / f.py
def f1():
print("This is f1() from modules/f.py.")
def f2():
print("This is f2() from modules/f.py.")
modules / g.py
def g1():
print("This is g1() from modules/g.py.")
def g2():
print("This is g2() from modules/g.py.")
modules / __ init__.py
__all__ = ["f", "g"]
Вывод main.py выглядит следующим образом.
This is f1() from modules/f.py.
This is f2() from modules/f.py.
This is g1() from modules/g.py.
This is g2() from modules/g.py.
Если вы хотите, чтобы список __all__
в __init__.py
генерировался автоматически при каждом запуске вашей программы Вы можете сделать это, используя библиотеку os
. Например:
(я удалил f.py из этого примера, чтобы не мешать атрибуту f
modules
.)
modules / __ init __. Py
import os
__all__ = []
dirname = os.path.dirname(os.path.abspath(__file__))
for f in os.listdir(dirname):
if f != "__init__.py" and os.path.isfile("%s/%s" % (dirname, f)) and f[-3:] == ".py":
__all__.append(f[:-3])
main.py
from modules import *
g.g1()
g.g2()
Вывод main.py выглядит следующим образом.
This is g1() from modules/g.py.
This is g2() from modules/g.py.