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?

pythonプロジェクトをバイナリ配布(Linux)

Last updated at Posted at 2024-09-24

目的

SBCに何らかの付加価値をつけた(pythonで作成した)ものを
配布するときにソースコードをそのまま渡すことが
何らかの都合で出来ない場合に
cythonを利用してバイナリで配布する。

確認環境

  • raspi 4
  • ubuntu 22.04

手順

基本的には以下だが、Linux版で失敗と記載があるので
こちらで成功した手順を記載

こちらで実行に成功した手順

soファイルの作成

main以外のコードをsetup.pyに記載してビルド

setup.py

from setuptools import setup, Extension
from Cython.Build import cythonize

setup(
    ext_modules = cythonize([
        Extension(
            "sub_module1",
            sources=["sub_module1.py"],
        ),  
        Extension(
            "sub_module2",
            sources=["sub_module2.py"],
        ),  
    ...
    ]), 
)
python3 setup.py build_ext --inplace

mainファイルを変換

cython --embed -o main.c main.py

mainファイルをコンパイル

aarch64-linux-gnu-gcc -c main.c $(python3-config --cflags)

※コンパイラは当該環境で使用可能なもの

リンク

aarch64-linux-gnu-gcc -o [実行ファイル名] main.o -L. -l:sub_module1.cpython-310-aarch64-linux-gnu.so -l:sub_module2.cpython-310-aarch64-linux-gnu.so $(python3-config --ldflags) -lpython3.10 -Wl,-rpath=. -Wl,-rpath=/usr/lib/aarch64-linux-gnu

ポイントは以下

  1. pythonのバージョンを指定してpythonライブラリのリンクを行う
  2. ライブラリはlinuxのライブラリの命名規則に則っていないので直接ファイル名で指定をする(:を使う)
  3. soファイルのある場所をライブラリパスに含める

-Wl,-rpathは念の為つけたが多分要らない
→PYTHONPATHしか見ていない?

実行

PYTHONPATH=${PYTHONPATH}:. ./[実行ファイル名]
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?