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

MacOS下Python调用MuseScore3导出乐谱PNG触发Errno13权限错误

music21导出乐谱PNG两类问题解决方案

问题汇总

调试乐谱PNG导出功能过程中遇到两个核心问题:

  • 初始使用show("lily")方法导出时,只要小节仅包含休止符、无实际音符,就无法生成PNG文件
  • 切换show("musicxml.png")方案后,在MacOS环境下即使给/Applications/MuseScore 3.app执行chmod 777、sudo chown root:wheel配置全权限,运行时依然抛出权限拒绝错误

复现代码

from music21 import *

us = environment.UserSettings()
us['musicxmlPath'] = '/Applications/MuseScore 3.app'
us['musescoreDirectPNGPath'] = '/Applications/MuseScore 3.app'
s = stream.Stream()
s.append(note.Rest())
s.show("musicxml.png")

报错回溯

traceback (most recent call last):
File "/Users/brien/Documents/FinalProject/personal_learning/check_music21.py", line 10, in <module>
    s.show("musicxml.png")
File "/Users/brien/Documents/FinalProject/.venv/lib/python3.9/site-packages/music21/stream/base.py", line 334, in show
    return super().show(fmt=fmt, app=app, **keywords)
File "/Users/brien/Documents/FinalProject/.venv/lib/python3.9/site-packages/music21/base.py", line 2788, in show
    return formatWriter.show(self,
File "/Users/brien/Documents/FinalProject/.venv/lib/python3.9/site-packages/music21/converter/subConverters.py", line 1108, in show
    returnedFilePath = self.write(obj, fmt, subformats=subformats, **keywords)
File "/Users/brien/Documents/FinalProject/.venv/lib/python3.9/site-packages/music21/converter/subConverters.py", line 1091, in write
    outFp = self.runThroughMusescore(xmlFp, subformats, **keywords)
File "/Users/brien/Documents/FinalProject/.venv/lib/python3.9/site-packages/music21/converter/subConverters.py", line 964, in runThroughMusescore
    completed_process = subprocess.run(musescoreRun, capture_output=True, check=False)
File "/Users/brien/micromamba/lib/python3.9/subprocess.py", line 505, in run
    with Popen(*popenargs, **kwargs) as process:
File "/Users/brien/micromamba/lib/python3.9/subprocess.py", line 951, in __init__
    self._execute_child(args, executable, preexec_fn=close_fds,
File "/Users/brien/micromamba/lib/python3.9/subprocess.py", line 1821, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
PermissionError: [Errno 13] Permission denied: '/Applications/MuseScore 3.app'

已验证的目录权限

执行ls -l /Applications返回MuseScore目录权限如下:

drwxrwxrwx@  3 root       wheel   96  8 Feb  2021 MuseScore 3.app

目录已配置全部读写执行权限,报错依然存在。

问题根因

  • 权限报错属于路径配置错误,和目录权限无关:MacOS下.app是应用打包的目录结构,不是可执行文件本体,直接将目录路径传给子进程启动时,系统会尝试执行一个目录,直接抛出权限拒绝,之前修改目录所有者、开777权限都是无效操作。
  • lilypond后端纯休止符导出失败:该后端默认将仅含休止符、无有效音符的乐谱流判定为空内容,不会触发后续PNG渲染流程。

修复步骤

解决MuseScore权限报错

  1. 定位MuseScore 3的实际可执行文件路径,默认安装路径为/Applications/MuseScore 3.app/Contents/MacOS/mscore
  2. 修改music21环境配置,将原来的.app目录路径替换为上述可执行文件路径:
from music21 import *

us = environment.UserSettings()
# 配置为实际可执行文件路径,不要填写.app目录
us['musicxmlPath'] = '/Applications/MuseScore 3.app/Contents/MacOS/mscore'
us['musescoreDirectPNGPath'] = '/Applications/MuseScore 3.app/Contents/MacOS/mscore'

s = stream.Stream()
s.append(note.Rest())
s.show("musicxml.png")
  1. 首次运行如果弹出MacOS安全拦截提示,直接打开「系统设置-隐私与安全性」,下拉到安全区域,点击对应mscore程序的「仍要打开」按钮授权即可,不需要额外修改应用目录权限。

解决纯休止符小节导出问题

修复路径后的MuseScore后端原生支持纯休止符小节导出,不需要额外做兼容处理,直接运行即可正常生成PNG。如果坚持使用lilypond后端,需要给纯休止符流添加一个隐藏的零音量音符或者乐谱元信息,骗过后端的空内容校验即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:21:13