前の関連記事:linuxBean14.04(87)ipynbファイルをnbconvertするシェルスクリプト
condaではJupyter Notebook(ipython4.0.0)はPython 3.3とconflictしてインストールできなかったのでIPython Notebook(ipython3.2.0)を使うことにします。
(2017.3.19追記。LibreOffice5.2ではこの記事の方法ではうまくいきません。linuxBean14.04(152)AnacondaとJupyter NotebookとLibreOffice5.2(成功編)参照。)
LibreOffice5のバンドルPythonからIPython Notebookを起動する
IPython NotebookからLibreOfficeを動かすのにLibreOfficeのバンドルPythonとPythonのバージョンを揃える必要はなく、バンドルPytnonからIPython Notebookを起動する必要もないと思いますが、IPython Notebookでオートメーションで動くものをマクロに持って行きたいのでlinuxBean14.04(86)AnacondaのパッケージをLibreOfficeマクロで使うの続きでバージョンを揃えたAnacondaのpy335のIPython NotebookをLibreOfficeのバンドルPythonで使うことにします。
そもそもJupyterをインストールしようと思ったのですがpy335の環境ではPython3.3とconflictしてJupyterをインストール出来ませんでした。
/opt/libreoffice5.0/program/python ~/anaconda3/envs/py335/bin/ipython notebook
これでPython3.3.5のIPython NotebookをLibreOfficeのバンドルPythonから起動できました。
セルの実行もできるのですが、linuxBean14.04(71)IPython3.2.1のNotebookを使うで設定したJupyter Notebookのプロファイルの読み込みに失敗してるエラーが起動時のTerminalにでてきます。
そこでこのIPython Notebook用のプロファイルを作成します。
まずpy335を有効にします。
source activate py335
LO5と名付けた新しいプロファイルを作成します。
ipython profile create LO5
~/.ipythonフォルダにprofile_LO5というフォルダが作成されました。
このプロファイルを使ってIPython Notebookを起動するには--profile=プロファイル名 でプロファイルを指定します。
/opt/libreoffice5.0/program/python ~/anaconda3/envs/py335/bin/ipython notebook --profile=LO5
これでエラーがでずにIPython Notebookが起動できるようになりました。
LibreOfficeのmatplotlibのプロットのインライン表示はしない(というかいまのところはやり方がわからないので)と思うのでlinuxBean14.04(71)IPython3.2.1のNotebookを使うでやったような%matplotlib inlineの設定はせずにそのままデフォルトのプロファイルを使うことにします。
ドットから始まる隠しフォルダの中までデフォルトのIPython Notebookではたどり着けなかったので、スタートアップフォルダに隠しフォルダ属性になっているLibreOfficeのマイマクロフォルダを指定して起動することにしました。
/opt/libreoffice5.0/program/python ~/anaconda3/envs/py335/bin/ipython notebook --profile=LO5 --notebook-dir=~/.config/libreoffice/4/user/Scripts/python
毎回こんなに長いコマンドは打っていられないのでランチャを作成しました。
/opt/libreoffice5.0/program/python /home/pq/anaconda3/envs/py335/bin/ipython notebook --profile=LO5 --notebook-dir=/home/pq/.config/libreoffice/4/user/Scripts/python
ランチャのコマンドでは「~」は展開してくれないので「/home/ユーザー名」というふうにはじめから展開しておく必要があります。
アイコンの画像はIPython: interactive computing in Pythonから頂きました。
以下はこのランチャから起動したIPython Notebookでの操作の結果です。
IPython NotebookからLibreOfficeのXSCRIPTCOTEXTを得る
まずLibreOffice5のバンドルPythonから起動していることを確認してみます。
In [1]:
import sys
sys.version
Out[1]:
In [2]:
sys.executable
Out[2]:
ちゃんとインタプリタのパスが/opt/libreoffice5.0/program/python.bin、Pythonのバージョンが3.3.5になっていますね。
LibreOffice5(1)officehelper.bootstrap()を使うのunopybootをインポートします。
In [3]:
import unopyboot
これでunopyboot.connect()でXSCRIPTCONTEXTを得ることができます。
In [4]:
XSCRIPTCONTEXT = unopyboot.connect()
if not XSCRIPTCONTEXT:
print("Failed to connect.")
import sys
sys.exit(0)
Failed to connect.とでてこなければLibreOfficeとの接続ができたということですので、Writerを起動してみます。
失敗した場合でももう一度すると成功すると思います。
unopyboot.connect()はランダムなポート番号でソケット接続しているのでIPython Notebookのカーネルを途中で再起動すると再接続するのは難しいです。
その場合は次節のようにLibreOfficeをポート番号を指定してソケット通信できる状態で起動するとよいです。
失敗した場合でももう一度すると成功すると思います。
unopyboot.connect()はランダムなポート番号でソケット接続しているのでIPython Notebookのカーネルを途中で再起動すると再接続するのは難しいです。
その場合は次節のようにLibreOfficeをポート番号を指定してソケット通信できる状態で起動するとよいです。
XSCRIPTCONTEXTを得たのであとはマクロと同じです。
In [5]:
doc = XSCRIPTCONTEXT.getDesktop().loadComponentFromURL("private:factory/swriter", "_blank", 0, ())
Writerが起動したらIPython Notebookから文字を入力してみます。
In [6]:
doc.getText().setString("Hello World!")
WriterにHello World!と入力されたら成功です。
ソケット通信の状態で起動したLibreOfficeを操作する方法
linuxBean14.04(83)LibreOfiice5.0.2のインストールのlibreoffice5.0 "-accept=socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"で起動したLibreOfficeのWriterをIPython Notebookから操作します。
LibreOffice(4)PyCharmからLibreOfficeを動かす(オートメーション)のunopyをインポートします。
In [7]:
import unopy
unopy.connect()でXSCRIPTCONTEXTを得ます。
In [8]:
XSCRIPTCONTEXT = unopy.connect()
if not XSCRIPTCONTEXT:
print("Failed to connect.")
import sys
sys.exit(0)
Writerはすでに起動してあるはずなのでXSCRIPTCONTEXTから直接ドキュメントを取得します。
In [9]:
doc = XSCRIPTCONTEXT.getDocument()
あとはunopybootのときと同じです。
In [10]:
doc.getText().setString("Hello World!")
参考にしたサイト
Introduction to IPython configuration — IPython 3.2.1 documentation
IPythonのプロファイルを個別に設定する方法。
IPython: interactive computing in Python
IPythonのGitHubリポジトリ。
0 件のコメント:
コメントを投稿