errore irreversibile: Python.h: nessun file o directory


1195

Sto cercando di creare una libreria condivisa utilizzando un file di estensione C, ma prima devo generare il file di output usando il comando seguente:

gcc -Wall utilsmodule.c -o Utilc

Dopo aver eseguito il comando, viene visualizzato questo messaggio di errore:

utilsmodule.c: 1: 20: errore irreversibile: Python.h: nessuna compilazione di file o directory terminata.

Ho provato tutte le soluzioni suggerite su Internet ma il problema persiste. Non ho problemi con Python.h. Sono riuscito a individuare il file sul mio computer.

Risposte:


2237

Sembra che tu non abbia installato correttamente i file di intestazione e le librerie statiche per python dev. Usa il tuo gestore pacchetti per installarli a livello di sistema.

Per apt( Ubuntu, Debian ... ):

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

Per yum( CentOS, RHEL ... ):

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

Per dnf( Fedora ... ):

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

Per zypper( openSUSE ... ):

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

Per 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

Per apt-cyg( Cygwin ... ):

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

21
Prova a locate Python.hvedere se hai già il file prima di fare tutto questo. Se riesci a trovare il file che si trova, principalmente questa risposta funzionerà: stackoverflow.com/a/19344978/4954434 (potrebbe essere solo un problema relativo al percorso)
Jithin Pavithran,

2
@ Hack-R e altri se hai installato Python 2.6 e 2.7, "python-devel" installerà le librerie dev solo per 2.6. Per forzare l'installazione delle librerie 2.7, utilizzaresudo yum install python27-devel
Doktor J

15
Sto usando python3.6 il 14.04 ha apt-get install python3.6-devfunzionato per me.
bit

9
ha funzionato bene per me (Ubuntu 14.04) ma ho dovuto specificare il numero di versione completosudo apt-get install python3.6-dev
landrykapela,

17
Allo stesso modo con sudo apt-get install python3.7-dev.
kas,

346

Su Ubuntu, eseguivo Python 3 e dovevo installarlo

sudo apt-get install python3-dev

Se si desidera utilizzare una versione di Python non collegata a python3, installare il pacchetto python3.x-dev associato. Per esempio:

sudo apt-get install python3.5-dev

32
Ho eseguito il comando sudo apt-get install python3.4-devper il mio Python3.4 e questo ha risolto il mio problema.
Aaron Lelevier,

4
@Rawrgulmuffins bene dipende da quale versione di Python stai usando. Nel mio caso sudo apt-get install python2.7-devrisolto il problema
RockScience il

6
Aggiungerei un'altra cosa a questa risposta: se si dispone di più versioni di Python 3.x, python3-devverranno installate le dipendenze per quella versione collegata al python3comando. Quindi, se si desidera installare per una versione specifica, utilizzare la versione completa come - python3.x-dev.
xyres,

3
Questo ha aiutato con Python 3.6.3 su Ubuntu 14.04sudo apt-get install python3.6-dev
codestruggle il

Se esegui una versione di Python all'interno di un ambiente virtuale diverso dal tuo sistema Python, questo.
SuperShoot

76

Per Python 3.7 e Ubuntu in particolare, avevo bisogno

sudo apt install libpython3.7-dev

. Penso che ad alcuni punti i nomi siano stati cambiati da pythonm.n-devquesto.

per Python 3.6, in modo simile:

sudo apt install libpython3.6-dev

6
ty: tearsofjoy:
valem

1
Wow. Dopo circa 30 minuti di ricerca e installazione di tutti i tipi di cose, questa risposta ha risolto il problema
Vyacheslav Tsivina,

!!!!! Ovviamente questa è stata la soluzione giusta per me usando Python 3.7 e Ubuntu 18.04.
villamejia

grazie <3 <3 <3
Coffee inTime

1
funziona anche per Python 3.6 ... masudo apt install libpython3.6-dev
Morteza Afshari il

70

Due cose che devi fare.

Installa il pacchetto di sviluppo per Python, nel caso di Debian / Ubuntu / Mint è fatto con il comando:

sudo apt-get install python-dev

La seconda cosa è che i file include non sono per impostazione predefinita nel percorso include, né la libreria Python è collegata con eseguibile per impostazione predefinita. Devi aggiungere questi flag (sostituisci la versione di Python di conseguenza):

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

In altre parole, il comando di compilazione dovrebbe essere:

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

devo aggiungere flag per ogni file incluso nel file di estensione C ??
Mohanad Y.

1
Se si utilizza un'altra versione di Python, ad esempio 3.3: sudo apt-get install python3.3-dev
FreshPow

Mi consiglia di utilizzare pkg-configal posto di un grezzo -I: stackoverflow.com/a/21531170/895245
Ciro Santilli郝海东冠状病六四事件法轮功


35

su Fedora eseguilo per Python 2:

sudo dnf install python2-devel

e per Python 3:

sudo dnf install python3-devel

1
Su Mint 18.2 (basato su Ubuntu), lo era apt-get install python-dev.
Deleet,

30

Se si utilizza tox per eseguire test su più versioni di Python, potrebbe essere necessario installare le librerie di sviluppo Python per ciascuna versione di Python su cui si sta eseguendo il test.

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

27

Soluzione per Cygwin

Devi installare il pacchetto python2-developython3-devel , a seconda della versione di Python che stai utilizzando.

È possibile installarlo rapidamente utilizzando i 32 bit o 64 bit setup.exe (a seconda dell'installazione) da Cygwin.com .

Esempio (modifica setup.exeil nome del file e la versione principale di Python se necessario):

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

Puoi anche controllare la mia altra risposta per qualche altra opzione per installare i pacchetti di Cygwin dalla riga di comando.


22

In AWS API (centOS) è

yum install python27-devel

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post: puoi sempre commentare i tuoi post e una volta che avrai una reputazione sufficiente sarai in grado di commentare qualsiasi post .
Wtower,

2
@Wtower Sì, fornisce una risposta.
Tadeusz Kopec,

1
Fornisce una risposta. Anche se devi sostituire la versione per quello che ti serve.
Ganesh Krishnan,

1
questo mi ha aiutato a superare i miei problemi tentando di farlo pip install cryptographysu un'istanza Linux di Amazon.
Ryan Tuck,

Questa è stata una risposta utile, mentre è possibile installare python-devel o python2-devel su Amazon Linux, questa è l'unica che ha funzionato per me durante l'esecuzione di un'installazione pip all'interno di un virtualenv
Kristofor Carle,

21

Per me, cambiarlo in questo ha funzionato:

#include <python2.7/Python.h>

Ho trovato il file /usr/include/python2.7/Python.h, e poiché /usr/includeè già nel percorso di inclusione, quindipython2.7/Python.h dovrebbe essere sufficiente.

Puoi anche aggiungere il percorso di inclusione dalla riga di comando - gcc -I/usr/lib/python2.7(grazie @ erm3nda).


4
Tutte le altre risposte ti dicono di installare qualcosa. Questo ha funzionato per me. Perché questa non è la risposta migliore?
noɥʇʎԀʎzɐɹƆ

1
@ uoɥʇʎPʎzɐɹC Forse perché non funzionerà con python3?
Louis,

È meglio impostare la lib gcc -I/usr/lib/python2.7 etcpiuttosto che hardcode nelle chiamate include.
m3nda

1
@ noɥʇʎԀʎzɐɹƆ Perché dovrebbe funzionare senza cambiare il codice. Spesso è necessario compilare un codice non di proprietà dell'utente, ad esempio una dipendenza esterna, e la cosa peggiore che puoi fare è modificarlo.
David Ferenczy Rogožan,

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

19

Assicurati che i file dev di Python vengano forniti con il tuo sistema operativo.

Non è necessario codificare la libreria e includere percorsi. Invece, usa pkg-config, che produrrà le opzioni corrette per il tuo sistema specifico:

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

Puoi aggiungerlo alla tua linea gcc :

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

16

Installazione di AWS EC2 con python34:

sudo yum install python34-devel


14

Nel mio caso, ciò che l'ha risolto in Ubuntu è stato installare i pacchetti libpython-all-dev(o libpython3-all-devse usi Python 3).


2
python-all-devnel mio caso, ma abbastanza vicino.
Dave S.,

1
@Oriol Nieto, grazie mille. python-all-dev ha anche risolto il problema per me.
shrawan_lakhe,

14

Se usi un virtualenv con un python 3.6 (edge ​​adesso), assicurati di installare il dev python 3.6 corrispondente sudo apt-get install python3.6-dev, altrimenti l'esecuzione sudo python3-devinstallerà il python dev 3.3.3-1, che non risolverà il problema.


1
Ha funzionato alla grande anche per me su 3.5 (.2). L'installazione esplicita del pacchetto dev giusto per la tua versione di Python è una buona cosa.
Seth,

13

Non è la stessa situazione, ma funziona anche per me e ora posso usare SWIG con Python3.5 :

Stavo cercando di compilare:

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

Con Python 2.7 funziona bene, non con la mia versione 3.5:

existe_wrap.c: 147: 21: errore fatale: Python.h: non è stata terminata la compilazione dell'archivio archivistico o della directory.

Dopo l'esecuzione nella mia installazione di Ubuntu 16.04:

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

Ora posso compilare senza problemi Python3.5:

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

11

Ho anche riscontrato questo errore durante l'installazione di coolprop in Ubuntu.

Per Ubuntu 16.04 con Python 3.6

sudo apt-get install python3.6-dev

Se mai questo non funziona, prova a installare / aggiornare gcclib.

sudo apt-get install gcc

1
omg, ho lottato con questo per così tanto tempo perché avevo corso python3-devmolte volte e continuavo a ricevere lo stesso errore, ma non lo sapevo python3.6-dev!! Grazie!!
Blairg23

10

prova apt-file. È difficile ricordare il nome del pacchetto in cui risiede il file mancante. È generico e utile per qualsiasi file di pacchetto.

Per esempio:

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# 

Ora puoi fare un'ipotesi esperta su quale scegliere.


10

Sono riuscito a risolvere questo problema e generare il file .so in un solo comando

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

8

Per i compagni OpenSuse là fuori:

sudo zypper install python3-devel


5

Se stai usando Python 3.6 su Amazon Linux (basato su RHEL, ma le risposte RHEL fornite qui non hanno funzionato):

sudo yum install python36-devel

4

Questo errore si è verificato quando ho tentato di installare ctds su CentOS 7 con Python3.6. Ho fatto tutti i trucchi menzionati qui incluso yum install python34-devel. Il problema è Python.hstato riscontrato in /usr/include/python3.4m but not in /usr/include/python3.6m. Ho provato a usare --global-optionper indicare di includere dir ( pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds). Ciò ha provocato alpython3.6m non trovato durante il collegamento di ctds.

Infine, ciò che ha funzionato è stato correggere l'ambiente di sviluppo per Python3.6, che deve essere corretto con include e 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 deve essere nel tuo percorso di inclusione per gcc. Qualunque sia la versione di Python utilizzata, ad esempio se è 3.6, dovrebbe essere in /usr/include/python3.6m/Python.hgenere.


Non sono sicuro del motivo per cui esiste un -1, ma questo è un problema ad oggi per python3.6 con CentOS poiché python36-devel non è disponibile. Dovrai installarlo dall'URL sopra.
Babu Arunachalam,

4

Sicuro python-devo libpython-all-devsono la prima cosa a ( apt) install, ma se ciò non aiuta come nel mio caso, ti consiglio di installare i pacchetti di interfaccia di funzione esterni da sudo apt-get install libffi-devesudo pip install cffi .

Questo dovrebbe aiutare soprattutto se vedi l'errore come / from c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory.


sudo pip3 install cffi (# for python3)
Magnus Melwin

3

Appare spesso quando si tenta di rimuovere python3.5e installare python3.6.

Quindi quando si utilizza python3 (which python3 -V=> python3.6) per installare alcuni pacchetti richiesti python3.5nell'intestazione apparirà questo errore.

Risolvi dal python3.6-devmodulo di installazione .


3
  1. È necessario installare i file di sviluppo di Python sul sistema operativo se Python fornito con il sistema operativo non viene fornito con essi. Le molte risposte a questa domanda mostrano la miriade di modi in cui questo può essere ottenuto su sistemi diversi.

  2. Quando avete fatto, il problema sta dicendo il compilatore dove sono situati e come compilare contro di loro. Python viene fornito con un programma chiamato python-config. Per la compilazione, è necessario l' --includesoutput e per collegare un programma alla libreria Python (incorporando Python nel programma) l' --ldflagsoutput. Esempio:

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

Il python-configprogramma può essere chiamato in base alle versioni di Python - su Debian, ad esempio Ubuntu possono essere nominati python3-configo python3.6-config.


2

A volte anche dopo aver installato python-dev l'errore persiste, controllare l'errore se manca 'gcc'.

Prima scarica come indicato in https://stackoverflow.com/a/21530768/8687063 , quindi installa gcc

Per apt (Ubuntu, Debian ...):

sudo apt-get install gcc

Per yum (CentOS, RHEL ...):

sudo yum install gcc

Per dnf (Fedora ...):

sudo dnf install gcc

Per zypper (openSUSE ...):

sudo zypper in gcc

Per apk (Alpine ...):

sudo apk gcc

1

Ciò significa che Python.hnon è incluso nei percorsi predefiniti del compilatore. L'hai installato a livello di sistema o localmente? Qual è il tuo sistema operativo?

È possibile utilizzare il -I<path>flag per specificare una directory aggiuntiva in cui il compilatore dovrebbe cercare le intestazioni. Probabilmente dovrai seguire in -L<path>modo che gcc possa trovare la libreria con cui ti collegherai usando -l<name>.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.