web-dev-qa-db-fra.com

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

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 le message d'erreur suivant:

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

en fait, j’ai essayé toutes les solutions suggérées sur Internet, mais le problème existe toujours ... je n’ai également aucun problème avec Python.h. J'ai réussi à localiser le fichier sur ma machine ... tout le monde a déjà rencontré le même problème ??

967
Mohanad Y.

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
10
Mohanad Y.

On dirait que vous n'avez pas correctement installé les fichiers d'en-tête et les bibliothèques statiques pour python dev. Utilisez votre gestionnaire de paquets pour les installer sur l’ensemble du système.

Pour apt (buntu, 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
1846
wim

Sur Ubuntu, j’exécutais Python 3 et j’ai dû 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
283
FreshPow

Deux choses à faire.

Installez le paquet de développement pour Python. Si vous utilisez Debian/Ubuntu/Mint, utilisez la commande suivante:

Sudo apt-get install python-dev

Deuxièmement, les fichiers d'inclusion ne sont pas inclus par défaut dans le chemin d'inclusion, pas plus que la bibliothèque Python n'est liée à l'exécutable par défaut. Vous devez ajouter ces drapeaux (remplacez 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 
62
vartec

Si vous utilisez un Raspberry Pi:

Sudo apt-get install python-dev
47
Malachi Bazar

sur Fedora, lancez ceci pour Python 2:

Sudo dnf install python2-devel

et pour Python 3:

Sudo dnf install python3-devel
34
ravi.zombie

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

Sudo apt-get install python2.6-dev 
Sudo apt-get install python2.7-dev 
etc.
30
Christian Long

Solution pour Cygwin

Vous devez installer le package python2-devel ou python3-devel, selon la version Python que vous êtes en utilisant.

Vous pouvez l’installer rapidement à l’aide du 2 bits ou 64 bitssetup.exe (selon votre installation) de Cygwin.com .

Exemple (modifiez le nom du fichier setup.exe 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 permettant d'installer les packages de Cygwin à partir de la ligne de commande.

25

Dans AWS API (centOS), son

yum install python27-devel
22
yespbs

Pour moi, le changer en ceci a fonctionné:

#include <python2.7/Python.h>

J'ai trouvé le fichier /usr/include/python2.7/Python.h, et puisque /usr/include est déjà dans le chemin d'inclusion, alors python2.7/Python.h devrait suffire.

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

19
sashoalm

AWS EC2 installe l'exécution de python34:

Sudo yum install python34-devel

16
orsonady

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

Vous ne devriez pas coder en dur la bibliothèque et inclure des chemins. Au lieu de cela, utilisez 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) 
15
sleblanc

Dans mon cas, Ubuntu a résolu l'installation des paquets libpython-all-dev (ou libpython3-all-dev si vous utilisez Python 3).

14
Oriol Nieto

Ce n'est pas la même situation, mais ça marche 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 bien, pas avec ma version 3.5:

existe_wrap.c: 147: 21: erreur fatale: Python.h: aucune compilation ni aucune compilation n'est terminée.

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

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

Maintenant je peux compiler sans problèmes Python3.5:

gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/
13
Hugo L.M

Si vous utilisez un virtualenv avec un 3.6 python (Edge maintenant), assurez-vous d'installer le pythoncorrespondant _ _ 3.6 dev Sudo apt-get install python3.6-dev, sinon vous exécuterez Sudo python3-dev. Installez le python _ dev 3.3.3-1, qui ne résoudra pas le problème.

12
Guillaume Cisco

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 cela ne fonctionne jamais, essayez d'installer/de mettre à jour gcc lib.

Sudo apt-get install gcc
11
Wreeecks

essayez apt-file. Il est difficile de se rappeler le nom du paquet contenant le fichier manquant. C'est générique et utile pour tous les fichiers de paquets.

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 laisser un expert deviner lequel choisir.

9
Venfah Nazir

Pour les camarades OpenSuse:

Sudo zypper install python3-devel
8
kmonsoor

Pour CentOS 7:

Sudo yum install python36u-devel

J'ai suivi les instructions ici pour installer python3.6 sur plusieurs machines virtuelles: https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a- local-programming-environment-on-centos-7 et a ensuite été en mesure de construire mod_wsgi et de le faire fonctionner avec un serveur virtuel python3.6

8
Steve G

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

Enfin, ce qui a bien fonctionné a été de corriger l’environnement de développement de Python3.6 et de le corriger à l’inclusion et aux bibliothèques.

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 normalement se trouver dans /usr/include/python3.6m/Python.h.

4
Babu Arunachalam

Bien sûr, python-dev ou libpython-all-dev sont la première chose à faire pour (apt) install, mais si cela ne vous aide pas, comme dans mon cas, je vous conseille d'installer le - interface de fonction étrangère paquets par Sudo apt-get install libffi-dev et 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.

4
Huge

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

Ainsi, lorsque vous utilisez python3 (quel python3 -V => python3.6) pour installer certains packages requis, l'en-tête python3.5 apparaîtra avec cette erreur.

Résoudre par le module install python3.6-dev.

3
dphans

Pour Python 3.7 et Ubuntu en particulier, il me fallait

Sudo apt install libpython3.7-dev

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

2
ijoseph

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

Commencez par télécharger comme indiqué dans https://stackoverflow.com/a/21530768/868706 , puis installez gcc

Pour apt (Ubuntu, Debian ...):

Sudo apt-get install gcc

Pour yum (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
2
HimanshuGahlot

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
2
Yigal
  1. Vous devez installer les fichiers de développement Python sur votre système d'exploitation si le fichier 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. Quand vous l'avez fait, le problème est de dire au compilateur où ils se trouvent et comment compiler. Python est fourni avec un programme appelé python-config. Pour la compilation, vous avez besoin de la sortie --includes et pour lier un programme à la bibliothèque Python (incorporant Python dans votre programme) à la sortie --ldflags. Exemple:

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

Le programme python-config peut être nommé d'après les versions Python - sous Debian, Ubuntu par exemple, elles peuvent être nommées python3-config ou python3.6-config.

1
Antti Haapala

Cela signifie que Python.h ne figure 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 ton OS?

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

1
Kos