You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nuitka将PYD文件集成到PY脚本与EXE程序的导入及编译问题咨询

解决方案

1 修复PySimpleGUI.pyd导入错误

你出现导入报错的核心原因是导入语句多余添加了.pyd后缀:Python导入模块时会自动识别.pyd/.py/.pyc等后缀,不需要手动指定。
修改导入语句为以下内容即可:

import PySimpleGUI as sg

搭配你已添加的路径配置即可正常加载同目录或DLL子目录下的pyd文件。如果需要避免相对路径受工作目录影响,可以替换路径配置为绝对路径写法:

import sys
import os
# 自动获取exe所在目录的绝对路径,拼接DLL子目录
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(sys.executable)), "DLL"))

2 编译dateutil.relativedelta这类子依赖为.pyd文件

dateutil.relativedelta属于包下的子模块,不存在独立单文件只是你没有找到对应路径,有两种编译方案可选:

方案A 编译整个第三方包

直接编译整个依赖包,Nuitka会自动处理包内的结构和子模块依赖,编译后导入写法和原生完全一致。以dateutil为例,编译命令如下:

python -m nuitka --module --include-package=dateutil --output-dir=./DLL dateutil

编译完成后DLL目录下会生成完整的dateutil编译后结构,所有子模块都会转换为.pyd格式,直接执行from dateutil.relativedelta import relativedelta即可正常调用。

方案B 仅编译用到的子模块

如果不需要编译整个包,仅编译用到的子模块即可:

  1. 找到子模块对应的源文件路径,例如dateutil.relativedelta对应的源文件为site-packages/dateutil/relativedelta.py,同时还要编译dateutil包的__init__.py
  2. 分别执行编译命令:
# 编译包的__init__.py
python -m nuitka --module "C:\Program Files\Python\Lib\site-packages\dateutil\__init__.py" --output-dir=./DLL/dateutil
# 编译relativedelta子模块
python -m nuitka --module "C:\Program Files\Python\Lib\site-packages\dateutil\relativedelta.py" --output-dir=./DLL/dateutil

编译完成后即可正常导入子模块。

3 更简化的全编译流程

无需手动逐个编译依赖,调整主程序编译参数即可让Nuitka自动把所有依赖都转换为.pyd格式,统一存放到指定目录,不需要手动处理路径配置:

python -m nuitka --standalone --plugin-enable=tk-inter --plugin-enable=numpy --mingw64 --output-dir=X: --package-directory=DLL --prefer-source-code app.py

该命令会自动将所有依赖编译为.pyd并存放在exe所在目录的DLL子目录下,自动处理导入路径,不需要你手动修改sys.path,也不会出现未编译的.py文件。

注意:编译依赖pyd和编译主程序必须使用相同的Python环境、Nuitka版本、编译器,否则会出现兼容性问题导致导入失败。

内容的提问来源于stack exchange,提问作者User68325794

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:30:00