1

我有一个使用 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 (= 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(注意:准备好保护)和 Modules.pyd。

我不想拥有的是 app.exe 和同一个目录中的几十个 Modules.py。

任何关于如何实现 (i) 或 (ii) 的建议将不胜感激。

PS:所有软件和模块都是最新的,所有路径都设置好了。

更新(2021-09-20):

经过进一步研究后,我能够找到似乎是 [部分] 解决方案的解决方案——在 app.py 中添加以下行,教 app.exe(在通过 Nuitka 转换后)以识别 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 因为不存在这样的文件。

这变成了如何配置 Nuitka 以从 module.class 创建 *.pyd 文件的问题。

如果有人对此有任何解决方案,请回复。

4

0 回答 0