Неустранимая ошибка: Python.h: Нет такого файла или каталога

Я пытаюсь создать общую библиотеку с использованием файла расширения C, но сначала мне нужно сгенерировать выходной файл, используя следующую команду:

gcc -Wall utilsmodule.c -o Utilc

После выполнения команды я получаю это сообщение об ошибке:

utilsmodule.c: 1: 20: фатальная ошибка: Python.h: нет такого файла или каталога компиляция завершена.

на самом деле я пробовал все предлагаемые решения через Интернет, но проблема все еще существует... также у меня нет проблем с Python.h. Мне удалось найти файл на моей машине... с кем-то сталкивалась такая же проблема раньше?

Ответ 1

Мне удалось решить эту проблему и сгенерировать файл .so одной командой

gcc -shared -o UtilcS.so
-fPIC -I/usr/include/python2.7 -lpython2.7  utilsmodule.c

Ответ 2

Похоже, вы неправильно установили заголовочные файлы и статические библиотеки для python dev. Используйте менеджер пакетов, чтобы установить их для всей системы.

Для apt (Ubuntu, Debian...):

sudo apt-get install python-dev   # for python2.x installs
sudo apt-get install python3-dev  # for python3.x installs

Для yum (CentOS, RHEL...):

sudo yum install python-devel   # for python2.x installs
sudo yum install python3-devel   # for python3.x installs

Для dnf (Fedora...):

sudo dnf install python2-devel  # for python2.x installs
sudo dnf install python3-devel  # for python3.x installs

Для zypper (openSUSE...):

sudo zypper in python-devel   # for python2.x installs
sudo zypper in python3-devel  # for python3.x installs

Для apk (Альпийский...):

# This is a departure from the normal Alpine naming
# scheme, which uses py2- and py3- prefixes
sudo apk add python2-dev  # for python2.x installs
sudo apk add python3-dev  # for python3.x installs

Для apt-cyg (Cygwin...):

apt-cyg install python-devel   # for python2.x installs
apt-cyg install python3-devel  # for python3.x installs

Ответ 3

На Ubuntu я работал под управлением Python 3, и мне пришлось установить

sudo apt-get install python3-dev

Если вы хотите использовать версию Python, которая не связана с python3, установите соответствующий пакет python3.x-dev. Например:

sudo apt-get install python3.5-dev

Ответ 4

Две вещи, которые вам нужно сделать.

Установите пакет разработки для Python, в случае Debian/Ubuntu/Mint он выполнит команду:

sudo apt-get install python-dev

Во-вторых, файлы include не по умолчанию включены в путь include, а также не являются библиотекой Python, связанными с исполняемым файлом по умолчанию. Вам нужно добавить эти флаги (соответственно заменить версию Python):

-I/usr/include/python2.7 -lpython2.7 

Другими словами, ваша команда компиляции должна быть:

gcc -Wall -I/usr/include/python2.7 -lpython2.7  utilsmodule.c -o Utilc 

Ответ 5

Если вы используете малину Pi:

sudo apt-get install python-dev

Ответ 6

в Fedora запустите это для Python 2:

sudo dnf install python2-devel

и для Python 3:

sudo dnf install python3-devel

Ответ 7

Если вы используете tox для запуска тестов на нескольких версиях Python, вам может потребоваться установить библиотеки разработчиков Python для каждой версии Python, которую вы тестируете на.

sudo apt-get install python2.6-dev 
sudo apt-get install python2.7-dev 
etc.

Ответ 8

Решение для Cygwin

Вам необходимо установить пакет python2-devel или python3-devel, в зависимости от используемой версии Python.

Вы можете быстро установить его, используя 32-битный или 64-битный setup.exe (в зависимости от вашей установки) с сайта Cygwin.com.

Пример (при необходимости измените имя файла setup.exe и основную версию Python):

$ setup.exe -q --packages=python3-devel

Вы также можете проверить мой другой ответ, чтобы узнать еще несколько вариантов установки пакетов Cygwin из командной строки.

Ответ 9

В AWS API (centOS) его

yum install python27-devel

Ответ 10

Для меня это изменилось:

#include <python2.7/Python.h>

Я нашел файл /usr/include/python2.7/Python.h, и поскольку /usr/include уже находится в пути include, тогда python2.7/Python.h должно быть достаточно.

Вместо этого вы можете добавить путь include из командной строки - gcc -I/usr/lib/python2.7 (thanks @erm3nda).

Ответ 11

Убедитесь, что файлы разработчика Python поставляются с вашей ОС.

Вы не должны жестко кодировать библиотеку и включать пути. Вместо этого используйте pkg-config, который выведет правильные параметры для вашей конкретной системы:

$ pkg-config --cflags --libs python2 -I/usr/include/python2.7 -lpython2.7

Вы можете добавить его в свою строку gcc:

gcc -Wall utilsmodule.c -o Utilc $(pkg-config --cflags --libs python2) 

Ответ 12

AWS EC2 устанавливает запуск python34:

sudo yum install python34-devel

Ответ 13

В моем случае, что исправлено в Ubuntu, было установить пакеты libpython-all-dev (или libpython3-all-dev, если вы используете Python 3).

Ответ 14

Это не та ситуация, но она также работает для меня, и теперь я могу использовать SWIG с Python3.5:

Я пытался скомпилировать:

gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/

С Python 2.7 отлично работает, не с моей версией 3.5:

existe_wrap.c: 147: 21: фатальная ошибка: Python.h: сборка existe el archivo o el Directorio не прекращена.

После запуска в моей установке Ubuntu 16.04:

sudo apt-get install python3-dev  # for python3.x installs

Теперь я могу без проблем скомпилировать Python3.5:

gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/

Ответ 15

Если вы используете virtualenv с 3.6 python (край сейчас), обязательно установите соответствующий python 3.6 dev sudo apt-get install python3.6-dev, в противном случае выполнение sudo python3-dev установит python dev 3.3.3-1, t решить проблему.

Ответ 16

Я также столкнулся с этой ошибкой, когда я устанавливал coolprop в Ubuntu.

Для Ubuntu 16.04 с Python 3.6

sudo apt-get install python3.6-dev

Если это не помогло, попробуйте установить/обновить gcc lib.

sudo apt-get install gcc

Ответ 17

попробуйте apt файл. Трудно запомнить имя пакета, в котором находится отсутствующий файл. Он является общим и полезным для любых файлов пакетов.

Например:

[email protected]:~/auto# apt-file search --regexp '/Python.h$'
pypy-dev: /usr/lib/pypy/include/Python.h
python2.7-dbg: /usr/include/python2.7_d/Python.h
python2.7-dev: /usr/include/python2.7/Python.h
python3.2-dbg: /usr/include/python3.2dmu/Python.h
python3.2-dev: /usr/include/python3.2mu/Python.h
[email protected]:~/auto# 

Теперь вы можете сделать экспертную догадку о том, какой из них выбрать.

Ответ 18

Для Python 3.7 и Ubuntu в частности мне понадобилось

sudo apt install libpython3.7-dev

, Я думаю, что в какой-то момент имена были изменены с pythonm.n-dev на это.

Ответ 19

Для товарищей OpenSuse:

sudo zypper install python3-devel

Ответ 21

Конечно, python-dev или libpython-all-dev являются первыми (apt) для install, но если это не поможет, как в моем случае, я советую вам установить пакеты sudo apt-get install libffi-dev интерфейса функций с помощью sudo apt-get install libffi-dev и sudo pip install cffi.

Это должно помочь, особенно если вы видите ошибку как/из c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory.

Ответ 22

Эта ошибка возникла, когда я попытался установить ctds на CentOS 7 с Python3.6. Я сделал все трюки, упомянутые здесь, включая yum install python34-devel. Проблема была Python.h найдена в /usr/include/python3.4m but not in /usr/include/python3.6m. Я попытался использовать --global-option для указания на включение dir (pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds). Это привело к тому, что lpython3.6m не было найдено при связывании ctds.

Наконец, работа над исправлением среды разработки для Python3.6 должна быть исправлена ​​с помощью include и libs.

yum -y install https://dl.iuscommunity.org/pub/ius/stable/CentOS/7/x86_64/python36u-libs-3.6.3-1.ius.centos7.x86_64.rpm

Python.h должен быть включен в ваш путь include для gcc. Какая бы версия python не использовалась, например, если она 3.6, то она должна быть в /usr/include/python3.6m/Python.h обычно.

Ответ 23

Если вы используете Python 3.6 в Amazon Linux (на основе RHEL, но приведенные здесь ответы RHEL не сработали):

sudo yum install python36-devel

Ответ 24

Это часто появляется, когда вы пытаетесь удалить python3.5 и установить python3.6.

Поэтому при использовании python3 (который python3 -V => python3.6) для установки некоторых пакетов необходим заголовок python3.5 появится эта ошибка.

Решите, установив python3.6-dev.

Ответ 25

Иногда даже после установки python-dev ошибка сохраняется. Проверьте на наличие ошибки, если отсутствует "gcc".

Сначала загрузите, как указано в fooobar.com/questions/36905/..., затем установите gcc

Для apt (Ubuntu, Debian...):

sudo apt-get install gcc

Для ням (CentOS, RHEL...):

sudo yum install gcc

Для dnf (Fedora...):

sudo dnf install gcc

Для zypper (openSUSE...):

sudo zypper in gcc

Для apk (Alpine...):

sudo apk gcc

Ответ 26

Это означает, что Python.h отсутствует в ваших путях по умолчанию для компилятора. Установили ли вы его как в системе, так и локально? Что ваша ОС?

Вы можете использовать флаг -I<path>, чтобы указать дополнительный каталог, в котором ваш компилятор должен искать заголовки. Вам, вероятно, придется следить за -L<path>, чтобы gcc мог найти библиотеку, с которой вы будете связываться, используя -l<name>.

Ответ 27

  1. Вы должны установить файлы разработки Python в вашей операционной системе, если Python, поставляемый с вашей операционной системой, не поставляется с ними. Многочисленные ответы на этот вопрос показывают множество способов достижения этой цели в разных системах.

  2. Когда вы это сделаете, проблема заключается в том, чтобы сообщить компилятору, где они находятся и как скомпилировать их. Python поставляется с программой под названием python-config. Для компиляции вам нужен --includes а для связывания программы с библиотекой Python (встраивание Python в вашу программу) - --ldflags. Пример:

    gcc -c mypythonprogram.c $(python3-config --includes)
    gcc -o program mypythonprogram.o $(python3-config --ldflags)
    

Программа python-config может быть названа в честь версий Python - например, в Debian, Ubuntu они могут называться python3-config или python3.6-config.