Установите mod_wsgi на Ubuntu с помощью Python 3.6, Apache 2.4 и Django 1.11

Как мне получить mod_wsgi для Apache2, который был скомпилирован для Python 3.6.1?

(или любая будущая версия Python)

Я использую виртуальную среду Python 3.6.1 с Django 1.11, и все работает в соответствии с журналом ошибок Apache, за исключением того, что mod_wsgi для Apache 2.4 был скомпилирован для Python/3.5.1 + и использует Python/3.5.2, поэтому мой код Python 3.6.1 не работает, потому что я использую новые функции, недоступные в 3.5.2

Все остальные конфигурации и установки, связанные с настройкой моей системы, кажутся прекрасными (работает в режиме демона), хотя mod_wsgi, похоже, не использует мою виртуальную среду Python 3.6.1 (хотя она пытается ее использовать для Django в соответствии с журналом ошибок)...

Я использовал: sudo apt-get install libapache2-mod-wsgi-py3 для установки mod_wsgi для Apache 2.4

Я использовал: ./configure --with-python=/usr/local/bin/python3.6 и make с помощью make install для установки mod_wsgi для Python 3.6

Я должен делать что-то неправильно - пожалуйста, поправьте меня!

Вот мой журнал ошибок Apache (очищенный бит) - и да, я знаю, что он терпит неудачу в строковой строке f "" (функция python 3.6 не в 3.5)

[wsgi:warn] mod_wsgi: Compiled for Python/3.5.1+.
[wsgi:warn] mod_wsgi: Runtime using Python/3.5.2.
[wsgi:warn] AH00489: Apache/2.4.18 (Ubuntu) mod_wsgi/4.3.0 Python/3.5.2 configured -- resuming normal operations
[wsgi:warn] AH00094: Command line: '/usr/sbin/apache2'
[wsgi:error] mod_wsgi (pid=12963): Target WSGI script '/home/jamin/www/dev.tir.com/tir/tir/wsgi.py' cannot be loaded as Python module.
[wsgi:error] mod_wsgi (pid=12963): Exception occurred processing WSGI script '/home/jamin/www/dev.tir.com/tir/tir/wsgi.py'.
[wsgi:error] Traceback (most recent call last):
[wsgi:error]   File "/home/jamin/www/dev.tir.com/tir/tir/wsgi.py", line 21, in <module>
[wsgi:error]     application = get_wsgi_application()
[wsgi:error]   File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
[wsgi:error]     django.setup(set_prefix=False)
[wsgi:error]   File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/django/__init__.py", line 27, in setup
[wsgi:error]     apps.populate(settings.INSTALLED_APPS)
[wsgi:error]   File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/django/apps/registry.py", line 116, in populate
[wsgi:error]     app_config.ready()
[wsgi:error]   File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/django/contrib/admin/apps.py", line 23, in ready
[wsgi:error]     self.module.autodiscover()
[wsgi:error]   File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/django/contrib/admin/__init__.py", line 26, in autodiscover
[wsgi:error]     autodiscover_modules('admin', register_to=site)
[wsgi:error]   File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/django/utils/module_loading.py", line 50, in autodiscover_modules
[wsgi:error]     import_module('%s.%s' % (app_config.name, module_to_search))
[wsgi:error]   File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module
[wsgi:error]     return _bootstrap._gcd_import(name[level:], package, level)
[wsgi:error]   File "<frozen importlib._bootstrap>", line 986, in _gcd_import
[wsgi:error]   File "<frozen importlib._bootstrap>", line 969, in _find_and_load
[wsgi:error]   File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
[wsgi:error]   File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
[wsgi:error]   File "<frozen importlib._bootstrap_external>", line 665, in exec_module
[wsgi:error]   File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
[wsgi:error]   File "/home/jamin/www/dev.tir.com/tir/company/admin.py", line 13, in <module>
[wsgi:error]     from .forms import AdminInteractionForm
[wsgi:error]   File "/home/jamin/www/dev.tir.com/tir/company/forms.py", line 87
[wsgi:error]     resp = f"Hi {user.first_name}, you'll need to login to send any more suggestions. \\
[wsgi:error]                              \\n\\nFirst Time? Check your email/spam for login instructions from us."
[wsgi:error]                                                                                        
[wsgi:error]                                                                                                   ^
[wsgi:error] SyntaxError: invalid syntax

* также tir.com является сокращением моего фактического сайта - я не имею никакого отношения к этому домену

Ответ 1

Сделайте следующее.

Удалите пакет вашей системы mod_wsgi.

sudo apt-get remove libapache2-mod-wsgi-py3

Установите mod_wsgi с помощью pip, предпочтительно в виртуальную среду Python. Убедитесь, что pip предназначен для версии Python, которую вы хотите использовать.

pip install mod_wsgi

Отобразите конфигурацию для добавления в файл конфигурации Apache для загрузки этого mod_wsgi, выполнив:

mod_wsgi-express module-config

Сделайте вывод вышеуказанной команды, чтобы отобразить конфигурацию и добавить в конфигурацию Apache.

Добавить конфигурацию в Apache для загрузки приложения WSGI мирового приветствия, чтобы проверить его работоспособность.

Подробнее о pip установите в:

Ответ 2

Когда я использовал предложение @Graham Dumpleton для установки mod_wsgi с помощью pip, я получил эту ошибку:

RuntimeError: The 'apxs' command appears not to be installed or is not executable.
Please check the list of prerequisites in the documentation for this package and
install any missing Apache httpd server packages.

Чтобы успешно скомпилировать и установить mod_wsgi через pip, мне нужно установить пакет apache2-dev в Ubuntu:

sudo apt-get install -y apache2-dev

В CentOS/Red Hat:

sudo yum install httpd-devel

После этого pip install mod_wsgi завершается успешно.

Надеюсь, что это может помочь другим.