52

いくつかの問題があり、次のことを読みました。

ブーストを使用したC ++のHello World python拡張機能?

デスクトップにブーストをインストールしようとしましたが、リンクに関して投稿が提案したとおりに実行しました。次のコードがあります。

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

4

7 に答える 7

102

同じエラーが発生しました。問題は、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
于 2014-03-26T23:00:07.837 に答える
9

.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')
于 2014-05-18T15:39:54.820 に答える
2

私の場合、ディレクトリ/usr/include/にソフトリンクを作成する必要がありました

ln -s python3.5m python3.5

問題は、私がpython 3.5を使用していたが、python3.5mデ​​ィレクトリしか存在しなかったため、pyconfig.hファイルを見つけることができなかったことです。

于 2020-02-26T14:56:59.883 に答える
2

複数の Python インストールがある場合、sysconfig モジュールは特定のインストールの pyconfig.h の場所を報告できます。

$ /path/to/python3 -c 'import sysconfig; print(sysconfig.get_config_h_filename())'
/path/to/pyconfig.h    
于 2020-05-27T21:07:46.177 に答える