LINUX.ORG.RU
ФорумAdmin

Не получается установить MySQL-python (fatal error: my_config.h: No such file or directory)

 , ,


0

1

Centos 8, python 2.7. Пытаюсь установить (скомпилировать, т.к. в репозиториях нету) MySQL-python командой

sudo pip install MySQL-python
Установка заканчивается с ошибкой
    _mysql.c:44:10: fatal error: my_config.h: No such file or directory
     #include "my_config.h"
              ^~~~~~~~~~~~~
    compilation terminated.
    error: command 'gcc' failed with exit status 1
Перерыл интернет, установлено следующее:
mysql-devel
mysql-libs
sudo yum groupinstall "Development Tools"
Подскажите, пожалуйста, Как проверить наличие этого my_config.h и почему он не поставился вместе с mysql-devel, по всем мануалам так должно было произойти.


А этот файл вообще есть в системе? Просто в той же убунте он вынесен в отдельный пакет libmysqlclient-dev.

hippi90 ★★★★★ ()

Пытаюсь установить (скомпилировать, т.к. в репозиториях нету) MySQL-python

Скорее всего он называется по-другому,

Попробуй поискать конкретные файлы через dnf provides

как проверить наличие этого my_config.h и почему он не поставился вместе с mysql-devel

аналогично,

$ dnf provides \*/my_config.h
alpha ★★★★★ ()
Ответ на: комментарий от alpha

Спасибо, файл нашёл

Всё, файл найден. Оказалось, что этот файл идёт в составе mariadb-devel, а не mysql-devel.

Большое спасибо!

kt368 ()

sudo pip install MySQL-python

Чтобы совесть не мучила, добавлю предупреждение:

установка через sudo pip install в пакетном дистрибутиве - это _очень_ плохая практика.

При такой установке файлы библиотеки попадают в /usr-часть системы в обход пакетного менеджера. Так как pip и rpm ничего не знают друг о друге, файлы принесенные pip-ом могут перезаписать файлы пришедшие через rpm.

При этом при следующем обновлении rpm-пакета, наоборот, файлы установленные pip-ом будут перезаписаны пакетными.

Это приводит к полной каше в файлах библиотек, неконсистентности, которую очень сложно отлаживать.

Если какого-то системного пакета действительно не хватает, то есть два хороших выхода из ситуации:

  1. создать отдельно стоящий venv и установливать python-библиотеки pip-ом в него, а не глобально в систему.

    При этом можно воспользоваться опцией "--system-site-packages", чтобы не устанавливать в venv всё целиком, а использовать системные пакеты когда возможно.

  2. Опакетить. Для python-пакетов пакетирование достаточно шаблонно и хорошо описано в доках. Пакеты можно создавать пачками практически под копирку.

При этом в твоём исходном случае, наиболее вероятно что есть и ещё более хороший и самый что ни на есть прямой способ:

  • Найти как _правильно_ называется пакет предоставляющий нужную тебе функциональность в CentOS 8.

    Скорее всего тебе нужен python3-PyMySQL, который есть в стандартных репах.

alpha ★★★★★ ()
Ответ на: комментарий от alpha

файлы библиотеки попадают в /usr-часть системы

Они попадут в /usr/local/, так что, по идее, ничего страшного не должно быть.

gruy ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.