Проблемы с импортом mod_python и подпакетов: ImportError: Модуль не указан

Я изучаю mod_python и у меня проблемы с импортом пакетов.

У меня есть такая структура:

my base dir
     |
     +- __init__.py  
     +- index.py    
     +- package (directory)
        |
        +- __init__.py
        +- package.py (file)

и виртуальный хост Apache вот так:

<VirtualHost *:80>

        ServerAdmin root at localhost
        ServerName myname
        DocumentRoot /path/to/my base dir

        <Location />
                DirectoryIndex index.html index.py
                Options Indexes MultiViews FollowSymLinks
                AddHandler mod_python .py
                PythonHandler mod_python.publisher
        </Location>

</VirtualHost>

в файле index.py у меня есть что-то вроде этого:

from package.package import myobject
....
....

Когда я загружаю index.py из Apache, я получаю 500 Internal Server Error следующим образом:

ImportError: No module named package.package

Что я делаю неправильно?

Ура, Иван

3 ответа

Решение

Во-первых, если вы только начинаете веб-развертывание Python, вам не следует использовать mod_python. Сейчас это официально мертвый проект, и он устарел. Используйте вместо этого mod_wsgi.

Фактическая проблема с вашим кодом заключается в том, что вы не поместили свой корневой каталог в путь Python, поэтому mod_python не знает, где его найти. DocumentRoot используется для статических документов, а не для кода - на самом деле вам не следует устанавливать его в качестве базового каталога, так как это небезопасно и может привести к тому, что содержимое вашего кода Python будет доступно через Интернет, а это не то, что вам нужно.

Вместо этого используйте директиву PythonPath:

PythonPath "['/path/to/my base dir']"

В mod_python 3.3 структура файлов кода Python для mod_python.publisher не является пакетом. Убедитесь, что вы читаете:

http://www.modpython.org/live/current/doc-html/pyapi-apmeth.html

В частности, документация о import_module(), как она объясняет, как работает импорт кода.

Убедитесь, что ваш PYTHONPATH правильный: http://www.modpython.org/live/mod_python-3.2.8/doc-html/dir-other-pp.html

Другие вопросы по тегам