у меня проблема с virtualenvs и django. Видимо, я просто не понимаю, как они должны работать.
Я установил python 2.7.3 ucs2 в /opt/bin/python, и он отлично работает. Я установил virtualenv и virtualenvwrapper и создал виртуальную среду с именем py273ucs2, поэтому, когда я набираю workon py273ucs2, я получаю правильную виртуальную среду.
когда я создаю скрипт Python с
#!/home/alan/python/virtualenvs/py273ucs2/bin/python
import sys
print sys.maxunicode
я получаю 65535, что правильно для ucs2 python.
в то же время я понятия не имею, как использовать правильную виртуальную среду для моего приложения django, чтобы я мог использовать ucs2 python, а не ucs4. Я попытался создать один тестовый проект с помощью virtualenvwrapper.django, думая, что его файл wsgi или manage.py дадут мне подсказки о том, как запустить скрипт wsgi с правильной средой - не повезло.
Я нашел этот сайт: http://www.saltycrane.com/blog/2009/05/notes-using-pip-and-virtualenv-django/
что в основном (в дополнение к другим вещам, которые я уже сделал) говорит мне добавить это в мой файл wsgi:
site.addsitedir('/srv/python-environments/saltycrane/lib/python2.5/site-packages')
что в моем случае:
site.addsitedir('/home/alan/python/virtualenvs/py273ucs2/lib/python2.7/site-packages')
Пробовал - не повезло. Затем идет такая страница: http://www.gyford.com/phil/writing/2011/06/27/virtualenv-webfaction.php В дополнение к последней странице предлагается добавить:
activate_this = os.path.expanduser("~/.virtualenvs/my_env_name/bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))
что в моем случае:
activate_this = os.path.expanduser("/home/alan/python/virtualenvs/py273ucs2/bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))
опять не повезло.. посмотреть
def base(request):
return HttpResponse(sys.version+' maxunicode ' +str(sys.maxunicode))
выводит версию Python 2.7.2 и maxunicode 1114111, а не 65535.
Затем в stackoverflow есть это сообщение: Как django работает с virtualenv? что предлагает добавить параметры в httd.conf - тоже пробовал и тоже не работает.
Так что честно - я не понимаю этого. Возможно, версия должна оставаться 2.7.2, а не 2.7.3... тогда какой смысл в virtualenvs... Или я делаю что-то не так и не получаю что-то из этих примеров. Я также проверил вики wsgi о virtualevns:
http://code.google.com/p/modwsgi/wiki/VirtualEnvironments
и изменил мой httpd.conf на:
WSGIPythonHome /home/alan/python/virtualenvs/py273ucs2
WSGIPythonPath /home/alan/python/virtualenvs/py273ucs2/lib/python2.7/site-packages
WSGIDaemonProcess printer user=alan group=alan processes=5 threads=5 python-path=/home/alan/python/virtualenvs/py273ucs2/lib/python2.7/site-packages
WSGIProcessGroup printer
WSGIScriptAlias / /home/alan/projects/printer/printer.wsgi
Ничего такого. Все еще смотрите на Python 2.7.2...
может кто-нибудь помочь мне, пожалуйста :)
Алан
Edit1: ответ на комментарии:
1) Мне нужно установить/скомпилировать новый mod_wsgi, если я хочу использовать виртуальную среду? Зачем?
2) if i do:
alan@alan:~$ workon py273ucs2
(py273ucs2)alan@alan:~$ cd projects/printer/
(py273ucs2)alan@alan:~/projects/printer$ python manage.py runserver
Validating models...
0 errors found
Django version 1.3, using settings 'printer.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[08/Jul/2012 05:01:00] "GET / HTTP/1.1" 200 68
то мой взгляд показывает мне:
2.7.3 (по умолчанию, 16 мая 2012 г., 10:58:59) [GCC 4.6.1] maxunicode 65535
Edit2: благодаря помощи Грэма Дамплтона в группе modwsgi google мне удалось установить mod_wsgi для ucs2 python (https://groups.google.com/forum/?fromgroups#!topic/modwsgi/F5Wn4uWrQAg).
Но когда я запускаю этот сайт, я все равно получаю
2.7.2+ (по умолчанию, 4 октября 2011 г., 20:41:12) [GCC 4.6.1] maxunicode 1114111
нет
2.7.3 (по умолчанию, 9 июля 2012 г., 13:32:29) [GCC 4.6.1] maxunicode 65535
Кстати, журнал ошибок apache выводит следующее:
[Пн, 09 июля, 14:13:19 2012] [предупреждение] mod_wsgi: скомпилировано для Python/2.7.3. [Пн, 09 июля, 14:13:19 2012] [предупреждение] mod_wsgi: среда выполнения с использованием Python/2.7.2+.
Окончательное редактирование:
Было несколько проблем с установкой mod_wsgi. Всю необходимую информацию вы можете узнать, перейдя по этой ссылке: https://groups.google.com/forum/?fromgroups#!topic/modwsgi/F5Wn4uWrQAg.
Но после этих проблем дело в том, что способ установки Ubuntu Python конфликтует с другими Python (возможно, не лучшее объяснение, но вы найдете очень хорошее объяснение Грэма Дамплтона, если вы перейдете по ссылке выше). Виртуальный питон и mod_wsgi начали работать, когда я удалил пакет libapache2-mod-python. Это вызвало другие проблемы, но эти проблемы вызваны тем, как настроены Ubuntu и ее пакет Python.
Так что, если вы являетесь пользователем Ubuntu и столкнулись с той же проблемой, то эта страница и огромные усилия Graham Duppletons, вероятно, тоже помогут вам.