C++14 Jupyter Kernel启动失败求助(Cling环境,macOS)
从你的报错信息里,核心问题出在这一行:
whichCling = os.readlink(shutil.which('cling')) TypeError: readlink: path should be string, bytes or os.PathLike, not NoneType
这说明Jupyter的cling内核找不到系统里的cling可执行文件——哪怕你已经把cling的bin目录加到了/etc/paths,要么是路径没真正生效,要么是路径配置错了,要么是conda环境的变量覆盖了系统PATH。
下面是一步步的排查和解决方法:
1. 确认cling命令真的能被系统找到
修改/etc/paths后,必须重启终端才能让新的路径生效(只执行echo $PATH看到路径存在不代表当前终端会话已经加载了新配置)。重启终端后执行:
which cling
如果返回空,说明路径没生效或者你加错了路径;如果返回具体的文件路径,说明cling已经能被找到,那问题可能出在conda环境的变量冲突。
2. 检查你添加的路径是否正确
你下载的cling_2018-01-11_mac1012.tar.bz2解压后,应该是一个类似cling-2018-01-11-mac1012的目录,里面的bin文件夹下才是cling可执行文件。你需要确认添加到/etc/paths的是这个bin目录的绝对路径,而不是解压后的根目录或者其他目录。
比如,如果你的cling解压在/Users/yourname/Downloads/cling-2018-01-11-mac1012,那正确的路径应该是/Users/yourname/Downloads/cling-2018-01-11-mac1012/bin。
可以用这个命令验证目录里是否有cling:
ls /path/to/your/cling/bin/directory
如果看不到cling文件,说明你加错了路径,重新修改/etc/paths后重启终端。
3. 直接在Kernel配置里指定cling的绝对路径
如果上面的方法都不行,你可以直接修改cling-cpp14内核的配置文件,硬编码cling的绝对路径:
- 找到内核配置文件的位置,一般在:
~/.jupyter/kernels/cling-cpp14/kernel.json - 用编辑器打开这个文件,找到
"argv"数组里的"cling",把它替换成你的cling可执行文件的绝对路径,比如:"argv": [ "/Users/yourname/Downloads/cling-2018-01-11-mac1012/bin/cling", "--std=c++14", ...(后面的参数保持不变) ] - 保存文件后,重启Jupyter Notebook,再尝试启动C++14内核。
4. 排查conda环境的变量冲突
因为你用的是Anaconda的Python环境,conda可能会修改PATH变量,导致系统PATH里的cling路径被覆盖。你可以在Jupyter Notebook里打开一个终端(点击New -> Terminal),然后执行:
echo $PATH which cling
如果这里找不到cling,说明conda环境的PATH优先级更高,你可以把cling的bin目录添加到conda环境的PATH里,或者在conda的activate.d脚本里添加路径。
内容的提问来源于stack exchange,提问作者AngusTheMan




