Python FAQ (カスタマイズと機能拡張)

  1. RV コマンド API のドキュメントはどこにありますか?

    現時点では、Python 固有のドキュメントは用意されていません。 ただし、Mu API のドキュメント ブラウザには情報があります。 Help -> Mu Command API Browser で、ドキュメント ビューアを起動します。 一番左の列には青色のアイコンが付いた項目があります。これらは Muモジュールです(ほぼ Python モジュールに対応しています)。 Mu の「commands」と「extra_commands」モジュールは文書化されており、Mu と Python の両方に対する RV API を構成しています。 そのため、これらのドキュメントを読むことで RV コマンド API について理解できます(また、返される実際の型に関する説明も記載されています)。

    ドキュメント ブラウザについての注意点: ウィンドウの上部に検索バーがあります。 

  2. どのバージョンの Python を使用していますか?

    Python 2.7 です。

  3. 非バージョン依存にすることができますか? なぜ Python 2.7 なのですか?

    良いか悪いかは別として、当社は Foundry が何を使っているかを追跡する計画です。 現状が、既に複雑すぎる状態です。 
     
  4. rv.commands で関数を呼び出そうとすると失敗します。 その理由はなぜでしょうか?

    既定の引数がまだ設定されていないため、すべてのコマンド引数を指定する必要があります。 更新: rv 4 では python の既定の引数が設定されました。
     
  5. Python で UI を作成するにはどうすればよいですか?

    PySide か PyQt のどちらかを使って Qt インタフェース コンポーネントを作成することができます(RV は Qt アプリケーションです)。 これらの Qt ラッパーのコンパイル済みバージョンは Python に配布されていませんが、どちらも動作するはずです。 PyQt は Qt API のより一般的なラッパーです。 PyQt または PySide をコンパイルするときに、RV で使用されているバージョン(現在は Qt 4.8.7)に近いバージョンの Qt にリンクすれば、RV で動作する可能性が最も高くなります。

    完全性を期すために、PyQt メーカーはコードを使用するためのライセンスが(RV でも)必要になることに注意してください。 当社はそのライセンスを持っておらず、仮に持っていても、エンド ユーザに譲渡することはできません(当社内での使用に制限されます)。 ただし、ライセンスを完全に遵守するためにライセンスを購入することができます。 PySide にはそのようなライセンス要件はありません。

  6. Mu で OpenGL を使用するのと同じようにビューを描画できますか? 

    はい。 レンダリング イベントにバインドする場合は、PyOpenGL を使用して描画できます(インストール済みの場合)。

  7. Python では OpenGL での描画パフォーマンスに問題があると言っていませんでしたか?

    はい。 これはおそらく間違いでした。 問題は、Python の周期的ガベージ コレクタがレンダリングの途中で実行されるかどうかにあったのです。 この現象は、メモリが不足した場合にのみ生じることがわかりました。

  8.  Python から既存の Mu コードを呼び出せますか?

    はい。 リファレンス マニュアルにはこれについて説明するセクションがあります。 Python で MuSymbol を使って Mu 関数をラップし、呼び出すことができます。 Python では、このようにコマンド API が構築されています。 

  9. Python はどのように RV (および Unicode サポート)向けにコンパイルされましたか?

    OS X では、実際に Python をコンパイルするのではなく、OS により指定される Python 2.7 インストールと .dylib を使用しています。 このバージョンでは、UCS2 をユニコードに使用しています。 システムの Python 2.7 にロードされるモジュールは RV で動作します。

    Windows では、3.12.14 以前の場合は VC9、3.12.15 以降の場合は VC10 を使用して UCS2 をコンパイルします。
     
    Linux では UCS4 になります。これはほとんどの分配で使用されています。 Linux でのコンパイルには GCC 4.2 を使用します。
     
  10.  モジュール XXX がありません。 どこで入手できますか?

    モジュールが「標準の」Python モジュール(使用するプラットフォーム用の Python 分配に付属)の場合は、おそらくそのモジュールに含まれています。 openSSL に依存するモジュールの場合は、ビルドすることができますが、openSSL を含めることはできません。 Mac OSX ではシステム Python 2.7 を使用しているので、モジュールがシステムの Python インタプリタで実行されている場合は、RV で実行できるはずです。 Linux では、すべてが含まれていることを確認済みです。 Windows では、Python バイナリ分配をコンパイルするのと同じ方法でコンパイルします。 

    モジュールが含まれておらず、CPython モジュール(C 言語で書かれている)の場合は、自分でコンパイルする必要があります。

  11. Python の commands.bind() 関数は、Mu の場合と同じように動作しませんか? 使用方法を教えてください。

    Python のバージョンでは現在、すべての引数を bind() で指定する必要があります。 これを「簡略化」するには次のように指定します。
    bind("default", "global", event, func, event_doc_string) 
     
  12. Python for RVIO でリーダとオーバーレイ スクリプトを実行できますか?

    現時点ではまだできません。 できるようにしたいと思っていますが、それは現時点ではスケジュールに含まれていません。
     
  13. Python と Mu 間のブリッジにより処理速度が低下しませんか?

    頻繁に尋ねられる質問ではないかもしれませんが、答えは「それほど低下はしない」ということです。 「ネイティブの」Mu 関数を Python から呼び出す場合、ブリッジに使用される MuSymbol 型は、解釈される Mu コードを完全に省略することができます。 すべての RV コマンドはネイティブの Mu 関数です。 したがって、Python 呼び出しと実際の基礎となる RV コマンドの間には非常に薄い層があります(これは言語に大きく依存しません)。 

    Mu を Python ブリッジに呼び出すのは多少難解です。基本的に CPython API で公開されています。 したがって、これは C から Python 関数を呼び出すのと同じ手間がかかります。
     
  14. (RV から呼び出す)外部 Python プロセスが異なった動作をするのはなぜですか?

    それはおそらく RV が、実行のために $RV_HOME/plugins/Python と $RV_HOME/lib/python2.6 を組み込むように PYTHONPATH を変更しているためです。 フォークされたプロセスは、PYTHONPATH を継承します。 QProcess を使用して外部プロセスを起動する場合、QProcess.setEnvironment() を呼び出して、QProcess.start() を呼び出す前に PYTHONPATH を設定することができます。
フォローする

0 コメント

ログインしてコメントを残してください。