фатальная ошибка: Python.h: нет такого файла или каталога


1195

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

gcc -Wall utilsmodule.c -o Utilc

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

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

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

Ответы:


2237

Похоже, вы неправильно установили заголовочные файлы и статические библиотеки для 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

21
Попробуйте locate Python.hи убедитесь, что у вас уже есть файл, прежде чем делать все это. Если вы можете найти расположенный файл, в основном этот ответ будет работать: stackoverflow.com/a/19344978/4954434 (это может быть просто проблема с путями)
Джитин Павитран

2
@ Hack-R и другие, если у вас установлены Python 2.6 и 2.7, "python-devel" установит библиотеки dev только для 2.6. Чтобы заставить его установить библиотеки 2.7, используйтеsudo yum install python27-devel
Doktor J

15
Я использую python3.6 на 14.04 apt-get install python3.6-devработал для меня.
биты

9
у меня работало нормально (ubuntu 14.04), но пришлось указывать полный номер версииsudo apt-get install python3.6-dev
landrykapela

18
Аналогично с sudo apt-get install python3.7-dev.
Кас

346

В Ubuntu у меня был запущен Python 3, и мне пришлось установить

sudo apt-get install python3-dev

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

sudo apt-get install python3.5-dev

32
Я запустил команду sudo apt-get install python3.4-devдля моего Python3.4, и это решило мою проблему.
Аарон Лельвье,

4
@Rawrgulmuffins хорошо, это зависит от того, какую версию Python вы используете. В моем случае sudo apt-get install python2.7-devисправлена ​​проблема
RockScience

6
Я бы добавил еще одну вещь к этому ответу - если у вас несколько версий Python 3.x, python3-devбудут установлены зависимости для той версии, которая связана с python3командой. Поэтому, если вы хотите установить конкретную версию, используйте полную версию, например - python3.x-dev.
xyres

3
Это помогло с python 3.6.3 в Ubuntu 14.04sudo apt-get install python3.6-dev
codestruggle

Если вы используете версию Python в виртуальной среде, которая отличается от вашей системы Python, это.
SuperShoot

76

Для Python 3.7 и Ubuntu в частности мне нужно было

sudo apt install libpython3.7-dev

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

для Python 3.6, аналогично:

sudo apt install libpython3.6-dev

6
ты: tearsofjoy:
Валем

1
Ух ты. После примерно 30 минут поиска и установки всякого рода вещей этот ответ фактически решил проблему
Вячеслав Цивина

!!!!! Конечно, это было правильное решение для меня, используя Python 3.7 и Ubuntu 18.04.
Вильямеция

спасибо <3 <3 <3
Coffee inTime

1
это работает и для Python 3.6 тоже ... ноsudo apt install libpython3.6-dev
Мортеза Афшари

70

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

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

sudo apt-get install python-dev

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

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

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

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

я должен добавить флаги для каждого включенного файла в файле расширения C?
Моханад Й.

1
Если вы используете другую версию Python, например, 3.3: sudo apt-get install python3.3-dev
FreshPow

Я бы рекомендовал использовать pkg-configвместо raw -I: stackoverflow.com/a/21531170/895245
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功


35

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

sudo dnf install python2-devel

и для Python 3:

sudo dnf install python3-devel

1
На Mint 18.2 (на основе Ubuntu) это было apt-get install python-dev.
Deleet

30

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

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

27

Решение для Cygwin

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

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

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

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

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


22

В AWS API (centOS) его

yum install python27-devel

Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его постом - вы всегда можете комментировать свои собственные посты, и, когда у вас будет достаточно репутации, вы сможете комментировать любой пост .
Wtower

2
@Wowwer Да, он дает ответ.
Тадеуш Копец

1
Это дает ответ. Хотя вы должны заменить версию на то, что вам нужно.
Ганеш Кришнан

1
это помогло мне преодолеть проблемы, связанные с попытками pip install cryptographyиспользования Amazon на Linux.
Райан Так

Это был полезный ответ, хотя на Amazon Linux можно установить python-devel или python2-devel, это единственный способ, который мне действительно помог, когда я запускал установку pip внутри virtualenv
Кристофор Карл

21

Для меня изменение этого сработало:

#include <python2.7/Python.h>

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

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


4
Все остальные ответы говорят вам, чтобы установить что-то. Этот работал для меня. Почему это не лучший ответ?
noɥʇʎԀʎzɐɹƆ

1
@ uoɥʇʎPʎzɐɹC Может, потому что он не будет работать под python3?
Луи

Лучше установить lib gcc -I/usr/lib/python2.7 etc, чем жестко кодировать вызовы include.
m3nda

1
@ noɥʇʎԀʎzɐɹƆ Потому что это должно работать без изменения кода. Вам часто нужно скомпилировать код, не принадлежащий вам, например некоторую внешнюю зависимость, и худшее, что вы можете сделать, - это изменить этот код.
Дэвид Ференци Рогожан,

@DawidFerenczy Понятно.
noɥʇʎԀʎzɐɹƆ

19

Убедитесь, что файлы разработчика 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) 


14

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


2
python-all-devв моем случае, но достаточно близко.
Дейв С.

1
@ Ориол Ньето, спасибо большое. python-all-dev также решил проблему для меня.
shrawan_lakhe

14

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


1
Работал отлично для меня на 3,5 (.2) тоже. Явная установка правильного пакета dev для вашей версии Python - это хорошо.
Сет

13

Это не та ситуация, но она также работает для меня, и теперь я могу использовать 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/

11

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

Для Ubuntu 16.04 с Python 3.6

sudo apt-get install python3.6-dev

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

sudo apt-get install gcc

1
о боже, я так долго боролся с этим, потому что python3-devмного раз бегал и получал одну и ту же ошибку, но не знал об этом python3.6-dev!! Спасибо!!
Blairg23

10

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

Например:

root@ubuntu234:~/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
root@ubuntu234:~/auto# 

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


10

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

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



5

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

sudo yum install python36-devel

4

Эта ошибка произошла, когда я попытался установить 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 должен быть в вашем пути включения для gcc. Какая бы версия Python ни использовалась, например, если она 3.6, то /usr/include/python3.6m/Python.hобычно она должна быть .


Не уверен, почему существует -1, но на сегодняшний день это проблема для python3.6 с CentOS, так как python36-devel недоступен. Вам нужно будет установить его с URL-адреса выше.
Бабу Аруначалам

4

Конечно, python-devили libpython-all-devпервым делом ( apt) install, но если это не поможет, как в моем случае, я советую вам установить сторонние пакеты Function Interface с помощью 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.


sudo pip3 установить cffi (# для python3)
Магнус Мелвин

3

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

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

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


3
  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.


2

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

Сначала загрузите, как указано в https://stackoverflow.com/a/21530768/8687063 , затем установите 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

1

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.