python-3.x Nuitka:将PYD集成到.py和.exe中

3pvhb19x  于 2023-06-07  发布在  Python
关注(0)|答案(1)|浏览(205)

我有一个应用程序,使用PySimpleGUI,Matplotlib和其他一些(* 我将它们统称为“模块”)。
1)我想对我的可执行文件(app.exe)使用比平均保护更好的保护(VMProtect与其他一些保护一起在列表中)。为了实现这一点,我使用Nuitka将我的app.py代码转换为C++,并使用mingw 64将其编译为可执行文件:
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,将一起分发。
我的问题是,当我试图在www.example.com代码中引用Modules.pydapp.py时,它是:
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)的建议将非常感谢。
P.S.:所有软件和模块都是最新的,所有路径都已设置。

更新(2021-09-20):

经过进一步的研究,我能够找到一个似乎是[部分]解决方案的方法--在www.example.com中的import上面添加以下行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文件的问题。
如果有人对此有任何解决办法,请回复。

ndh0cuux

ndh0cuux1#

我可以回答你的部分问题,但不是所有的问题:在(1)中,您同时使用--standalone和--nofollow-imports。它们互相否定。你应该只使用一个。如果你使用--standalone,这些模块会自动包含进来,你不需要把它们变成pyd模块。

相关问题