jupyter kernelspec没有这样的文件或目录/lib/libstdc++.so.6.0.21

时间:2019-08-09 10:40:06

标签: jupyter conda libstdc++ jupyterhub

在用户创建环境并希望与其他用户共享环境的情况下,我试图充实JupyterHub服务器的工作流程。我想测试两种方法之一。

我试图在公共路径上创建环境,然后让另一个用户将conda环境添加为内核。到目前为止看起来像这样。

# How the environment is created
jupyter@ip:~$ conda create -p /home/envs/test --clone root

# Current setup
nick {~}$ jupyter kernelspec list
Available kernels:
  python3    /opt/conda/share/jupyter/kernels/python3
nick {~}$ conda env list
# conda environments:
#
test                     /home/envs/test
nenv                     /home/nick/.conda/envs/nenv
base                  *  /opt/conda

nick {~}$ cat .condarc
envs_dirs:
  - /home/envs

我的问题是,当我尝试安装内核libstdc++.so.6.0.21不存在时出现错误。什么是libstdc++.so.6.0.21

# error when trying to install kernel
nick {~}$ jupyter kernelspec install --user /home/envs/test
[InstallKernelSpec] Removing existing kernelspec in /home/nick/.local/share/jupyter/kernels/test
Traceback (most recent call last):
  File "/opt/conda/bin/jupyter-kernelspec", line 11, in <module>
    sys.exit(KernelSpecApp.launch_instance())
  File "/opt/conda/lib/python3.7/site-packages/traitlets/config/application.py", line 658, in launch_instance
    app.start()
  File "/opt/conda/lib/python3.7/site-packages/jupyter_client/kernelspecapp.py", line 273, in start
    return self.subapp.start()
  File "/opt/conda/lib/python3.7/site-packages/jupyter_client/kernelspecapp.py", line 143, in start
    replace=self.replace,
  File "/opt/conda/lib/python3.7/site-packages/jupyter_client/kernelspec.py", line 346, in install_kernel_spec
    shutil.copytree(source_dir, destination)
  File "/opt/conda/lib/python3.7/shutil.py", line 365, in copytree
    raise Error(errors)
shutil.Error: [('/home/envs/test/lib/libstdc++.so.6.0.21', '/home/nick/.local/share/jupyter/kernels/test/lib/libstdc++.so.6.0.21', "[Errno 2] No such file or directory: '/home/envs/test/lib/libstdc++.so.6.0.21'")]

注意:I found this question which is similar;但是,I found through this github thread为什么必须gcc删除,我已经使用以下方法验证了它在我的环境中不存在:

nick {~}$ conda list --name test | grep 'gcc'
_libgcc_mutex             0.1                        main  
libgcc                    7.2.0                h69d50b8_2  
libgcc-ng                 8.2.0                hdf63c60_1

我已经libgcc安装了更高版本,如您在上面看到的那样,所以我认为其他答案也不会太好。


文件名显示为红色,因此我认为链接已断开。

(test) nick {~}$ ls -al /home/envs/test/lib/libstdc++.so.6.0.21
lrwxrwxrwx 1 jupyter jupyter 19 Aug  9 09:42 /home/envs/test/lib/libstdc++.so.6.0.21 -> libstdc++.so.6.0.24

1 个答案:

答案 0 :(得分:1)

我意识到我正在以非预期的方式here使用jupyter kernelspec。它实际上并不是要创建内核,而只是添加一个存在(see here, at the bottom)的kernelspec。

  

有两种编写内核的选项:

     
      
  1. 您可以重用IPython内核机制来处理通信,并仅描述如何执行代码。如果可以从Python驱动目标语言,则这要简单得多。有关详细信息,请参见制作简单的Python包装器内核。
  2.   
  3. 您可以用目标语言实现内核机制。最初需要做更多的工作,但是使用您的内核的人可能会以他们知道的语言为它做出贡献。
  4.   

因此,在我的情况下,我真正想做的是使用IPythons实用程序(上面的选项1)which is documented well here.在这种情况下,以用户可以访问的方式将共享conda环境添加为内核需要运行。

su - <user>
conda activate test
python -m ipykernel install --user --name test --display-name "Python (test)"