sage中缺少python模块

sage中缺少python模块,python,module,sage,Python,Module,Sage,我安装了Sage 4.7.1,遇到了一个奇怪的问题。我的许多使用诸如deepcopy()和uniq()等函数的旧脚本不再将它们识别为全局名称。我已经能够通过逐个导入python模块来解决这个问题,但这相当繁琐。但是,当我启动命令行Sage界面时,我可以键入“list2=deepcopy(list1)”,而无需导入复制模块,这样就可以了。命令行Sage怎么可能识别全局名称“deepcopy”,但如果我加载使用相同名称的脚本,它却无法识别 对不起,我还不熟悉stackoverflow。我键入:“sa

我安装了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”“我可以像几个月前一样使用这些功能。那么,这仅仅是没有正确使用导入/加载等的分层脚本的问题吗


解决:我在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
成为Python
int
),而
.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
文件中删除所有内容吗?除了重现问题并粘贴它所需的内容之外?谢谢!这也可能解释了我以前看到的一些关于使用除法的奇怪行为,结果与我预期的不同。