Может ли кто-нибудь подсказать мне хороший способ импорта целого каталога модулей? У меня есть структура, подобная этой:
/Foo bar.py spam.py eggs.py
Я попытался просто преобразовать его в пакет, добавив __init__.py и выполнив from Foo import *, но это сработало не так, как я надеялся.
Переведено автоматически
Ответ 1
Перечислите все файлы python (.py) в текущей папке и поместите их как __all__ переменную в __init__.py
from os.path import dirname, basename, isfile, join import glob modules = glob.glob(join(dirname(__file__), "*.py")) __all__ = [ basename(f)[:-3] for f in modules if isfile(f) andnot f.endswith('__init__.py')]
Ответ 2
Добавьте __all__ переменную в __init__.py, содержащую:
Обновление 2017 года: вы, вероятно, захотите использовать importlib вместо этого.
Сделайте каталог Foo пакетом, добавив __init__.py. В этом __init__.py добавьте:
import bar import eggs import spam
Поскольку вы хотите, чтобы он был динамическим (что может быть хорошей идеей, а может и не быть), перечислите все py-файлы с помощью list dir и импортируйте их примерно так:
import os for module in os.listdir(os.path.dirname(__file__)): if module == '__init__.py'or module[-3:] != '.py': continue __import__(module[:-3], locals(), globals()) del module
Затем из вашего кода сделайте это:
import Foo
Теперь вы можете получить доступ к модулям с помощью
Foo.bar Foo.eggs Foo.spam
и т.д. from Foo import * не является хорошей идеей по нескольким причинам, включая конфликты имен и затрудняющие анализ кода.
Ответ 4
Python, включает все файлы в каталог:
Для новичков, которые просто не могут заставить его работать, которым нужно держать себя в руках.
Создайте папку /home/el /foo и создайте файл main.py в /home/el / foo Поместите туда этот код:
from hellokitty import * spam.spamfunc() ham.hamfunc()
Создать каталог /home/el/foo/hellokitty
Создайте файл __init__.py под /home/el/foo/hellokitty и поместите туда этот код:
__all__ = ["spam", "ham"]
Создайте два файла python: spam.py и ham.py под /home/el/foo/hellokitty
Определите функцию внутри spam.py:
defspamfunc(): print("Spammity spam")
Определите функцию внутри ham.py:
defhamfunc(): print("Upgrade from baloney")
Запустите его:
el@apollo:/home/el/foo$ python main.py spammity spam Upgrade from baloney