- Notifications
You must be signed in to change notification settings - Fork265
The Go kernel for Jupyter notebooks and nteract.
License
gopherdata/gophernotes
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
gophernotes is a Go kernel forJupyter notebooks andnteract. It lets you use Go interactively in a browser-based notebook or desktop app. Usegophernotes 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 theJupyter Notebook Viewer. Go forth and do data science, or anything else interesting, with Go notebooks!
Acknowledgements - This project utilizes a Go interpreter calledgomacro under the hood to evaluate Go code interactively. The gophernotes logo was designed by the brilliantMarcus Olsson and was inspired by Renee French's original Go Gopher design.
- Examples
- Install gophernotes:
- Getting Started
- Limitations
- Troubleshooting
Example Notebooks (download and run them locally, follow the links to view in Github, or use theJupyter Notebook Viewer):
- Go 1.13+ - including GOPATH/bin added to your PATH (i.e., you can run Go binaries that you
go install). - Jupyter Notebook ornteract
- git - usually already present on Linux and Mac OS X. If not present, follow the instructions athttps://git-scm.com/download
The instructions below should work both on Linux and on FreeBSD.
Method 1: quick installation as module
go install github.com/gopherdata/gophernotes@v0.7.5 mkdir -p~/.local/share/jupyter/kernels/gophernotescd~/.local/share/jupyter/kernels/gophernotes cp"$(go env GOPATH)"/pkg/mod/github.com/gopherdata/gophernotes@v0.7.5/kernel/*"." chmod +w ./kernel.json# in case copied kernel.json has no write permission sed"s|gophernotes|$(go env GOPATH)/bin/gophernotes|"< kernel.json.in> kernel.json
Method 2: manual installation from GOPATH
mkdir -p"$(go env GOPATH)"/src/github.com/gopherdatacd"$(go env GOPATH)"/src/github.com/gopherdata git clone https://github.com/gopherdata/gophernotescd gophernotes git checkout -f v0.7.5 go install mkdir -p~/.local/share/jupyter/kernels/gophernotes cp kernel/*~/.local/share/jupyter/kernels/gophernotescd~/.local/share/jupyter/kernels/gophernotes chmod +w ./kernel.json# in case copied kernel.json has no write permission sed"s|gophernotes|$(go env GOPATH)/bin/gophernotes|"< kernel.json.in> kernel.json
To confirm that thegophernotes binary is installed in GOPATH, execute it directly:
"$(go env GOPATH)"/bin/gophernotesand you should see the following:
2017/09/20 10:33:12 Need acommand line argument specifying the connection file.Note - if you have theJUPYTER_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:
jupyter --data-dir
Important Note - gomacro relies on theplugin package when importing third party libraries. This package works reliably on Mac OS X with Go 1.10.2+ as long as younever execute the commandstrip gophernotes.
Method 1: quick installation as module
go install github.com/gopherdata/gophernotes@v0.7.5 mkdir -p~/Library/Jupyter/kernels/gophernotescd~/Library/Jupyter/kernels/gophernotes cp"$(go env GOPATH)"/pkg/mod/github.com/gopherdata/gophernotes@v0.7.5/kernel/*"." chmod +w ./kernel.json# in case copied kernel.json has no write permission sed"s|gophernotes|$(go env GOPATH)/bin/gophernotes|"< kernel.json.in> kernel.json
Method 2: manual installation from GOPATH
mkdir -p"$(go env GOPATH)"/src/github.com/gopherdatacd"$(go env GOPATH)"/src/github.com/gopherdata git clone https://github.com/gopherdata/gophernotescd gophernotes git checkout -f v0.7.5 go install mkdir -p~/Library/Jupyter/kernels/gophernotes cp kernel/*~/Library/Jupyter/kernels/gophernotescd~/Library/Jupyter/kernels/gophernotes chmod +w ./kernel.json# in case copied kernel.json has no write permission sed"s|gophernotes|$(go env GOPATH)/bin/gophernotes|"< kernel.json.in> kernel.json
To confirm that thegophernotes binary is installed in GOPATH, execute it directly:
"$(go env GOPATH)"/bin/gophernotesand you should see the following:
2017/09/20 10:33:12 Need acommand line argument specifying the connection file.Note - if you have theJUPYTER_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:
jupyter --data-dir
Important Note - gomacro relies on theplugin 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 theDocker install and run gophernotes/Jupyter in Docker.
Download gophernotes inside GOPATH, compile and install it
go env GOPATH > temp.txtset /p GOPATH=<temp.txtmkdir %GOPATH%\src\github.com\gopherdatacd /d %GOPATH%\src\github.com\gopherdatagit clone https://github.com/gopherdata/gophernotescd gophernotesgit checkout -f v0.7.5go installCopy the kernel config:
mkdir %APPDATA%\jupyter\kernels\gophernotesxcopy %GOPATH%\src\github.com\gopherdata\gophernotes\kernel %APPDATA%\jupyter\kernels\gophernotes /sNote, if you have the
JUPYTER_PATHenvironmental 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:jupyter --data-dirUpdate
%APPDATA%\jupyter\kernels\gophernotes\kernel.jsonwith the FULL PATH to your gophernotes.exe (usually in %GOPATH%\bin). For example:{ "argv": [ "C:\\gopath\\bin\\gophernotes.exe", "{connection_file}" ], "display_name": "Go", "language": "go", "name": "go"}
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:
docker run -it -p 8888:8888 gopherdata/gophernotesOr to run a Go notebook with access to common Go data science packages (gonum, gota, golearn, etc.), run:
docker run -it -p 8888:8888 gopherdata/gophernotes:latest-dsIn 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:
docker run -it -p 8888:8888 -v /path/to/local/notebooks:/path/to/notebooks/in/docker gopherdata/gophernotesIf you completed one of the local installs above (i.e., not the Docker install), start the jupyter notebook server:
jupyter notebookSelect
Gofrom theNewdrop down menu.Have fun!
Launch nteract.
From the nteract menu select Language -> Go.
Have fun!
In addition to Go code, the following special commands are also supported - they must be on a line by their own:
- %cd [path]
- %go111module {on|off}
- %help
- $ shell_command [args...]
gophernotes usesgomacro 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 detailhere. Most notably, gophernotes does NOT support:
- importing third party packages when running natively on Windows - This is a current limitation of the Go
pluginpackage. - some corner cases on interpreted interfaces, as interface -> interface type switch and type assertion, are not implemented yet.
- some corner cases on recursive types may not work correctly.
- 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.
- conversions from/to unsafe.Pointer are not supported.
- 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.
Also, creation of new named types is emulated, and their methods are visible only to interpreted code.
Depending on your environment, you may need to manually change the path to thegophernotes executable inkernel/kernel.json before copying it to~/.local/share/jupyter/kernels/gophernotes. You can put thefull path to thegophernotes executable here, and you shouldn't have any further issues.
Traceback (most recent call last): File "/usr/local/lib/python2.7/site-packages/notebook/base/handlers.py", line 458, in wrapper result = yield gen.maybe_future(method(self, *args, **kwargs)) File "/usr/local/lib/python2.7/site-packages/tornado/gen.py", line 1008, in run value = future.result() ... File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child raise child_exceptionOSError: [Errno 2] No such file or directoryStop 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:
sudo ln -s $HOME/go/bin/gophernotes /go/bin/gophernotesRestart jupyter, and you should now be up and running.
At a first analysis, it seems to be a limitation of the new import mechanism that supports Go modules.You can switch the old (non module-aware) mechanism with the command%go111module off
To re-enable modules support, execute%go111module on
In order to see the logs for your Jupyter notebook, use the --log-level option
jupyter notebook --log-level DEBUGAbout
The Go kernel for Jupyter notebooks and nteract.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.


