Вопрос-Ответ

How to load all modules in a folder?

Как загрузить все модули в папку?

Может ли кто-нибудь подсказать мне хороший способ импорта целого каталога модулей?
У меня есть структура, подобная этой:

/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) and not f.endswith('__init__.py')]
Ответ 2

Добавьте __all__ переменную в __init__.py, содержащую:

__all__ = ["bar", "spam", "eggs"]

Смотри также http://docs.python.org/tutorial/modules.html

Ответ 3

Обновление 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, включает все файлы в каталог:

Для новичков, которые просто не могут заставить его работать, которым нужно держать себя в руках.


  1. Создайте папку /home/el /foo и создайте файл main.py в /home/el / foo Поместите туда этот код:


    from hellokitty import *
    spam.spamfunc()
    ham.hamfunc()

  2. Создать каталог /home/el/foo/hellokitty


  3. Создайте файл __init__.py под /home/el/foo/hellokitty и поместите туда этот код:


    __all__ = ["spam", "ham"]

  4. Создайте два файла python: spam.py и ham.py под /home/el/foo/hellokitty


  5. Определите функцию внутри spam.py:


    def spamfunc():
    print("Spammity spam")

  6. Определите функцию внутри ham.py:


    def hamfunc():
    print("Upgrade from baloney")

  7. Запустите его:


    el@apollo:/home/el/foo$ python main.py 
    spammity spam
    Upgrade from baloney

2023-08-04 01:47 python