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

PyInstaller打包运行提示No module named 'arcade'错误如何解决

问题描述

脚本本身可正常运行,但使用PyInstaller编译后运行抛出如下错误:

Traceback (most recent call last):
  File "poples.py", line 3, in <module>
ModuleNotFoundError: No module named 'arcade'
[5316] Failed to execute script 'poples' due to unhandled exception!

当前环境已安装2.6.15最新版本的Arcade库,同时存在于两个路径:

  • 系统Python路径:C:\Users\Sarp\AppData\Local\Programs\Python\Python310\Lib\site-packages
  • 项目虚拟环境目录

已尝试以下操作均未解决问题:

  • 删除venv文件夹后重新创建虚拟环境做全新重置
  • 通过PyCharm的requirement.txt重新安装所有依赖包
  • 在项目文件夹内执行pyi-makespec命令生成spec文件,执行命令如下:
pyi-makespec --onefile --windowed --icon=icon.ico poples.py
  • 编辑spec文件:将hiddenimports=[]修改为hiddenimports=['arcade'],将console=False修改为console=True方便查看运行时错误,修改后的spec文件内容如下:
block_cipher = None

a = Analysis(
    ['poples.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=['arcade'],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name='poples',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon='icon.ico',
)
  • 在项目文件夹内执行pyinstaller poples.spec命令完成打包
  • 通过命令提示符运行打包生成的程序
  • 仍然抛出找不到arcade模块的错误
解决方法

按以下步骤逐一操作即可解决该报错:

  • 确认打包使用的PyInstaller属于当前项目虚拟环境
    系统中存在多Python环境时,全局安装的PyInstaller打包时只会读取系统Python的依赖包,无法识别虚拟环境内安装的库。先激活项目venv,在激活的命令行窗口执行pip show pyinstaller,确认输出的安装路径在项目venv的site-packages目录下。如果路径指向全局Python,先执行pip uninstall pyinstaller卸载全局版本,再在激活的虚拟环境中执行pip install pyinstaller安装对应环境的版本。
  • 补全arcade及其依赖的全量隐式导入
    arcade库存在大量动态加载的子模块和依赖,仅在hiddenimports中填写arcade无法覆盖所有需要的模块,将spec文件中Analysis段的hiddenimports替换为以下内容:
hiddenimports=[
    'arcade',
    'arcade.academy',
    'arcade.application',
    'arcade.color',
    'arcade.csscolor',
    'arcade.key',
    'arcade.mouse',
    'arcade.sprite',
    'arcade.text',
    'arcade.sound',
    'arcade.physics_engines',
    'arcade.gui',
    'arcade.experimental',
    'pyglet',
    'pyglet.app',
    'pyglet.window',
    'pyglet.media',
    'pyglet.gl',
    'pyglet.graphics',
    'pyglet.image',
    'pyglet.text',
    'pyglet.event',
    'PIL',
    'PIL.Image',
    'numpy',
    'pymunk'
],
  • 加入arcade的静态资源文件
    arcade运行需要加载内置的资源文件,打包时没有把这些资源打进去也会触发模块/资源加载错误。找到虚拟环境site-packages下的arcade目录,将Analysis段的datas字段修改为对应路径,示例:
datas=[('./venv/Lib/site-packages/arcade/resources', 'arcade/resources')],
  • 清理旧缓存后重新打包
    删除项目目录下的build、dist文件夹和旧的.spec文件,重新生成spec、执行打包命令。测试阶段可以先去掉--onefile参数,打包成文件夹模式验证运行正常后,再切换回单文件模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:00:53