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ããŒã§ããããã£ãæåã«ãªããŸãïŒã
ãã ãçŸåšæåã®å€æ°ãªã©ãã¿ã€ãã³ã°ããéã«ã¯è£å®åè£ãåºãŠããªãïŒäŸ : åè¿°ã®ã¢ãã¡ãŒã·ã§ã³ã§catãšå
¥åããéãªã©ïŒããã§ããã®èŸºãã¯TabãæŒãå¿
èŠããããŸãïŒå°æ¥ã¢ããããŒãã§å¯Ÿå¿ããã ãããããããŸããïŒã
READMEã®Coming soon:ã®ç¯ãèŠãŠã¿ããšããã®ãã¡ã察å¿ããã ããããªæ°é
ã¯ãããŸãã»ã»ã
to enable aggressive autocompletion (like in hinterland)
ã«ãŒãã«ãæ»ãã§ããŠãè£å®ãå¹ã
åºæ¬çã«ä»ãŸã§Jupyterã§äœ¿ãããŠããHinterlandãTabã§ã®è£å®ã§ã¯ãã«ãŒãã«äžã§äžåºŠå®è¡ããªããšè£å®ã«åºãŠããŠãããŸããïŒå¯Ÿè±¡ã®å€æ°ãªã©ã®ã»ã«ãå®è¡ããªããšãè£å®ã®ãªã¹ãã«åºãŠããªãïŒã
äžæ¹ã§ãjupyterlab-lspã§ã¯ãã«ãŒãã«èµ·åçŽåŸããããŒãå
ã®èšè¿°ã«å¯ŸããŠè£å®ãå¹ããŸããããã«ãã«ãŒãã«ãæ»ãã§ããŠãè£å®ãå¹ããŸãïŒãŸãã§ãdead kernelã®ãŸãŸäœæ¥ããããšã¯ã»ãŒç¡ããšã¯æããŸããã»ã»ã»ïŒã
颿°å ã®ããŒã«ã«å€æ°ãªã©ã§ãè£å®ãå¹ã
ããã«èšãã°ãä»ãŸã§HinterlandãTabã§ã®è£å®ã§ã¯ã°ããŒãã«å€æ°ãªã©ä»¥å€å¹ããªãã£ãã颿°å ã§ã®ããŒã«ã«å€æ°ã«å¯ŸããŠãè£å®ãå¹ãããã«ãªããŸãã»ã»ã»ïŒïŒJupyterãããªãVS Codeãªã©ã®ããã°ã©ãã³ã°ãšãã£ã¿ã«è¿ã¥ããæãã»ã»åãïŒ
颿°ã®åŒæ°ã§ããåãã¢ãããŒã·ã§ã³ããã°è£å®ããŠããã
Python3.5ãã远å ãããã颿°ã®åŒæ°ãªã©ãžã®åã®ã¢ãããŒã·ã§ã³ã®æ©èœã䜿ããšããã¡ããè£å®ããŠãããŸãã
ããŒã«ã«å€æ°ã®ä»¶ãå«ããJupyteräžã ãšé¢æ°ãªã©ãæžãã®ãè£å®ãå¹ããããã¥ãããšãããæ¹åããŠããŸãã
autocompleter with documentation and sorting based on LSP suggestions
ãŸããè¿åŽå€ã«é¢ããŠãåã®ã¢ãããŒã·ã§ã³ãããŠããå Žåã颿°å®è¡åïŒåãã»ã«å ã§å®è¡ããéãªã©ïŒããè¿åŽå€ã«å¯ŸããŠè£å®ãå¹ããŸãã
ã«ãŒããªã©ã®ã€ãã¬ãŒã·ã§ã³ã§èšå®ããã倿°ã«é¢ããŠããåã¢ãããŒã·ã§ã³ã§è£å®ãå¹ããŸãã
Lintãªã©ãèªåã§å®è¡ããã
ãã¡ããVS Codeãªã©ã§ã銎æã¿ãªæ©èœãããããŸããã
ä»ãŸã§ã¯Jupyterã§æ¡åŒµæ©èœãªã©ã§UIãæäœããªããšLintãªã©ãèµ°ããªãã»ã»ã»ãšãã£ãã±ãŒã¹ãå€ãã£ãïŒæ¢ãã°ãããããããŸãããã»ã»ïŒã§ããããã®æ¡åŒµæ©èœã ãšã³ãŒãã£ã³ã°äžã«ãªã¢ã«ã¿ã€ã ã«pyflakesãªã©ã®Lintã§ãã§ãã¯ããŠãããŸãã
PEP8ïŒpycodestyleïŒçãªãšããããã§ãã¯ããŠãããŸãã
çæäºé
çŸåšÎ²ããŒãžã§ã³çãªç¶æ ã§ãçŽè¿ã§ãè²ã ã³ãŒããæŽæ°ãããŠããŸãã®ã§ã以äžã®ãã®ã¯å€ãç®æããã®ãã¡åºãŠãããšæãããŸããäºããäºæ¿ãã ããïŒ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 - ç±³åœïŒã®æ¹ãéžæããŠãã³ãã³ãã©ã€ã³ãåèµ·åããŸãã
æãããæ¥æ¬èªç°å¢ã ãš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ã®ããããªã®ãããã€ã®éã«ãçŽã£ãŠããã®ã§åå ãåããããã£ããããŸãããã»ã»ïŒã
ãã ãããŒã¿ãã¬ãŒã ã¯å ã®ã³ãŒãã倧ãããããªã®ããåã®ã¢ãããŒã·ã§ã³ã§ã¯è£å®ã衚瀺ããããŸã§çµæ§æéãããã£ããããããã§ããNumPyé åãªã©ã¯ããã£ãšè£å®ãããŸããã
æããmypyïŒMypy plugin for PYLSïŒã§ã®typeshedåšãã圱é¿ããŠããããªã»ã»æ°ãããŸãããããµãŒãããŒãã£ãŒã©ã€ãã©ãªã®è£å®ãããŸãããšå¹ããªãå Žåã¯ãã€ã³ã¹ããŒã«ã®éã«ä»¥äžã®è¿œå ã®pipã³ãã³ãããnode.jsãJypyterLabã®åèµ·åã詊ããŠã¿ãŠãã ããã
$ pip install pyls-mypy









