Python 常见问题解答(自定义和扩展)

  1. RV 命令 API 文档位于何处?

    目前我们没有 Python 特定的文档阅读方式。但是,Mu API 文档浏览器可以查看相关信息。在“帮助”(Help)菜单下单击“Mu Command API Browser”,启动文档查看器。最左侧列包含标有蓝色图标的项目:这些是 Mu 模块(大致相当于 Python 模块)。Mu 中的“commands”和“extra_commands”模块会被记录下来,并组成 Mu 和 Python 的 RV API。因此,您可以阅读这些文档获取相关信息(另外它们还拥有将被返回的实际数据类型)。

    关于文档浏览器,需要注意的是:窗口顶部有一个搜索栏。 

  2. 您使用的是哪个版本的 Python?

    Python 2.7

  3. 可以随意使用任一版本吗?为什么选择 Python 2.7?

    无论结果是好是坏,我们都计划跟踪 The Foundry 使用的工具。它已太过复杂。 
     
  4. 尝试在 rv.commands 中调用函数时失败。为什么?

    我们尚未处理默认参数,因此您必须提供所有命令参数。更新RV 4 现可在 Python 中处理默认参数。
     
  5. 如何在 Python 中制作 UI?

    您可以使用 PySide 或 PyQt 来制作 Qt 界面组件(RV 是 Qt 应用程序)。我们不会在 Python 中分发其中任一 Qt 封装器的编译版本,但两者应该都能使用。到目前为止,PyQt 是最常用的 Qt API 封装器。请注意,在编译 PyQt 或 PySide 时,如果链接到的某版本 Qt 接近于 RV 中所用的 Qt(当前为 Qt 4.8.7),则结果最有可能在 RV 中发挥作用。

    为确保完整性,您应知晓 PyQt 制造者需要授权他们使用代码的许可(即使在 RV 中)。我们没有该授权许可,并且即使我们有许可也无法转让给最终用户(该许可将仅涵盖我们的使用)。但是您可以向他们购买许可(如果想要完全符合其许可)。PySide 没有此类许可要求。

  6. 我是否可以使用 OpenGL 以 Mu 的方式绘制视图? 

    是的。如果绑定到渲染事件,则可以使用 PyOpenGL(如已安装)进行绘制。

  7. 使用 OpenGL 绘制时 Python 可能会导致出现性能问题?

    是的。但我们可能弄错了。问题在于 Python 的循环内存垃圾回收器是否会在渲染期间运行。事实证明,它仅在内存几乎耗尽时运行。

  8.  我是否可以从 Python 调用现有 Mu 代码?

    是的。参考手册中有一个章节介绍了相关内容。可以在 Python 中利用 MuSymbol 来打包任意 Mu 函数,然后再调用它。这就是命令 API 在 Python 中的构建方式。 

  9. 如何针对 RV(和 Unicode 支持)来编译 Python?

    在 OS X 中,我们实际上并没有编译 Python,而是使用操作系统提供的 Python 2.7 安装和 .dylib。该版本使用 UCS2 来实现 Unicode。Python 2.7 系统中加载的模块应该可以在 RV 中运行。

    在 Windows 中,对于 3.12.14 或更早版本,我们使用 VC9 来编译 UCS2,对于 3.12.15 或更高版本则使用 VC10。
     
    在 Linux 中则是 UCS4,因为大多数 Linux 发行版均使用 UCS4。我们使用 GCC 4.2 在 Linux 上进行编译。
     
  10.  模块 XXX 丢失。在哪里能找到它?

    如果此模块是“标准”Python 模块(随附面向您所在平台的 Python 发行版),它很有可能包括在内。对于 OpenSSL 相关模块,我们可能会构建模块,但不会包括 OpenSSL。在 OS X 中,我们使用系统 Python 2.7,因此如果模块在 Python 解释器系统中运行,则它应该可以在 RV 中运行。在 Linux 中,我们设法确保所有内容都包括在内。在 Windows 中,我们的编译方式与 Python 二进制发行版的编译方式相同。 

    如果模块未包括在内,且其为 CPython 模块(采用 C 语言编写),则您需要自行编译模块。

  11. commands.bind() 函数在 Python 中的工作方式与在 Mu 中不同。应如何使用?

    Python 版本目前要求提供 bind() 的所有参数。若要采用“短形式”,应使用:
    bind("default", "global", event, func, event_doc_string)。 
     
  12. 可以在 RVIO Python 中执行引线和叠加脚本吗?

    目前尚不支持。我们也希望实现这一功能,但目前未列入计划。
     
  13. Python <-> Mu 桥接会不会减慢速度?

    这个问题可能并不常见,而答案是:不见得。之前连接两者的 MuSymbol 类型如果通过 Python 调用“原生”Mu 函数,即可完全跳过已解释的 Mu 代码。所有 RV 命令均为原生 Mu 函数。因此,Python 调用和实际基础 RV 命令(通常与语言无关)之间存在非常薄的一层。 

    Mu 调用到 Python 桥接中时则略微棘手:基本是已公开的 CPython API。这大概就是通过 C 调用 Python 函数的代价。
     
  14. 为什么(从 RV 调用的)外部 Python 进程的行为现在发生了变化?

    这可能是由于 RV 为了运行而修改了 PYTHONPATH,以合并 $RV_HOME/plugins/Python 与 $RV_HOME/lib/python2.6。派生的进程将继承 PYTHONPATH。如果您使用 QProcess 启动外部进程,在调用 QProcess.start() 之前可以调用 QProcess.setEnvironment() 来设置 PYTHONPATH。
关注

0 评论

登录写评论。