背景:我正在尝试在这里安装 cling c++ 解释器。我在 Windows 上,并且 Anaconda 运行良好,Jupyter 笔记本也可以与现有的 Python 内核一起正常工作。安装过程表面上很顺利,但是一旦我尝试在已安装的内核上打开 Jupyter 笔记本,就会出现内核错误。
(最后我希望能够将 c++ 与 Jupyter notebook 一起使用,所以如果有人取得了任何成功,请您分享您的经验。在这一点上,虽然 xeus-cling 不能用于 Windows,但正如许多人所说,这种紧贴出现成为一个单独的东西)
安装:这是我所做的:
- 从 https://root.cern.ch/download/cling/下载二进制 cling_2019-11-28_arm64.tar.bz2 (这对 Windows 是否正确?)
- 提取并放置在 Program Files 文件夹中
- 按照此处的说明,添加
C:\Program Files\cling_2019-11-28_arm64\bin
到 PATH 变量 - 激活基础 Anaconda 环境
cd .../share/cling/Jupyter/kernel
pip install -e .
jupyter-kernelspec install --user cling-cpp11
到目前为止,一切似乎都很好,没有警告/错误。
错误:然后我加载我的 Jupyter 笔记本并尝试运行 cpp11 内核,但它无法以长错误回溯开始,其中第一个/最后一个项目显示为:
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\tornado\web.py", line 1699, in _execute
result = await result
File "C:\ProgramData\Anaconda3\lib\site-packages\tornado\gen.py", line 736, in run
yielded = self.gen.throw(*exc_info) # type: ignore
File "C:\ProgramData\Anaconda3\lib\site-packages\notebook\services\sessions\handlers.py", line 73, in post
type=mtype))
... (omitted) ...
File "C:\ProgramData\Anaconda3\lib\site-packages\jupyter_client\launcher.py", line 138, in launch_kernel
proc = Popen(cmd, **kwargs)
File "C:\ProgramData\Anaconda3\lib\subprocess.py", line 775, in __init__
restore_signals, start_new_session)
File "C:\ProgramData\Anaconda3\lib\subprocess.py", line 1178, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
在 cmd 上执行以下操作:
[E 14:39:14.265 NotebookApp] Failed to run command:
['jupyter-cling-kernel', '-f', 'path\\to\\jupyter\\runtime\\kernel-..(random string here)..json', '--std=c++11']
故障排除 (1) : ... 似乎表明它无法找到jupyter-cling-kernel
. 但是我确实在文件夹中命名jupyter-cling-kernel
了.../Anaconda3/Scripts
文件,并且该文件夹也在我的 PATH 变量中。打开后发现是一个只有几行的python文件。看起来它对应于上面的命令。
#!C:\ProgramData\Anaconda3\python.exe
# EASY-INSTALL-DEV-SCRIPT: 'clingkernel==0.0.2','jupyter-cling-kernel'
__requires__ = 'clingkernel==0.0.2'
__import__('pkg_resources').require('clingkernel==0.0.2')
__file__ = 'C:\\Program Files\\cling_2019-11-28_arm64\\share\\cling\\Jupyter\\kernel\\scripts\\jupyter-cling-kernel'
with open(__file__) as f:
exec(compile(f.read(), __file__, 'exec'))
所以然后我修改了我的 kernel.json 文件,添加了绝对 python 路径(以便它知道用 python 运行它)和 jupyter-cling-kernel 的绝对路径。(原来只是"argv:["jupyter-cling-kernel", "-f", ...
)
{
"display_name": "C++11",
"argv": [
**"C:\\ProgramData\\Anaconda3\\python.exe",
"C:\\ProgramData\\Anaconda3\\Scripts\\jupyter-cling-kernel",**
"-f",
"{connection_file}",
"--std=c++11"
],
"language": "C++"
}
故障排除 (2) :... 这确实似乎是正确的方向,至少它正在运行……但现在另一个错误:
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\Scripts\jupyter-cling-kernel", line 7, in <modu
le>
exec(compile(f.read(), __file__, 'exec'))
File "C:\Program Files\cling_2019-11-28_arm64\share\cling\Jupyter\kernel\scrip
ts\jupyter-cling-kernel", line 3, in <module>
from clingkernel import main
File "c:\program files\cling_2019-11-28_arm64\share\cling\jupyter\kernel\cling
kernel.py", line 24, in <module>
from fcntl import fcntl, F_GETFL, F_SETFL
ModuleNotFoundError: No module named 'fcntl'
现在通过一些谷歌搜索,这个 fcntl 似乎不适用于 Windows。所以此时我想知道我是否下载了错误的二进制文件,或者我应该修改这个 clingkernel.py 文件还是我需要自己进行一些编译?
同样,如果你们中的任何人知道如何让 Jupyter 的 c++ 运行(在 Windows 上),如果您能分享您的经验,不胜感激。谢谢。