Python:导入具有非py扩展名的lib

pvl*_*pvl 2 python sage

我必须导入被调用的库functions.sage.我该怎么做?我试过了:

__import__('functions.sage')
Run Code Online (Sandbox Code Playgroud)

还有这个:

import imp
imp.load_source('fun', 'functions.sage')
Run Code Online (Sandbox Code Playgroud)

编辑:

其实我想把sage lib导入sage.并且该lib包含特定于sage的代码.我厌倦了圣人解释的变种.两者都给了我'没有功能模块'或类似的东西.

DSM*_*DSM 6

这不是一个好主意.(这是正确的答案和评论之间的界限,但我想举例说明难以填写评论.)

.sage文件包含特定于Sage的语法和行为,或者不包含.如果没有,您可以简单地将其重命名为.py,或者创建符号链接等等.但如果确实如此,那么无论如何你都必须先将它预先解析才能在Python中运行.

例如,如果"functions.sage"文件写入:

x = 2/3
Run Code Online (Sandbox Code Playgroud)

如果你把文件加载到sage中,你会得到一个QQ元素:

sage: x
2/3
sage: parent(x)
Rational Field
Run Code Online (Sandbox Code Playgroud)

但是在Python 2中,你只需得到int(0).

它可能使用Sage风格的范围:

sage: [1,3,..,11]
[1, 3, 5, 7, 9, 11]
Run Code Online (Sandbox Code Playgroud)

或其他Sage功能:

sage: F.<x,y> = GF(2)[]
sage: F
Multivariate Polynomial Ring in x, y over Finite Field of size 2
Run Code Online (Sandbox Code Playgroud)

所有这些都由Sage preparser处理,而不是由Python处理.在幕后,它正在这样做:

sage: preparse("F.<x,y> = GF(2)[]") 
"F = GF(Integer(2))['x, y']; (x, y,) = F._first_ngens(2)"
Run Code Online (Sandbox Code Playgroud)

更新:显然我没有把问题弄清楚.

sage: import imp 
sage: !cat functions.sage 
x = 2/3
sage: functions = imp.new_module("functions")                         
sage: execfile("functions.sage", vars(functions))          
sage: dir(functions)
['__builtins__', '__doc__', '__name__', '__package__', 'x']
sage: functions.x
0
sage: type(functions.x)
<type 'int'>
Run Code Online (Sandbox Code Playgroud)

无论如何,您将不得不通过预分析器传递functions.sage.