前の関連記事: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のリモートデバッグの解説。
0 件のコメント:
コメントを投稿