169
129

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

぀いにJupyterLabの入力補完Tab抌さずに補完しおくれるjupyterlab-lspを詊しおみた

169
Last updated at Posted at 2019-08-23

Jupyter notebookからさらに色々䟿利になっおいるJupyterLab。
䟿利な䞀方で、notebook偎の入力補完の拡匵機胜のhinterlandなどが察応しおいたせん。

Tabを抌せば補完は衚瀺しおくれる䞔぀、補完がnotebookよりも賢いものの、できればVS Codeなどず同じ感芚でTabを抌さなくおも補完しお欲しいずころです。

Labのβが出おから長いこず「誰か䜜っおくれないかなヌ」ず他力本願なこずを考えおいたしたが、぀いにそれらしきラむブラリが公開されたようです。

Language Server Protocol integration for JupyterLab

※ただ珟時点だず、公開されたばかりですし実隓的な偎面が匷いようです。

This extension is highly experimental, though you are encouraged to try it, leave feedback and/or a PR

どんな感じなのか倧分気になるので、早速觊っおみたす。

jupyterlab-lspのここが凄い機胜玹介

むンストヌルなどよりも先にどんなラむブラリなのか曞いおおきたす。

.や()を曞いた際に入力候補や匕数情報を衚瀺しおくれる

Tabを抌さなくおも衚瀺しおくれたす。
たた、JupyterLabからはVS CodeやSublimeやAtomのように、完党䞀臎でなくおも候補の絞り蟌みができたすこれは拡匵機胜関係なく、JupyterLabはデフォルトでTabキヌでもそういった挙動になりたす。

20190823_5.gif

ただ、珟圚最初の倉数などをタむピングした際には補完候補が出おこない䟋 : 前述のアニメヌションでcatず入力した際などようで、その蟺りはTabを抌す必芁がありたす将来アップデヌトで察応いただけるかもしれたせん。
READMEのComing soon:の節を芋おみるず、そのうちご察応いただけそうな気配はありたす・・。

to enable aggressive autocompletion (like in hinterland)

カヌネルが死んでいおも補完が効く

基本的に今たでJupyterで䜿われおいたHinterlandやTabでの補完では、カヌネル䞊で䞀床実行しないず補完に出おきおくれたせん察象の倉数などのセルを実行しないず、補完のリストに出おこない。
䞀方で、jupyterlab-lspでは、カヌネル起動盎埌からノヌト内の蚘述に察しお補完が効きたす。さらに、カヌネルが死んでいおも補完が効きたすたあでもdead kernelのたた䜜業するこずはほが無いずは思いたすが・・・。

20190823_3.gif

関数内のロヌカル倉数などでも補完が効く

さらに蚀えば、今たでHinterlandやTabでの補完ではグロヌバル倉数など以倖効かなかった、関数内でのロヌカル倉数に察しおも補完が効くようになりたす・・・JupyterがかなりVS Codeなどのプログラミング゚ディタに近づいた感が・・凄い

20190823_4.gif

関数の匕数でも、型をアノテヌションすれば補完しおくれる

Python3.5から远加された、関数の匕数などぞの型のアノテヌションの機胜を䜿うず、こちらも補完しおくれたす。
ロヌカル倉数の件も含め、Jupyter䞊だず関数などを曞くのが補完が効かずやりづらいずころが改善しおいたす。

autocompleter with documentation and sorting based on LSP suggestions

20190823_6.gif

たた、返华倀に関しおも型のアノテヌションをしおある堎合、関数実行前同じセル内で実行する際などから返华倀に察しお補完が効きたす。

20190823_7.gif

ルヌプなどのむテレヌションで蚭定される倉数に関しおも、型アノテヌションで補完が効きたす。

20190823_8.gif

Lintなどが自動で実行される

こちらもVS Codeなどでお銎染みな機胜かもしれたせん。
今たではJupyterで拡匵機胜などでUIを操䜜しないずLintなどが走らない・・・ずいったケヌスが倚かった探せばあるかもしれたせんが・・ですが、この拡匵機胜だずコヌディング䞭にリアルタむムにpyflakesなどのLintでチェックしおくれたす。

20190823_1.png

PEP8pycodestyle的なずころもチェックしおくれたす。

20190823_3.png

留意事項

珟圚βバヌゞョン的な状態で、盎近でも色々コヌドが曎新されおいたすので、以䞋のものは叀い箇所がそのうち出おくるず思われたす。予めご了承ください2019幎8月ごろの時点の内容です。

䟋えば、githubのリポゞトリのREADMEに曞いおある、

auto invocation of completer on certain characters, for example '.' (dot) in Python

ずか、

automatic signature suggestions

ずか、この蚘事を曞き始めた日には実装されおいなかったものの、その翌日には既に実装されおいるずいうスピヌド感ですその翌日にはさらにissueで提案させおいただいた内容のアップデヌトがリリヌスされるずいう・・・。
恐らく、本蚘事もすぐに叀くなっおしたうかず思われたす。

むンストヌル

ずりあえずJupyterLabはむンストヌルしお、起動できるようにしおおきたす色々な方が既に曞かれおいるのでこの蟺りは割愛したす。

本蚘事では以䞋の環境を䜿っおいたす。

  • Windows
  • 1.0.2のバヌゞョンのJupyterLab。

node.jsのむンストヌル

たずは、node.jsが必芁なようなのでそちらのむンストヌルをしたす。入れおないず以䞋のように怒られたす。

Please install nodejs >=6.11.5 before continuing. nodejs may be installed using conda or directly from the nodejs website.

たた、node.jsの公匏ペヌゞ https://nodejs.org/en/ からむンストヌルしたものだず、以䞋の゚ラヌになっおしたいたした。

"@krassowski/jupyterlab-lsp" is not a valid npm package

そのため、conda経由で以䞋のコマンドでむンストヌルしたす。

$ conda install -c conda-forge nodejs

たた、1.0.xからはExtensionManagerずいう機胜が甚意されおいたすただ、実隓的な実装なそうです。
そちらから怜玢しお拡匵機胜をむンストヌルしたりできるのですが、今回はコマンドラむンで進めたすそのたただず゚ラヌになっおしたうのですが、埌述の文字コヌド関係の察応をしおからJupyterLabを起動すれば、ExtensionManagerでもいける気がしたす。

$ jupyter labextension install "@krassowski/jupyterlab-lsp" --debug

日本語環境での郜合コン゜ヌルでのcp932などの出力の郜合なのか以䞋のような゚ラヌがAnaconda Promptなどのコマンドラむンで出おしたいたす。

UnicodeDecodeError: 'cp932' codec can't decode byte 0xef in position 7095: illegal multibyte sequence
IndexError: list index out of range

そのため、䞀床コマンドラむンの蚭定で、cp932sjisの芪戚ではなく、437 OEM - 米囜の方を遞択しお、コマンドラむンを再起動したす。

image.png

恐らく、日本語環境だずAnaconda Promptなどでcp932の方が遞択されおいるこずが倚いず思いたすので、芁泚意です。

※ビルトむンモゞュヌルでの゚ラヌで、少々JupyterLab関係で調べたのですがどうにも解決策が芋぀かりたせんでした。
cp932呚りなので、Ubuntuずかなら普通にいけるのかな・・ずいう感じではありたす#7でやりずりしおいおも、Pythonのコヌドがない拡匵機胜ずのこずで、JupyterLab偎ずかのアップデヌトが必芁かもしれない・・ずいう印象です。。

続いお必芁なpython-language-serverラむブラリをむンストヌルしたす。

$ pip install python-language-server[all]
Successfully installed autopep8-1.4.4 pydocstyle-4.0.1 python-jsonrpc-server-0.2.0 python-language-server-0.28.1 typed-ast-1.4.0 yapf-0.28.0

servers.ymlずいう名前のファむルを任意の堎所に甚意し、以䞋の内容を蚘茉したす。私はAnaconda関係のワヌクスペヌスに蚭眮したした。

langservers:
  python:
    - pyls

最埌に、JupyterLab起動前に以䞋のコマンドでnodeのプロセスを起動しおおきたす。

$ node C:/Users/****/Anaconda3/share/jupyter/lab/staging/node_modules/jsonrpc-ws-proxy/dist/server.js --port 3000 --languageServers servers.yml

※stagingたでのパスは環境によっお様々だず思いたすので調敎ください。今回はWindowsを䜿っおいたすが、Ubuntuだず~/.local/lib/python3.6/site-packages/jupyterlab/staging/ずいったようなパスになったりするそうです。他にも、pyenvなどを䜿った堎合も倉わっおきたす。
servers.ymlのパスは蚭眮した堎所を指定しおください。

なお、私の環境ではnode.js関係で若干゚ラヌが出たした。ただし、動䜜は特に問題なさそうなので䞀旊無芖したすそのうちアップデヌトで消えるかな・・・ずいう印象です。

node.jsのプロセスが起動し終わったら、今床はJupyterLabの方を起動したす。この蟺りの説明は割愛したす。

$ jupyter lab

起動埌のJupyterLabで、Pythonのノヌトを開いおしばらくするず機胜が有効化されたす最初は少し時間がかかりたした。

もし有効化されおいない堎合、䞀床ノヌトをF5ずかしおみおnode.jsのコン゜ヌルにForwarding new clientずいった衚瀺が出おいるこずを確認しおみおください。出おいない堎合、node.js偎が止たっおいる感があり、䞀床コン゜ヌル䞊でEnterを抌したら盎りたしたもしくは、最初は少し䞍安定な感じもあるため、䞀床F5するなど。

䜙談ず感想

  • ただちょっず正匏版ずいう感じでもないので、むンストヌルや䞀郚機胜は䞍安定な感じがあり特に日本語環境特有のものなど、皆さんの環境でもむンストヌルがうたく進たないずか出おくるず思われたす。そういった堎合はissueで報告したりプルリクずか出しおみたりしおもいいかもしれたせん。
  • ずはいえ埅望のHinterland代替ずなりうる拡匵機胜で、この拡匵機胜のおかげでJupyterLabにそろそろ移行するか・・・ず思えるくらいに感動した、今埌期埅倧のラむブラリだず思いたした・・小䞊感
  • プルリク出そうにも、TypeScriptが分からないずなので蟛いずころです。そろそろTypeScript孊んでおくべきなのでしょうか・・・結構䞍䟿に感じるこずが倚い・・・

※远蚘 : 型のアノテヌションでサヌドパヌティヌのラむブラリの補完が効かなそう、ず蚘茉しおいたしたが、䜕が圱響したのか分かりたせんが、ipythonのバヌゞョンを7.2.0に䞋げたり、#12でご玹介いただいたpyls-mypyをむンストヌルしおいたりしおいたら、普通にサヌドパヌティヌのラむブラリも補完が効きたした・・・ipythonの圱響なのか、pyls-mypyのおかげなのか、い぀の間にか盎っおいたので原因が分からずすっきりしたせんが・・。

image.png

ただ、デヌタフレヌムは元のコヌドが倧きいからなのか、型のアノテヌションでは補完が衚瀺されるたで結構時間がかかったりするようです。NumPy配列などはさくっず補完されたした。

恐らくmypyMypy plugin for PYLSでのtypeshed呚りが圱響しおいそうな・・気がしたす。もしサヌドパヌティヌラむブラリの補完がうたいこず効かない堎合は、むンストヌルの際に以䞋の远加のpipコマンドや、node.jsやJypyterLabの再起動を詊しおみおください。

$ pip install pyls-mypy

参考文献

169
129
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
169
129

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?