【问题标题】:How to properly import sage?如何正确导入鼠尾草?
【发布时间】:2014-08-29 11:36:40
【问题描述】:

编辑:我需要澄清一下,我想将 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.py 文件中。路径,无济于事。非常感谢任何帮助,这是一个非常重要的项目。我正在尝试将 Sage 导入 Django 项目。

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

【问题讨论】:

  • 嗯,如果第二个有效,那么第一个也应该有效(假设您也使用./sage -python 调用它);您是否尝试过将 django 导入移到 Sage 之下? (我不知道为什么会有帮助,但不妨试试。)
  • 是的,我刚试过,没用

标签: python django import module sage


【解决方案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]]

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

【讨论】:

  • 我没有运行在命令行中不起作用的那个,因为我需要它作为服务器工作。
  • 有没有办法在 sage shell 之外运行代码?人们之前已经设置了圣人服务器,所以显然有办法..
  • 我在这里谨慎行事,因为我不是这方面的专家。但我的理解是,即使在 Sage 笔记本服务器中,实际设置的进程也是分叉或某种 Sage 进程。一种方法可能是设置一个“fake sage python”脚本,该脚本实际上在内部调用sage -python。但我觉得你的问题比什么都重要。
  • 我没有使用sage notebook,需要吗?您能否举例说明我必须如何编辑代码?
  • 不,你不应该使用笔记本。
【解决方案2】:

您是否尝试过 from yor.app.sage.all import *,假设 sage 在您的 /app/ 目录中。

【讨论】:

    【解决方案3】:

    Sage 不是一个纯 Python 库。它需要并依赖于数百个共享库来完成它的工作。其中一些是针对 CPython API 编译的,并且取决于 Python 版本。这就是为什么您不能只使用您可能已经放置的任何 Python 解释器中的import sage.all

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

    【讨论】:

    • 感谢您的意见,我很想听听您认为需要什么才能使其正常工作。至于你的警告,服务器只会收到数学圣人代码,我不担心。
    • “我不担心” = 我已经有办法确保唯一将被接受的传入查询将来自注册帐户,并且在之前将被验证为可行的数学查询他们甚至被发送。
    • “将被验证”的真正意思是:“我的服务器将被黑客入侵”。您无法在图灵完备的语言中验证用户输入。
    • 啊。所以我认为你的建议是完全放弃我的项目,我会被黑吗?我实际上不应该存在数学服务器吗?他们真的不可能确保安全吗? wolframalpha 呢?
    • 只要您从不在Web服务器的进程空间中进行评估,它就可以变得安全!计算必须独立运行。
    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多