python - Julia PyCall 在运行 Music21 模块时遇到困难
问题描述
我是一个初学者,在使用 Julia 的 PyCall 与 MIT Python 音乐模块 music21 交互时遇到困难。
根据 Music21 的网站,为了以乐谱显示短旋律,可以在 Python 中输入:
converter.parse("tinynotation: 3/4 c4 d8 f g16 a g f#").show()
这是我尝试在 Julia 中执行此代码的操作:
我首先初始化了music21,它似乎工作:
@pyimport music21
music21: Certain music21 functions might need these optional packages: matplotlib, scipy; if you run into errors, install them by following the instructions at http://mit.edu/music21/doc/installing/installAdditional.html
然后我尝试通过键入以下内容在 Julia 中重新创建上述 Python 示例:
converter.parse("tinynotation: 3/4 c4 d8 f g16 agf#").show()
I received this error:
ERROR: UndefVarError: converter not defined
Stacktrace:
[1] eval(::Module, ::Any) at ./boot.jl:235
更新 1 根据 rickhg12hs 的建议,我尝试了 music21.converter.parse("tinynotation: 3/4 c4 d8 f g16 agf#").show()。
现在我在“解析”上收到此错误消息:错误:类型 PyObject 没有字段解析堆栈跟踪:1 eval(::Module, ::Any) at ./boot.jl:235
这似乎是一种改进,因为它现在在代码链中稍后崩溃,在“Parse”而不是“Converter”。
更新 2 - 已修复 此问题与点重载有关。基于此链接,我尝试将代码修改为如下所示:
music21.converter[:parse]("tinynotation: 3/4 c4 d8 f g16 a g f#")[:show]()
但现在我得到了这个错误
FSPathMakeRef(/Applications/MuseScore 2.app/Contents/MacOS/mscore) failed with error -43.
我发现我要做的最后一件事就是下载 MuseScore,现在问题已经解决了!
有关此解决方案的丑陋和即将修复的更多上下文,请参阅@crstnbr 的答案。
非常感谢!纳库尔
解决方案
我没有安装软件包(我会在一秒钟内测试它)但以下应该可以工作:
@pyimport music21 as m
m.converter[:parse]("tinynotation: 3/4 c4 d8 f g16 a g f#")[:show]()
请注意,在我的Pull 请求被合并[:fieldname]
后,在 Julia 1.0 中,可以说是丑陋(但系统化)的访问将很快消失。这种语法的原因是 Julia 不允许覆盖访问功能。幸运的是,这在 Julia 1.0 中发生了变化。.
推荐阅读
- python - 我想在 Python 中将分类变量转换为数值
- unit-testing - 使 os.Stat 抛出错误,使得 IsNotExist 返回 false
- google-apps-script - DriveApp 访问被拒绝
- android - 在 CI 中使用存储权限进行 Android UI 测试
- python - 如何删除小部件并在python中替换它们
- javascript - Lodash union 不能与扩展运算符一起使用
- java - 为什么我需要排除“spring-boot-starter-logging”才能使用spring-geode?
- string - 将一串数字字符串转换为像旧电话一样的单词
- c++ - 尝试根据类中 typedef 的存在来专门化模板函数
- mysql - SQL,在 SQL 行中查找“路径”(分组方式/不同)?