wake-up-neo.com

Ubuntu - Verknüpfung von boost.python - Schwerwiegender Fehler: pyconfig kann nicht gefunden werden

Mit einigen Problemen habe ich jetzt Folgendes gelesen:

Hallo Welt Python Erweiterung in C++ mit Boost?

Ich habe versucht, Boost auf meinem Desktop zu installieren. Ich habe folgenden Code:

#include <boost/python.hpp>
#include <Python.h>
using namespace boost::python;

Jetzt habe ich versucht, mit folgendem zu verknüpfen:

g++ testing.cpp -I /usr/include/python2.7/pyconfig.h -L /usr/include/python2.7/Python.h
-lpython2.7

Und ich habe auch folgendes ausprobiert:

g++ testing.cpp -I /home/username/python/include/ -L /usr/include/python2.7/Python.h -lpython2.7

Ich erhalte die folgende Fehlermeldung:

/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such   
file or directory
# include <pyconfig.h>

Ich weiß nicht, wo ich falsch liege. Ich habe boost.python installiert, es gibt nur ein Problem beim Linken?

32
Phorce

Ich hatte gerade den gleichen Fehler, das Problem ist, dass g ++ pyconfig.h nicht findet (schockierend, ich weiß). Für mich befindet sich diese Datei in /usr/include/python2.7/pyconfig.h. Anhängen von -I /usr/include/python2.7/ sollte das Problem behoben werden. Alternativ können Sie das Verzeichnis Ihrem Pfad hinzufügen mit:

export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/usr/include/python2.7/"

Sie können dies auch zu Ihrer .bashrc hinzufügen. Sie wird bei jedem nächsten Start Ihrer Shell hinzugefügt (Sie müssen Ihr Terminal erneut öffnen, um die Änderungen zu realisieren).

Sie können Ihren eigenen Python-Include-Pfad mit find /usr/include -name pyconfig.h finden. In meinem Fall wird Folgendes zurückgegeben:

/usr/include/python2.7/pyconfig.h
/usr/include/i386-linux-gnu/python2.7/pyconfig.h
65
Jacob Hacker

Es gibt zwei mögliche Ursachen für dieses Symptom: 1. Sie haben Python-dev nicht installiert. 2. Sie haben Python-Dev installiert und Ihr Include-Pfad ist falsch konfiguriert, wodurch die oben genannten Postings eine Lösung darstellen. In meinem Fall habe ich boost installiert und sucht nach der Headerdatei pyconfig.h, die in meinem Ubuntu fehlt:

Die Lösung ist 

apt-get install python-dev

In anderen Linux-Varianten müssen Sie herausfinden, wie Sie den Python-Header installieren.

11
Kemin Zhou

Ich hatte eine ähnliche Erfahrung, als ich für centos7 einen Schub errichtete. Ich konnte pyconfig.h auf meinem System nur mit pyconfig-64.h nicht finden.

Nach der Suche fand ich heraus, dass Sie python-devel installieren müssen, um pyconfig.h zu erhalten

7
Ben

Wenn Sie eine .c-Datei (hello.c) haben und eine libhello.so-Bibliothek erstellen möchten, versuchen Sie Folgendes:

find /usr/include -name pyconfig.h

[aus]:

/usr/include/python2.7/pyconfig.h
/usr/include/x86_64-linux-gnu/python2.7/pyconfig.h

dann benutze die Ausgabe und mache:

gcc -shared -o libhello.so -fPIC hello.c -I /usr/include/python2.7/

Wenn Sie von .pyx in .so von cython konvertieren, versuchen Sie es mit diesem Python-Modul. Die .so-Datei wird automatisch erstellt, wenn die .pyx-Datei eingegeben wird:

def pythonizing_cython(pyxfile):
    import os
    # Creates ssetup_pyx.py file.
    setup_py = "\n".join(["from distutils.core import setup",
                          "from Cython.Build import cythonize",
                          "setup(ext_modules = cythonize('"+\
                          pyxfile+".pyx'))"])   

    with open('setup_pyx.py', 'w') as fout:
        fout.write(setup_py)

    # Compiles the .c file from .pyx file.
    os.system('python setup_pyx.py build_ext --inplace')

    # Finds the pyconfig.h file.
    pyconfig = os.popen('find /usr/include -name pyconfig.h'\
                        ).readline().rpartition('/')[0]

    # Builds the .so file.
    cmd = " ".join(["gcc -shared -o", pyxfile+".so",
                    "-fPIC", pyxfile+".c",
                    "-I", pyconfig])
    os.system(cmd)

    # Removing temporary .c and setup_pyx.py files.
    os.remove('setup_pyx.py')
    os.remove(pyxfile+'.c')
7
alvas

Für CentOS tun Sie dies: yum install python-devel. Dann versuche es erneut.

1
Gamma.X