「.pyファイルと.pyxファイルの違いは?」
「.soファイルができるらしいけど、できたのは.pyd?」
「pyinstallerでのexe作成とcythonの順番は?」
Cythonとは
■cythonのインストール
pip install cython
.pyと.pyxの違いは?
.pyのままでよいという説明と、.pyxに名前を変えてから難読化するという説明があります。
どちらが正しいのですか?
■.pyと.pyx
項目 | .py から | .pyx から |
利用目的 | 主に難読化 | 難読化 + 高速化 |
Cython構文の利用 | 不可 | 可 |
型ヒントのサポート | 必須ではない | 可(高速化に寄与) |
元ファイルの互換性 | 元のPythonコードをそのまま利用 | Cython向けの変更が必要 |
Cythonでの難読化
■Cythonビルドスクリプト(setup.py)の作成例
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize(["module1.py", "module2.py"], compiler_directives={"language_level": "3"})
)
■コンパイルコマンドの実行 :setup.pyによる.so(もしくは.pyd)の作成
コンパイルのコマンド
python setup.py build_ext --inplace
.so作成の説明があったけど、できたのは.pydなのですが?
.pyd ファイルとは
.pyd ファイルは Pythonの拡張モジュール です。
CまたはCythonでコンパイルされたコードをPythonから直接インポートできる形にしたもので、Windows環境では共有ライブラリ(DLL)に似ています。
通常、.so ファイル(LinuxやmacOS用)に相当します。
.soではなくて、.sというファイルもあるけど?
.c ファイルの役割
CythonはPythonコード(.py または .pyx)をC言語コード(.c)に変換。
その後、Cコンパイラで .pyd(Windows)または .so(Linux, macOS)を生成します。
.c ファイルはコンパイルプロセスの一部であり、Cコンパイラが必要とする中間生成物です。
つまり、ソフトの起動には関係ありません。
エラー
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools
C関連のコンパイラが必要なため、インストールします。
・Build toolのダウンロード
インストーラを起動。
「C++ によるデスクトップ開発」ワークロードを選択。
以下のコンポーネントを必ず含める
「MSVC v143 – VS 2022 C++ x64/x86 ビルドツール」
「Windows 11 SDK」
PyInstallerとCython
pyinstallerでのexe作成とcythonの順番は?
exe化を、メインのmain.pyだけにすることもできますか。
PyInstallerとCythonを併用してPythonスクリプトを難読化しつつ、最終的に実行可能なEXEファイルを作成することが可能です。
project/
│
├── main.py # メインスクリプト(難読化せずそのまま)
├── module1.py # 難読化したいモジュール
├── module1.pyd # 難読化されたモジュール
├── module2.py # 難読化したいモジュール
├── module1.pyd # 難読化されたモジュール
└── setup.py # Cython用のビルドスクリプト
先にCythonで難読化して、最後にPyInstallerでEXEファイルにする。
.pyd ファイルは通常「モジュール」として利用される設計のため、直接実行することはできない。
つまり、ランチャーとする難読化されていないmain.pyが必要。
コメント