PySimpleGUI、Matplotlib などを使用するアプリがあります (これらをまとめて「モジュール」と呼びます)。
( 1 ) 実行可能ファイル (app.exe) に対して、これまで以上に優れた保護を使用したいと考えています (VMProtect は他のいくつかのリストに含まれています)。これを実現するために、Nuitka を使用して app.py コードを C++ に変換し、mingw64 を使用して実行可能ファイルにコンパイルします。
python -m nuitka --standalone --nofollow-imports --plugin-enable=tk-inter --plugin-enable=numpy --plugin-enable=pylint-warnings --mingw64 --output-dir=X: app.py
( 2 ) また、モジュール (= Modules.py ) を *.pyd ファイル (= Modules.pyd )に変換したいと考えています。また、Nuitka を使用して Modules.py を Modules.pyd に変換します。例えば:
python -m nuitka --module "c:\Program Files\Python\Lib\site-packages\PySimpleGUI\PySimpleGUI.py"
( 3 ) app.exe は、まとめて配布される Modules.pyd を参照するものとします。
私の問題は、app.py コードで Modules.pyd を参照しようとしているときです。これは次のとおりです。
import PySimpleGUI.pyd as sg # PySimpleGUI.pyd is located in the same folder as app.py
次のエラーが表示されます。
ModuleNotFoundError: No module named 'PySimpleGUI.pyd'; 'PySimpleGUI' is not a package
この問題の解決策を見つけることができませんでした。
実際には、次のいずれかを達成したいと考えています。
(i)app.py(app.exeも意味する)にModules.pydを認識させます(後者はすでに持っています)
(ii) app.exe (NB: 保護の準備完了) と Modules.pyd を他の変換/コンパイル プロセスで受け取る別の方法を見つけます。
私が持ちたくないのは、同じディレクトリにある app.exe と多数の Modules.py です。
(i) または (ii) のいずれかを達成する方法についてのアドバイスをいただければ幸いです。
PS: すべてのソフトウェアとモジュールは最新で、すべてのパスが設定されています。
更新 (2021-09-20):
さらに調査した結果、[部分的な] 解決策と思われるものを見つけることができました。app.py のインポートの上に次の行を追加すると、(Nuitka 経由で変換された後) app.exe が Modules.pyd を認識するようになりました。
import sys
sys.path.append("./DLL/") # where ./DLL/ is a sub-folder with Modules.pyd within the folder where app.exe is located.
ただし、そのようなファイルが存在しないため、dateutil.relativedelta を適切な *.pyd に変換できません。
これは、module.class から *.pyd ファイルを作成するように Nuitka を構成する方法の問題になりつつあります。
誰かがこれに対する解決策を持っている場合は、応答してください。