Ubuntu: версия Python, virtualenvwrapper и django

у меня проблема с 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, вероятно, тоже помогут вам.


person Odif Yltsaeb    schedule 08.07.2012    source источник
comment
Вы забыли скомпилировать mod_wsgi для нужной вам версии?   -  person Burhan Khalid    schedule 08.07.2012
comment
если вы запускаете django из командной строки после активации вашего virtualenv. Работает ли это так, как ожидалось?   -  person Loïc Faure-Lacroix    schedule 08.07.2012
comment
тогда ваша проблема больше связана с mod_wsgi, чем с чем-либо еще. потому что ваш venv работает из командной строки. technomilk .wordpress.com/2011/08/10/ попробуйте это   -  person Loïc Faure-Lacroix    schedule 08.07.2012
comment
благодаря. хотя не работал. Больше информации в edit2.   -  person Odif Yltsaeb    schedule 09.07.2012
comment
WSGIPythonHome /home/alan/.virtualenvs/py273ucs2 ?   -  person Loïc Faure-Lacroix    schedule 09.07.2012
comment
WSGIPythonPath /home/alan/.virtualenv/py273ucs2/lib/python.../site-packages   -  person Loïc Faure-Lacroix    schedule 09.07.2012


Ответы (2)


Дубликат:

https://groups.google.com/forum/?fromgroups#!topic/modwsgi/F5Wn4uWrQAg

Проблема задокументирована по адресу:

http://code.google.com/p/modwsgi/wiki/InstallationIssues#Mixing_32_Bit_And_64_Bit_Packages

Используйте --enable-shared при настройке/установке Python.

person Graham Dumpleton    schedule 08.07.2012
comment
спасибо за всю вашу помощь чувак :). Это не дубликат первой ссылки, потому что ЗДЕСЬ я спросил, как заставить virtualenv работать с django, и там я спросил, как установить mod_wsgi для правильной версии Python. - person Odif Yltsaeb; 09.07.2012

Вы не можете установить virtualenv версии Python, которую вы еще не установили.

Цель virtualenv — изолировать ваши пакеты. Если вы создадите виртуальную среду с --no-site-packages. Он не будет использовать пакеты, уже установленные в системе. Другими словами, это означает, что вы можете установить несколько версий каждого пакета для одного двоичного файла python.

Наличие virtualenv также упрощает разработку, поскольку вам не требуется root-доступ для установки пакетов с использованием python setup.py или pip install.

Из того, что вы публикуете, не совсем понятно, почему это не работает.

чтобы активировать виртуальную среду. Ты должен сделать

source path/to/env/bin/activate

При запуске скриптов из конфигурации достаточно указать, где находится python. Если вы делаете add_site_package, вероятно, он добавляет только к python по умолчанию, а не к тому, который вы хотели.

Если ничего не работает, возможно, вы сможете это сделать. Это должно решить вашу проблему, если ничто не требует другого исполняемого файла python.

используя which python, вы сможете узнать, где находится текущий исполняемый файл python.

Вы можете заменить символическую ссылку для python по умолчанию на свой python2.7.3ucs. Но я не могу обещать, что это не сломает что-то где-нибудь. Поскольку некоторые программы могут зависеть от этого конкретного python2.7.2

изменить

Судя по всему, ваша проблема точно не с virtualenv. Но с mod_wsgi. Вот сайт, на котором описывается, как скомпилировать mod_wsgi для нужной версии Python.

http://technomilk.wordpress.com/2011/08/10/running-our-django-site-with-mod_wsgi-and-virtualenv-part-2/

эта строка:

$ ./configure --with-python=/home/isigma/.pythonbrew/pythons/Python-2.7.2/bin/python

Здесь вы указываете путь к своей версии Python, а затем выполняете шаги. И, надеюсь, это будет работать как по маслу.

изменить 2

Если ничего не работает, это может означать, что вам нужно проверить альтернативы mod_wsgi.

Вот хороший.

http://projects.unbit.it/uwsgi/wiki/Example

изменить 3

Создайте новый виртуальный файл, подобный этому

virtualenv --no-site-packages --python=/opt/bin/python
person Loïc Faure-Lacroix    schedule 08.07.2012
comment
у меня установлена ​​эта версия python. Я установил его много лет назад. - person Odif Yltsaeb; 08.07.2012
comment
Пробовал это. скачал modwsgi и попытался установить его для этой версии ucs2 python. Получил некоторую ошибку, связанную с символами юникода, которую я понятия не имею, как исправить. /opt/lib/libpython2.7.a: не удалось прочитать символы: неправильное значение collect2: ld вернул 1 статус выхода apxs: Ошибка: команда не удалась с rc=65536 . make: *** [mod_wsgi.la] Ошибка 1 - person Odif Yltsaeb; 08.07.2012
comment
/opt/lib/libpython2.7.a уверен, что libpython вашей версии 2.7.3? - person Loïc Faure-Lacroix; 08.07.2012
comment
Кстати, если вам не нужен wsgi, вы можете запустить его как прямой прокси. вы можете проверить uWSGI и другой метод. mod_wsgi может быть невозможен, но другие методы могут работать. uWSGI создаст сокет для передачи данных. Другими словами, ваше приложение будет слушать файл, а apache или nginx будут писать туда. Так что нет реальной необходимости компилировать что-то еще - person Loïc Faure-Lacroix; 08.07.2012
comment
В порядке. Я установил модвсги. Был этот замечательный чувак Грэм, который помог мне сделать это в группах google modwsgi (groups.google.com/forum/?fromgroups#!topic/modwsgi/F5Wn4uWrQAg). Моя версия mod_wsgi сейчас 3.3 - не знаю, какой она была раньше, но 3.3 также является версией, которую я скомпилировал прямо сейчас. Так что либо эта новая версия mod_wsgi работает как для virtualenv, так и для нет. Или это не работает для virtualenv. В любом случае моя тестовая страница по-прежнему показывает неправильную версию Python. - person Odif Yltsaeb; 09.07.2012
comment
Поскольку ваша проблема с python кажется решенной. попробуйте создать новый virtualenv с новым двоичным файлом - person Loïc Faure-Lacroix; 09.07.2012
comment
Сделал это. Удалил все виртуалки. Даже переустановил и virtualenv, и virtualenvwrapper. Оба по-прежнему работают нормально после переустановки, но не дают желаемого эффекта. - person Odif Yltsaeb; 09.07.2012
comment
да... и кстати:alan@alan:/usr/lib/apache2/modules$ mkvirtualenv --no-site-packages --python=/opt/bin/python py273ucs2 Запуск virtualenv с интерпретатором /opt/bin/python Флаг --no-site-packages устарел; теперь это поведение по умолчанию. - person Odif Yltsaeb; 09.07.2012
comment
Вы обновили WSGIPythonHome до своего нового виртуального окружения? потому что все кажется правильным - person Loïc Faure-Lacroix; 10.07.2012