Форум сайта python.su
установил mod_python, подключил модуль питона в настройке апача, создаю директорию в корне сервера
пишу там скрипт index.py
#!c:/Python25/python.exe -u
print ‘hi world!’
в этой же директории пишу .htaccess:
AddHandler mod_python .py
PythonHandler mptest
PythonDebug On
при попытке обратьться к скрипту пишет в браузере
MOD_PYTHON ERROR
ProcessId: 2208
Interpreter: ‘localhost’
ServerName: ‘localhost’
DocumentRoot: ‘C:/AppServ/www’
URI: ‘/python/index.py’
Location: None
Directory: ‘C:/AppServ/www/python/’
Filename: ‘C:/AppServ/www/python/index.py’
PathInfo: ‘'
Phase: ’PythonHandler'
Handler: ‘mptest’
Traceback (most recent call last):
File “C:\Python25\Lib\site-packages\mod_python\importer.py”, line 1537, in HandlerDispatch
default=default_handler, arg=req, silent=hlist.silent)
File “C:\Python25\Lib\site-packages\mod_python\importer.py”, line 1202, in _process_target
module = import_module(module_name, path=path)
File “C:\Python25\Lib\site-packages\mod_python\importer.py”, line 304, in import_module
return __import__(module_name, {}, {}, )
ImportError: No module named mptest
я уже и апач другой ставил mod_python другой-один виг выдает,
помогите пожалуйста!
вот моя конфигурация: Apache/2.2.3 (Win32) PHP/5.1.6 mod_python/3.3.1 Python/2.5 Server at localhost Port 80
Офлайн
А что это за handler mptest ты прописал и где он лежит? Он должен быть в директории, входящей в список директорий поиска модулей(см. sys.path).
Офлайн
Да небольшая ошибочка вышла,
теперь в sys.path добавил директорию, сервера (в которой лежит скрипт), а в .htaccess прописываю:
AddHandler mod_python .py
PythonHandler index
PythonDebug On
index - это исполняемый скрипт в той самой директории ничего особо не изменилось, вот что выдает:
MOD_PYTHON ERROR
ProcessId: 2428
Interpreter: ‘localhost’
ServerName: ‘localhost’
DocumentRoot: ‘C:/AppServ/www’
URI: ‘/python/index.py’
Location: None
Directory: ‘C:/AppServ/www/python/’
Filename: ‘C:/AppServ/www/python/index.py’
PathInfo: ‘'
Phase: ’PythonHandler'
Handler: ‘index’
Traceback (most recent call last):
File “C:\Python25\Lib\site-packages\mod_python\importer.py”, line 1537, in HandlerDispatch
default=default_handler, arg=req, silent=hlist.silent)
File “C:\Python25\Lib\site-packages\mod_python\importer.py”, line 1206, in _process_target
object = apache.resolve_object(module, object_str, arg, silent=silent)
File “C:\Python25\Lib\site-packages\mod_python\apache.py”, line 696, in resolve_object
raise AttributeError, s
AttributeError: module ‘C:\AppServ\www\python\index.py’ contains no ‘handler’
MODULE CACHE DETAILS
Accessed: Thu Feb 22 23:01:15 2007
Generation: 0
_mp_fbd641d0b7f6fc363655fd8d53ec922c {
FileName: ‘C:\\AppServ\\www\\python\\index.py’
Instance: 1
Generation: 1
Modified: Wed Feb 07 19:40:06 2007
Imported: Thu Feb 22 23:01:15 2007
}
Офлайн
Имхо, какой-то кривой подход сам по себе.
Это с PHP так можно извращаться. В питоне я бы взял готовый WSGI handler для mod_python и веб-приложение выглядело бы как отдельное приложение.
Статику отдавал бы веб-сервер, а скрипты - наше отдельное веб-приложение.
Офлайн
genИзменилось все очень даже значительно(сравни классы исключений). В твоем скрипте должна быть ф-ция handler.
index - это исполняемый скрипт в той самой директории ничего особо не изменилось, вот что выдает:
Офлайн
Mkdir+1
Имхо, какой-то кривой подход сам по себе.
Это с PHP так можно извращаться. В питоне я бы взял готовый WSGI handler для mod_python и веб-приложение выглядело бы как отдельное приложение.
Статику отдавал бы веб-сервер, а скрипты - наше отдельное веб-приложение.
Офлайн
спасибо, помогло, как я понимаю, функция handler(req) принимает req - в качестве аргумента при запуске процесса питона когда я пишу uri в браузере. т.е. как я понимаю, нужно запускать какую-то известную питону
функцию и чтобы вывести строку в баузере, мне надо делть что-то типа этого:
from mod_python import apache
def handler(req):
req.content_type = “text/html”
req.write(“<br >Hello World!!!!”)
return apache.OK
а нельзя ли просто писать что то типа
print “hello world!!! ” ?
Офлайн
Можно, если content-type text/plain
Офлайн
2gen:
Если тебе близок PHP like подход создания сайтов, то попробуй написать веб-приложение под cherrypy.
Для старта лучше возьми версию 2.2 - документация по cherrypy 3 еще не готова, а по 2.2 даже книги есть.
Ничего сложного в cherrypy нет. Свое приложение развернёшь очень быстро. Тебе должно понравится )
Темплейтовый движок можешь взять любой (я, как всегда, порекомендую мой любимый cheetah).
Если привык общаться с базой данных на уровне SQL-запросов, то для MySQL возьми MySQLdb а для PostgreSQL возьми psycopg2.
Если прельщает ORM, то это однозначно SQLAlchemy.
Как правильно сказал Юра:
j2aПоэтому сперва пиши приложение так, чтобы оно запускалось отдельно от любых веб-серверов (в качестве standalone webserver'a), а потом его уже можно будет повесить и на Апач с mod_python и на lighttpd и на nginx и вообще на любой из веб-серверов, которые поддерживают fastcgi.
подход “поставлю я апач, а к нему …” порочен. Нужно плясать не от порога, а от печки. Т.е. от приложения. Apache+mod_python - это один из способов развертывания.
Офлайн
2gen: Да, и еще. Хочу подбодрить твои начинания своим примером.
До того как я перешёл на python, я уже считался матёрым волком в PHP =)
И мне по-началу тоже было очень непривычно со всеми этими WSGI, PythonHandler'ами, fastcgi и прочим.
Плюс ко всему, в то время мои знания английского стремились к нулю до бесконечности =)
А русской документации по WSGI и прочим нет. Это осложняло задачу.
Начал я с Django. Прошёл туториал, мне понравилось и я решил прикрутить моё первое приложение к Апачу.
Именно к Apache, потому что сказывалась старая PHP-привычка и с другими веб-серверами я дела особо не имел.
Как это ни стыдно, но подключить Django к апачу через mod_python у меня так и не получилось =)
Через FastCGI тоже не удалось из-за ограниченности windows (да, тогда я еще пользовался виндою).
В итоге провозился я с этим несколько дней и забил, решив сделать простейший блог без всяких там питоновских фреймворков.
Первое что я сделал - это повторил твои действия ;)
То есть, начал искать способ определения .py файлов в конфиге апача, чтобы работало как в PHP.
Мне удалось это сделать, но я быстро сообразил, что это тупиковый подход.
Тогда я узнал о web.py, попробовал сделать простой блог и все мои представления о подходе к веб-разработке перевернулись с ног на голову (читай: с PHP-подхода на нормальный).
Но, опять же, из-за ограниченности Windows дело далеко не ушло.
И вот только тогда, когда я уже начал дорабатывать реальный веб-проект, написанный на питоне, ситуация с WSGI и прочими начала прояснятся (да и английский стал намного лучше).
Постепенно пришло понимание как работают такие фрейморки как Django, TurboGears и Pylons.
Пришло понимание того, что плясать нужно “от печки” и что вообще можно собрать свой собственный фреймворк из любимых компонентов и обойтись без всяких Django.
Короче, к чему я все веду. Понимание приходит с опытом. Опыт приходит, если не расстраиваться на начальных этапах и продолжать ковыряться.
Новичку гораздо сложнее начать веб-разработку с использованием python, чем начинать с того же PHP.
В PHP все просто: открыл файл, написал <?php и поехали. В питоне сложнее, но оно того стоит!
Поэтому, самое важное правило звучит просто: не отступать.
Собственно, это все что я хотел сказать )
Успехов в постижении Python'а!
Офлайн