Ubuntu – Koppeling boost.python – Fatale fout: pyconfig kan niet worden gevonden

Ik heb wat problemen, nu heb ik het volgende gelezen:

hallo wereld python-extensie in c++ met boost?

Ik heb geprobeerd boost op mijn bureaublad te installeren, en gedaan zoals de berichten suggereerden in termen van linken. Ik heb de volgende code:

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

Nu heb ik geprobeerd te linken met het volgende:

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

En ik heb ook het volgende geprobeerd:

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

Ik krijg steeds de volgende foutmelding:

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

Ik weet niet waar ik de fout in ga. Ik heb boost.python geïnstalleerd, er is gewoon een probleem met het koppelen?


Antwoord 1, autoriteit 100%

Ik had net dezelfde fout, het probleem is dat g++ pyconfig.h niet kan vinden (schokkend, ik weet het). Voor mij bevindt dit bestand zich in /usr/include/python2.7/pyconfig.hdus het toevoegen van -I /usr/include/python2.7/zou het moeten oplossen, als alternatief kunt u de map aan uw pad toevoegen met:

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

Je kunt dit ook toevoegen aan je .bashrc en het zal worden toegevoegd wanneer je vervolgens je shell start (je moet je terminal opnieuw openen om de wijzigingen door te voeren).

Je kunt je eigen python include-pad vinden door find /usr/include -name pyconfig.hte gebruiken, in mijn geval geeft dit het volgende terug:

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

Antwoord 2, autoriteit 21%

Er zijn twee mogelijke oorzaken voor dit symptoom: 1. je hebt geen python-dev geïnstalleerd. 2. je hebt python-dev geïnstalleerd en je include-pad is verkeerd geconfigureerd, wat de bovenstaande posting een oplossing biedt. In mijn geval was ik boost aan het installeren en het is op zoek naar het pyconfig.h-headerbestand dat ontbreekt in mijn ubuntu:

De oplossing is

apt-get install python-dev

In andere Linux-varianten moet je uitzoeken hoe je de python-header installeert.


Antwoord 3, autoriteit 9%

Als je een .c-bestand (hello.c) hebt en je wilt een libhello.so-bibliotheek bouwen, probeer dan:

find /usr/include -name pyconfig.h

[uit]:

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

gebruik dan de uitvoer en doe:

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

Als je .pyx van cython naar .so converteert, probeer dan deze python-module, het zal automatisch het .so-bestand bouwen met het .pyx-bestand:

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')

Antwoord 4, autoriteit 8%

Ik had een soortgelijke ervaring bij het bouwen van boost voor centos7. Ik kon pyconfig.h niet vinden op mijn systeem, alleen pyconfig-64.h.

Na wat zoeken kwam ik erachter dat je python-devel moet installeren om pyconfig.h te krijgen


Antwoord 5, autoriteit 5%

Voor CentOS doe je dit: yum install python-devel. Probeer het dan opnieuw.


Antwoord 6, autoriteit 2%

In mijn geval moest ik een zachte link maken in mijn dir /usr/include/

ln -s python3.5m python3.5

het probleem was dat ik python 3.5 gebruikte, maar alleen de directory python3.5m bestond, dus het kon het bestand pyconfig.hniet vinden.


Antwoord 7, autoriteit 2%

Als je meerdere Python-installaties hebt, kan de sysconfig-module de locatie van pyconfig.h voor een bepaalde installatie rapporteren.

$ /path/to/python3 -c 'import sysconfig; print(sysconfig.get_config_h_filename())'
/path/to/pyconfig.h    

Other episodes