Подтвердить что ты не робот

Ubuntu - Связывание boost.python - Неустранимая ошибка: pyconfig не найден

Имея некоторые проблемы, теперь я прочитал следующее:

hello world python extension в С++ с использованием boost?

Я попытался установить boost на мой рабочий стол и, сделанный как сообщения, предлагаемые с точки зрения ссылок. У меня есть следующий код:

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

Теперь я попытался связать со следующим:

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

И я также пробовал следующее:

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

Я продолжаю получать следующую ошибку:

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

Я не знаю, где я ошибаюсь. У меня есть boost.python, там есть проблема, связанная?

4b9b3361

Ответ 1

У меня была такая же ошибка, проблема в g++ не может найти pyconfig.h(шокирует, я знаю). Для меня этот файл находится в /usr/include/python2.7/pyconfig.h, поэтому добавление -I /usr/include/python2.7/ должно исправить его, иначе вы можете добавить каталог в свой путь с помощью:

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

Вы также можете добавить это в свой .bashrc, и он будет добавлен при каждом запуске вашей оболочки (вам нужно будет снова открыть терминал, чтобы реализовать изменения).

Вы можете найти свой собственный путь включения python с помощью find /usr/include -name pyconfig.h, в моем случае это возвращает:

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

Ответ 2

Существуют две возможные причины этого симптома: 1. у вас нет установленного python-dev. 2. У вас установлен python-dev, а ваш путь включения неверно настроен, что вышеперечисленное сообщение предоставляет решение. В моем случае я устанавливал boost, и он ищет заголовочный файл pyconfig.h, отсутствующий в моем ubuntu:

Решение

apt-get install python-dev

В других версиях linux вам нужно выяснить, как установить заголовок python.

Ответ 3

Если у вас есть файл .c (hello.c), и вы хотите построить библиотеку libhello.so, попробуйте:

find /usr/include -name pyconfig.h

[выход]:

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

затем используйте вывод и выполните:

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

Если вы конвертируете с cython.pyx в .so, попробуйте этот модуль python, он автоматически построит файл .so с файлом .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')

Ответ 4

У меня был подобный опыт, когда мы строили стимул для centos7. Мне не удалось найти pyconfig.h в моей системе только pyconfig-64.h.

После поиска я обнаружил, что вам нужно установить python-devel, чтобы получить pyconfig.h

Ответ 5

Для CentOS сделайте это: yum install python-devel. Тогда попробуйте еще раз.