Как я могу автозагрузить все мои модули, хранящиеся в разных каталогах и подкаталогах?Автозагрузчик модулей Python?
Я видел это answer, который использует __import__
, но это все еще не автозагрузка, которую я имею в виду.
Я думаю что-то похожее на PHP autoloader. Еще лучше что-то вроде Composer autoloader.
Похоже, что автозагрузчик не является популярным в Python из исследования, которое я собрал до сих пор (не могу быть уверенным, поскольку я новичок в Python). Является ли автозагрузка чем-то неуправляемым в Python?
Мой автозагрузку код до сих пор,
import os
import sys
root = os.path.dirname(__file__)
sys.path.append(root + "/modules")
sys.path.append(root + "/modules/User")
sys.path.append(root + "/modules/Article")
# IMPORTS MODULES
module = __import__("HelloWorld")
my_class = getattr(module, "HelloWorld")
# This is our application object. It could have any name,
# except when using mod_wsgi where it must be "application"
def application(environ, start_response):
results = []
helloWorld = my_class()
results.append(helloWorld.sayHello())
output = "<br/>".join(results)
print output
...
Как вы можете видеть, что я по-прежнему необходимо иметь эти строки, чтобы загрузить модули,
sys.path.append(root + "/modules")
sys.path.append(root + "/modules/User")
sys.path.append(root + "/modules/Article")
Что делать, если у меня есть тонны папок и подпапки? Я собираюсь перечислить их всех? В конце концов, это длинный список, не так ли?
Кроме того, с помощью __import__
кажется, не имеет большого отличия от этого,
import os
import sys
root = os.path.dirname(__file__)
sys.path.append(root + "/modules")
sys.path.append(root + "/modules/User")
sys.path.append(root + "/modules/Article")
# IMPORTS MODULES
import hello
import HelloWorld
from HelloWorld import HelloWorld
# This is our application object. It could have any name,
# except when using mod_wsgi where it must be "application"
def application(environ, start_response):
Последнее выглядит лучше и аккуратнее меня.
Любые идеи?
извините, удалил свой комментарий. не был уверен, что это может помочь. в основном добавьте файлы '__init __. py' в папки. http://stackoverflow.com/questions/13215386/creating-python-packages –
все в порядке. Может быть, я должен посмотреть, как превратить эти модули в пакет? У меня уже есть '__init __. Py' в каждой папке. – laukok
, то у вас уже есть пакет и вы можете импортировать его из 'modules.User import HelloWorld' (или sth вроде этого). только путь, где 'modules' может быть найден, должен находиться в' PYTHONPATH'. –