with - error fatal: Python.h: No existe tal archivo o directorio
error: command ''x86_64-linux-gnu-gcc'' failed with exit status 1 (25)
A menudo aparece cuando intentas eliminar python3.5
e instalar python3.6
.
Entonces, al usar python3
(que python3 -V
=> python3.6
) para instalar algunos paquetes, el encabezado de python3.5
mostrará este error.
Resolver mediante la instalación python3.6-dev
módulo python3.6-dev
.
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 ha finalizado tal compilación de archivos o directorios.
de hecho, he intentado todas las soluciones sugeridas en Internet, pero el problema sigue existiendo ... tampoco tengo ningún problema con Python.h
. Logré ubicar el archivo en mi máquina ... ¿alguien ha enfrentado el mismo problema antes?
A veces, incluso después de instalar python-dev el error persiste, compruebe si está faltando ''gcc''.
Primero descargue como se indica en https://.com/a/21530768/8687063 , luego instale gcc
Para apt (Ubuntu, Debian ...):
sudo apt-get install gcc
Para yum (CentOS, RHEL ...):
sudo yum install gcc
Para dnf (Fedora ...):
sudo dnf install gcc
Para zypper (openSUSE ...):
sudo zypper in gcc
Para apk (alpino ...):
sudo apk gcc
Asegúrese de que los archivos dev de Python vienen con su sistema operativo.
No debes 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
Puedes agregarlo a tu línea de gcc :
gcc $(pkg-config --cflags --libs python2) -Wall utilsmodule.c -o Utilc
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. Necesitas agregar estas banderas (reemplaza 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
En AWS API (centOS) su
yum install python27-devel
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
En mi caso, lo que lo arregló en Ubuntu fue instalar los paquetes libpython-all-dev
(o libpython3-all-dev
si usas Python 3).
Este error ocurrió cuando intenté instalar ctds en CentOS 7 con Python3.6. Hice todos los trucos mencionados aquí, incluyendo yum install python34-devel
. El problema fue que Python.h
se encontró en /usr/include/python3.4m but not in /usr/include/python3.6m
. Intenté usar --global-option
para apuntar a include dir ( pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds
) . Esto dio lugar a un lpython3.6m
no se encuentra al vincular ctds.
Finalmente, lo que funcionó fue arreglar el entorno de desarrollo para Python3.6 que se debe corregir con la inclusión 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 necesita estar en tu 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 en /usr/include/python3.6m/Python.h
normalmente.
Esto significa que Python.h
no está en las rutas de acceso de inclusión predeterminadas de su compilador. ¿Lo has instalado en todo el sistema o localmente? ¿Cuál es tu sistema operativo?
Podría usar el indicador -I<path>
para especificar un directorio adicional donde su compilador debería buscar encabezados. Probablemente tendrá que hacer un seguimiento con -L<path>
para que gcc pueda encontrar la biblioteca con la que se enlazará usando -l<name>
.
Instalación de AWS EC2 ejecutando python34:
sudo yum install python34-devel
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
Me gustaría añadir también la solución para Cygwin :
Necesitas instalar el paquete python2-devel
o python3-devel
, dependiendo de la versión de Python que estés usando.
Puede instalarlo rápidamente usando el archivo setup.exe
32-bit o 64-bit (dependiendo de su instalación) de Cygwin.com .
Ejemplo (modifique el nombre de archivo de setup.exe
y la versión principal de Python si lo necesita):
$ 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.
No es la misma situación, pero también me funciona 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 ejecutarlo en 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/
Para CentOS 7:
sudo yum install python36u-devel
Seguí las instrucciones aquí para instalar python3.6 en varias máquinas virtuales: https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a-local-programming-environment-on-centos-7 y luego fue capaz de construir mod_wsgi y hacerlo funcionar con un virtualenv python3.6
Para los camaradas de OpenSuse:
sudo zypper install python3-devel
Para mí, cambiarlo a esto funcionó:
#include <python2.7/Python.h>
Encontré el archivo /usr/include/python2.7/Python.h
, y como /usr/include
ya está en la ruta de inclusión, entonces python2.7/Python.h
debería ser suficiente.
También puede agregar la ruta de inclusión desde la línea de comandos - gcc -I/usr/lib/python2.7
(gracias @ erm3nda).
Parece que no has instalado correctamente los archivos de encabezado y las bibliotecas estáticas para el desarrollador de Python. 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 python34-devel # for python3.4 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
Seguro que python-dev
o libpython-all-dev
son lo primero que debe install
( apt
), pero si eso no ayuda, como fue mi caso, le aconsejo que instale los paquetes de Interfaz de Función extranjeros por sudo apt-get install libffi-dev
y 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
.
Si está utilizando tox para ejecutar pruebas en varias versiones de Python, es posible que deba instalar las bibliotecas de desarrollo de Python para cada versión de Python en la que esté realizando pruebas.
sudo apt-get install python2.6-dev
sudo apt-get install python2.7-dev
etc.
Si está utilizando Python 3.6 en Amazon Linux (basado en RHEL, pero las respuestas de RHEL que se dieron aquí no funcionaron):
sudo yum install python36-devel
Si está utilizando una Raspberry Pi:
sudo apt-get install python-dev
Si usas un virtualenv con un python 3.6 (borde ahora), asegúrate de instalar python 3.6 dev correspondiente sudo apt-get install python3.6-dev
, de lo contrario ejecutando sudo python3-dev
instalará el dev python 3.3.3- 1, que no resolverá el problema.
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 gcc
lib.
sudo apt-get install gcc
en Fedora ejecuta esto para Python 2:
sudo dnf install python2-devel
y para Python 3:
sudo dnf install python3-devel
prueba apt-file. Es difícil recordar el nombre del paquete donde reside el archivo faltante. Es genérico y útil para cualquier paquete de archivos.
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 suposición experta en cuanto a cuál elegir.