web-dev-qa-db-ja.com

Ubuntu-リンクboost.python-致命的なエラー:pyconfigが見つかりません

いくつかの問題があるので、今私は次を読みました:

hello world python boostを使用したC++の拡張?

私は自分のデスクトップにブーストをインストールしようとしましたが、リンクの観点から投稿が示唆したとおりに行いました。私は次のコードを持っています:

#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がインストールされていますが、リンクに問題がありますか?

38
Phorce

私はちょうど同じエラーがありました、問題は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 includeパスを見つけるには、find /usr/include -name pyconfig.hを使用します。私の場合、これは以下を返します。

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

この症状には2つの原因が考えられます。1. python-devがインストールされていません。 2. python-devがインストールされており、インクルードパスが正しく構成されていない場合、上記の投稿が解決策となります。私の場合、boostをインストールしていて、ubuntuにないpyconfig.hヘッダーファイルを探しています。

解決策は

apt-get install python-dev

他のLinuxフレーバーでは、python header。をインストールする方法を理解する必要があります。

12
Kemin Zhou

Centos7のブーストを構築するときに、同様の経験がありました。 pyconfig-64.hのみがシステムでpyconfig.hを見つけることができませんでした。

周りを検索した後、pyconfig.hを取得するにはpython-develをインストールする必要があることがわかりました

7
Ben

.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モジュールを試してください。pyxファイルを指定すると、.soファイルが自動的にビルドされます。

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

CentOSの場合:yum install python-devel。その後、再試行してください。

1
Gamma.X