我必须导入一个名为functions.sage
的库。我该怎么做?我想:Python:导入一个带有非py扩展名的库
__import__('functions.sage')
而且这样的:
import imp
imp.load_source('fun', 'functions.sage')
编辑:
其实我想导入sage lib放到圣人。该库包含特定于sage的代码。我厌倦了圣人解释的变种。并且都给了我'没有功能模块'或类似的东西。
我必须导入一个名为functions.sage
的库。我该怎么做?我想:Python:导入一个带有非py扩展名的库
__import__('functions.sage')
而且这样的:
import imp
imp.load_source('fun', 'functions.sage')
编辑:
其实我想导入sage lib放到圣人。该库包含特定于sage的代码。我厌倦了圣人解释的变种。并且都给了我'没有功能模块'或类似的东西。
摘要:为了在sage
从.sage
LIB加载功能 - 一个必须首先解析.sage
文件 - 它将使一个.py
文件 - 然后import
的.py
文件。
例子:
import os
os.system(os.curdir + os.sep + 'functions.sage')
from functions import states
这样的.sage
代码鼠尾草得到执行 - 而不是蟒蛇 - 因为这将是如果将使用斯文Marnach的回答(这是绝对正确的 - 但是我说的问题一个错误的方式 - 我忘了提及代码的源代码必须在python中执行
如果我真的需要做到这一点,我可能会用
functions = imp.new_module("functions")
execfile("functions.sage", vars(functions))
走这并不完全等同于进口,因为该模块将不会在sys.modules
去了,也不会如果已经加载,那么在那里查找,但如果你需要这些步骤,它们很容易添加。
嗯 - 没有一个Python代码:[sage](http: //en.wikipedia.org/wiki/Sagemath)代码 - 是Python的超集。但它的作品!非常感谢! – pvl 2012-03-23 13:46:03
这不是一个好主意。 (这是正确的答案和注释之间的边界,但我想给辛苦的例子来塞进了评语)
的.sage文件或者包含鼠尾草特定的语法和行为或者事实并非如此。如果没有,你可以简单地将它重命名为.py,或者创建一个符号链接,或者其他任何东西。但是如果这样做的话,那么在它用Python工作之前,你将不得不先进行预处理。
例如,如果 “functions.sage” 文件写道:
x = 2/3
,如果你将文件加载到圣人,你QQ的元素:
sage: x
2/3
sage: parent(x)
Rational Field
但在Python 2 ,你只需要int(0)。
它可能会使用鼠尾草风格的范围:
sage: [1,3,..,11]
[1, 3, 5, 7, 9, 11]
或其他贤者的特点:
sage: F.<x,y> = GF(2)[]
sage: F
Multivariate Polynomial Ring in x, y over Finite Field of size 2
和所有的这些都是由圣人预解析器处理,不Python。在幕后,它是这样做的:
sage: preparse("F.<x,y> = GF(2)[]")
"F = GF(Integer(2))['x, y']; (x, y,) = F._first_ngens(2)"
更新:显然我没有让问题清楚。
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'>
无论如何,你将不得不通过preparser传递functions.sage。
+1同意。如果它是一个圣人文件,请使用圣人阅读它。如果它是一个Python文件,给它一个'.py'结尾。 – katrielalex 2012-03-23 13:58:45
@DSM:确实应该准备文件 - 如果它有一个特定于鼠尾草的代码。但我实际上想要将一个圣人的lib导入圣人解释器。谢谢你的答案。 – pvl 2012-03-23 14:06:05
@ user1207511:但execfile绕过Sage preparser。我会更新来解释。 – DSM 2012-03-23 14:13:26
你看到了什么错误?我刚刚试验了你的第二个版本,成功 – 2012-03-23 13:25:31
函数''真的包含纯Python代码?如果是的话,为什么它没有'.py'的扩展名? – 2012-03-23 13:29:16