linuxBean14.04(136)WindowsのLibreOfficeマクロをlinuxBeanでリモートデバッグする

2016-12-30

旧ブログ

t f B! P L
今度はpydevd.pyがあるフォルダをコピーしてWindows10のLibreOffice5.2のマクロをlinuxBeansのEclipse4.6からリモートデバッグします。一応できたのですが、動作が一定しません。

前の関連記事:linuxBean14.04(135)LibreOffice5.2のPythonマクロをリモートデバッグする


Windows10のLibreOffice5.2のマイマクロフォルダの作成


Windows10のLibreOfficeはlinuxBeanのとバージョンを揃えて5.2.4.2にします。

まずWindows10のマイマクロフォルダを作成します。

LibreOffice(2)Pythonの統合開発環境PyCharmのインストールを参照します。

スタートボタン→右クリック→コマンドプロンプト。

mkdir C:\Users\pq\AppData\Roaming\LibreOffice\4\user\Scripts\python
(pqはユーザー名)

explorer C:\Users\pq\AppData\Roaming\LibreOffice\4\user\Scripts\python

これでPythonのマイマクロフォルダを作成してエクスプローラーで開けます。
def HelloWorld_Writer():
    doc = XSCRIPTCONTEXT.getDocument()
    doc.getText().setString("Hello World!")
これをマイマクロフォルダのtest.pyに保存しました。

Writerを起動して、ツール→マクロ→マクロを実行、で実行するとドキュメントにHello World!と入力されました。

今度はこのマクロがpydevd.pyを読み込めるようにします。

pydevd.pyがあるフォルダをマクロのPYTHONPATHに追加する


これがEclipse + Pydev + PyUNO - N->N->Nを読んでもよくわかりませんでした。(src/pythonpathはEclipseプロジェクトのプロパティじゃなくって?)
(2017.8.7追記。ようやくわかりました。マクロとして呼び出したモジュールと同じフォルダにあるpythonpathという名前のフォルダに置いたモジュールをimport出来るのでそこにpydevdのあるフォルダを置けばよいわけです。LibreOffice5(47)拡張機能のソースをオートメーションでも実行する参照。)

ということでlinuxBeanと同じようにsites.pthを使うことにします。

"C:\Program Files (x86)\LibreOffice 5\program\python.exe"  "C:\Program Files (x86)\LibreOffice 5\program\python-core-3.3.0\lib\site.py"

コマンドプロンプトでこれを実行します。
C:\Users\pq>"C:\Program Files (x86)\LibreOffice 5\program\python.exe"  "C:\Program Files (x86)\LibreOffice 5\program\python-core-3.3.0\lib\site.py"
sys.path = [
    'C:\\Program Files (x86)\\LibreOffice 5\\program\\python-core-3.3.0\\lib',
    'C:\\Program Files (x86)\\LibreOffice 5\\program',
    'C:\\Program Files (x86)\\LibreOffice 5\\program\\python-core-3.3.0\\lib\\site-packages',
    'C:\\Program Files (x86)\\LibreOffice 5\\program\\python33.zip',
    'C:\\Program Files (x86)\\LibreOffice 5\\program\\python-core-3.3.0\\DLLs',
    'C:\\Program Files (x86)\\LibreOffice 5\\program\\python-core-3.3.0\\bin',
    'C:\\Program Files (x86)\\LibreOffice 5\\program\\python-core-3.3.0',
]
USER_BASE: 'C:\\Users\\pq\\AppData\\Roaming\\Python' (doesn't exist)
USER_SITE: 'C:\\Users\\pq\\AppData\\Roaming\\Python\\Python33\\site-packages' (doesn't exist)
ENABLE_USER_SITE: True
パス区切りがなぜか二つあります。

とりあえずここでPythonのバージョンが3.3.0であることに気が付きました。

LibreOfficeのバージョンは同じ5.2.4なのに、Linux版とWindows版ではPythonのバージョンが違うようです。

pydevd.pyがあるフォルダをマクロのPYTHONPATHに追加するのlinuxBeanのときから類推すると、sites.pyの置き場所は、C:\Users\pq\AppData\Roaming\Python\Python33\site-packages (pqはユーザー名)かC:\Program Files (x86)\LibreOffice 5\program\python-core-3.3.0\lib\site-packagesのどちらかです。

後者はすでに存在しているのでそこにsites.pthを置くことにします。

linuxBeanのEclipse4.6にインストールしたPyDevプラグインのorg.python.pydev_5.4.0.201611281236フォルダをC:\Program Files2フォルダに置くことにしました。

C:\Program Files2\org.python.pydev_5.4.0.201611281236\pysrc

この内容をいれたsites.pthファイルをC:\Program Files (x86)\LibreOffice 5\program\python-core-3.3.0\lib\site-packagesに置きました。

パスを"で囲むと認識されませんでした。

これでマクロからpydevd.pyが認識されました。

異なるマシンのリモートデバッグはまだ設定しないといけないことがあります。

pydevd_file_utils.pyのPATHS_FROM_ECLIPSE_TO_PYTHONの設定


pydevd_file_utils.pyはC:\Program Files2\org.python.pydev_5.4.0.201611281236\pysrcにあるファイルです。

Remote Debuggerを読むと設定方法はpydevd_file_utils.pyを読むように書いてあります。
'''
        in this context, the server is where your python process is running
        and the client is where eclipse is running.

    E.g.:
        If the server (your python process) has the structure
            /user/projects/my_project/src/package/module1.py

        and the client has:
            c:\my_project\src\package\module1.py

        the PATHS_FROM_ECLIPSE_TO_PYTHON would have to be:
            PATHS_FROM_ECLIPSE_TO_PYTHON = [(r'c:\my_project\src', r'/user/projects/my_project/src')]
'''
Eclipseが動いているマシンがクライアント、LibreOfficeが動いているマシンがサーバーになります。

今回はtest.pyをデバッグするのでそれぞれのマシンでのパスを確認します。

クライアント: /home/pq/.config/libreoffice/4/user/Scripts/python/test/test.py

サーバー:  C:\Users\pq\AppData\Roaming\LibreOffice\4\user\Scripts\python\test.py

例によると異なる部分までを書けばよいようですが、全然パスが違うので、 PATHS_FROM_ECLIPSE_TO_PYTHONは以下のようにしました。
PATHS_FROM_ECLIPSE_TO_PYTHON = [
  (r'/home/pq/.config/libreoffice/4/user/Scripts/python/test',
   r'C:\Users\pq\AppData\Roaming\LibreOffice\4\user\Scripts\python')
]

Eclipseを動かしているlinuxBeanのIPの確認とファイアフォールの設定


今度はEclipse4.6が動いているlinuxBeanで操作します。

Eclipseを動かしているマシンのIPを調べます。

linuxBeanではifconfigで確認できます。

192.168.10.106でした。

ポート5678を開放します。

豆ボタン→設定→ファイアウォール設定ツール。

+ボタンをクリックしてルールを追加します。


簡易タブをクリックしてNameをPyDevにして、DirectionをBoth、ポートを5678を入れて、追加ボタンをクリックして閉じるボタンをクリックします。

Eclipse4.6ではlinuxBean14.04(135)LibreOffice5.2のPythonマクロをリモートデバッグするのtest.pyを開いています。

Eclipse4.6でPydev→Start Debug Server、でデバッグサーバを起動します。

デバッグコードをマクロに挿入して実行する


Windows10に戻ってマクロのpydevd.settrace()の引数にlinuxBeanのIPを文字列として入れます。
def HelloWorld_Writer():
    import pydevd; pydevd.settrace('192.168.10.106')
    doc = XSCRIPTCONTEXT.getDocument()
    doc.getText().setString("Hello World!")
これで準備完了。

Writerを起動してこのマクロを実行します。

これでlinuxBeanのEclipseをみるとブレークされていることがわかります。

なのですが、どうも動作が一定しません。

マクロを実行するとエラーがでてマクロが実行できないこともあれば、ブレークされずにマクロの実行が完了することもあれば、ちゃんとブレークできるときもあります。

ネットワークの問題かもしれません。

参考にしたサイト


Eclipse + Pydev + PyUNO - N->N->N
リモートデバッグの方法も書いてありますがsrc/pythonpathの設定がよくわかりませんでした。

Remote Debugger
PyDevのリモートデバッグの解説。

次の関連記事:linuxBean14.04(137)Eclipse4.6からファイルマネージャを開く設定

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ