fatale fout: Python.h: Geen dergelijk bestand of map

Ik probeer een gedeelde bibliotheek te bouwen met een C-extensiebestand, maar eerst moet ik het uitvoerbestand genereren met de onderstaande opdracht:

gcc -Wall utilsmodule.c -o Utilc

Na het uitvoeren van de opdracht krijg ik deze foutmelding:

> utilsmodule.c:1:20: fatal error: Python.h: No such file or directory
compilation terminated.

Ik heb alle voorgestelde oplossingen via internet geprobeerd, maar het probleem bestaat nog steeds. Ik heb geen probleem met Python.h. Ik heb het bestand op mijn computer kunnen vinden.


Antwoord 1, autoriteit 100%

Het lijkt erop dat je de header-bestanden en statische bibliotheken voor python dev niet goed hebt geïnstalleerd. Gebruik je pakketbeheerder om ze systeembreed te installeren.

Voor apt (Ubuntu, Debian…):

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

Voor yum (CentOS, RHEL…):

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

Voor dnf (Fedora…):

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

Voor zypper (openSUSE…):

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

Voor 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

Voor apt-cyg (Cygwin…):

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

Antwoord 2, autoriteit 15%

Op Ubuntu draaide ik Python 3 en ik moest

. installeren

sudo apt-get install python3-dev

Als je een versie van Python wilt gebruiken die niet aan python3 is gekoppeld, installeer dan het bijbehorende pakket python3.x-dev. Bijvoorbeeld:

sudo apt-get install python3.5-dev

Antwoord 3, autoriteit 8%

Vooral voor Python 3.7 en Ubuntu in het bijzonder had ik

sudo apt install libpython3.7-dev

.
Ik denk dat op een gegeven moment de namen zijn veranderd van pythonm.n-dev in dit.

op dezelfde manier voor Python 3.6, 3.8 en 3.9:

sudo apt install libpython3.6-dev

sudo apt install libpython3.8-dev

sudo apt install libpython3.9-dev


Antwoord 4, autoriteit 3%

Twee dingen die je moet doen.

Installeer het ontwikkelpakket voor Python, in het geval van Debian/Ubuntu/Mint is het gedaan met het commando:

sudo apt-get install python-dev

Ten tweede is dat include-bestanden niet standaard in het include-pad staan, en de Python-bibliotheek is ook niet standaard gekoppeld aan een uitvoerbaar bestand. Je moet deze vlaggen toevoegen (vervang de Python-versie dienovereenkomstig):

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

Met andere woorden, uw compileeropdracht zou moeten zijn:

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

Antwoord 5, autoriteit 2%

Als je een Raspberry Pi gebruikt:

sudo apt-get install python3-dev

Antwoord 6

op Fedora voer dit uit voor Python 2:

sudo dnf install python2-devel

en voor Python 3:

sudo dnf install python3-devel

Antwoord 7

Als u tox gebruikt om tests uit te voeren op meerdere versies van Python, moet u mogelijk de Python-dev installeren bibliotheken voor elke versie van Python waarop u test.

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

Antwoord 8

Zorg ervoor dat de Python-dev-bestanden bij uw besturingssysteem worden geleverd.

Je moet de bibliotheek niet hard coderen en paden opnemen. Gebruik in plaats daarvan pkg-config, die de juiste opties voor uw specifieke systeem zal weergeven:

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

Je kunt het toevoegen aan je gcc regel:

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

Antwoord 9

Oplossing voor Cygwin

Je moet het pakket python2-devel of python3-devel installeren, afhankelijk van de Python-versie die je gebruikt.

Je kunt het snel installeren met de 32-bits of 64-bit setup.exe (afhankelijk van uw installatie) van Cygwin.com.

Voorbeeld (wijzig indien nodig de bestandsnaam van setup.exe en de hoofdversie van Python):

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

Je kunt ook mijn andere antwoord bekijken voor nog een paar opties om Cygwin’s pakketten vanaf de opdrachtregel te installeren.


Antwoord 10

Voor mij werkte het veranderen naar dit:

#include <python2.7/Python.h>

Ik heb het bestand /usr/include/python2.7/Python.h gevonden en aangezien /usr/include al in het include-pad staat, is python2.7/Python.h zou voldoende moeten zijn.

Je zou in plaats daarvan ook het include-pad van de opdrachtregel kunnen toevoegen – gcc -I/usr/lib/python2.7 (bedankt @erm3nda).


Antwoord 11

In AWS API (centOS) is het

yum install python27-devel

Antwoord 12

AWS EC2 installeren met python34:

sudo yum install python34-devel


Antwoord 13

Als je een virtualenv gebruikt met een 3.6 python (op dit moment edge), zorg er dan voor dat je de overeenkomende python 3.6 dev sudo apt-get install python3.6-dev installeert, anders voer je sudo python3-dev zal de python dev 3.3.3-1 installeren, wat het probleem niet zal oplossen.


Antwoord 14

In mijn geval was het probleem opgelost in Ubuntu om de pakketten libpython-all-dev te installeren (of libpython3-all-dev als je Python 3 gebruikt).


Antwoord 15

Het is niet dezelfde situatie, maar het werkt ook voor mij en nu kan ik SWIG gebruiken met Python3.5:

Ik probeerde te compileren:

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

Met Python 2.7 werkt het prima, niet met mijn versie 3.5:

existe_wrap.c:147:21: fatale fout: Python.h: Geen bestaand archief o el
directorio-compilatie beëindigd.

Na het uitvoeren van mijn Ubuntu 16.04-installatie:

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

Nu kan ik Python3.5 zonder problemen compileren:

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

Antwoord 16

Ik heb dit probleem kunnen oplossen en het .so-bestand in één opdracht kunnen genereren

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

Antwoord 17

Ik kwam deze fout ook tegen tijdens het installeren van coolprop in ubuntu.

Voor ubuntu 16.04 met python 3.6

sudo apt-get install python3.6-dev

Als dit ooit niet werkt, probeer dan gcc lib te installeren/bijwerken.

sudo apt-get install gcc

Antwoord 18

probeer apt-bestand. Het is moeilijk om de pakketnaam te onthouden waar het ontbrekende bestand zich bevindt. Het is generiek en handig voor alle pakketbestanden.

Bijvoorbeeld:

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# 

Je kunt nu een deskundige raden waaruit je moet kiezen.


Antwoord 19

Voor CentOS 7:

sudo yum install python36u-devel

Ik heb de instructies hier gevolgd voor het installeren van python3.6 op verschillende VM’s: https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set- up-a-local-programming-environment-on-centos-7
en was toen in staat om mod_wsgi te bouwen en het te laten werken met een python3.6 virtualenv


Antwoord 20

Voor de OpenSuse-kameraden die er zijn:

sudo zypper install python3-devel

Antwoord 21

Als je Python 3.6 gebruikt op Amazon Linux (gebaseerd op RHEL, maar de hier gegeven RHEL-antwoorden werkten niet):

sudo yum install python36-devel

Antwoord 22

  1. U moet de Python-ontwikkelingsbestanden op uw besturingssysteem installeren als de Python die bij uw besturingssysteem is geleverd niet bij deze bestanden wordt geleverd. De vele antwoorden op deze vraag tonen de talloze manieren waarop dit op verschillende systemen kan worden bereikt.

  2. Als je dit hebt gedaan, is het probleem de compiler te vertellen waar ze zich bevinden en hoe ze ertegen moeten compileren. Python wordt geleverd met een programma genaamd python-config. Voor compilatie hebt u de uitvoer --includes nodig en voor het koppelen van een programma aan de Python-bibliotheek (door Python in uw programma in te bedden) de uitvoer --ldflags. Voorbeeld:

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

Het programma python-config kan vernoemd worden naar de Python-versies – op Debian, Ubuntu bijvoorbeeld kunnen deze worden genoemd python3-config of python3.6-config.


Antwoord 23

Natuurlijk zijn python-dev of libpython-all-dev het eerste dat (apt )install , maar als dat niet helpt, zoals bij mij het geval was, raad ik je aan om de foreign Function Interface-pakketten te installeren door sudo apt-get install libffi-dev en sudo pip install cffi.

Dit zou moeten helpen, vooral als je de fout ziet als/van c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory.


Antwoord 24

Deze fout deed zich voor toen ik probeerde ctds te installeren op CentOS 7 met Python3.6. Ik heb alle hier genoemde trucs gedaan, inclusief yum install python34-devel. Het probleem was dat Python.h werd gevonden in /usr/include/python3.4m but not in /usr/include/python3.6m. Ik heb geprobeerd --global-option te gebruiken om naar de map te verwijzen (pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds). Dit resulteerde in een lpython3.6m die niet werd gevonden bij het linken van ctds.

Wat uiteindelijk werkte, was het repareren van de ontwikkelomgeving voor Python3.6 die moet worden gecorrigeerd met de include en 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 moet in je include-pad voor gcc staan. Welke versie van python ook wordt gebruikt, bijvoorbeeld als het 3.6 is, dan zou het normaal gesproken in /usr/include/python3.6m/Python.h moeten staan.


Antwoord 25

Het verschijnt vaak wanneer u python3.5 probeert te verwijderen en python3.6 probeert te installeren.

Dus bij gebruik van python3 (die python3 -V => python3.6) om sommige pakketten te installeren, is python3.5 header zal deze fout verschijnen.

Oplossen door de module python3.6-dev te installeren.


Antwoord 26

Dit betekent dat Python.h niet in de standaard include-paden van uw compiler staat. Heb je het systeembreed of lokaal geïnstalleerd? Wat is uw besturingssysteem?

U zou de vlag -I<path> kunnen gebruiken om een ​​extra map op te geven waar uw compiler naar headers moet zoeken. U zult waarschijnlijk -L<path> moeten opvolgen zodat gcc de bibliotheek kan vinden waarmee u gaat linken met behulp van -l<name>.


Antwoord 27

Soms blijft de fout bestaan, zelfs na het installeren van python-dev,
Controleer op de fout als deze ‘gcc’ ontbreekt.

Download eerst zoals vermeld in https://stackoverflow.com/a/21530768/8687063 en installeer vervolgens gcc

Voor apt (Ubuntu, Debian…):

sudo apt-get install gcc

Voor jammie (CentOS, RHEL…):

sudo yum install gcc

Voor dnf (Fedora…):

sudo dnf install gcc

Voor zypper (openSUSE…):

sudo zypper in gcc

Voor APK (Alpine…):

sudo apk gcc

Antwoord 28

probeer uw Python.h te lokaliseren:

gemfield@ThinkPad-X1C:~$ locate Python.h
/home/gemfield/anaconda3/include/python3.7m/Python.h
/home/gemfield/anaconda3/pkgs/python-3.7.6-h0371630_2/include/python3.7m/Python.h
/usr/include/python3.8/Python.h

indien niet gevonden, installeer dan python-dev of python3-dev; anders het juiste headerpad voor compiler opnemen:

g++ -I/usr/include/python3.8 ...

Antwoord 29

Hier is nog een andere oplossing, omdat geen van deze oplossingen voor mij werkte. Ter referentie, ik probeerde iets te pip install op een Amazon Linux AMI-basis Docker-image voor Python 3.6.

Niet-docker-oplossing:

# Install python3-devel like everyone says
yum -y install python36-devel.x86_64
# Find the install directory of `Python.h`
rpm -ql python36-devel.x86_64 | grep -i "Python.h"
# Forcefully add it to your include path
C_INCLUDE_PATH='/usr/include/python3.6m'
export C_INCLUDE_PATH

Docker-oplossing:

# Install python3-devel like everyone says
RUN yum -y install python36-devel.x86_64
# Find the install directory of `Python.h`, for me it was /usr/include/python3.6m
RUN rpm -ql python36-devel.x86_64 | grep -i "Python.h" && fake_command_so_docker_fails_and_shows_us_the_output
# Since the previous command contains a purposeful error, remove it before the next run
# Forcefully add it to your include path
ARG C_INCLUDE_PATH='/usr/include/python3.6m'

OPMERKING: Als je de foutmelding krijgt bij het compileren van C++, gebruik dan CPLUS_INCLUDE_PATH.


Antwoord 30

Dit probleem kan zich ook voordoen wanneer u verschillende Python-versies hebt geïnstalleerd en u een pip gebruikt die niet van het systeem is. In dat geval zal de niet-systeem-pip de juiste versie van Python-headers niet vinden.

Het overkwam me toen ik een pakket probeerde te pip installeren voor een Python die bij een applicatie was geleverd. Omdat het niet de python van het systeem was, werkte apt install pythonXX-dev niet.

In dit geval is de oplossing om de juiste python-header te vinden:

find / -iname 'Python.h'

In de uitvoer ziet u systeempython-headers, en hopelijk degene die u zoekt, bijvoorbeeld:

/usr/include/python3.7m/Python.h
/usr/include/python3.6m/Python.h
/home/ubuntu/workspace/blender-git/lib/linux_centos7_x86_64/python/include/python3.7m/Python.h
/home/ubuntu/miniconda3/pkgs/python-3.8.5-h7579374_1/include/python3.8/Python.h
/home/ubuntu/miniconda3/pkgs/python-3.7.0-h6e4f718_3/include/python3.7m/Python.h
/home/ubuntu/miniconda3/include/python3.8/Python.h
/home/ubuntu/miniconda3/envs/sim/include/python3.7m/Python.h
/home/ubuntu/src/blender-deps/Python-3.7.7/Include/Python.h
/opt/lib/python-3.7.7/include/python3.7m/Python.h

Vervolgens kun je een compilervlag instellen die door gcc wordt gebruikt wanneer deze door pip wordt aangeroepen.
De mijne was /home/ubuntu/workspace/blender-git/lib/linux_centos7_x86_64/python/include/python3.7m/Python.h, dus ik deed:

export CPPFLAGS=-I/home/ubuntu/src/blender-deps/Python-3.7.7/Include
pip install <package>

LEAVE A REPLY

Please enter your comment!
Please enter your name here

two × 4 =

Other episodes