我必須導入一個名爲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