如何正确导入圣人?

时间:2014-07-08 16:17:56

标签: python django import module sage

编辑:我需要澄清一下,我想将sage导入为在sage shell的外部Python脚本中使用的库,因为我需要它在Django上作为服务器运行。

我是否必须从源代码编译sage?

我一直在尝试将sage用于我的python脚本。

代码如下所示:

#!/usr/bin/env sage -python
from django.shortcuts import render
from django.http import HttpResponse
import sys
from django.http import HttpRequest
from django.template import RequestContext, loaders
from sage.all import *

def index(request):

    querystring = request.GET.get('querystring')

    return HttpResponse(querystring)
# Create your views here.

但是我收到一个错误:没有名为sage.all的模块

我没有遇到麻烦

#!/usr/bin/env sage -python
import sys
from sage.all import *
var('x')
print integrate(x,x)
print latex(integrate(sin(x),x))

从命令行./sage -python /path/to/script.py

所以我不明白为什么我不能导入圣人...

目录“sage”在python路径中,它就在我试图使用它的views.py文件旁边,我已经尝试将它放在各个不同的地方,或者将它附加到sys。路径,无济于事。非常感谢任何帮助,这是一个非常重要的项目。我正在尝试将Sage导入Django项目。

编辑:我没有使用./sage -python运行第二个,而是在Django localhost服务器上将其作为views.py运行。

3 个答案:

答案 0 :(得分:1)

要使用from sage.all import *,您需要使用Sage shell,或至少定义正确的内容。要确保拥有它们,请尝试添加

from os import environ
print environ

到您的脚本。你应该得到PYTHONPATH和一堆Sage特有的东西。所以,如果你没有像./sage -python一样运行它,就像你的第二个例子一样(我只是说这是关于你的不可能),那我就不知道了。你会认为shebang系列已经做到了这一点,但也许那些不参与论证,似乎是behavior on that is pretty variable by OS

编辑:经过一些讨论elsewhere后,我认为问题在于您尝试使用Python运行shell脚本。 This SO question is exactly what the doctor ordered

为了使示例显式化,我现在有两个文件。

$ cat views
#!/usr/bin/env sage -python

from sage.all import *
print permutations(5)

$ cat views.py
import subprocess
subprocess.call(['./views'])

现在我可以将它作为一个普通的(没有Sage shell)Python进程运行。

$ python views.py 
./views:4: DeprecationWarning: Use the Permutations object instead.
See http://trac.sagemath.org/14772 for details.
  print permutations(5)
[[1, 2, 3, 4, 5], [1, 2, 3, 5, 4], [1, 2, 4, 3, 5], [1, 2, 4, 5, 3], [1, 2, 5, 3, 4], [1, 2, 5, 4, 3], [1, 3, 2, 4, 5], [1, 3, 2, 5, 4], [1, 3, 4, 2, 5], [1, 3, 4, 5, 2], [1, 3, 5, 2, 4], [1, 3, 5, 4, 2], [1, 4, 2, 3, 5], [1, 4, 2, 5, 3], [1, 4, 3, 2, 5], [1, 4, 3, 5, 2], [1, 4, 5, 2, 3], ... , [5, 4, 3, 2, 1]]

我确信有更优雅的方法可以做到这一点,但是现在我觉得这对你来说已经足够了。请确保您不允许控制器访问任何旧文件,顺便说一下 - 我不是安全专家。

答案 1 :(得分:0)

您是否尝试过your.app.sage.all import *,假设sage位于/ app /目录中。

答案 2 :(得分:-1)

Sage不是纯粹的Python库。它需要并依赖数百个共享库来完成其工作。其中一些是根据CPython API编译的,并且依赖于Python版本。这就是为什么你不能从任何你可能已经存在的Python解释器中import sage.all

更重要的是,立即停止您正在做的事情并考虑安全隐患。评估Web服务器进程中的任意代码总是流下眼泪。您认为可以清理用户输入吗?没有!您认为没有人会将此服务器暴露给互联网吗?没有!它将会发生,它将以糟糕的方式结束。