编辑:我需要澄清一下,我想将sage作为一个库导入,以便在sage shell之外的Python脚本中使用,因为我需要它在Django上作为服务器运行。
我必须从源代码编译sage吗?
我一直在尝试为我的python脚本使用sage。
代码如下所示:
#!/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.path中,但都没有用。任何帮助都是非常感谢的,这是一个非常重要的项目。我正在尝试将Sage导入到Django项目中。
编辑:我没有使用./sage -python运行第二个程序,而是在我的Django本地主机服务器上以views.py身份运行它。
发布于 2014-07-09 00:47:09
要使用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]]我相信有一种更优雅的方法可以做到这一点,但现在我认为这对您来说应该足够了。顺便说一句,确保你不会让控制器访问任何旧文件--我不是安全专家。
发布于 2014-07-09 00:23:19
你有没有尝试过从yor.app.sage.all导入*,假设sage在你的/app/目录中。
发布于 2014-07-09 22:39:02
Sage不是一个纯粹的Python库。它需要并依赖于数百个共享库来完成它的工作。其中一些是针对Python编译的,并且依赖于CPython版本。这就是为什么你不能仅仅从你已经准备好的任何Python解释器中使用import sage.all。
更重要的是,停止你现在正在做的事情,考虑一下安全方面的问题。在web服务器进程中评估任意代码总是以失败告终。你认为你可以净化用户输入吗?不是的!你觉得没人会把这台服务器暴露给互联网吗?不是的!这将会发生,而且会有很糟糕的结局。
https://stackoverflow.com/questions/24636822
复制相似问题