Open azhogova opened 3 years ago
I'd try to install the IJavscript kernelspec using full paths, like this: ijsinstall --spec-path=full
I'm having the exact same issue. This is the first time I've tried to set up and use IJavascript, and Jupyter in general. Jupyter is working fine with a python 3.9 kernel and python code, in VS Code.
I tried using the above command ijsinstall --spec-path=full
but saw no change in behavior. It's unclear if the command did anything — is there a way I can check what it changed?
For debugging this I also tried opening up the zeromq
folder at /Users/phoenix/.nvm/versions/node/v14.17.1/lib/node_modules/ijavascript/node_modules/zeromq
and running the command its README suggested for rebuilding it for the version of electron that VS Code uses: npm rebuild zeromq --runtime=electron --target=12.0.7
, but this didn't do anything noticeable (I'm not sure if it had any effect at all).
I'm running macOS 11.4, using an apple m1 chip. This might be related; not sure. The errors all say they're trying to use the x64 build, which should work fine with rosetta 2, but it's possible somewhere the wires are getting crossed for what it considers a 'native' build?
Looks like zeromq has node.abi83.node
but not electron.abi83.node
, which is what it was looking for. Seeing if I can find a way to make it build that version...
Alright, I'm not sure why this worked, since it seems to be bypassing the node-gyp-build/index.js
file I was debugging entirely (the one that was throwing the error), but this solved it:
nvm use 14.17.1 # this was the version I started with, including for verbosity
npm uninstall -g ijavascript
nvm install 16.3.0 # the minor version of v16 I happened to already have, included for verbosity. Other v16 versions may work too.
nvm use 16.3.0
npm install -g ijavascript
ijsinstall --spec-path=full
Bafflingly, this works even if I remove the zeromq/prebuilds
directory entirely, so I'm not sure what it's using instead with node v16.3, but it apparently doesn't need those electron.abi83.node
etc files like node v14 was trying to use.
One can run jupyter kernelspec list --json
, to see the difference between ijsinstall --spec-path=full
and ijsinstall --spec-path=none
.
zeromq
has recently changed they way it builds and distributes binaries. Unfortunately, this means that the binaries fail for distributions such as Debian 10. Anyone affected by these incompatible binaries, please try and force building zeromq
from source by running:
$ npm_config_zmq_external=true npm install -g ijavascript
@phoenixeliot The paths in the error logs should give us a clue, whether ijsinstall --spec-path=full
is working or not.
ijsinstall --spec-path=full
should install a kernelspec with a full path to node (no need to install ijavascript in vscode).
Just to add some debugging data, after switching to node v16, I found that VS Code failed to run the notebook (an ENOENT error, with VS Code forever visually trying to connect to the kernel, different from the original error in this issue) if I use the --spec-path=none
option, but works if I use the --spec-path=full
option. I may have just recorded my commands wrong when typing my above message; I'll update it to reflect that.
That's expected. Every time the node versions is changed, new binaries for zeromq
are required.
if --spec-path=full
is used, the kernelspec will include the full path to node and ijavascript (e.g. /path/to/node path/to/ijskernel.js
). If /path/to/node
is different for each node version used in your machine, then --spec-path=full
will save you reinstalling ijavascript
.
If --spec-path=none
is used, then the kernelspec invokes ijskernel
using the current version of node. If the version of node changes, the npm uninstall -g ijavascript
followed by npm install -g ijavascript
is required to pick up the binaries for the current node version.
Alright, I'm not sure why this worked, since it seems to be bypassing the
node-gyp-build/index.js
file I was debugging entirely (the one that was throwing the error), but this solved it:nvm use 14.17.1 # this was the version I started with, including for verbosity npm uninstall -g ijavascript nvm install 16.3.0 # the minor version of v16 I happened to already have, included for verbosity. Other v16 versions may work too. nvm use 16.3.0 npm install -g ijavascript ijsinstall --spec-path=full
Bafflingly, this works even if I remove the
zeromq/prebuilds
directory entirely, so I'm not sure what it's using instead with node v16.3, but it apparently doesn't need thoseelectron.abi83.node
etc files like node v14 was trying to use.
I can confirm upgrading node to 16 (in my case v16.6.2) works.
I've also tried npm_config_zmq_external=true npm install -g ijavascript && ijsinstall --spec-path=full
as mentioned by @n-riesco but that doesn't seem to work for me.
switch to dependencies /node_modules/zeromq folder then run. npm run build:libzmq rebuild libzmq binaries
posting my experience in case it helps anyone else
I have ijs
installed into a jupyterlab
instance with node=16.12.0
& npm=8.1.0
installed via conda
(thus, no nvm
).
This was my initial error:
Error: No native build was found for platform=linux arch=x64 runtime=node abi=93 uv=1 libc=glibc node=16.12.0
Changing node
versions wasn't possible as indicated above. Reinstalling ijs
with zmq_external
flag à la
npm_config_zmq_external=true npm install -g ijavascript && ijsinstall --spec-path=full
did not help either.
However,
switch to dependencies /node_modules/zeromq folder then run. npm run build:libzmq rebuild libzmq binaries
did work. But it was a bit tricky because I, apparently, have 3 locations that needed to be rebuilt. I'm really not familiar with npm and I was recklessly throwing commands at shell so it's my own fault.
This is the gist of my resolution:
# uninstall ijs just to be safe
npm uninstall -g ijavascript
# reinstall ijs
npm install -g ijavascript
# rebuild zeromq; first directory
cd ~/lib/node_modules/ijavascript/node_modules/zeromq/
npm run build:libzmq
# second directory (must have tried installing locally at one point)
cd ~/.local/lib/node_modules/ijavascript/node_modules/zeromq/
npm run build:libzmq
ijsinstall --spec-path=full
At this point, 'Error: No native build was found for platform...
errors were gone, but my kernel was still mysteriously dying. My jupyterlab logs listed:
[I 2021-12-30 20:08:18.509 ServerApp] Kernel started: 0a485f5f-67d9-49af-b278-7b1caae75dc5
[I 2021-12-30 20:08:21.499 ServerApp] AsyncIOLoopKernelRestarter: restarting kernel (1/5), new random ports
[I 2021-12-30 20:08:24.505 ServerApp] AsyncIOLoopKernelRestarter: restarting kernel (2/5), new random ports
[I 2021-12-30 20:08:27.512 ServerApp] AsyncIOLoopKernelRestarter: restarting kernel (3/5), new random ports
[I 2021-12-30 20:08:30.519 ServerApp] AsyncIOLoopKernelRestarter: restarting kernel (4/5), new random ports
[I 2021-12-30 20:08:33.527 ServerApp] AsyncIOLoopKernelRestarter: restarting kernel (5/5), new random ports
[W 2021-12-30 20:08:36.534 ServerApp] AsyncIOLoopKernelRestarter: restart failed
[W 2021-12-30 20:08:36.534 ServerApp] Kernel 0a485f5f-67d9-49af-b278-7b1caae75dc5 died, removing from map.
As it turns out, there's another location where ijavascript
was getting installed.
# third directory
cd /usr/local/lib/node_modules/ijavascript/node_modules/zeromq/
npm run build:libzmq
ijsinstall --spec-path=full
After which, it finally worked.
@kingscolour Thank you for reporting your experience.
My understanding is that if npm config set prefix $HOME
has been set, then npm install -g ijavascript
installs ijavascript
into ~/lib/node_modules/ijavascript
.
In your case, it looks like the ijavascript
you are currently running was installed in /usr/local/lib/node_modules/ijavascript/
. Running which ijsinstall
can help you confirm this.
switch to dependencies /node_modules/zeromq folder then run. npm run build:libzmq rebuild libzmq binaries
I encountered the same problem and the following solution works for me: my env:
solution:
run 'node-gyp build --msvs_version=2022' from ur terminal "make sure to run this command on the right path"
and finally, it works just fine for me
for more info here are some resources that helped me to fix this issue on my windows machine: How can I solve error gypgyp ERR!ERR! find VSfind node-gyp repo node-gyp on windows
Oddly, I resolved the issue by opening terminal and executing jupyter notebook
in the environment prior to opening the intended notebook in VSCode.
Background:
The new M1 is freshly installed with VSCode for Apple Silicon.
Launched a TensorFlow model in a VScode Jupyter extension. VScode worked well allowing me to debug user code and follow framework parameters. This pattern lasted for a few days on a new M1 Macbook Pro.
I then rebooted after installing unrelated software. I forgot the importance of executing the jupyter notebook
. After 4 hours of the above errors, the kernel crashing on longer runs, reinstalling packages with conda/mamba etc, it dawned on me to execute this command.
Viola, running 8-10 hour training runs once again.
If this is helpful, worth a try. VScode launches in a clean state without errors.
In my case, he works fine on the web side, and "can't boot the kernel" in vscode. After I ran "npm run build:libzmq", he worked in VSCODE too. I use ArchLinux
worked for me as well
posting my experience in case it helps anyone else
I have
ijs
installed into ajupyterlab
instance withnode=16.12.0
&npm=8.1.0
installed viaconda
(thus, nonvm
). This was my initial error:Error: No native build was found for platform=linux arch=x64 runtime=node abi=93 uv=1 libc=glibc node=16.12.0
Changing
node
versions wasn't possible as indicated above. Reinstallingijs
withzmq_external
flag à lanpm_config_zmq_external=true npm install -g ijavascript && ijsinstall --spec-path=full
did not help either.However,
switch to dependencies /node_modules/zeromq folder then run. npm run build:libzmq rebuild libzmq binaries
did work. But it was a bit tricky because I, apparently, have 3 locations that needed to be rebuilt. I'm really not familiar with npm and I was recklessly throwing commands at shell so it's my own fault.
This is the gist of my resolution:
# uninstall ijs just to be safe npm uninstall -g ijavascript # reinstall ijs npm install -g ijavascript # rebuild zeromq; first directory cd ~/lib/node_modules/ijavascript/node_modules/zeromq/ npm run build:libzmq # second directory (must have tried installing locally at one point) cd ~/.local/lib/node_modules/ijavascript/node_modules/zeromq/ npm run build:libzmq ijsinstall --spec-path=full
At this point,
'Error: No native build was found for platform...
errors were gone, but my kernel was still mysteriously dying. My jupyterlab logs listed:[I 2021-12-30 20:08:18.509 ServerApp] Kernel started: 0a485f5f-67d9-49af-b278-7b1caae75dc5 [I 2021-12-30 20:08:21.499 ServerApp] AsyncIOLoopKernelRestarter: restarting kernel (1/5), new random ports [I 2021-12-30 20:08:24.505 ServerApp] AsyncIOLoopKernelRestarter: restarting kernel (2/5), new random ports [I 2021-12-30 20:08:27.512 ServerApp] AsyncIOLoopKernelRestarter: restarting kernel (3/5), new random ports [I 2021-12-30 20:08:30.519 ServerApp] AsyncIOLoopKernelRestarter: restarting kernel (4/5), new random ports [I 2021-12-30 20:08:33.527 ServerApp] AsyncIOLoopKernelRestarter: restarting kernel (5/5), new random ports [W 2021-12-30 20:08:36.534 ServerApp] AsyncIOLoopKernelRestarter: restart failed [W 2021-12-30 20:08:36.534 ServerApp] Kernel 0a485f5f-67d9-49af-b278-7b1caae75dc5 died, removing from map.
As it turns out, there's another location where
ijavascript
was getting installed.# third directory cd /usr/local/lib/node_modules/ijavascript/node_modules/zeromq/ npm run build:libzmq ijsinstall --spec-path=full
After which, it finally worked.
worked for me
I have the same problem and wasted a lot of time trying to get anywhere. I was close I guess but then when doing $ node-gyp build
I faced
[...]
gyp info spawn args ]
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
prepare-build
TRACKER : error TRK0005: Failed to locate: "CL.exe".
[...]
and another box of issues with MSVS appeared.
So I just went to the original error, opened ijavascript/node_modules/node-gyp-build/index.js:59
and edited line 11 with
//before
var runtime = isElectron() ? 'electron' : (isNwjs() ? 'node-webkit' : 'node')
//after
var runtime = isElectron() ? 'node' : (isNwjs() ? 'node-webkit' : 'node')
because I saw that node.abi108.node was there anyway:
TLDR: and the whole fix boiled down to that single string (electron -> node) and now my node kernel works.
switch to dependencies /node_modules/zeromq folder then run. npm run build:libzmq rebuild libzmq binaries
Thanks a lot! Have no idea how it works but it did the trick. 🤣
Not sure if related to this same issue or not.
OS: WIn 10 x64
Using mamba install nodejs -c conda-forge
& then npm install -g ijavascript
It works properly for node v18 but not for node v20
p.s. Didn't test any of the above mentioned build processes as I don't have the bandwidth to install & configure MSVS.
Node repo information:
- nodejs 18.17.1 h57928b3_0 conda-forge Cached
+ nodejs 20.6.1 h57928b3_0 conda-forge Cached
pyzmq 25.1.1
libsodium 2.6.1
(misc) C:\conda>jupyter console --kernel=javascript
C:\conda\envs\misc\node_modules\ijavascript\node_modules\node-gyp-build\node-gyp-build.js:60
throw new Error('No native build was found for ' + target + '\n loaded from: ' + dir + '\n')
^
Error: No native build was found for platform=win32 arch=x64 runtime=node abi=115 uv=1 libc=glibc node=20.6.1
loaded from: C:\conda\envs\misc\node_modules\ijavascript\node_modules\zeromq
at load.resolve.load.path (C:\conda\envs\misc\node_modules\ijavascript\node_modules\node-gyp-build\node-gyp-build.js:60:9)
at load (C:\conda\envs\misc\node_modules\ijavascript\node_modules\node-gyp-build\node-gyp-build.js:22:30)
at Object.<anonymous> (C:\conda\envs\misc\node_modules\ijavascript\node_modules\zeromq\binding.js:1:43)
at Module._compile (node:internal/modules/cjs/loader:1241:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1295:10)
at Module.load (node:internal/modules/cjs/loader:1091:32)
at Module._load (node:internal/modules/cjs/loader:938:12)
at Module.require (node:internal/modules/cjs/loader:1115:19)
at require (node:internal/modules/helpers:130:18)
at Object.<anonymous> (C:\conda\envs\misc\node_modules\ijavascript\node_modules\zeromq\lib\index.js:6:11)
Node.js v20.6.1
Traceback (most recent call last):
File "C:\conda\envs\misc\lib\site-packages\jupyter_console\ptshell.py", line 434, in init_kernel_info
reply = self.client.get_shell_msg(timeout=1)
File "C:\conda\envs\misc\lib\site-packages\jupyter_core\utils\__init__.py", line 166, in wrapped
return loop.run_until_complete(inner)
File "C:\conda\envs\misc\lib\asyncio\base_events.py", line 649, in run_until_complete
return future.result()
File "C:\conda\envs\misc\lib\site-packages\jupyter_client\client.py", line 139, in _async_get_shell_msg
return await ensure_async(self.shell_channel.get_msg(*args, **kwargs))
File "C:\conda\envs\misc\lib\site-packages\jupyter_client\channels.py", line 233, in get_msg
raise Empty
_queue.Empty
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\conda\envs\misc\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\conda\envs\misc\lib\runpy.py", line 86, in _run_code
exec(code, run_globals)
File "C:\conda\envs\misc\Scripts\jupyter-console.EXE\__main__.py", line 7, in <module>
sys.exit(main())
File "C:\conda\envs\misc\lib\site-packages\jupyter_core\application.py", line 285, in launch_instance
return super().launch_instance(argv=argv, **kwargs)
File "C:\conda\envs\misc\lib\site-packages\traitlets\config\application.py", line 1042, in launch_instance
app.initialize(argv)
File "C:\conda\envs\misc\lib\site-packages\traitlets\config\application.py", line 113, in inner
return method(app, *args, **kwargs)
File "C:\conda\envs\misc\lib\site-packages\jupyter_console\app.py", line 136, in initialize
self.init_shell()
File "C:\conda\envs\misc\lib\site-packages\jupyter_console\app.py", line 106, in init_shell
self.shell = ZMQTerminalInteractiveShell.instance(parent=self,
File "C:\conda\envs\misc\lib\site-packages\traitlets\config\configurable.py", line 551, in instance
inst = cls(*args, **kwargs)
File "C:\conda\envs\misc\lib\site-packages\jupyter_console\ptshell.py", line 352, in __init__
self.init_kernel_info()
File "C:\conda\envs\misc\lib\site-packages\jupyter_console\ptshell.py", line 437, in init_kernel_info
raise RuntimeError("Kernel didn't respond to kernel_info_request") from e
RuntimeError: Kernel didn't respond to kernel_info_request
The solution for me was tagore-cai's recommendation: https://github.com/n-riesco/ijavascript/issues/243#issuecomment-971120145
switch to dependencies /node_modules/zeromq folder then run. npm run build:libzmq rebuild libzmq binaries
I'm in Linux mint with node 18.17.0, python 3.10.12, pnpm 7.30.5 (I use pnpm instead of npm in my machine), and I located the "zeromq" folder by running first:
jupyter kernelspec list --json | grep ijavascript
. This gave me the path /home/carlos/.local/share/pnpm/global/5/.pnpm/ijavascript@5.2.1/node_modules/ijavascript/lib/kernel.js
, so I went to /home/carlos/.local/share/pnpm/global/5/.pnpm/
, then searched for the zeromq folder, and ended up in cd /home/carlos/.local/share/pnpm/global/5/.pnpm/zeromq@5.3.1/node_modules/zeromq
. In this folder I ran pnpm run build:libzmq
. After doing this, the kernel finally worked inside vscode.
Doesn't work inside the vscode notebook: