前の関連記事:linuxBean14.04(151)LibreOfficeマクロ開発環境の構築:その2
原因はplatforms.pyのバグだった
pq@pq - VirtualBox:~$ / opt / libreoffice5. 2 / program / python ~ / anaconda3 / envs / py35 / bin / jupyter notebook Traceback (most recent call last): File "/home/pq/anaconda3/envs/py35/bin/jupyter-notebook" , line 4 , in <module> import notebook.notebookapp File "/home/pq/anaconda3/envs/py35/lib/python3.5/site-packages/notebook/notebookapp.py" , line 32 , in <module> from zmq.eventloop import ioloop File "/home/pq/anaconda3/envs/py35/lib/python3.5/site-packages/zmq/__init__.py" , line 34 , in <module> from zmq import backend File "/home/pq/anaconda3/envs/py35/lib/python3.5/site-packages/zmq/backend/__init__.py" , line 21 , in <module> if platform.python_implementation() = = 'PyPy' : File "/opt/libreoffice5.2/program/python-core-3.5.0/lib/platform.py" , line 1332 , in python_implementation return _sys_version()[ 0 ] File "/opt/libreoffice5.2/program/python-core-3.5.0/lib/platform.py" , line 1295 , in _sys_version repr (sys_version)) ValueError: failed to parse CPython sys.version: '3.5.3 |Continuum Analytics, Inc.| (default, Mar 6 2017, 11:57:42) \n[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]' |
それでこのエラーメッセージが検索してみるとpython - Praw "failed to parse CPython sys.version" when creating Reddit object - Stack OverflowこのQ&Aを見つけました。
sys.versionのエラーがでるのはplatform.pyの正規表現のバグのようです。
MeldでLibreOffice5.2のバンドルPython3.5.0とAnaconda4.3.1のPython3.5.3のplatform.pyを比較してみるとsys.versionの正規表現が変更になっていました。
左側が3.5.3のものです。
1.0.8 - changed Windows support to read version from kernel32.dll
1.0.7 - added DEV_NULL
platform.pyのhistoryをみるとPython3.5.0の付属のplatform.pyは1.0.7で、Python3.5.3の1.0.8とはWindows関連が変わっただけのように見えますが、そのほかいくつか変更点がありました。
Anacondaのplatform.pyへのパスもsites.pthに加えているのですが、LibreOffice5.2のバンドルPythonインタープリターを実行するときはバンドルPythonのplatform.pyが読み込まれてしまいます。
なので、もうバンドルPythonのplatform.pyをAnacondaのものと置き換えることにしました。
LibreOffice5.2のバンドルPythonのplatform.pyをAnacondaのものと置き換える
/opt/libreoffice5.2/program/python-core-3.5.0/lib/platform.pyをplatform.py.bkと改名した後/home/pq/anaconda3/envs/py35/lib/python3.5/platform.pyを同じフォルダにコピーしました。
1 2 3 4 5 6 7 8 9 |
/ home / pq / anaconda3 / envs / py35 / lib / python35. zip / home / pq / anaconda3 / envs / py35 / lib / python3. 5 / home / pq / anaconda3 / envs / py35 / lib / python3. 5 / plat - linux / home / pq / anaconda3 / envs / py35 / lib / python3. 5 / lib - dynload / home / pq / .local / lib / python3. 5 / site - packages / home / pq / anaconda3 / envs / py35 / lib / python3. 5 / site - packages / home / pq / anaconda3 / envs / py35 / lib / python3. 5 / site - packages / Sphinx - 1.5 . 1 - py3. 5.egg / home / pq / anaconda3 / envs / py35 / lib / python3. 5 / site - packages / setuptools - 27.2 . 0 - py3. 5.egg / home / pq / .config / libreoffice / 4 / user / Scripts / python |
/opt/libreoffice5.2/program/python ~/anaconda3/envs/py35/bin/jupyter notebook
これでLibreOfficeのバンドルPythonでJupyter Notebookが起動できました。
/opt/libreoffice5.2/program/python ~/anaconda3/envs/py35/bin/jupyter notebook --notebook-dir=~/.config/libreoffice/4/user/Scripts/python
このコマンドでLibreOfficeのマイマクロフォルダでJupyter Notebookを起動することができました。
あとはlinuxBean14.04(88)LibreOffice5をIPython Notebookから操作すると同様にランチャを作成しておきました。
/opt/libreoffice5.2/program/python /home/pq/anaconda3/envs/py35/bin/jupyter notebook --notebook-dir= /home/pq/.config/libreoffice/4/user/Scripts/python
ランチャのコマンドでは~は展開しておかないといけません。
ちなみにlinuxBean14.04(150)AnacondaとJupyter NotebookとLibreOffice5.2(失敗編)と同様にして/opt/libreoffice5.2/program/pythonでコンソールでnumpyをインポートすると失敗するのにJupyter Notebookからだとnumpyのインポートはできました。
なぜかはよくわかりません。
(2017.3.27追記。ちなみにIPython Notebookでモジュールから出力したHTMLタグを有効にする方法で書いたIPython Notebookと同じく、モジュールを更新したときはrestart the kernelボタンをクリックしないとJupyter Notebookに読み込んだモジュールは更新されません。エラーメッセージは更新されたコードがでてくるのでモジュールが更新されているものと勘違いして永遠と無駄な時間を使うことになります。)
(2017.4.1追記。この方法でもインタープリターはLibreofficeのものではなくAnacondaのものになっているのかもしれません。linuxBean14.04(160)Pythonのsys.executableは環境変数PATHを参照しているらしい参照。)
参考にしたサイト
python - Praw "failed to parse CPython sys.version" when creating Reddit object - Stack Overflow
platforms.pyのsys.versionを得る正規表現のバグを指摘しています。
0 件のコメント:
コメントを投稿