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

PyInstaller打包pySiril脚本时无法识别模块的问题求助

解决pySiril打包exe时的模块缺失问题

我尝试复现pySiril的示例代码并编译为exe文件,用于分发天文摄影处理脚本。示例代码如下:

from pysiril.siril import Siril
from pysiril.wrapper import Wrapper
from pysiril.addons import Addons

app = Siril(siril_exe='D:\\Programs\\Siril\\bin\\siril-cli.exe')  # Starts pySiril
cmd = Wrapper(app)  # Starts the command wrapper

help(Siril)  # Get help on Siril functions
help(Wrapper)  # Get help on all Wrapper functions
help(Addons)  # Get help on all Addons functions

cmd.help()  # Lists of all commands
cmd.help('bgnoise')  # Get help for bgnoise command

del app

使用以下命令打包:

pyinstaller -F main.py

打包后运行exe出现模块找不到错误:

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from pysiril.siril import Siril
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "pysiril\siril.py", line 32, in <module>
ModuleNotFoundError: No module named 'changelog'
[1824] Failed to execute script 'main' due to unhandled exception!

检查发现pysiril/siril.py中导入了以下模块:

import changelog
import LogMsg
import PipeReader
import PipeWriter
import ThreadSiril
import tools

其中changelog可通过pip安装,但其余模块无法通过pip获取,且未打包时脚本运行完全正常。

解决方案

方法1:使用--hidden-import参数手动指定缺失模块

PyInstaller打包时不会自动识别包内相对导入的模块,需要通过--hidden-import参数明确指定。执行以下打包命令:

pyinstaller -F --hidden-import=changelog --hidden-import=LogMsg --hidden-import=PipeReader --hidden-import=PipeWriter --hidden-import=ThreadSiril --hidden-import=tools main.py

方法2:通过spec文件配置隐藏导入

  1. 先生成spec文件:
pyi-makespec main.py
  1. 打开生成的main.spec文件,在Analysis部分的hiddenimports列表中添加所有缺失的模块:
a = Analysis(
    ['main.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=['changelog', 'LogMsg', 'PipeReader', 'PipeWriter', 'ThreadSiril', 'tools'],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
)
  1. 使用spec文件打包:
pyinstaller main.spec

方法3:修改pysiril包内的导入方式(可选)

如果允许修改pysiril的源码,将siril.py中的绝对导入改为相对导入:

from . import changelog
from . import LogMsg
from . import PipeReader
from . import PipeWriter
from . import ThreadSiril
from . import tools

修改后再用原命令打包即可,Python和PyInstaller都能正确识别相对导入的模块。

内容的提问来源于stack exchange,提问作者Quark-Coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:43:13