2014-01-03 3 views
13

Я настраиваю сервер Django на Ubuntu 12.04 LTS, и мне не удается установить mod-wsgi с правильной версией python. Я создал свой сайт локально с python 3.3, а Ubuntu 12.04 поставляется вместе с python 3.2. Я полагаю, что мог, но предпочел бы не использовать 3,2 вместо 3.3, поэтому я установил python 3.3 рядом с 3.2. У меня все установлено для python 3.3, кроме mod-wsgi.mod_wsgi для правильной версии python3

На моей локальной машине, на которой запущен python3.3, установка libapache2-mod-wsgi-py3 с помощью sudo apt-get install libapache2-mod-wsgi-py3 устанавливает его для python3.3. Однако на сервере Ubuntu запуск этого же кода устанавливает его для python3.2, так что веб-сервер работает 3,2 и не может найти django.

Есть ли способ отключить python3.2 или указать скрипт для его установки для python 3.3?

EDIT: после просмотра в него более, python3.2 не был в комплекте с убунту, вместо этого он был установлен с libapache2-мод-WSGI-PY3

+1

Не могли бы вы поделиться тем, как вы решили это, если вообще? Спасибо! – Visionscaper

+1

@Visionscaper В итоге я просто изменил проект, чтобы использовать более низкую версию Python. Подавляющее большинство кода одинаково для обеих версий Python, поэтому в основном это вопрос переустановки зависимостей для правильной версии Python – Hat

+1

. Я нашел решение, поэтому я написал свой ответ ниже! – Visionscaper

ответ

15

я узнал, как строить mod_wsgi, которые будут использоваться с Python 3.3.5, на Ubuntu 12.04 LTS.

Фокус в том, чтобы установить пакет python3.3-dev, который не поддерживается на Ubuntu 12.04 LTS («точно»). Существует 3-го хранилища партии поддерживается Феликс Крулль, что делает старый и новый Python строит доступное (Kudos Феликса!):

https://launchpad.net/~fkrull/+archive/deadsnakes

Чтобы установить хранилище Феликса:

sudo add-apt-repository ppa:fkrull/deadsnakes 
sudo apt-get update 

Перед началом сборки mod_wsgi нам нужен пакет apache2-dev ...

sudo apt-get install apache2-dev 

... и получить пакет python3.3-DEV (это фактически устанавливает python3.3, как хорошо!)

Sudo APT-получить установку python3.3-DEV

Загрузите код mod_wsgi и создайте его, указав путь к только что установленным папкам и заголовкам Python (/usr/bin/python3.3). Загрузить ссылку с последней версией mod_wsgi можно найти по адресу:

https://github.com/GrahamDumpleton/mod_wsgi/releases

cd /usr/local/src 
sudo wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/modwsgi/mod_wsgi-3.4.tar.gz 
sudo tar -zxvf mod_wsgi-3.4.tar.gz 
cd mod_wsgi-3.4/ 
sudo ./configure --with-python=/usr/bin/python3.3 
sudo make 
sudo make install 

mod_wsgi.so помещается в/USR/Lib/apache2/модули/

Дополнительно step: Поскольку они отсутствовали, я вручную (повторно) создал файлы wsgi.conf и wsgi.load в/etc/apache2/mods-available (хотя мне не нужно было устанавливать какой-либо конкретный параметр).

wsgi.конф:

<IfModule mod_wsgi.c> 

    # See http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives 

    #WSGISocketPrefix: Configure directory to use for daemon sockets. 

    #WSGISocketPrefix /var/run/apache2/wsgi 

    #WSGIPythonOptimize: Enables basic Python optimisation features. 

    #WSGIPythonOptimize 0 

    #WSGIPythonPath: Additional directories to search for Python modules, 
    #    overriding the PYTHONPATH environment variable. 

    #WSGIPythonPath directory|directory-1:directory-2:... 


    #WSGIPythonEggs: Directory to use for Python eggs cache. 

    #WSGIPythonEggs directory 

    #WSGIRestrictEmbedded: Enable restrictions on use of embedded mode. 

    #WSGIRestrictEmbedded On|Off 

    #WSGIRestrictStdin: Enable restrictions on use of STDIN. 
    #WSGIRestrictStdout: Enable restrictions on use of STDOUT. 
    #WSGIRestrictSignal: Enable restrictions on use of signal(). 

    #WSGIRestrictStdin On 
    #WSGIRestrictStdout On 
    #WSGIRestrictSignal On 

    #WSGIAcceptMutex: Specify type of accept mutex used by daemon processes. 

    #WSGIAcceptMutex default 

    #WSGIImportScript: Specify a script file to be loaded on process start. 

    #WSGIImportScript process-group=name application-group=name 

    #WSGILazyInitialization: Enable/disable lazy initialisation of Python. 

    #WSGILazyInitialization On|Off 

</IfModule> 

wsgi.load:

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so

Наконец, mod_wsgi может быть включена создание символических ссылок:

cd /etc/apache2/mods-enabled 
sudo ln -s ../mods-available/wsgi.conf wsgi.conf 
sudo ln -s ../mods-available/wsgi.load wsgi.load 

Сообщите мне, если это также сработало для вас!

+0

Если вы устанавливаете CentOS, вам может потребоваться обновить Makefile. См. Https://code.google.com/p/modwsgi/issues/detail?id=299 –

+0

@ Visionscaper - это была спасательная жизнь - большое спасибо за отличный пост! – nicorellius

+0

@nicorellius добро пожаловать! Это была боль, чтобы понять, так что я счастлив, что смогу спасти вас от этой агонии. :) – Visionscaper

1

я его в Centos 6.7, просто создать файл wsgi.conf в: /etc/httpd/conf.d укажите путь к файлу mod_wsgi.so: LoadModule wsgi_module/и т.д./HTTPd /modules/mod_wsgi.so после загрузки и распаковки файлов mod_wsgi_x.x.tar, что вам нужно сделать что-то дополнительно после уточнения версии питона:

./configure --with-python=/usr/local/bin/python3.4 
LD_RUN_PATH=/usr/local/lib make 
make install 

Это будет встраивать не стандартное расположение папок в mod_wsgi.so, как объяснено Graham Dumpleton по следующей ссылке: GoogleGroups answers

Смежные вопросы