Как установить python3 virtualenv и mod_wsgi на RHEL? - PullRequest
0 голосов
/ 20 мая 2019

В довольно консервативной системе (RHEL) я решил сделать решающий шаг, узнать о virtualenv и перенести мое wsgi-приложение со значения по умолчанию системы от 2.7 до 3.6.Существует множество версий Python3:

$ yum search python3 | egrep '^python3[^-]+\.'
python34.x86_64 : Version 3 of the Python programming language aka Python 3000
python34u.x86_64 : Version 3 of the Python programming language aka Python 3000
python35u.x86_64 : Version 3.5 of the Python programming language
python36.x86_64 : Interpreter of the Python programming language
python36u.x86_64 : Interpreter of the Python programming language
$

В итоге я установил python36 в virtualenv.В настройках тестирования все работает, поэтому пришло время установить соответствующий модуль apache.Однако virtualenv и mod_wsgi кажутся взаимоисключающими, поскольку они не имеют общей версии в python3:

$ yum search python | egrep '(virtualenv|mod_wsgi)'
python-virtualenv.noarch : Tool to create isolated Python environments
python3-virtualenv-doc.noarch : Documentation for python virtualenv
python34-virtualenv.noarch : Documentation for python virtualenv
python35u-mod_wsgi.x86_64 : A WSGI interface for Python web applications in
python35u-mod_wsgi-debuginfo.x86_64 : Debug information for package
                                    : python35u-mod_wsgi
python36-virtualenv.noarch : Documentation for python virtualenv
python36u-mod_wsgi.x86_64 : A WSGI interface for Python web applications in
python36u-mod_wsgi-debuginfo.x86_64 : Debug information for package
                                    : python36u-mod_wsgi
mod_wsgi.x86_64 : A WSGI interface for Python web applications in Apache
python-virtualenv-api.noarch : An API for virtualenv/pip
python-virtualenv-clone.noarch : Script to clone virtualenvs
python-virtualenvwrapper.noarch : Enhancements to virtualenv
$

Обратите внимание, что пакеты mod_wsgi имеют номера версий "35u" и "36u", тогда как virtualenv входит только в "34 "и" 36 ".Когда я пытаюсь установить любое из них одновременно, я получаю скрины сообщений об ошибках конфликта.

Конечно, python27 (системная версия по умолчанию) все еще существует, поэтому я попытался создать среду python36 с использованием virtualenv 27, но этотоже терпит неудачу:

$ virtualenv -p python3.6 env
Running virtualenv with interpreter /usr/bin/python3.6
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 8, in <module>
    import base64
  File "/usr/lib64/python3.6/base64.py", line 9, in <module>
    import re
  File "/usr/lib64/python3.6/re.py", line 142, in <module>
    class RegexFlag(enum.IntFlag):
AttributeError: module 'enum' has no attribute 'IntFlag'
$

RHEL - это то, с чем мне приходится жить, потому что это то, что работает на некоторых виртуальных машинах во внутренней сети моей компании.Дома я запускаю Debian, без проблем.Также я не могу использовать другой веб-сервер, потому что у других людей есть другие приложения (PHP) на этом сервере.

1 Ответ

0 голосов
/ 20 мая 2019

ОК, я отвечу на еще один вопрос.Я обнаружил, что спрос на этом форуме всегда стимулирует мои собственные навыки решения проблем.

Оказывается, мне просто нужно было установить python36u, который поставляется не с исполняемым файлом "virtualenv", а с "venv"модуль, который будет называться так:

python3.6 -m venv <env-dir>

Понять это было намного проще, чем заставить среду работать под SELINUX, потому что политика безопасности не позволила бы Apache загружать все общие объекты при импорте.Мудрость Интернета предлагает просто отключить SELINUX, что не поддается его назначению, поэтому я начал копать глубже и обнаружил, что мне нужно изменить общие библиотеки внутри среды:

find . -type f -name "*.so*" -or -name "*.so.*" | xargs sudo chcon -t shlib_t

Теперь все работает.

...