Я настраиваю сервер 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.

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

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

РЕДАКТИРОВАТЬ: после более подробного изучения python3.2 не был связан с ubuntu, вместо этого он был установлен с помощью libapache2-mod-wsgi-py3

14
Hat 4 Янв 2014 в 01:37

2 ответа

Лучший ответ

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

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

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-get install 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 / modules /

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

Wsgi.conf:

<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

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

17
GMeister 26 Янв 2017 в 10:44

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

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

Это позволит встроить нестандартное расположение каталога в mod_wsgi.so, как объяснил Грэм Дамплтон по следующей ссылке: ответы GoogleGroups

1
Brayan Loayza 16 Окт 2015 в 09:36