sage中缺少python模块
我安装了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.py),并且都得到了关于“deepcopy”不是全局名称的相同错误 回复DSM:我在描述这个问题时有些草率,对此我很抱歉。我创建了一个新脚本“experience.py”,它的第一行是“import jbom”。执行experience.py中的函数可以识别jbom.py中的函数,但无法识别deepcopy。我尝试将jbom.py加载为“load jbom.py”“我可以像几个月前一样使用这些功能。那么,这仅仅是没有正确使用导入/加载等的分层脚本的问题吗sage中缺少python模块,python,module,sage,Python,Module,Sage,我安装了Sage 4.7.1,遇到了一个奇怪的问题。我的许多使用诸如deepcopy()和uniq()等函数的旧脚本不再将它们识别为全局名称。我已经能够通过逐个导入python模块来解决这个问题,但这相当繁琐。但是,当我启动命令行Sage界面时,我可以键入“list2=deepcopy(list1)”,而无需导入复制模块,这样就可以了。命令行Sage怎么可能识别全局名称“deepcopy”,但如果我加载使用相同名称的脚本,它却无法识别 对不起,我还不熟悉stackoverflow。我键入:“sa
解决:我在jbom.py的开头添加了“from sage.all import*”,现在我可以加载experience.py并执行调用jbom.py函数的函数,而不会出现任何问题。从导入/加载时的Sage文档中,我无法确切地说出我做错了什么。好的,下面是发生的情况: 您只能导入以
.py
结尾的文件(忽略.py[co]
),这些文件是标准的Python文件,并且没有准备好,因此1/3==int(0)
,而不是QQ(1)/QQ(3)
,并且您没有sage提供的。所有导入*
都可以使用
您可以加载和附加两个.py
和.sage
文件(以及.pyx
和.spyx
和.m
)。两者都可以访问Sage定义,但未准备.py
文件(因此y=17
使y
成为Pythonint
),而.Sage
文件是(因此y=17
使y
成为Sage整数)
因此,import jbom
在这里的工作方式与Python中的工作方式一样,您无法访问Sage在范围中所提供的内容<代码>加载
等很方便,但它们不能很好地扩展到更大的程序。过去我曾提议改进这一点,让.sage
脚本不再是二等公民,但在做什么和精力上还没有达成一致。同时,您最好的选择是从sage导入。所有的
您是如何安装sage的?从源代码编译?。。我记得,它有自己的python和所有东西。您可以强制使用您的常用python运行旧脚本,以隔离问题。“加载我的脚本”是什么意思?Sage 4.7.1应该有deepcopy
可用。我不能复制这个,尽管我手边最古老的Sage是4.7.2。当我加载jbom.py时,一个单行程序print deepcopy
对我有效(因为它是一个美化的execfile
,所以deepcopy
在范围内,即使它是一个.py
文件,所以它没有被准备),但在我导入它时就不行了(因为所述Python模块不能神奇地访问Sage名称,并且需要Sage.all导入*
)。你能从jbom.py
文件中删除所有内容吗?除了重现问题并粘贴它所需的内容之外?谢谢!这也可能解释了我以前看到的一些关于使用除法的奇怪行为,结果与我预期的不同。