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

今度はリモートデバッグできることを確認します。リモートデバッグとはLibreOffice(5)PythonでLibreOfficeが動く仕組み:UNOのマクロモードをデバッグする方法です。今回はsites.pthでpydevd.pyへのPYTHONPATHを設定します。

前の関連記事:linuxBean14.04(134)Eclipse4.6とLibreOffice5.2のPythonマクロ


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


pydevd.pyがある/opt/eclipse4.6/plugins/org.python.pydev_5.4.0.201611281236/pysrcをマクロモードのPYTHONPATHに追加します。

思いつくやり方は大きく分けて2つあります。

まずlinuxBean14.04(93)Eclipse4.5にPyDevをインストールでやったsites.pthにパスを追記する方法です。

sites.pthの作り方はlinuxBean14.04(38)LibreOfficeバンドルPythonにパッケージを追加に書いています。

linuxBean14.04(134)Eclipse4.6とLibreOffice5.2のPythonマクロでLibreOffice5.2のバンドルPython3.5.0とわかっています。

なのでsites.pthの置き場所は、~/.local/lib/python3.5/site-packages/opt/libreoffice5.2/program/python-core-3.5.0/lib/python3.5/site-packagesのどちらかです。

前者に置くとマシンにあるすべてのPython3.5インタープリターに影響し、後者に置くとLibreOfficeのバンドルPythonのみに影響します。

今回は後者に置くことにします。

sudo mkdir -p /opt/libreoffice5.2/program/python-core-3.5.0/lib/python3.5/site-packages

まずこれで後者のフォルダが作成できます。

そこにpydevd.pyがあるフォルダのパス/opt/eclipse4.6/plugins/org.python.pydev_5.4.0.201611281236/pysrcを書いたsites.pthファイルを置きます。


Eclipse4.6を再起動するとPYTHONPATHの追加の確認ダイアログがでるので、Apply selected changes (Ignore unselected)ボタンをクリックします。

デバッグコードを挿入する

import pydevd; pydevd.settrace()
このコードをデバッグをデバッグを開始したいマクロの場所に挿入します。
def HelloWorld_Writer():
    import pydevd; pydevd.settrace()
    doc = XSCRIPTCONTEXT.getDocument()
    doc.getText().setString("Hello World!")
if __name__ == "__main__":
    import unopy
    XSCRIPTCONTEXT = unopy.connect()
    if not XSCRIPTCONTEXT:
        print("Failed to connect.")
        import sys
        sys.exit(0)
    HelloWorld_Writer()
test.pyの2行目に追加して保存しました。

5行目以降はオートメーションのためのコードなのでデバッグコードを挿入する意味はありません。

これで準備完了です。

Debugパースペクティブを追加する


Eclipseでデバッグするマクロのコードであるtest.pyを開いてDebugパースペクティブに切り替えます。

Eclipseで、Windows→Perspective→Open Perspective→Other。

Debugを選択してOK。

Pydev→Start Debug Server。

Debug Server at port: 5678

コンソールをみるとこれがでてデバッグサーバーが起動したことがわかります。

LibreOffice5.2でマクロを起動する


Writerを起動してデバッグコードを挿入したマクロを実行します。

WriterがフリーズするのでEclipseに切り替えるとtest.pyがブレークされていることがわかります。



デバッガのスピードアップをする方法


Terminalでpydevdをインポートすると面白いことに気が付きました。
pq@pq-VirtualBox:~$ /opt/libreoffice5.2/program/python
Python 3.5.0 (default, Dec 19 2016, 14:38:40) 
[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pydevd 
warning: Debugger speedups using cython not found. Run '"/opt/libreoffice5.2/program/python.bin" "/opt/eclipse4.6/plugins/org.python.pydev_5.4.0.201611281236/pysrc/setup_cython.py" build_ext --inplace' to build.
>>> 
cythonを使ってのデバッガのスピードアップがみつからないとのことです。

これについて調べてみるとFaster debugger in PyCharm 5.1 | PyCharm Blogを見つけました。

"/opt/libreoffice5.2/program/python.bin" "/opt/eclipse4.6/plugins/org.python.pydev_5.4.0.201611281236/pysrc/setup_cython.py" build_ext --inplace

このコマンドでスピードアップができるようなのですが、やってみるとできませんでした。
pq@pq-VirtualBox:~$ "/opt/libreoffice5.2/program/python.bin" "/opt/eclipse4.6/plugins/org.python.pydev_5.4.0.201611281236/pysrc/setup_cython.py" build_ext --inplace
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'

Current thread 0xb7173700 (most recent call first):
中止
たぶんバンドルPythonのモジュールが足りないせいなのだと思いますが、いまはスピードアップする必要性を感じないのと、まずはバンドルPythonだけで動くマクロを作る予定なのでスピードアップはまたそのうちやってみることにします。

PyCharmとPyDevのpydevd.pyは同じものなのでしょうか?

(2017.5.5追記。AnacondaのインタープリターにしているPyDevプロジェクトでは、表示された次のコマンドで実行できました。"/home/pq/anaconda3/bin/python" "/home/pq/.eclipse/org.eclipse.platform_4.6.2_944779670_linux_gtk_x86/plugins/org.python.pydev_5.6.0.201703221358/pysrc/setup_cython.py" build_ext --inplace)

参考にしたサイト


Faster debugger in PyCharm 5.1 | PyCharm Blog
デバッガをスピードアップする方法。

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

PR

0 件のコメント:

コメントを投稿