Schwerwiegender Fehler: "python.h" keine Datei oder Verzeichnis?

10

Auf der Suche nach einer Lösung für das ungarische Problem habe ich diesen GitHub-Link gefunden .

Ich ging die readme.mdAkte durch und führte alles durch, was dort beschrieben wurde. Nach dem Kopieren hungarian.soin mein Arbeitsverzeichnis, als ich versuchte, hungarian.cppmit zu kompilieren , make hungarianerhielt ich folgende Ausgabe:

anupam@JAZZ:~/Python/hungarian-master$ make hungarian
g++     hungarian.cpp   -o hungarian
hungarian.cpp:7:20: fatal error: Python.h: No such file or directory
 #include "Python.h"
                    ^
compilation terminated.
make: *** [hungarian] Error 1

Ich habe diese verwandte Frage bei Stack Overflow gefunden , aber die Antwort hat bei mir nicht funktioniert.

Ich bin sehr neu bei GitHub. Ich weiß nicht, wie ich Module hinzufügen soll g++. Kann mir jemand dabei helfen und was als nächstes zu tun ist?

Lazarus
quelle
4
Laufen sudo apt-get install python-devhat also nicht funktioniert?
Salem
yeah ,, @Salem es hat nicht funktioniert für mich ..
Lazarus

Antworten:

11

Nachdem Sie sich https://github.com/hrldcpr/hungarian/blob/master/hungarian.cpp angesehen haben , scheinen Sie beides zu benötigen:

#include "Python.h"
#include "numpy/arrayobject.h"

Installieren Sie also die folgenden Pakete:

sudo apt-get install libpython2.7-dev python-numpy

Informationen zu den fehlenden Paketen (die die Header bereitstellen) finden Sie unter packages.ubuntu.com .

Sylvain Pineau
quelle
Ich hatte dies auch installiert ,,, libpython2.7-dev ist bereits die neueste Version.
Lazarus
1
@jazzz: Seit du installiert python-devhast hast du jetzt libpython2.7-devauch eine Abhängigkeit von python-dev. Problem gelöst, nicht wahr?
Sylvain Pineau
1
@jazz Sie können die Paketabhängigkeiten hier überprüfen: packages.ubuntu.com/trusty/python-dev und packages.ubuntu.com/trusty/libpython-dev
Sylvain Pineau
Vielen Dank an Sylvain Pineau. In der Zwischenzeit habe ich mir stackoverflow.com/questions/11041299/… angesehen und in einem der Kommentare, die ich erhalten habe, befindet sich Python.h höchstwahrscheinlich nicht im Include-Pfad Ihrer Build-Systeme. Sie können herausfinden, wo sich Ihre Python.h befindet, indem Sie dpkg -L python-dev | ausführen grep Python.h und als ich das auf meinem System ausprobiert habe, bekomme ich nichts ??? anupam @ JAZZ: ~ / Python / ungarischer Meister $ dpkg -L python-dev | grep Python.h anupam @ JAZZ: ~ / Python / hungarian-master $ Wie kann ich das beheben?
Lazarus
1
@jazzz Versuchen Sie stattdessen mit diesem Befehl:dpkg-query -L libpython2.7-dev | grep Python.h
Sylvain Pineau
8

Für Ubuntu 15.10 und Python 3:

sudo apt-get install python-dev
sudo apt-get install python3-dev
sudo apt-get install libpython3-dev
sudo apt-get install libpython3.4-dev
sudo apt-get install libpython3.5-dev
Martin Thoma
quelle
3

Dies ist Python-Code , der mit C erweitert wird . Keine Notwendigkeit zu verwenden make. Python selbst wird sich um das kümmerncpp Code-Kompilierung mit den richtigen Flags.

Zuerst benötigen Sie Header-Dateien und eine statische Bibliothek. Installieren Sie diese als,

sudo apt-get install python-dev

Befolgen Sie nun diese Befehle, um sie example.pyin Ihrem Code auszuführen .

python setup.py build
cp  build/lib.linux-i686-2.7/hungarian.so .
python example.py

Hinweis: Ich verwende python2.7, Sie sollten sich um Ihre Python-Version kümmern, wenn Sie die obigen Befehle ausführen. Es ist erwähnenswert, dass Sie installieren müssen, python-numpywenn Sie es nicht als Python-Skript benötigen.

Souravc
quelle
Danke @souravc, es hat funktioniert, aber wenn ich $ python example.py ausführe, bekomme ich anupam @ JAZZ: ~ / Python / ungarischer Master $ python example.py [1 2 0 4 5 3 7 6], aber ich muss das berechnen Nettozuweisungsgewinn ,, hier wird die Ausgabe für print hungarian.lap (a) [0] ,, (was ist das) ausgegeben?
Lazarus
1
@jazzz Ich habe keine Ahnung von ungarischen Problem. Ich denke, sie haben den Basiscode hungarian.cppund ein Beispiel bereitgestellt , um einige grundlegende Funktionen davon auszuführen eample.py. Wenn Sie mehr benötigen, müssen Sie möglicherweise Ihren eigenen Code schreiben.
Souravc