Python.hの場所を取得する
丸一年、ブログ書いてないですね。気にせず小ネタ。
Pythonには拡張モジュールというものがあって、CやC++などの言語でPythonのモジュールを作ることができます。
そしてそのために必須なCヘッダとして、 Python.h
がありますが、このヘッダのパスを取るためにはどうするか、という話です。
結論から言うとsysconfig
モジュールを使います。
get_config_vars
メソッドを使うと、Pythonの構成情報にアクセスすることができます。
import sysconfig import pprint pprint.pprint(sysconfig.get_config_vars())
{'ABIFLAGS': 'm', 'AC_APPLE_UNIVERSAL_BUILD': 0, 'AIX_GENUINE_CPLUSPLUS': 0, 'ANDROID_API_LEVEL': 0, 'AR': 'ar', 'ARFLAGS': 'rc', 'BASECFLAGS': '-Wno-unused-result -Wsign-compare -Wunreachable-code', 'BASECPPFLAGS': '', 'BASEMODLIBS': '', (以下略)
私の環境ではこの結果が749行ありましたが、このうちPython.hへのパスを持っているのはINCLUDEPY
とCONFINCLUDEPY
というキーの値でした。ちなみにそれぞれの違いはわかりません、どなたかご存知の方がいれば教えてください。
先ほどのsysconfig.get_config_vars
には引数を与えることもできて、先ほどわかったキーを渡せば、無事にその値が取れます。
import sysconfig sysconfig.get_config_vars('INCLUDEPY')
私の環境ではanyenvを入れていてPythonは3.6.6なので、
${HOME}/.anyenv/envs/pyenv/versions/3.6.6/include/python3.6m
が出ました。
ちなみに、python -m sysconfig
と書けば、スクリプトとして上記の情報を取得できます。
シェルスクリプトなどでこの情報を使いたい時には、こっちの方が便利な時もあるかもです。
この情報を使って簡単なツールを作ろうとしているので、気が向いたらその話もします。