gophernotes - Use Go in Jupyter notebooks and nteract
gophernotes
is a Go kernel for Jupyter notebooks and nteract. It lets you use Go interactively in a browser-based notebook or desktop app. Use gophernotes
to create and share documents that contain live Go code, equations, visualizations and explanatory text. These notebooks, with the live Go code, can then be shared with others via email, Dropbox, GitHub and the Jupyter Notebook Viewer. Go forth and do data science, or anything else interesting, with Go notebooks!
Acknowledgements - This project utilizes a Go interpreter called gomacro under the hood to evaluate Go code interactively. The gophernotes logo was designed by the brilliant Marcus Olsson and was inspired by Renee French’s original Go Gopher design.
- Examples
- Install gophernotes:
- Getting Started
- Limitations
- Troubleshooting
Examples
Jupyter Notebook:
nteract:
Example Notebooks (dowload and run them locally, follow the links to view in Github, or use the Jupyter Notebook Viewer):
Installation
Prerequisites
- Go 1.9+ - including GOPATH/bin added to your PATH (i.e., you can run Go binaries that you
go install
). - Jupyter Notebook or nteract
- ZeroMQ 4.X.X - for convenience, pre-built Windows binaries (v4.2.1) are included in the zmq-win directory.
- pkg-config
Linux
1 | $ go get -u github.com/gopherdata/gophernotes |
To confirm that the gophernotes
binary is installed and in your PATH, you should see the following when running gophernotes
directly:
1 | $ gophernotes |
Note - if you have the JUPYTER_PATH
environmental variable set or if you are using an older version of Jupyter, you may need to copy this kernel config to another directory. You can check which directories will be searched by executing:
1 | $ jupyter --data-dir |
Mac
Important Note - gomacro relies on the plugin
package when importing third party libraries. This package works reliably on Mac OS X only with Go 1.10.2+ as long as you never execute the command strip gophernotes
.
If you can only compile gophernotes with Go <= 1.10.1 on Mac, consider using the Docker install and run gophernotes/Jupyter in Docker.
1 | $ go get -u github.com/gopherdata/gophernotes |
To confirm that the gophernotes
binary is installed and in your PATH, you should see the following when running gophernotes
directly:
1 | $ gophernotes |
Note - if you have the JUPYTER_PATH
environmental variable set or if you are using an older version of Jupyter, you may need to copy this kernel config to another directory. You can check which directories will be searched by executing:
1 | $ jupyter --data-dir |
Windows
Important Note - gomacro relies on the plugin
package when importing third party libraries. This package is only supported on Linux and Mac OS X currently. Thus, if you need to utilize third party packages in your Go notebooks and you are running on Windows, you should use the Docker install and run gophernotes/Jupyter in Docker.
Make sure you have the MinGW toolchain:
- MinGW-w64, for 32 and 64 bit Windows
- MinGW Distro, for 64 bit Windows only
Then:
build and install gophernotes (using the pre-built binaries and
zmq-win\build.bat
):1
2
3
4
5
6
7
8
9
10
11
12
13REM Download w/o building.
go get -d -u github.com/gopherdata/gophernotes
cd %GOPATH%\src\github.com\gopherdata\gophernotes\zmq-win
REM Build x64 version.
build.bat amd64
move gophernotes.exe %GOPATH%\bin
copy lib-amd64\libzmq.dll %GOPATH%\bin
REM Build x86 version.
build.bat 386
move gophernotes.exe %GOPATH%\bin
copy lib-386\libzmq.dll %GOPATH%\binCopy the kernel config:
1
2mkdir %APPDATA%\jupyter\kernels\gophernotes
xcopy %GOPATH%\src\github.com\gopherdata\gophernotes\kernel %APPDATA%\jupyter\kernels\gophernotes /sNote, if you have the
JUPYTER_PATH
environmental variable set or if you are using an older version of Jupyter, you may need to copy this kernel config to another directory. You can check which directories will be searched by executing:1
jupyter --data-dir
Update
%APPDATA%\jupyter\kernels\gophernotes\kernel.json
with the FULL PATH to your gophernotes.exe (in %GOPATH%\bin), unless it’s already on the PATH. For example:1
2
3
4
5
6
7
8
9{
"argv": [
"C:\\gopath\\bin\\gophernotes.exe",
"{connection_file}"
],
"display_name": "Go",
"language": "go",
"name": "go"
}
Docker
You can try out or run Jupyter + gophernotes without installing anything using Docker. To run a Go notebook that only needs things from the standard library, run:
1 | $ docker run -it -p 8888:8888 gopherdata/gophernotes |
Or to run a Go notebook with access to common Go data science packages (gonum, gota, golearn, etc.), run:
1 | $ docker run -it -p 8888:8888 gopherdata/gophernotes:latest-ds |
In either case, running this command should output a link that you can follow to access Jupyter in a browser. Also, to save notebooks to and/or load notebooks from a location outside of the Docker image, you should utilize a volume mount. For example:
1 | $ docker run -it -p 8888:8888 -v /path/to/local/notebooks:/path/to/notebooks/in/docker gopherdata/gophernotes |
Getting Started
Jupyter
If you completed one of the local installs above (i.e., not the Docker install), start the jupyter notebook server:
1
jupyter notebook
Select
Go
from theNew
drop down menu.Have fun!
nteract
Launch nteract.
From the nteract menu select Language -> Go.
Have fun!
Limitations
gophernotes uses gomacro under the hood to evaluate Go code interactively. You can evaluate most any Go code with gomacro, but there are some limitations, which are discussed in further detail here. Most notably, gophernotes does NOT support:
- third party packages when running natively on Windows - This is a current limitation of the Go
plugin
package. - some corner cases on interpreted interfaces, as interface -> interface type switch and type assertion, are not implemented yet.
- conversion from typed constant to interpreted interface is not implemented. Workaround: assign the constant to a variable, then convert the variable to the interpreted interface type.
- goto is only partially implemented.
- out-of-order code in the same cell is supported, but not heavily tested. It has some known limitations for composite literals.
Troubleshooting
gophernotes not found
Depending on your environment, you may need to manually change the path to the gophernotes
executable in kernel/kernel.json
before copying it to ~/.local/share/jupyter/kernels/gophernotes
. You can put the full path to the gophernotes
executable here, and you shouldn’t have any further issues.
“Kernel error” in a running notebook
1 | Traceback (most recent call last): |
Stop jupyter, if it’s already running.
Add a symlink to /go/bin/gophernotes
from your path to the gophernotes executable. If you followed the instructions above, this will be:
1 | sudo ln -s $HOME/go/bin/gophernotes /go/bin/gophernotes |
Restart jupyter, and you should now be up and running.
others
以上摘自官方github
我在debian环境下执行go get -u github.com/gopherdata/gophernotes
后,在当前目录生成了go/src/github.com/gopherdata/gophernotes/kernel
,而不是在go环境目录下生成。这可能是环境变量的问题。这时执行go install github.com/gopherdata/gophernotes
后,gophernotes
才能成功执行。