【问题标题】:python modules missing in sagesage 中缺少 python 模块
【发布时间】:2012-07-22 18:18:44
【问题描述】:

我安装了 Sage 4.7.1,但遇到了一个奇怪的问题。我的许多使用 deepcopy() 和 uniq() 等函数的旧脚本不再将它们识别为全局名称。我已经能够通过一个一个地导入 python 模块来解决这个问题,但这很乏味。但是当我启动命令行 Sage 界面时,我可以在不导入复制模块的情况下键入“list2=deepcopy(list1)”,而且效果很好。命令行 Sage 怎么可能识别全局名称“deepcopy”,但如果我加载使用相同名称的脚本,它就无法识别它?

哎呀,对不起,还不熟悉stackoverflow。我输入:“sage_4.7.1/sage”来启动命令行界面;然后,我输入“load jbom.py”来加载我在python脚本中定义的所有函数。当我使用脚本中的一个函数时,它运行了几秒钟(复杂函数),然后到达我使用 Sage 通常作为全局名称(deepcopy、uniq 等)的一些函数的位置,但由于某种原因,我加载的脚本不知道函数是什么. 重申一下,我的脚本 jbom.py 曾经在我上次从事这项特定研究时工作,正如我所描述的那样。

如果我使用 'load jbom.py' 或 'import jbom' 也没有区别。两种方法都获得了我在脚本中定义的函数(但在第二种情况下我必须使用 jbom),并且都得到关于“deepcopy”不是全局名称的相同错误。

回复 DSM:我一直草率地描述问题,对此我深表歉意。我创建了一个新脚本“experiment.py”,它的第一行是“import jbom”。执行experiment.py 中的函数可以识别jbom.py 中的函数,但无法识别deepcopy。我尝试将 jbom.py 加载为“加载 jbom.py”,我可以像几个月前一样使用这些功能。那么,这只是一个分层脚本的问题,没有正确使用导入/加载等吗?

已解决:我在 jbom.py 的开头添加了“from sage.all import *”,现在我可以加载 Experiment.py 并执行调用 jbom.py 函数的函数而没有任何问题。从关于导入/加载的 Sage 文档中,我真的无法准确说出我做错了什么。

【问题讨论】:

  • 你是如何安装 sage 的?从源代码编译?..我记得,它有自己的python和一切。您可以强制使用库存 python 运行旧脚本,以隔离问题。
  • “加载我的脚本”是什么意思? Sage 4.7.1 应该有deepcopy 可用。
  • 我无法重现这个,尽管我手头最古老的 Sage 是 4.7.2。当我 load jbom.py 时,一个单行程序 print deepcopy 对我有用(因为它是一个美化的 execfile,所以 deepcopy 在范围内,即使它没有被预解析,因为它是一个 .py 文件),但不是当我导入它时(因为说 Python 模块不会神奇地访问 Sage 名称,并且需要 from sage.all import *)。您能否从您的 jbom.py 文件中删除所有内容,除了重现问题所需的内容并粘贴?

标签: python module sage


【解决方案1】:

好的,这就是发生的事情:

你只能import.py结尾的文件(忽略.py[co])这些是标准的Python文件,没有预解析,所以1/3 == int(0),不是QQ(1)/QQ(3),你没有等价的一个from sage.all import * 来玩。

您可以同时使用loadattach .py.sage 文件(以及.pyx.spyx.m)。两者都可以访问 Sage 定义,但 .py 文件未预解析(因此 y=17 使 y 成为 Python int)而 .sage 文件是(因此 y=17 使 y 成为 Sage @ 987654341@).

所以import jbom 在这里的工作方式就像它在 Python 中一样,并且您无法访问 Sage 已放入范围内的内容。 load 等很方便,但它们不能很好地扩展到更大的程序。我过去曾提议改进这一点,并使.sage 脚本减少二等公民,但尚未就该做什么和做这件事的精力达成一致。与此同时,您最好的选择是从sage.all 导入。

【讨论】:

  • 谢谢!这也可能解释了我以前看到的关于使用除法的一些奇怪行为,结果与我的预期不同。
猜你喜欢
  • 2014-12-27
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多