首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确导入sage?

如何正确导入sage?
EN

Stack Overflow用户
提问于 2014-07-09 00:17:56
回答 3查看 8K关注 0票数 5

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

我必须从源代码编译sage吗?

我一直在尝试为我的python脚本使用sage。

代码如下所示:

代码语言:javascript
复制
#!/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的模块

我从来没有遇到过跑步的问题

代码语言:javascript
复制
#!/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身份运行它。

EN

回答 3

Stack Overflow用户

发布于 2014-07-09 00:47:09

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

代码语言:javascript
复制
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

为了使示例更明确,我现在有两个文件。

代码语言:javascript
复制
$ 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进程运行。

代码语言:javascript
复制
$ 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]]

我相信有一种更优雅的方法可以做到这一点,但现在我认为这对您来说应该足够了。顺便说一句,确保你不会让控制器访问任何旧文件--我不是安全专家。

票数 2
EN

Stack Overflow用户

发布于 2014-07-09 00:23:19

你有没有尝试过从yor.app.sage.all导入*,假设sage在你的/app/目录中。

票数 0
EN

Stack Overflow用户

发布于 2014-07-09 22:39:02

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

更重要的是,停止你现在正在做的事情,考虑一下安全方面的问题。在web服务器进程中评估任意代码总是以失败告终。你认为你可以净化用户输入吗?不是的!你觉得没人会把这台服务器暴露给互联网吗?不是的!这将会发生,而且会有很糟糕的结局。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24636822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档