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

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

gcc -Wall utilsmodule.c -o Utilc

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

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

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

25 ответов


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

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

sudo apt-get install python3-dev

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

sudo apt-get install python3.5-dev

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

установите пакет разработки для 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 

Если вы используете Raspberry Pi:

sudo apt-get install python-dev

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

sudo dnf install python2-devel

и для Python 3:

sudo dnf install python3-devel

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

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

Я хотел бы добавить также раствор для Cygwin:

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

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

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

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

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


в AWS API (centOS) его

yum install python27-devel

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

#include <python2.7/Python.h>

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

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


убедитесь, что файлы python dev поставляются с вашей ОС.

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

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

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

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

AWS EC2 установить под управлением python34:

sudo yum install python34-devel


Это не та же ситуация, но она также работает для меня, и теперь я могу использовать глоток С Питон3.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: No existe el archivo o el справочник компиляция прекращается.

после запуска в моем 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/

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


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


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

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

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

например:

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# 

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


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

sudo zypper install python3-devel

Для CentOS 7:

sudo yum install python36u-devel

я следовал инструкциям здесь для установки python3.6 на нескольких ЗИС: https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a-local-programming-environment-on-centos-7 и затем смог построить mod_wsgi и заставить его работать с python3.6 virtualenv


Я также столкнулся с этой ошибкой при установке coolprop в ubuntu.

для ubuntu 16.04 с python 3.6

sudo apt-get install python3.6-dev

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

sudo apt-get install gcc

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


обязательно python-dev или libpython-all-dev первое, что нужно (apt )install, но если это не поможет, как в моем случае, я советую вам установить интерфейс внешней функции пакеты 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.


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

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

решить путем установки python3.6-dev модуль.


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

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


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

sudo yum install python36-devel

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

первая загрузка, как указано в https://stackoverflow.com/a/21530768/8687063, затем установите gcc

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

sudo apt-get install gcc

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

sudo yum install gcc

для dnf (Fedora...):

sudo dnf install gcc

для zypper (в openSUSE...):

sudo zypper in gcc

для apk (Alpine...):

sudo apk gcc