スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

EclipseでMayaPython開発 その3


EclipseでMayaPython開発 その1 / 3
EclipseでMayaPython開発 その2 / 3
EclipseでMayaPython開発 その3 / 3



8. プロジェクト作成

最後にプロジェクトの作成のについてです。

基本的には、Eclipseの標準のプロジェクト作成機能を使いPyDevプロジェクトを作成し、その後Pythonモジュールを作成していくという形になります。

ただ、このままだと幾つか作業しにくい点がありますので、ここではその解決法について説明していきたいと思います。

作業フォルダがMayaから見えていない問題

Eclipse作業フォルダは、Mayaとは全く関係ないパスに作成されるので、Mayaが搭載するPythonからは見えていません。
その為、幾つかのモジュールを作成した時、互いにimportしようとしても、参照先が見つからずエラーになってしまうという問題が発生します。

Pythonでは、モジュールの参照先を環境変数(PYTHONPATH)で決めているので、ここにプロジェクトの作業フォルダを追加してやることで、この問題を解決することができます。

参照パスを追加するには、最初に実行するモジュール(エントリ)のimportより前に、以下のコードを追加してください。
import sys
sys.path.append('C:\Users\UserName\Documents\Eclipse\ProjectName\src')
※パスは各自変更してください

私の場合、プロジェクトフォルダ直下にsrcフォルダを作り、その中で全てのモジュールを管理するようにしていますが、まぁこの辺りは各々工夫すれば良いと思います。


importしたモジュールの変更が反映されない問題

Pythonは一度読み込んだモジュールを、二度読み込まないという仕様があります。
通常、Pythonインタプリタを再起動すれば、再度読み込む事ができるので大した問題にはならないのですが、Mayaに限っては、Mayaが起動している間Pythonも起動し続けているので、モジュール内の変更を反映することができません。

そこで、以下のようにreload関数を併用してimportを毎回行うようにする必要があります。
# importの場合
import hogehoge
reload(hogehoge)

# fromの場合
from hogehoge import HogeHoge
import hogehoge
reload(hogehoge)

少し冗長な感じがしますが、開発中はこの形で問題ないのでこれで良いかなと思います。
リリース時は単純にimportに置き換えるリリーススクリプト等でも組んでおくか、もしくはデバッグ用関数にまとめておく等すれば問題ないかなと。

ちなみに、fromでわざわざimportを二重にしている理由はここら辺にまとめてあります。


UTF-8で保存したにも関わらず、日本語を含むモジュールでエラーが出る問題

これは正直よく分からないのですが、モジュールをUTF-8で保存しているにもかかわらず、マルチバイト文字が含まれるとエラーが出てしまう問題があります。

恐らくMayaへ転送する途中で文字コードの変換が発生しているのでは無いかと思いますが、この問題の最も簡単な解決方法は、文字コードをshift-jisに設定することです。

マルチバイト文字を含むモジュールの先頭では、以下のように文字コードを指定してください。
# -*- coding: shift-jis -*-
※この指定は、必ずモジュールの1行目に記述してください。

加えて、マルチバイト文字を含む文字列を記述する時は、必ず先頭にuを付けてunicodeクラスに指定してください。
# unicodeクラス
text = u"文字列"

# strクラス
text = "string"



余談ですが、私の場合、リリーススクリプトを書いてリリース作業を自動化しています。
(モジュールのマージ、不要なimportの削除、バージョン情報や説明の付与等)

Maya用スクリプトの場合は、単一のモジュールとしてリリースした方が配布で都合がいい事がありますが、作業自体は複数モジュールでやりたい。
そんな場合にリリーススクリプトを用意しておくとEclipseから実行すればいいだけなので、非常に便利だと思います。

一度作ればずっと使い回しできますしね。


それでは、随分長くなりましたが、今回はこんな所で。
 
関連記事
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。