2010-06-24 4 views
1

Я изучаю mod_python, и у меня возникают проблемы с импортом пакета.Проблемы с импортом mod_python и subpackages: ImportError: Нет модуля с именем

Я структура, как это:

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

и Apache Virtual Host, как это:

<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 Внутреннюю ошибку сервера, так как следует:

ImportError: No module named package.package 

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

Приветствия, Иван

ответ

3

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

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

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

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

Спасибо! 1) Я бы хотел перейти на mod_wsgi. У меня простое веб-приложение без какой-либо прикладной среды. Можете ли вы предложить мне некоторые ресурсы для начинающих? – eradan

+0

2) Как вы предложили я исправил мою проблему с такой конфигурацией: \t ServerAdmin корень @ локальный ServerName myapp.com PYTHONPATH "sys.path + [ '/ путь/к/mybasedir']" \t Псевдоним// путь/к/mybasedir \t DirectoryIndex index.html index.py \t AddHandler mod_python .py PythonHandler mod_python.издатель PythonDebug На \t теперь он работает, но это не так сильно отличается от использования директивы DocumentRoot. – eradan

+0

@eraden: Посмотрите на Flask (http://flask.pocoo.org). Это простота, что люди, которые использовали mod_python.publisher, будут привлекательными. –

0

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

+0

Не см. Документацию mod_python 3.2.8. Думает, что многое изменилось с импортом модуля в 3.3, и поэтому старая документация не была бы актуальной, если они используют новый mod_python. –

0

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

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

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