【发布时间】:2020-03-24 20:21:53
【问题描述】:
背景:我正在尝试安装 cling c++ 解释器here。我在 Windows 上,并且 Anaconda 运行良好,Jupyter notebook 也可以与现有的 Python 内核一起正常工作。安装过程表面上很顺利,但是一旦我尝试在已安装的内核上打开 Jupyter 笔记本,就会出现内核错误。
(最后我希望能够将 c++ 与 Jupyter notebook 一起使用,所以如果有人有任何成功,请您分享您的经验。关于这一点,虽然 xeus-cling 不能用于 Windows,但正如许多人所说,这种粘着似乎是一个单独的东西)
安装:这是我所做的:
- 从以下位置下载二进制文件 cling_2019-11-28_arm64.tar.bz2 (这对 Windows 是否正确?) https://root.cern.ch/download/cling/
- 解压并放在 Program Files 文件夹中
- 按照here 中的说明,将
C:\Program Files\cling_2019-11-28_arm64\bin添加到PATH 变量中 - 激活基础 Anaconda 环境
cd .../share/cling/Jupyter/kernelpip 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。但我确实在.../Anaconda3/Scripts 文件夹中有名为jupyter-cling-kernel 的文件,并且该文件夹也在我的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 上),如果您能分享您的经验,不胜感激。谢谢。
【问题讨论】:
-
如果你不在 arm64 上运行 windows,你确实有错误的二进制文件。您可能正在寻找 x86 或 amd64
-
谢谢,也许我把 arm64 和 amd64 混为一谈,以为它适用于 Windows,所以看起来唯一的选择就是自己构建。
-
请注意:构建需要几个小时,大约 30-40GB 磁盘空间,并且在 2017 年中期的 github 上的一个问题中,有人提到由于 python 包装器,jupyter 内核无法在 Windows 上运行.如果我是你,我会尝试新的 linux 子系统或 VM :)
-
幸运的是,我看到了你的注释,我的 C 上真的只有 40 GB。在 linux VM 上,这是否意味着我需要为 Linux 重新编译所有库。 (也意味着额外的编译时间和双倍的磁盘空间?)
-
不知道你的具体情况,我只能说是,除非有可用的二进制文件。