Я использую 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 по умолчанию?
./configure \
--prefix=/usr/local \
--enable-unicode=ucs4 \
--enable-shared \
LDFLAGS="-Wl,-rpath /usr/local/lib"
make && make altinstall
не забывай --enable-shared
или у вас могут возникнуть проблемы позже.
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.
# 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 и его повторной установки с соответствующими конфигами.
Прочитав одну из статей, я понял, что нет необходимости удалять мой текущий mod_wsgi, и я мог просто пойти дальше и переустановить mod_wsgi3.4 (раньше у меня была v3.2) с настройками для использования Python2.7 (похоже, процесс установки переписывает все без ошибок / конфликтов).
Поскольку у меня уже был установлен Python2.7.
[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
[root @ server ~] #. / configure --with-python = / usr / local / bin / python2.7
[root @ server ~] # make
[root @ server ~] # make install
[корневой @ сервер ~] # LD_LIBRARY_PATH = / usr / local / lib / usr / local / bin / python
[корневой @ сервер ~] # ldconfig
[root @ server ~] # перезапуск службы httpd
[корневой @ сервер ~] # ldd /etc/httpd/modules/mod_wsgi.so
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
решил проблему.