error fatal: Python.h: no existe tal archivo o directorio


1195

Estoy tratando de construir una biblioteca compartida usando un archivo de extensión C pero primero tengo que generar el archivo de salida usando el siguiente comando:

gcc -Wall utilsmodule.c -o Utilc

Después de ejecutar el comando, recibo este mensaje de error:

utilsmodule.c: 1: 20: error fatal: Python.h: No se finalizó la compilación de dicho archivo o directorio.

He intentado todas las soluciones sugeridas en Internet, pero el problema aún existe. No tengo ningún problema con Python.h. Logré localizar el archivo en mi máquina.

Respuestas:


2237

Parece que no ha instalado correctamente los archivos de encabezado y las bibliotecas estáticas para python dev. Use su administrador de paquetes para instalarlos en todo el sistema.

Para apt( Ubuntu, Debian ... ):

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

Para yum( CentOS, RHEL ... ):

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

Para dnf( Fedora ... ):

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

Para zypper( openSUSE ... ):

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

Para apk( alpino ... ):

# 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

Para apt-cyg( Cygwin ... ):

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

21
Intenta locate Python.hver si ya tienes el archivo antes de hacer todo esto. Si puede encontrar el archivo ubicado, principalmente esta respuesta funcionará: stackoverflow.com/a/19344978/4954434 (Podría ser solo un problema de ruta)
Jithin Pavithran

2
@ Hack-R y otros, si tiene instalado Python 2.6 y 2.7, "python-devel" solo instalará las bibliotecas de desarrollo para 2.6. Para forzarlo a instalar las bibliotecas 2.7, usesudo yum install python27-devel
Doktor J

15
Estoy usando python3.6 en 14.04 apt-get install python3.6-devfuncionó para mí.
bits

99
funcionó bien para mí (ubuntu 14.04) pero tuve que especificar el número de versión completosudo apt-get install python3.6-dev
landrykapela

18
Del mismo modo con sudo apt-get install python3.7-dev.
kas

346

En Ubuntu, estaba ejecutando Python 3 y tuve que instalar

sudo apt-get install python3-dev

Si desea utilizar una versión de Python que no esté vinculada a python3, instale el paquete python3.x-dev asociado. Por ejemplo:

sudo apt-get install python3.5-dev

32
sudo apt-get install python3.4-devEjecuté el comando para mi Python3.4 y esto resolvió mi problema.
Aaron Lelevier

44
@Rawrgulmuffins también depende de la versión de Python que estés usando. En mi caso sudo apt-get install python2.7-devsolucioné el problema
RockScience

66
Agregaría una cosa más a esta respuesta: si tiene varias versiones de Python 3.x, python3-devinstalará dependencias para esa versión que está vinculada al python3comando. Por lo tanto, si desea instalar una versión específica, use la versión completa como - python3.x-dev.
xyres

3
Esto ayudó con Python 3.6.3 en Ubuntu 14.04sudo apt-get install python3.6-dev
codetruggle

Si ejecuta una versión de Python dentro de un entorno virtual que es diferente a su sistema Python, esto.
SuperShoot

76

Para Python 3.7 y Ubuntu en particular, necesitaba

sudo apt install libpython3.7-dev

. Creo que en algún momento los nombres se cambiaron de pythonm.n-deva esto.

para Python 3.6, de manera similar:

sudo apt install libpython3.6-dev

66
ty: tearsofjoy:
valem

1
Guau. Después de 30 minutos de búsqueda e instalación de todo tipo de cosas, esta respuesta realmente resolvió el problema
Vyacheslav Tsivina,

!!!!! Por supuesto, esta fue la solución correcta para mí usando Python 3.7 y Ubuntu 18.04.
villamejia

gracias <3 <3 <3
Café en tiempo

1
también funciona para Python 3.6 ... perosudo apt install libpython3.6-dev
Morteza Afshari

70

Dos cosas que tienes que hacer.

Instale el paquete de desarrollo para Python, en el caso de Debian / Ubuntu / Mint se hace con el comando:

sudo apt-get install python-dev

Lo segundo es que los archivos de inclusión no están predeterminados en la ruta de inclusión, ni la biblioteca de Python está vinculada con el ejecutable de forma predeterminada. Debe agregar estos indicadores (reemplace la versión de Python en consecuencia):

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

En otras palabras, su comando de compilación debería ser:

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

¿Tengo que agregar marcas para cada archivo incluido en el archivo de extensión C?
Mohanad Y.

1
Si está utilizando otra versión de Python, 3.3 por ejemplo: sudo apt-get install python3.3-dev
FreshPow



35

en Fedora ejecuta esto para Python 2:

sudo dnf install python2-devel

y para Python 3:

sudo dnf install python3-devel

1
En Mint 18.2 (basado en Ubuntu), lo fue apt-get install python-dev.
Deleet

30

Si está utilizando tox para ejecutar pruebas en múltiples versiones de Python, es posible que deba instalar las bibliotecas de desarrollo de Python para cada versión de Python en la que esté probando.

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

27

Solución para Cygwin

Necesita instalar el paquete python2-developython3-devel , dependiendo de la versión de Python que esté utilizando.

Puede instalarlo rápidamente utilizando 32 bits o 64 bits setup.exe (dependiendo de su instalación) de Cygwin.com .

Ejemplo (modifique setup.exeel nombre de archivo y la versión principal de Python si es necesario):

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

También puede consultar mi otra respuesta para ver algunas opciones más para instalar los paquetes de Cygwin desde la línea de comandos.


22

En AWS API (centOS) su

yum install python27-devel

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar una aclaración de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones, y una vez que tenga suficiente reputación podrá comentar cualquier publicación .
Wtower

2
@Wtower Sí, proporciona una respuesta.
Tadeusz Kopec

1
Proporciona una respuesta. Aunque tiene que sustituir la versión por lo que necesita.
Ganesh Krishnan

1
Esto ayudó a superar mis problemas al intentar pip install cryptographyen una instancia de Amazon Linux.
Ryan Tuck

Esta fue una respuesta útil, aunque es posible instalar python-devel o python2-devel en Amazon Linux, esta es la única que realmente funcionó para mí al ejecutar una instalación de pip dentro de un virtualenv
Kristofor Carle

21

Para mí, cambiarlo a esto funcionó:

#include <python2.7/Python.h>

Encontré el archivo /usr/include/python2.7/Python.h, y dado /usr/includeque ya está en la ruta de inclusión, python2.7/Python.hdebería ser suficiente.

También puede agregar la ruta de inclusión desde la línea de comando - gcc -I/usr/lib/python2.7(gracias @ erm3nda).


44
Todas las otras respuestas te dicen que instales algo. Este me funcionó. ¿Por qué no es esta la mejor respuesta?
noɥʇʎԀʎzɐɹƆ

1
@ uoɥʇʎPʎzɐɹC ¿Tal vez porque no se ejecutará en python3?
Louis

Es mejor configurar la lib en gcc -I/usr/lib/python2.7 etclugar de codificar las llamadas de inclusión.
m3nda

1
@ noɥʇʎԀʎzɐɹƆ Porque debería funcionar sin cambiar el código. A menudo necesita compilar un código que no le pertenece, alguna dependencia externa, por ejemplo, y lo peor que puede hacer es modificar ese código.
David Ferenczy Rogožan

@DawidFerenczy Understod.
noɥʇʎԀʎzɐɹƆ

19

Asegúrese de que los archivos de desarrollo de Python vengan con su sistema operativo.

No debe codificar la biblioteca e incluir rutas. En su lugar, use pkg-config, que generará las opciones correctas para su sistema específico:

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

Puede agregarlo a su línea gcc :

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

16

Instalación de AWS EC2 ejecutando python34:

sudo yum install python34-devel


14

En mi caso, lo que lo arregló en Ubuntu fue instalar los paquetes libpython-all-dev(o libpython3-all-devsi usa Python 3).


2
python-all-deven mi caso, pero lo suficientemente cerca.
Dave S.

1
@Oriol Nieto, muchas gracias. python-all-dev también resolvió el problema por mí.
shrawan_lakhe

14

Si utiliza un virtualenv con un python 3.6 (edge ​​en este momento), asegúrese de instalar el dev python 3.6 correspondiente sudo apt-get install python3.6-dev, de lo contrario, la ejecución sudo python3-devinstalará el dev python 3.3.3-1, que no resolverá el problema.


1
También me funcionó muy bien en 3.5 (.2). Instalar explícitamente el paquete de desarrollo adecuado para su versión de Python es una buena cosa.
Septiembre

13

No es la misma situación, pero también funciona para mí y ahora puedo usar SWIG con Python3.5 :

Estaba tratando de compilar:

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

Con Python 2.7 funciona bien, no con mi versión 3.5:

existe_wrap.c: 147: 21: error fatal: Python.h: No existe el archivo o la compilación del directorio finalizada.

Después de ejecutar mi instalación de Ubuntu 16.04:

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

Ahora puedo compilar sin problemas Python3.5:

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

11

También encontré este error cuando estaba instalando coolprop en ubuntu.

Para ubuntu 16.04 con python 3.6

sudo apt-get install python3.6-dev

Si alguna vez esto no funciona, intente instalar / actualizar gcclib.

sudo apt-get install gcc

1
¡Dios mío, luché con esto por TANTO tiempo porque había corrido python3-devmuchas veces y seguía recibiendo el mismo error, pero no sabía python3.6-dev! ¡¡Gracias!!
Blairg23

10

prueba apt-file. Es difícil recordar el nombre del paquete donde reside el archivo que falta. Es genérico y útil para cualquier archivo de paquete.

Por ejemplo:

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# 

Ahora puede hacer una conjetura experta sobre cuál elegir.


10

Logré resolver este problema y generar el archivo .so en un comando

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

8

Para los camaradas de OpenSuse:

sudo zypper install python3-devel


5

Si está utilizando Python 3.6 en Amazon Linux (basado en RHEL, pero las respuestas de RHEL proporcionadas aquí no funcionaron):

sudo yum install python36-devel

4

Este error ocurrió cuando intenté instalar ctds en CentOS 7 con Python3.6. Hice todos los trucos mencionados aquí, incluidos yum install python34-devel. El problema fue Python.hencontrado en /usr/include/python3.4m but not in /usr/include/python3.6m. Traté de usar --global-optionpara señalar para incluir dir ( pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds). Esto resultó en un lpython3.6mno encontrado al vincular ctds.

Finalmente, lo que funcionó fue arreglar el entorno de desarrollo para Python3.6 necesita corregir con include y 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 debe estar en su ruta de inclusión para gcc. Cualquiera que sea la versión de Python que se use, por ejemplo, si es 3.6, entonces debería estar /usr/include/python3.6m/Python.hnormalmente.


No estoy seguro de por qué hay un -1, pero este es un problema a partir de hoy para python3.6 con CentOS ya que python36-devel no está disponible. Deberá instalarlo desde la URL anterior.
Babu Arunachalam

4

Claro python-devo libpython-all-deves lo primero que debe hacer ( apt) install, pero si eso no ayuda, como fue mi caso, le aconsejo que instale los paquetes de Interfaz de funciones ajenos por sudo apt-get install libffi-devy sudo pip install cffi.

Esto debería ayudar especialmente si ve el error como / desde c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory.


sudo pip3 install cffi (# para python3)
Magnus Melwin

3

A menudo aparece cuando intenta eliminar python3.5e instalar python3.6.

Entonces, al usar python3(which python3 -V=> python3.6) para instalar algunos paquetes, el python3.5encabezado requerido aparecerá este error.

Resolver por python3.6-devmódulo de instalación .


3
  1. Debe instalar los archivos de desarrollo de Python en su sistema operativo si el Python proporcionado con su sistema operativo no viene con ellos. Las muchas respuestas a esta pregunta muestran las innumerables formas en que esto se puede lograr en diferentes sistemas.

  2. Cuando lo haya hecho, el problema es decirle al compilador dónde están ubicados y cómo compilarlos. Python viene con un programa llamado python-config. Para la compilación, necesita la --includessalida y para vincular un programa con la biblioteca de Python (incrustando Python en su programa) la --ldflagssalida. Ejemplo:

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

El python-configprograma se puede nombrar después de las versiones de Python: en Debian, Ubuntu, por ejemplo, se pueden nombrar python3-configo python3.6-config.


2

A veces, incluso después de instalar python-dev, el error persiste. Verifique el error si falta 'gcc'.

Primero descargue como se indica en https://stackoverflow.com/a/21530768/8687063 , luego instale gcc

Para apt (Ubuntu, Debian ...):

sudo apt-get install gcc

Para ñam (CentOS, RHEL ...):

sudo yum install gcc

Para dnf (Fedora ...):

sudo dnf install gcc

Para zypper (openSUSE ...):

sudo zypper in gcc

Para apk (Alpine ...):

sudo apk gcc

1

Esto significa que Python.hno está en las rutas de acceso predeterminadas de su compilador. ¿Lo ha instalado en todo el sistema o localmente? ¿Cuál es tu sistema operativo?

Puede usar el -I<path>indicador para especificar un directorio adicional donde su compilador debe buscar encabezados. Probablemente tendrá que hacer un seguimiento -L<path>para que gcc pueda encontrar la biblioteca con la que se vinculará usando -l<name>.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.