web-dev-qa-db-fra.com

Ubuntu - Lier boost.python - Erreur fatale: pyconfig introuvable

Ayant quelques problèmes, maintenant j'ai lu ce qui suit:

hello world extension python en c ++ en utilisant boost?

J'ai essayé d'installer boost sur mon bureau et, comme les publications le suggéraient en termes de liens. J'ai le code suivant:

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

Maintenant, j'ai essayé de créer des liens avec les éléments suivants:

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

Et j'ai aussi essayé ce qui suit:

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

Je continue à avoir l'erreur suivante:

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

Je ne sais pas où je vais mal. J'ai boost.python installé, il y a juste un problème de liaison?

32
Phorce

Je viens d'avoir la même erreur, le problème est que g ++ ne peut pas trouver pyconfig.h (choquant, je sais). Pour moi, ce fichier est situé dans /usr/include/python2.7/pyconfig.h, donc l'ajout de -I /usr/include/python2.7/ devrait le corriger, sinon vous pouvez ajouter le répertoire à votre chemin avec:

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

Vous pouvez également ajouter cela à votre .bashrc et il sera ajouté à chaque démarrage de votre Shell (vous devrez rouvrir votre terminal pour prendre en compte les modifications).

Vous pouvez trouver votre propre chemin d'inclusion python en utilisant find /usr/include -name pyconfig.h, dans mon cas, cela retourne:

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

Il existe deux causes possibles à ce symptôme: 1. Python-dev n’est pas installé sur votre ordinateur. 2. vous avez installé python-dev et votre chemin d’inclusion n’est pas configuré correctement, ce que la publication ci-dessus fournit une solution. Dans mon cas, j'installais boost, et le fichier d’en-tête pyconfig.h qui manque dans mon compte ubuntu est recherché:

La solution est 

apt-get install python-dev

Dans d'autres versions de Linux, vous devez savoir comment installer l'en-tête python.

11
Kemin Zhou

J'ai eu une expérience similaire lors de la construction de boost pour centos7. Je n'ai pas pu trouver pyconfig.h sur mon système, mais uniquement pyconfig-64.h.

Après avoir cherché autour de moi, j'ai découvert que vous deviez installer python-devel pour obtenir pyconfig.h.

7
Ben

Si vous avez un fichier .c (hello.c) et que vous voulez créer une bibliothèque libhello.so, essayez:

find /usr/include -name pyconfig.h

[en dehors]:

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

puis utilisez la sortie et faites:

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

Si vous convertissez le .pyx de cython en .so, essayez ce module python, il construira automatiquement le fichier .so en fonction du fichier .pyx

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

Pour CentOS, procédez comme suit: yum install python-devel. Puis réessaye.

1
Gamma.X