- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试在 Anaconda 3 中使用 Sage,但看起来这些库并未导入。
我首先创建了一个新环境“ipykernel_py2”,然后按照 here 中的说明安装了 Python 2。 .有了这个,我可以在 Anaconda 3 中启动并运行 Python 3 和 Python 3。
然后我转到创建的内核文件夹(C:\Users\YOUR_USERNAME\AppData\Local\Continuum\anaconda3\envs\ipykernel_py2\share\jupyter\kernels)并粘贴 Sage 的内核(取自 C:\Program Files\SageMath 8.2\runtime\opt\sagemath-8.2\local\share\jupyter\kernels)。这允许在 Jupyter 中创建新的 SageMath 文件,但内核已死。为了激活内核,我使用了 Anaconda Prompt 并输入:
activate ipykernel_py2
python -m ipykernel install --user --name sagemath --display-name "SageMath 8.2"
现在内核已激活,我可以创建和运行 Sage 文件。但是,图书馆仍然无法正常工作。该文件似乎像普通的 Python 2 文件一样运行。
有人知道怎么解决吗?我需要创建一个单独的环境吗?
最佳答案
Sage for Windows 在称为 Cygwin 的 UNIX 仿真环境下运行。查看 sagemath/kernel.json
它包含:
{"display_name": "SageMath 8.2", "argv": ["/opt/sagemath-8.2/local/bin/sage", "--python", "-m", "sage.repl.ipython_kernel", "-f", "{connection_file}"]}
您可以在此处看到它具有指向 sage
可执行文件的 UNIX 样式路径。该路径只对运行在Sage的Cygwin环境下的其他程序有意义,对原生Windows程序无意义。简单地将它转换为等效的 Windows 路径也不起作用,因为 bin/sage
实际上是一个 shell 脚本。至少你需要提供一个 Windows 到 Cygwin 附带的 bash
的路径,并将 UNIX 路径传递给 sage
可执行文件(与上面的相同)。如果没有登录 shell,也不会设置所需的大多数环境变量,因此您可能需要 bash -l
。
所以,像这样:
{"display_name": "SageMath 8.2", "argv": ["C:\\Program Files\\SageMath 8.2\\runtime\\bin\\bash.exe", "-l", "/opt/sagemath-8.2/local/bin/sage", "--python", "-m", "sage.repl.ipython_kernel", "-f", "{connection_file}"]}
可能 有效。我不确定的一件事是 {connection_file}
参数是否也会得到正确处理。我还没有测试过。
更新:确实,以上部分有效,但存在一些问题: {connection_file}
参数作为文件的绝对 Windows 路径传递。虽然 Cygwin 通常可以透明地从 Windows 路径转换为相应的 UNIX 路径,但有一个 known issue Cygwin 上的 Python 的 os.path
模块不能很好地处理 Windows 风格的路径,这会导致问题。
我遇到的另一个主要问题是 IPKernelApp
,驱动通用 Jupyter 内核的类,有一个线程轮询以查看内核的父进程(在本例中为笔记本服务器)是否已经退出,因此如果父进程关闭,它可以适本地关闭。这就是当您终止笔记本服务器时内核知道自动关闭的方式。
完成此操作的方式因平台而异——Windows 与类 UNIX。由于 Sage 的内核运行在 Cygwin 中,它选择了类 UNIX 的轮询器。但是,如果笔记本服务器恰好是 native Windows 进程,这是错误的,例如在 Windows native Jupyter 中运行 Sage 内核时的情况。值得注意的是,parent poller for Windows 可以在 Cygwin 上工作得一样好,因为它通过 ctypes
访问 Windows API。因此,可以通过为 IPKernelApp
提供一个包装器来解决这个问题,该包装器强制使用 ParentPollerWindows
。
一个可能的解决方案看起来像这样:从 SageMath Shell 中执行:
$ cd "$SAGE_LOCAL"
$ mkdir -p ./share/jupyter/kernels/sagemath
$ cd ./share/jupyter/kernels/sagemath
$ cat <<_EOF_ > kernel-wrapper.sh
#!/bin/sh
here="$(dirname "$0")"
connection_file="$(cygpath -u -a "$1")"
exec /opt/sagemath-8.2/local/bin/sage --python "${here}/kernel-wrapper.py" -f "${connection_file}"
_EOF_
$ cat <<_EOF_ > kernel-wrapper.py
from ipykernel.kernelapp import IPKernelApp as OrigIPKernelApp
from ipykernel.parentpoller import ParentPollerWindows
from sage.repl.ipython_kernel.kernel import SageKernel
class IPKernelApp(OrigIPKernelApp):
"""
Although this kernel runs under Cygwin, its parent is a native Windows
process, so we force use of the ParentPollerWindows.
"""
def init_poller(self):
if self.interrupt or self.parent_handle:
self.poller = ParentPollerWindows(self.interrupt,
self.parent_handle)
IPKernelApp.launch_instance(kernel_class=SageKernel)
_EOF_
现在编辑 kernel.json
(在 share\jupyter\kernels\sagemath
下的现有位置)阅读:
{"display_name": "SageMath 8.2", "argv": ["C:\\Program Files\\SageMath 8.2\\runtime\\bin\\bash.exe", "-l", "/opt/sagemath-8.2/local/share/jupyter/kernels/sagemath/kernel-wrapper.sh", "{connection_file}"]}
这会运行 kernel-wrapper.sh
,而 kernel-wrapper.sh
又会运行 kernel-wrapper.py
。 (我可以做一些简化来完全摆脱对 kernel-wrapper.sh
的需要,但这在包含 PyCygwin 的 SageMath 8.3 中会更容易。)
确保将每个“8.2”更改为适合您的 Sage 安装的“X.Y”版本。
更新:根据用户的反馈进行了一些更新,但我还没有测试这些更改,所以请确保不要盲目地复制/粘贴我的每个文件/目录路径说明存在并且看起来正确。
如您所见,这不是微不足道的,而且从来都不是设计使然的。但这是可以完成的。内核本身启动并运行后,只需通过 TCP/IP 套接字与其通信即可,因此之后不会涉及太多魔法。我相信可以在 Jupyter 端和 Sage 端进行一些小的改进,这将在未来促进此类事情......
关于python - 如何在 Anaconda 中安装 SageMath 内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51300460/
我听说最好不要从您系统的 Perl 版本所在的 CPAN 安装模块。我知道如何使用命令行安装模块,我只是想知道是否有办法将 CPAN 与系统核心 Perl 分开。 我应该: 下载源代码并专门为这些模块
我听说最好不要从系统的 Perl 版本所在的 CPAN 安装模块。我知道如何使用命令行安装模块,我只是想知道是否有办法将 CPAN 与系统的核心 Perl 分开。 我应该: 下载源代码并专门为这些模块
单独安装 electron 与通过 electron-builder 安装有什么区别?我正在使用 React 构建一个 Electron 应用程序,并且已经找到了一些教程。它们安装 Electron
两者安装有什么区别?我按照安装页面上的说明在全局范围内安装了 webpack,然后我转到了入门指南,据说在那里可以在本地安装 webpack-cli。 CLI = Command Line Inter
我在 OS X Yosemite 上用 PHP 安装了默认的 Apache 服务器,安装了 pear,用 brew 安装了 Solr (brew install solr),现在我正在尝试使用 PEC
我解压并编译了 Ruby 2.1 并安装了几个支持工具。 但是当我安装了 libssl-dev 时,OpenSSL 不会安装。 我在支持 openssl 时遇到这个错误: make: *** No r
我在 android studio 2.3.1 和 gradle 3.2 中设计了 2 到 3 个应用程序。当我从它运行应用程序到任何设备或模拟器时,一切都工作正常。但是当我从构建文件夹中获取该 ap
我注意到我正在读一本书提到通过 apt-get 安装 numpy 和 opencv apt-get install python-numpy python-opencv 但我可以通过以下方式在 pip
我正在尝试在 Windows 8.1 上安装 ansicon。我提取了文件并达到了我需要调用 ansicon -i 的级别。当我在 cmd 中输入此内容并运行 python 脚本时效果很好,但是当我通
我有 linux MINT 17.3 Kernel 4.4.0-81 所有更新可用。 (由于不同的原因,我无法迁移到更新版本的 ubuntu/mint) 我已经通过 PPA 安装了 FFMPEG(不是
尝试在本地运行我的应用程序时出现错误: 我只在 chrome 浏览器中收到此错误。我尝试过不同的东西,但我不确定为什么它是 Chrome 特定的。 最佳答案 我怀疑这不是 Firebase 问题,而是
这是我第一次开发 AngularJS 应用程序并使用脚手架工具 Yeoman ( http://yeoman.io/ )。我想对我的一些图标使用 fontawesome ( http://fortaw
我知道您通常“应该”$ pip install 如果包没有 brew ,但如果有一个你想安装的 python 包,你可以使用 $ pip install或 $ brew install为了?例如,通过
我正在尝试通过 RVM 安装 Ruby 1.9.3。然而,当谈到安装 RubyGems 时,我得到了这个: curl: (22) The requested URL returned error: 4
我是真正提出问题的新手,但你去吧。 我一直在尝试按照安装指南添加 dnsname: https://github.com/containers/dnsname https://github.com/c
Studio更新至0.4.0 建筑产量为“需要1.8版Gradle”;将设置设置为1.8 bin目录; 建立 “要求1.9级”;将设置设置为1.9 bin; 建立 “要求1.8级” 啊。不知道该怎么做
我刚刚注意到 kernel.org 因维护而停机。是否有使用不同镜子的不同公式?或者我可以向 Homebrew 软件添加不同的来源(如 bundler ?)? 谢谢你的帮助! 最佳答案 快速解决方法:
当我运行时: peardev install phpunit/PHPUnit 我得到以下信息: No releases available for package "pear.phpunit.de/P
服务器操作系统为Fedora 24. 64bit。 我想安装 Git 2.6.6。 所以下载源码并安装。 此服务器离线。所以我不使用“yum”。 ./configure --prefix=/usr/l
我正在尝试在我自己的服务器(操作系统:Linux Ubuntu Server 12.04)上安装 OpenEdX,但我遇到了同样的错误。谁能帮帮我? TASK: [ insights | insta
我是一名优秀的程序员,十分优秀!