Назад | Перейти на главную страницу

Заставить mod_wsgi использовать python2.7.2 вместо python2.6?

Я использую Ubuntu 10.04.1 LTS, и он был предварительно упакован с python2.6, но мне нужно заменить его на python2.7.2.

(Причина проста, 2.7 имеет много функций, перенесенных из 3)

я установил python2.7.2, используя

./configure
make
make altinstall

опция altinstall установила его, не касаясь версии системы по умолчанию, в /usr/local/lib/python2.7 и поместила интерпретатор в /usr/local/bin/python2.7

Затем, чтобы помочь mod_wsgi найти python2.7, я добавил следующее в / etc / apache2 / sites-available / wsgisite

WSGIPythonHome /usr/local

я запускаю apache и запускаю тестовое приложение wsgi, НО меня приветствует Python 2.6.5 а не Python2.7

Позже я заменил стандартную ссылку на python simlink, чтобы указать на python 2.7.

ln -f /usr/local/bin/python2.7 /usr/bin/python

Теперь, набрав "python" на консоли, вы откроете python2.7, но каким-то образом mod_wsgi все еще подхватывает python2.6.

Затем я попробовал,

PATH=/usr/local/bin:$PATH
export PATH

затем выполните быстрый перезапуск apache, но пока снова его python2.6 !!


Вот мой $ PATH

/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

содержимое / etc / apache2 / sites-available / wsgisite

WSGIPythonHome /usr/local


<VirtualHost *:80>

    ServerName wsgitest.local
    DocumentRoot /home/wwwhost/pydocs/wsgi
    <Directory /home/wwwhost/pydocs/wsgi>
        Order allow,deny
        Allow from all
    </Directory>

    WSGIScriptAlias / /home/wwwhost/pydocs/wsgi/app.wsgi

</VirtualHost>

app.wsgi

import sys

def application(environ, start_response):
    status = '200 OK'
    output = sys.version

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

Apache error.log

'import site' failed; use -v for traceback
[Sun Jun 19 00:27:21 2011] [info] mod_wsgi (pid=23235): Initializing Python.
[Sun Jun 19 00:27:21 2011] [notice] Apache/2.2.14 (Ubuntu) mod_wsgi/2.8 Python/2.6.5 configured -- resuming normal operations
[Sun Jun 19 00:27:21 2011] [info] Server built: Nov 18 2010 21:20:56
[Sun Jun 19 00:27:21 2011] [info] mod_wsgi (pid=23238): Attach interpreter ''.
[Sun Jun 19 00:27:21 2011] [info] mod_wsgi (pid=23239): Attach interpreter ''.
[Sun Jun 19 00:27:31 2011] [info] mod_wsgi (pid=23238): Create interpreter 'wsgitest.local|'.
[Sun Jun 19 00:27:31 2011] [info] [client 192.168.1.205] mod_wsgi (pid=23238, process='', application='wsgitest.local|'): Loading WSGI script '/home/wwwhost/pydocs/$
[Sun Jun 19 00:27:50 2011] [info] mod_wsgi (pid=23239): Create interpreter 'wsgitest.local|'.

Кому-нибудь удавалось запустить mod_wsgi на несистемной версии python по умолчанию?

компиляция python 2.7

./configure \
   --prefix=/usr/local \
   --enable-unicode=ucs4 \
   --enable-shared \
   LDFLAGS="-Wl,-rpath /usr/local/lib"

make && make altinstall

не забывай --enable-shared или у вас могут возникнуть проблемы позже.

компиляция mod_wsgi для python 2.7

https://code.google.com/p/modwsgi/wiki/InstallationIssues

так как вы сделали make altinstall установить python2.7 у тебя не будет python-devel пакет для установки; так что вам понадобится mod_wsgi для ссылки на правильный питон.

./configure --with-python=/usr/local/bin/python2.7 
# then edit Makefile if you want to change DESTDIR
make && make install

... попробуйте запустить httpd ...

Запуск httpd: httpd: синтаксическая ошибка в строке 221 /etc/httpd/conf/httpd.conf: синтаксическая ошибка в строке 2 /etc/httpd/conf.d/wsgi.conf: не удается загрузить /opt/mod_wsgi2.7/ usr / lib64 / httpd / modules / mod_wsgi.so на сервер: libpython2.7.so.1.0: невозможно открыть файл общих объектов: нет такого файла или каталога

Поскольку мы не используем один и тот же питон, и мы не связали модуль с какой-либо конкретной опцией, чтобы он выглядел в правильном месте, он не может найти libpython2.7.so.1.0, мы можем изменить это, сделав libtool проверьте правильное место.

# use LDFLAGS to tell libtool resulting lib needs to
# look for shared libs in /usr/local/lib too.
./configure \
   --with-python=/usr/local/bin/python2.7 \
   LDFLAGS="-R/usr/local/lib"
# then edit Makefile if you want to change DESTDIR
# e.g. DESTDIR = /opt/mod_wsgi2.7
make && make install

... попробуйте снова запустить http ...

Запуск httpd: httpd: синтаксическая ошибка в строке 221 /etc/httpd/conf/httpd.conf: синтаксическая ошибка в строке 2 /etc/httpd/conf.d/wsgi.conf: невозможно загрузить /opt/mod_wsgi2.7/ usr / lib64 / httpd / modules / mod_wsgi.so на сервер: /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so: невозможно открыть файл общих объектов: разрешение отказано

Эта последняя ошибка связана с тем, что моя система работает под управлением selinux, а файл имеет контекст по умолчанию. Быстрый взгляд на stackoverflow говорит мне, что это проблема с selinux.

исправление контекста selinux

# ls -Z /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so 
-rwxr-xr-x. root root unconfined_u:object_r:user_tmp_t:s0 /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so

Исправление заключается в использовании правильного контекста, который можно найти в исходном модуле mod_wsgi.

chcon --reference /etc/httpd/modules/mod_wsgi.so /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so 

Вот как вы можете настроить mod_wsgi для использования Python2.7

Я столкнулся с той же проблемой. И я искал вариант удаления mod_wsgi и его повторной установки с соответствующими конфигами.

Прочитав одну из статей, я понял, что нет необходимости удалять мой текущий mod_wsgi, и я мог просто пойти дальше и переустановить mod_wsgi3.4 (раньше у меня была v3.2) с настройками для использования Python2.7 (похоже, процесс установки переписывает все без ошибок / конфликтов).

Поскольку у меня уже был установлен Python2.7.

Я переустановил mod_wsgi-3.4 (без деинсталляции)

[root @ server ~] # cd ~

[root @ server ~] # wget http://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz

[корневой @ сервер ~] # tar xvf mod_wsgi-3.4.tar.gz

[root @ server ~] # cd mod_wsgi-3.4

Настроил mod_wsgi с установленным python2.7

[root @ server ~] #. / configure --with-python = / usr / local / bin / python2.7

[root @ server ~] # make

[root @ server ~] # make install

Следующие две команды очень важны. Замените / usr / local / lib на папку, в которую вы установили libpython2.7.so.1.0, если ее нет в / usr / local / lib.

[корневой @ сервер ~] # LD_LIBRARY_PATH = / usr / local / lib / usr / local / bin / python

[корневой @ сервер ~] # ldconfig

Перезагрузите сервер Apache

[root @ server ~] # перезапуск службы httpd

[корневой @ сервер ~] # ldd /etc/httpd/modules/mod_wsgi.so

Вывод приведенной выше команды: Line2 указывает, что ваш mod_wsgi теперь использует библиотеки Python2.7. УРА!

    linux-vdso.so.1 =>  (0x00007fffc0aa9000)
    libpython2.7.so.1.0 => /usr/lib/libpython2.7.so.1.0 (0x00007f03a5b20000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f03a5903000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f03a56fe000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00007f03a54fb000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f03a5277000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f03a4ee2000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f03a6133000)

Вам нужно перекомпилировать mod_wsgi too. Просто перекомпилировать python недостаточно (не забудьте загрузить правильную версию mod_wsgi)

РЕДАКТИРОВАТЬ: кликните сюда для инструкции по установке

У меня такая же проблема при установке инструментов ReviewBoard в Amazon Linux. 4.9.38-16.35.amzn1.x86_64 следующий http://backup.noiseandheat.com/blog/2011/11/installing-reviewboard-on-amazon-ec2/.

Бегом yum install mod_wsgi, Я получал mod_wsgi-python26.x86_64. Позже я научился искать с yum по yum search mod_wsgi, и обнаружил, что эта установка python27 тоже доступна. Так работает sudo yum install mod_wsgi-python27.x86_64 решил проблему.