経緯
pythonの自作SDKを配布する必要があり、出来るだけ配布物をシンプルにする必要があった。
普通にCythonでコンパイルすると、作成したファイル1つずつバイナリが吐き出されてしまい配布しづらかった。
# どうやったか
下記setup.pyを使ってコンパイル実行
※Mac用なのでWinでコンパイルする場合はWin用のsetup.pyが必要になります。必要ならLLMに聞いてください。
from setuptools import setup, Extension
from Cython.Build import cythonize
ext_modules = [
Extension(
"hogehoge", # モジュール名
[ # 対象ファイル群
"lib/hogehoge.pyx",
"lib/piyopiyo.pyx",
"lib/piyopiyo_data.pyx",
"lib/fugafuga.pyx",
"lib/fugafuga_data.pyx"
],
extra_compile_args=["-O3", "-Wall"], # コンパイルオプション
)
]
setup(
name='hogehoge_module',
ext_modules=cythonize(
ext_modules,
compiler_directives={
'language_level': "3",
'binding': True,
},
),
# 出力先を指定
script_args=["build_ext", "--inplace"],
zip_safe=False,
)
ディレクトリ構造
├── lib
│ ├── __init__.py
│ ├── fugafuga.pyx
│ ├── fugafuga_data.pyx
│ ├── piyopiyo.pyx
│ ├── piyopiyo_data.pyx
│ └── hogehoge.pyx
├── main.py #lib以下のライブラリ動作確認用(呼び出し元)
└── setup.py
コンパイルコマンド(-jは2並列?利いてるか良く分からない)
python3 setup.py build_ext --inplace -j 2