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

使用PyInstaller打包含music21的Python程序时出现AttributeError报错

问题:PyInstaller打包music21程序时出现AttributeError: module 'music21' has no attribute 'alpha'

环境信息

  • music21版本:6.7.1
  • 操作系统:Ubuntu 18.04
  • Python版本:3.6
  • 打包命令:pyinstaller --onefile main.py

错误信息

[17939] WARNING: file already exists but should not: /tmp/_MEIxs8i9Y/pyarrow/lib.cpython-36m-x86_64-linux-gnu.so
Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from NeckDisplayer import NeckDisplayer
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "PyInstaller/loader/pyimod03_importers.py", line 495, in exec_module
  File "NeckDisplayer.py", line 2, in <module>
    import music21.pitch
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "PyInstaller/loader/pyimod03_importers.py", line 495, in exec_module
  File "music21/__init__.py", line 192, in <module>
AttributeError: module 'music21' has no attribute 'alpha'
[17942] Failed to execute script 'main' due to unhandled exception!

解决方法

1. 调整导入顺序与方式

music21的alpha属性是主模块初始化时动态设置的,直接导入子模块会导致主模块未完全初始化。修改代码导入逻辑:

# 替换原有的 import music21.pitch
import music21
# 可选:触发music21初始化,确保所有属性加载完成
music21.mainTest()
from music21 import pitch

2. 自定义PyInstaller Hook文件

创建hook-music21.py文件,确保music21的所有子模块和数据文件被正确打包:

from PyInstaller.utils.hooks import collect_data_files, collect_submodules

datas = collect_data_files('music21')
hiddenimports = collect_submodules('music21')

打包时指定hook目录:

pyinstaller --onefile --additional-hooks-dir=. main.py

3. 调整music21版本

music21 6.x部分版本与PyInstaller存在兼容性问题,可尝试:

  • 升级到稳定版(如7.x系列):pip install --upgrade music21
  • 降级到5.x系列:pip install music21==5.7.2

4. 处理pyarrow警告(可选)

如果程序不需要pyarrow,打包时排除该模块以消除警告:

pyinstaller --onefile --exclude-module pyarrow main.py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:54:31