0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cython(Cpythnon)で出力されるライブラリ(ファイル)を1つにする

Posted at

経緯

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?