Top > OOoPython > IDE

IDE の利用 Edit

OOo 付属の Python には IDE などはありません。一方でエディタなどもありません。自分のお気に入りのエディタで編集するように・・・です。

外部の IDE やエディタを利用するときには幾つか設定を行うと便利になります。普段は外部からのオートメーションとして別の Python から接続する形でテスト、作成しておきます。そして、マクロが完成したら OOo からマクロとして実行します。

環境変数を正しく設定すればオートメーションとしてマクロを実行できます。ここでは、コードをエディタのメニューから実行できる、統合されたような環境で快適に作業できるようにするのが目的です。

オートメーションも参照してください。

環境変数の確認 Edit

いくつか必要な環境変数を調べます。OpenOffice.org に付属している Python をインタラクティブモードで立ち上げて os.environ から取得します。

Windows 環境では C:\Program Files\OpenOffice.org 3\program\python.exe をダブルクリックします。 Linux 環境では opt/openoffice.org3/program/python を実行します。これらの実行ファイルは Python のプログラム本体ではなく、Python を実行する前に環境変数を設定してから Python を実行してくれます。そのため、ここで設定された環境変数を取得すれば容易に調べることができます。

インタラクティブモードになったら次のように入力して結果をどこかにメモしておいてください。

import os
os.environ['URE_BOOTSTRAP']

Windows 環境では PATH を調べます。追加されているパスを探してください。

os.environ['PATH']

Linux 環境では LD_LIBRARY_PATH を調べます。

os.environ['LD_LIBRARY_PATH']

追加で UNO_PATH を調べておいてもかまいませんが、あまり利用しません。

os.environ['UNO_PATH']

Eclipse + Pydev + PyUNO Edit

上でも書きましたが、Pydev は Python の開発環境としてよく利用されています。

OOo の Scripting Framework で言語に Python を選択してマクロを書くとしても統合された IDE がありません。そのせいで利用を躊躇するのがよく見かけられます。

マクロを書く際にはオートメーションとして書きながら実行、完成後に利用する時にはマクロとして実行する方法があります。現在のところヘビーユーザーはこの方法をとっている人が多いようです。

ここでは Eclipse + Pydev を IDE として利用します。導入したあと動くようになるまでは結構大変ですが以下で説明していきます。

Python 関連の設定を行えば Eclipse + Pydev でなくとも同じように動作します。

インタプリタを追加 Edit

Window - Preferences - Pydev - Interpreter - Python から OOo に付属の Python を追加します。他の Python インタプリタでも問題ありませんが、pyuno.pyd をインポートできるように 2.6.x を利用します。また、OOo 付属の Python は幾つかの標準モジュールをサポートしていないため同様の環境でテストする必要があるのであれば付属のものを利用した方がよいでしょう。

Pydev プロジェクトを作成 Edit

新規プロジェクトを PyDev プロジェクトとして作成します。プロジェクト作成時にファイルを配置する場所を OOo の user/Scripts/python 以下にする方法もありますがここではディレクトリをリンクすることにします。

プロジェクトが作成できたら python フォルダを src 以下に作成します。作成時に Link to folder in the file system を利用して user/Scripts/python にリンクさせます。すでに python 以下にファイルがある場合にはそれらのファイルが表示されます。

次に、pythonpath フォルダを src/python 以下に作成します。同様にリンクしておきます。このディレクトリにはマクロとして実行するときに import したいモジュールなどを入れます(実行前に自動的に PYTHONPATH に追加されます)。

プロジェクトの Properties から PyDev - PYTHONPATH の External Libraries に uno.py や unohelper.py ファイルの置かれているディレクトリを追加しておきます。

unopy.py Edit

次のようなファイルを src 以下に作成します。プロジェクトの Properties - PyDev - PYTHONPATH の Source Folders に src 以下が含まれていることを確認しておきます(他の PYTHONPATH ディレクトリに配置しても構いません)。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
#!     # unopy.py
# -*- coding: utf_8 -*-
 
import uno
import unohelper
 
from com.sun.star.script.provider import XScriptContext
 
class ScriptContext(unohelper.Base, XScriptContext):
    def __init__(self, ctx):
        self.ctx = ctx
    def getComponentContext(self):
        return self.ctx
    def getDesktop(self):
        return self.ctx.getServiceManager().createInstanceWithContext(
                "com.sun.star.frame.Desktop", self.ctx)
    def getDocument(self):
        return self.getDesktop().getCurrentComponent()
 
def connect():
    ctx = None
    try:
        localctx = uno.getComponentContext()
        resolver = localctx.getServiceManager().createInstanceWithContext(
            "com.sun.star.bridge.UnoUrlResolver", localctx)
        ctx = resolver.resolve(
            "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
        if ctx:
            return ScriptContext(ctx)
    except:
        pass
    return None

上記のコードでは 2002 ポートを利用します。必要に応じて書き換えてください。

OpenOffice.org の起動 Edit

Eclipse から実行する時にはオートメーションとしてマクロを実行するため Python から OpenOffice.org に接続する必要があります。このために次のよう起動時にオプションを指定します。

E:\usr\local\OOo\DEV79\OOo-dev 3\program\soffice.exe \
 "-accept=socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"

上記の unopy.py 中の利用ポートと同じポート番号を指定してください。

テストファイル Edit

次のようなファイルを src/python 以下に作成してテストします。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
#! # test.py
# -*- coding: utf_8 -*-
 
def hello():
    desktop = XSCRIPTCONTEXT.getDesktop()
    doc = desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, ())
    doc.getText().setString("Hello!")
 
 
if __name__ == '__main__':
    import unopy
    XSCRIPTCONTEXT = unopy.connect()
     if not XSCRIPTCONTEXT:
         print("Failed to connect to OpenOffice.org.")
          import sys
          sys.exit(0)
     
     hello()

Eclipse から実行すると __name__ は __main__ ですが OpenOffice.org のマクロとして実行したときには __name__ は ooo_script_framework となるため if の部分は無視されます。

マクロとして実行したときと同様のコードにするために XSCRIPTCONTEXT グローバル変数を定義しています。マクロでは普通この変数から OOo にアクセスします、そこでオートメーションでも同じ変数を介して行うことでコードを変更せずに済ませます。

実行 Edit

Run とするとエラーが出るのでテストコードを実行する前に実行用の設定を行わなければいけません。Run - Run Configuration - Python Run に新しく項目を作成して環境変数を設定します。

Linux 系 OS で本家ビルドの開発版を /opt 以下にインストールした場合には次のようになります。

UNIX 環境では次の環境変数を設定します。

  • LD_LIBRARY_PATH: libpyuno.so ファイルサーチ用
         /opt/ooo-dev3/program/../basis-link/program:/opt/ooo-dev3/program/../basis-link/ure-link/lib
  • URE_BOOTSTRAP: 起動も行うには指定が必要です
         vnd.sun.star.pathname:/opt/ooo-dev3/program/fundamentalrc

Windows 環境では PATH に追加します。

  • PATH: libpyuno.so ファイルサーチ用
         C:\Program Files\OpenOffice.org 3\URE\bin;C:\Program Files\OpenOffice.org 3\Basis\program
  • URE_BOOTSTRAP: 起動も行うには指定が必要です
         vnd.sun.star.pathname:C:\Program Files\OpenOffice.org 3/program/fundamental.ini

以下は追加の環境変数です。

  • UNO_PATH: soffice の実行ファイルがあるディレクトリパス
         /opt/ooo-dev3/program

Eclipse から問題なく実行できれば OpenOffice.org 側からも実行してみてください。同じコードがツール - マクロ - マクロの管理 - Python から実行できれば設定は終了です。

デバッグ Edit

実行と同様の設定でデバッグを開始します。必要に応じて事前にブレークポイントを設定しておいてください。

リモートデバッグ Edit

普段はオートメーションとして実行、デバッグで用は足りますが、マクロとして実行してデバッグが必要になった場合にはリモートデバッグを行います。

PyDev でのリモートデバッグ用に src/pythonpath 以下に eclipse/plugins/org.python.pydev.pydev_xxx/pysrc 以下のファイルを pydev などのパッケージとしてコピーしておきます(コピーした後で __init__.py ファイルを入れておきます)。

デバッグを開始する部分のコードに次の行を追加しておきます。ここでは Eclipse 付属の pydevd.py ファイルが置かれたディレクトリを src/pythonpath 以下に pydev パッケージとして配置したので次のように利用しています。

import pydev.pydevd; pydev.pydevd.settrace()

PyDev のリモートデバッグサーバーを開始します。その後にデバッグするマクロを実行します

NetBeans + PyUNO Edit

NetBeans の Python プラグインを利用します。

起動用スクリプト Edit

NetBeans では実行時に環境変数を設定できないため、起動前に設定しておく必要があります。環境によりますが、スクリプトは次のような感じになります。上記の環境変数の確認で調べた値を指定します。

# /bin/sh
export PYTHONHOME=/home/asuka/opt/ooo-dev3/basis-link/program/python-core-2.6.1
export URE_BOOTSTRAP=vnd.sun.star.pathname:/home/asuka/opt/ooo-dev3/program/fundamentalrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/asuka/opt/ooo-dev3/program/../basis-link/program:\
   /home/asuka/opt/ooo-dev3/program/../basis-link/ure-link/lib
/home/asuka/local/netbeans-6.9/bin/netbeans

インタプリタの追加 Edit

OOo に付属している Python を利用する場合にはインタプリタを追加します。

  1. ツール - Python Platforms を選択します。
  2. New ボタンを押して、Python の実行ファイルを選択します。Linux 環境では opt/openoffice.org3/program/python を、Windows 環境では OpenOffice.org 3\Basis\program\python-core-version\bin\python.exe を選択します。
  3. uno.py のあるディレクトリを Python Path に追加しておきます。

プロジェクトを作成 Edit

  1. ファイル - 新規プロジェクトを選択します。
  2. カテゴリから Python を、プロジェクトから Python Project with Existing Sources を選択、次へをクリック。
  3. プロジェクト名を入力、Python インタプリタを選択して次へをクリックします。
  4. Source Root Folders に Python のマクロが保存されているディレクトリを追加します。user/Scripts/python などです。
  5. 完了をクリックします。

続き Edit

unopy.py 以降と同じです。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes