- 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/
给定一个从 R 到 R^n 的函数,我想通过预组合定义一个新函数,例如如下 alpha(x) = [e^x,e^(-x)] beta(x) = alpha(-x+2) 但是尝试以这种方式这样做会引发错
我正在尝试求解类型方程 x = Ax 其中 x 是向量,A 是矩阵,使用 sagemath。 为此,我写了 A = matrix(QQ, [[0, 4, 4], [
如何使用 Sagemath 求解联立方程: x^2 +y^2 +6z^2 = 3 6x^2 +6y^2 +z^2 = 2 x +y+z = 0 最佳答案 使用户8408080的答案more expli
在 SageMath(版本 4.7)中,我在笔记本中执行此操作: var("x y") dens(x, y) = 2 if y 0 如果您只关心函数采用的值(例如,您正在绘制它),则可以简单地使用
关于the SageMath tutorial tour page的第二段说 If you are viewing the tutorial in the Sage notebook, press s
是否可以在 python session 中导入 sagemath 函数? 从用户的角度来看,我希望做的是: >>> import sage >>> sage.kronecker_symbol(3,5
我有线性方程组,但是我不希望答案是一个数字 - 我希望它是参数。 ax+by=米CX+DY=n 我没有任何常数的值,所以对于上面的方程,我只想要答案 x = (md-nb)/(ad-bc) 和 y =
我有线性方程组,但是我不希望答案是一个数字 - 我希望它是参数。 ax+by=米CX+DY=n 我没有任何常数的值,所以对于上面的方程,我只想要答案 x = (md-nb)/(ad-bc) 和 y =
所以我想用一个参数( s )在一个变量( a )中打印多项式,比如说 a·s^3 − s^2 - a^2·s − a + 1 . Sage 总是以递减的程度显示它,我想得到类似的东西 1 - a -
我想知道为什么这两个“程序”产生不同的输出 f(x)=x^2 f(90).mod(7) 和 def f(x): return(x^2) f(90).mo
我一生中从未使用过 SageMath,我依赖互联网上的速成类(class)了解如何从 SageMath 中获得我想要的东西(在有限域上绘制椭圆曲线)。 我正在使用 this code , 粘贴在下面:
我正在尝试使用 Sagemath 积分分段函数,但发现这是不可能的。我的原始代码如下,但由于描述的意外评估而导致错误 here . def f(x): if(x 3/2*x^2 + 3*x]
我需要帮助在我的 ubuntu 16 笔记本电脑上安装 sagemath。 我这样做了: cat /etc/os-release cd ~ wget http://mirrors.mit.edu/sa
我一直在尝试开发一种代码,其中用户使用x和y输入函数,然后将其读入积分。我尝试使用 eval 和 sage_eval 但都不起作用。 这是我的尝试: y = var('y') f(y) = eval(
是否可以从 VirtualBox 上运行的 SageMath/Jupyter 访问存储在硬盘中的文件? 最佳答案 刚刚找到了一个解决方案(非常明显):在 VirtualBox 中定义一个共享文件夹,并
我是 Python 和 SageMath 的新用户。 我有两个非线性方程: f(x)==h(x) g(x)+S_{i,j,k}(x) == 0 我知道我可以解决 1. 在数值上,做: x = var(
我想将 xlrd、xlwt、xlutils 与 sagemath 结合使用。我已将它们安装在我系统的 Python(2.7.3) 中,但 sage 环境无法识别它们。当我尝试使用 sage 导入时出现
我目前正在使用 sagemath 托管的在线工作簿制作一些图表。 这是我尝试生成图表的一些代码示例: myplot = list_plot(zip(range(20), range(20)), col
我正在使用 Sagemath/Cocalc(随意在您的 browser 中运行它,无需注册,无需任何操作)。据我所知,Sagemath 只是 Python 之上的一个库,而 Sagemath 笔记本隐
我可以将 Python 内核与 Jupyter 一起使用。我正在寻找一种在 Jupyter 中使用 sagemath 的方法。我看不到安装它的方法。怎么做? 最佳答案 你在倒退; Sage 在其中包含
我是一名优秀的程序员,十分优秀!