Вопрос или проблема
Когда я пытаюсь установить mod_wsgi с помощью pip следующим образом:
pip install mod_wsgi
Я получаю следующую ошибку:
4m.so -L/usr/local/lib -L/usr/local/lib/python3.4/config-3.4m
-lpython3.4m
/bin/ld: /usr/local/lib/libpython3.4m.a(abstract.o): перемещение R_X86_64_32S против `_Py_NotImplementedStruct’ не может быть использовано при
создании общего объекта; перекомпилируйте с -fPIC
/usr/local/lib/libpython3.4m.a: ошибка добавления символов: Неверное значение
collect2: ошибка: ld вернул код выхода 1
ошибка: команда ‘gcc’ завершилась с кодом выхода 1Команда “/usr/local/virtualenvironment/bin/python3 -u -c “import
setuptools,
tokenize;file=’/tmp/pip-install-dgfnrl36/mod-wsgi/setup.py’;f=getattr(tokenize,
‘open’, open)(file);code=f.read().replace(‘\r\n’,
‘\n’);f.close();exec(compile(code, file, ‘exec’))” install
–record /tmp/pip-record-m7uwmjt6/install-record.txt –single-version-externally-managed –compile –install-headers /usr/local/virtualenvironment/include/site/python3.4/mod-wsgi” завершилась
с кодом ошибки 1 в /tmp/pip-install-dgfnrl36/mod-wsgi/
Я использую Python 3.4.3. Я даже пытался собрать mod_wsgi из исходников и в целом получаю ту же ошибку.
Судя по этому в стеке вызовов, возможно, он ищет исходный код Python или другие исходники? Я все еще пытаюсь разобраться, что ему нужно, но буду признателен за любую помощь.
Решением, которое сработало для меня, было собрать mod_wsgi из исходников после установки библиотек разработки Python.
Итак,
yum install python3-devel
- Скачайте желаемую версию mod_wsgi с http://modwsgi.readthedocs.io/en/develop/
- Распакуйте исходники и перейдите в распакованную папку исходников
- Выполните следующую команду
./configure --with-python=/path/to/python/executable
make
make install
Я предпочитаю устанавливать модуль в своей виртуальной среде. Вы получили эту ошибку, потому что не установили Python с параметром –enable-shared. Вот ссылка, в которой упоминается эта проблема
https://groups.google.com/forum/#!topic/modwsgi/S9D2cTefj4k
А вот ссылка, которая покажет, как установить Python из исходного кода как общую библиотеку
https://danieleriksson.net/2017/02/08/how-to-install-latest-python-on-centos/
.
Ответ или решение
Ошибка при установке mod_wsgi с помощью pip является распространенной проблемой, с которой сталкиваются многие разработчики. В данном случае ошибка указывает на неправильные параметры сборки Python, что приводит к проблемам с компиляцией.
Описание проблемы
При выполнении команды pip install mod_wsgi
вы получаете следующую ошибку:
/bin/ld: /usr/local/lib/libpython3.4m.a(abstract.o): relocation R_X86_64_32S against `_Py_NotImplementedStruct' can not be used when making a shared object; recompile with -fPIC
error: command 'gcc' failed with exit status 1
Данная ошибка говорит о том, что вы используете библиотеку статической компиляции Python (libpython3.4m.a), которая не поддерживает необходимые вам флаги для создания совместимого с динамической компиляцией объекта.
Причины ошибки
-
Отсутствие поддержки динамической компиляции: Python был скомпилирован без использования параметра
--enable-shared
, что приводит к проблемам при компиляции расширений, таких как модуль mod_wsgi. -
Отсутствие библиотек разработки: Часто подобные ошибки возникают, если не установлены необходимые библиотеки разработки, которые требуются для сборки модулей.
Решение проблемы
Ваша проблема может быть решена несколькими способами:
-
Установка библиотек разработки для Python:
Установите необходимые библиотеки с помощью следующей команды:yum install python3-devel
-
Компиляция Python с поддержкой динамических библиотек:
Если у вас уже есть установленная версия Python, но она не поддерживает динамическую компиляцию, вам нужно будет переустановить Python с параметром--enable-shared
.Для этого выполните следующие шаги:
-
Скачайте исходный код Python с официального сайта.
-
Распакуйте архив и перейдите в каталог с исходным кодом.
-
Выполните команду конфигурации с включением поддержки динамических библиотек:
./configure --enable-shared
-
Затем выполните:
make make install
-
-
Установка mod_wsgi из исходников:
Если после выполнения вышеуказанных шагов проблема не решается, вы можете попробовать установить mod_wsgi из исходников:- Загрузите нужную версию mod_wsgi с официального сайта.
- Распакуйте архив и перейдите в распакованный каталог.
-
Выполните команды:
./configure --with-python=/path/to/python/executable make make install
Рекомендации
- Убедитесь, что все зависимости установлены перед компиляцией.
- Используйте виртуальные окружения для изоляции проектов, чтобы избежать конфликтов между модулями.
- После исправления конфигурации и установки убедитесь, что все работает корректно, проверив настройки вашего веб-сервера и конфигурацию WSGI.
Заключение
Ошибки компиляции при установке mod_wsgi можно решить с помощью корректной конфигурации и установки необходимых библиотек. Переход на динамическую сборку Python позволит избежать проблем с последующими модулями и расширениями. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью в соответствующие сообщества или форумы.