erreur fatale: Python.h: aucun fichier ou répertoire de ce type

1195

J'essaie de créer une bibliothèque partagée à l'aide d'un fichier d'extension C mais je dois d'abord générer le fichier de sortie à l'aide de la commande ci-dessous:

gcc -Wall utilsmodule.c -o Utilc

Après avoir exécuté la commande, je reçois ce message d'erreur:

utilsmodule.c: 1: 20: erreur fatale: Python.h: aucune compilation de fichiers ou de répertoires de ce type ne s'est terminée.

J'ai essayé toutes les solutions suggérées sur Internet, mais le problème persiste. Je n'ai aucun problème avec Python.h. J'ai réussi à localiser le fichier sur ma machine.

Mohanad Y.
la source

Réponses:

2237

Il semble que vous n'ayez pas correctement installé les fichiers d'en-tête et les bibliothèques statiques pour python dev. Utilisez votre gestionnaire de packages pour les installer à l'échelle du système.

Pour apt( Ubuntu, Debian ... ):

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

Pour yum( CentOS, RHEL ... ):

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

Pour dnf( Fedora ... ):

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

Pour zypper( openSUSE ... ):

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

Pour apk( Alpine ... ):

# 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

Pour apt-cyg( Cygwin ... ):

apt-cyg install python-devel   # for python2.x installs
apt-cyg install python3-devel  # for python3.x installs
wim
la source
21
Essayez de locate Python.hvoir si vous avez déjà le fichier avant de faire tout cela. Si vous pouvez trouver le fichier localisé, la plupart du temps, cette réponse fonctionnera: stackoverflow.com/a/19344978/4954434 (Il s'agit peut-être simplement d'un problème de chemin)
Jithin Pavithran
2
@ Hack-R et autres si vous avez installé Python 2.6 et 2.7, "python-devel" n'installera que les bibliothèques de développement pour 2.6. Pour le forcer à installer les bibliothèques 2.7, utilisezsudo yum install python27-devel
Doktor J
15
J'utilise python3.6 le 14.04 a apt-get install python3.6-devfonctionné pour moi.
bits
9
a bien fonctionné pour moi (ubuntu 14.04) mais a dû spécifier le numéro de version completsudo apt-get install python3.6-dev
landrykapela
18
De même avec sudo apt-get install python3.7-dev.
kas
346

Sur Ubuntu, j'utilisais Python 3 et je devais installer

sudo apt-get install python3-dev

Si vous souhaitez utiliser une version de Python qui n'est pas liée à python3, installez le package python3.x-dev associé. Par exemple:

sudo apt-get install python3.5-dev
FreshPow
la source
32
J'ai exécuté la commande sudo apt-get install python3.4-devpour mon Python3.4 et cela a résolu mon problème.
Aaron Lelevier
4
@Rawrgulmuffins et cela dépend de la version de python que vous utilisez. Dans mon cas, sudo apt-get install python2.7-devle problème a été résolu
RockScience
6
J'ajouterais une chose à cette réponse - si vous avez plusieurs versions de Python 3.x, python3-devinstallera les dépendances pour cette version qui est liée à la python3commande. Donc, si vous souhaitez installer pour une version spécifique, utilisez la version complète comme - python3.x-dev.
xyres
3
Cela a aidé avec python 3.6.3 sur Ubuntu 14.04sudo apt-get install python3.6-dev
codestruggle
Si vous exécutez une version de Python dans un environnement virtuel différent de votre système Python, ceci.
SuperShoot
76

Pour Python 3.7 et Ubuntu en particulier, j'avais besoin

sudo apt install libpython3.7-dev

. Je pense qu'à un moment donné, les noms ont été changés de pythonm.n-devceci.

pour Python 3.6, de la même manière:

sudo apt install libpython3.6-dev
ijoseph
la source
6
ty: tearsofjoy:
valem
1
sensationnel. Après environ 30 minutes de recherche et d'installation de toutes sortes de choses, cette réponse a réellement résolu le problème
Vyacheslav Tsivina
!!!!! Bien sûr, c'était la bonne solution pour moi en utilisant Python 3.7 et Ubuntu 18.04.
villamejia
merci <3 <3 <3
Coffee inTime
1
ça marche aussi pour python 3.6 ... maissudo apt install libpython3.6-dev
Morteza Afshari
70

Vous devez faire deux choses.

Installez le package de développement pour Python, dans le cas de Debian / Ubuntu / Mint, cela se fait avec la commande:

sudo apt-get install python-dev

La deuxième chose est que les fichiers d'inclusion ne sont pas par défaut dans le chemin d'inclusion, ni la bibliothèque Python liée à l'exécutable par défaut. Vous devez ajouter ces drapeaux (remplacer la version de Python en conséquence):

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

En d'autres termes, votre commande de compilation doit être:

gcc -Wall -I/usr/include/python2.7 -lpython2.7  utilsmodule.c -o Utilc 
vartec
la source
dois-je ajouter des drapeaux pour chaque fichier inclus dans le fichier d'extension C ??
Mohanad Y.
1
Si vous utilisez une autre version de Python, 3.3 par exemple: sudo apt-get install python3.3-dev
FreshPow
Je recommanderais d'utiliser pkg-configau lieu d'un brut -I: stackoverflow.com/a/21531170/895245
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
47

Si vous utilisez un Raspberry Pi:

sudo apt-get install python-dev
Malachi Bazar
la source
35

sur Fedora, exécutez ceci pour Python 2:

sudo dnf install python2-devel

et pour Python 3:

sudo dnf install python3-devel
ravi.zombie
la source
1
Sur Mint 18.2 (basé sur Ubuntu), c'était le cas apt-get install python-dev.
Deleet
30

Si vous utilisez tox pour exécuter des tests sur plusieurs versions de Python, vous devrez peut-être installer les bibliothèques de développement Python pour chaque version de Python sur laquelle vous testez.

sudo apt-get install python2.6-dev 
sudo apt-get install python2.7-dev 
etc.
Christian Long
la source
27

Solution pour Cygwin

Vous devez installer le package python2-develoupython3-devel , selon la version Python que vous utilisez.

Vous pouvez l'installer rapidement en utilisant le 32 bits ou le 64 bits setup.exe (selon votre installation) de Cygwin.com .

Exemple (modifiez setup.exele nom de fichier et la version principale de Python si vous en avez besoin):

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

Vous pouvez également consulter mon autre réponse pour quelques options supplémentaires pour installer les packages de Cygwin à partir de la ligne de commande.

David Ferenczy Rogožan
la source
22

Dans l'API AWS (centOS), son

yum install python27-devel
yespbs
la source
Cela ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article - vous pouvez toujours commenter vos propres articles, et une fois que vous aurez une réputation suffisante, vous pourrez commenter n'importe quel article .
Wtower
2
@Wtower Oui, il fournit une réponse.
Tadeusz Kopec
1
Il fournit une réponse. Bien que vous deviez remplacer la version dont vous avez besoin.
Ganesh Krishnan du
1
cela a aidé à surmonter mes problèmes pip install cryptographylors d'une tentative sur une instance d'Amazon Linux.
Ryan Tuck
C'était une réponse utile, bien qu'il soit possible d'installer python-devel ou python2-devel sur Amazon Linux, c'est la seule qui a réellement fonctionné pour moi lors de l'exécution d'une installation pip dans virtualenv
Kristofor Carle
21

Pour moi, le changer en cela a fonctionné:

#include <python2.7/Python.h>

J'ai trouvé le fichier /usr/include/python2.7/Python.h, et comme il /usr/includeest déjà dans le chemin d'inclusion, cela python2.7/Python.hdevrait suffire.

Vous pouvez également ajouter le chemin d'inclusion à partir de la ligne de commande - gcc -I/usr/lib/python2.7(merci @ erm3nda).

sashoalm
la source
4
Toutes les autres réponses vous disent d'installer quelque chose. Celui-ci a fonctionné pour moi. Pourquoi n'est-ce pas la meilleure réponse?
noɥʇʎԀʎzɐɹƆ
1
@ uoɥʇʎPʎzɐɹC Peut-être parce qu'il ne fonctionnera pas sous python3?
Louis
Il est préférable de définir la bibliothèque gcc -I/usr/lib/python2.7 etcplutôt que de coder en dur les appels d'inclusion.
m3nda
1
@ noɥʇʎԀʎzɐɹƆ Parce que cela devrait fonctionner sans changer le code. Vous devez souvent compiler un code qui ne vous appartient pas, une dépendance externe par exemple, et la pire chose que vous puissiez faire est de modifier ce code.
David Ferenczy Rogožan
@DawidFerenczy Understanding.
noɥʇʎԀʎzɐɹƆ
19

Assurez-vous que les fichiers de développement Python sont fournis avec votre système d'exploitation.

Vous ne devez pas coder en dur la bibliothèque et inclure des chemins. Utilisez plutôt pkg-config, qui affichera les options correctes pour votre système spécifique:

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

Vous pouvez l'ajouter à votre ligne gcc :

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

Installation d'AWS EC2 exécutant python34:

sudo yum install python34-devel

parsethis
la source
14

Dans mon cas, ce qui l'a corrigé dans Ubuntu était d'installer les packages libpython-all-dev(ou libpython3-all-devsi vous utilisez Python 3).

Oriol Nieto
la source
2
python-all-devdans mon cas, mais assez proche.
Dave
1
@Oriol Nieto, Merci beaucoup. python-all-dev a également résolu le problème pour moi.
shrawan_lakhe
14

Si vous utilisez un virtualenv avec un python 3.6 (edge ​​en ce moment), assurez-vous d'installer le dev correspondant python 3.6 sudo apt-get install python3.6-dev, sinon l'exécution sudo python3-devinstallera le dev python 3.3.3-1, ce qui ne résoudra pas le problème.

Guillaume Cisco
la source
1
A très bien fonctionné pour moi sur 3.5 (.2), ​​aussi. Installer explicitement le bon package de développement pour votre version de Python est une bonne chose.
Seth
13

Ce n'est pas la même situation, mais cela fonctionne aussi pour moi et maintenant je peux utiliser SWIG avec Python3.5 :

J'essayais de compiler:

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

Avec Python 2.7 fonctionne très bien, pas avec ma version 3.5:

existe_wrap.c: 147: 21: erreur fatale: Python.h: aucune compilation n'existe el archivo o el directorio terminée.

Après avoir exécuté dans mon installation Ubuntu 16.04:

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

Maintenant, je peux compiler sans problème Python3.5:

gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/
Hugo LM
la source
11

J'ai également rencontré cette erreur lors de l'installation de coolprop dans ubuntu.

Pour Ubuntu 16.04 avec Python 3.6

sudo apt-get install python3.6-dev

Si jamais cela ne fonctionne pas, essayez d'installer / mettre à jour la gcclib.

sudo apt-get install gcc
Wreeecks
la source
1
omg, j'ai eu du mal avec ça pendant si longtemps parce que j'avais couru python3-devplusieurs fois et continuais à obtenir la même erreur, mais je ne savais pas python3.6-dev!! Merci!!
Blairg23
10

essayez apt-file. Il est difficile de se souvenir du nom du package où réside le fichier manquant. Il est générique et utile pour tous les fichiers de package.

Par exemple:

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# 

Maintenant, vous pouvez deviner quel expert choisir.

Venfah Nazir
la source
10

J'ai réussi à résoudre ce problème et à générer le fichier .so en une seule commande

gcc -shared -o UtilcS.so
-fPIC -I/usr/include/python2.7 -lpython2.7  utilsmodule.c
Mohanad Y.
la source
8

Pour les camarades OpenSuse là-bas:

sudo zypper install python3-devel
kmonsoor
la source
5

Si vous utilisez Python 3.6 sur Amazon Linux (basé sur RHEL, mais les réponses RHEL données ici ne fonctionnent pas):

sudo yum install python36-devel
Yigal
la source
4

Cette erreur s'est produite lorsque j'ai tenté d'installer ctds sur CentOS 7 avec Python3.6. J'ai fait toutes les astuces mentionnées ici, y compris yum install python34-devel. Le problème a Python.hété détecté dans /usr/include/python3.4m but not in /usr/include/python3.6m. J'ai essayé d'utiliser --global-optionpour pointer pour inclure dir ( pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds). Cela a abouti à un lpython3.6mintrouvable lors de la liaison des ctd.

Enfin, ce qui a fonctionné était de corriger l'environnement de développement pour Python3.6 à corriger avec les bibliothèques include et.

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 doit être dans votre chemin d'inclusion pour gcc. Quelle que soit la version de python utilisée, par exemple s'il s'agit de la version 3.6, elle devrait l'être en /usr/include/python3.6m/Python.hgénéral.

Babu Arunachalam
la source
Je ne sais pas pourquoi il y a un -1 mais c'est un problème à ce jour pour python3.6 avec CentOS car python36-devel n'est pas disponible. Vous devrez l'installer à partir de l'URL ci-dessus.
Babu Arunachalam
4

Bien sûr, python-devou libpython-all-devsont la première chose à ( apt) install, mais si cela n'aide pas comme c'était mon cas, je vous conseille d'installer les packages étrangers d'interface de fonction par sudo apt-get install libffi-devet sudo pip install cffi.

Cela devrait aider, surtout si vous voyez l'erreur comme / de c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory.

Énorme
la source
sudo pip3 install cffi (# for python3)
Magnus Melwin
3

Il apparaît souvent lorsque vous essayez de supprimer python3.5et d'installer python3.6.

Ainsi, lors de l'utilisation de python3(which python3 -V=> python3.6) pour installer certains packages, l'en- python3.5tête requis apparaîtra cette erreur.

Résoudre par installer le python3.6-devmodule.

les orphelins
la source
3
  1. Vous devez installer les fichiers de développement Python sur votre système d'exploitation si le Python fourni avec votre système d'exploitation ne les accompagne pas. Les nombreuses réponses à cette question montrent les innombrables façons dont cela peut être réalisé sur différents systèmes.

  2. Lorsque vous l'avez fait, le problème est de dire au compilateur où ils se trouvent et comment les compiler. Python est livré avec un programme appelé python-config. Pour la compilation, vous avez besoin de la --includessortie et pour lier un programme à la bibliothèque Python (incorporant Python dans votre programme) la --ldflagssortie. Exemple:

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

Le python-configprogramme peut être nommé d'après les versions de Python - sur Debian, Ubuntu par exemple, celles-ci peuvent être nommées python3-configou python3.6-config.

Antti Haapala
la source
2

Parfois, même après l'installation de python-dev, l'erreur persiste, recherchez l'erreur si 'gcc' est manquant.

Téléchargez d'abord comme indiqué dans https://stackoverflow.com/a/21530768/8687063 , puis installez gcc

Pour apt (Ubuntu, Debian ...):

sudo apt-get install gcc

Pour miam (CentOS, RHEL ...):

sudo yum install gcc

Pour dnf (Fedora ...):

sudo dnf install gcc

Pour zypper (openSUSE ...):

sudo zypper in gcc

Pour apk (Alpine ...):

sudo apk gcc
HimanshuGahlot
la source
1

Cela signifie que ce Python.hn'est pas dans les chemins d'inclusion par défaut de votre compilateur. L'avez-vous installé à l'échelle du système ou localement? Quel est votre OS?

Vous pouvez utiliser l' -I<path>indicateur pour spécifier un répertoire supplémentaire dans lequel votre compilateur doit rechercher les en-têtes. Vous devrez probablement effectuer un suivi -L<path>afin que gcc puisse trouver la bibliothèque avec laquelle vous allez créer un lien -l<name>.

Kos
la source