Я пишу минимальную замену publisher.py mod_python вмодуль Python по пути
Основной предпосылкой является то, что она загружается модулей на основе схемы URL:
/foo/bar/a/b/c/d
Причем/Foo/может быть каталог и «бар» - это метод ExposedBar в классе, доступном для публикации, в /foo/index.py. Аналогично/foo может отображаться в /foo.py, а bar - метод в открытом классе. Семантика этого не очень важна. У меня есть строка:
sys.path.insert(0, path_to_file) # /var/www/html/{bar|foo}
mod_obj = __import__(module_name)
mod_obj.__name__ = req.filename
Затем модуль проверяется на соответствующий класс/функции/методы. Когда процесс достигает, насколько это возможно, оставшиеся данные URI,/a/b/c передается этому методу или функции.
Это работало отлично, пока я не /var/www/html/foo/index.py и /var/www/html/bar/index.py
При просмотре в браузере, это довольно случайный который 'index.py' выбирается, даже если я установил первый путь поиска к '/ var/www/html/foo' или '/ var/www/html/bar', а затем загрузил __import __ ('index'). Я понятия не имею, почему он находит либо случайный выбор. Это видно из:
__name__ is "/var/www/html/foo/index.py"
req.filename is "/var/www/html/foo/index.py"
__file__ is "/var/www/html/bar/index.py"
Этот вопрос тогда, почему __import__ будет случайным образом выбирать любой индекс. Я бы понял это, если путь был «/ var/www/html», но это не так. Во-вторых:
Могу ли я загрузить модуль по абсолютной траектории в объект модуля? Без изменения sys.path. Я не могу найти никаких документов для __import__ или new.module() для этого.
Вы изобретать TurboGears? http://turbogears.org/ –
Нет, просто ищем скудного издателя, который будет делать именно то, что мне нужно, не больше и не меньше. И мои руки грязные, как это хороший способ узнать Python. –
На самом деле, мой вопрос был риторическим. Вы можете очень внимательно посмотреть на то, что они делают, это может сэкономить вам много времени и усилий. –