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
-
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.
-
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>