首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >twisted.web服务器导入问题

twisted.web服务器导入问题
EN

Stack Overflow用户
提问于 2010-05-15 06:54:23
回答 1查看 2.6K关注 0票数 1

我刚刚开始使用twisted.web,在将Python模块导入.rpy脚本时遇到了问题。

C:\py\twisted\mysite.py中,我有:

代码语言:javascript
复制
from twisted.web.resource import Resource
from twisted.web import server

class MySite(Resource):
    def render_GET(self, request):
        request.write("<!DOCTYPE html>")
        request.write("<html><head>")
        request.write("<title>Twisted Driven Site</title>")
        request.write("</head><body>")
        request.write("<h1>Twisted Driven Website</h1>")
        request.write("<p>Prepath: <pre>{0}</pre></p>".format(request.prepath))
        request.write("</body></html>")
        request.finish()
        return server.NOT_DONE_YET

C:\py\twisted\index.rpy中,我是这样的:

代码语言:javascript
复制
import mysite
reload(mysite)

resource = mysite.MySite()

我在命令提示符下运行twistd -n web --port 8888 --path C:\py\twisted,服务器成功启动。但是当我请求localhost:8888时,我得到了一个源自ImportError的(巨大的)堆栈跟踪:

<type 'exceptions.ImportError'>: No module named mysite

我可以从解释器导入模块,如果只是将index.rpy作为python脚本执行,就不会得到导入错误。关于这个主题的文档有点模糊,它只是说“然而,在Python模块中定义资源子类通常是一个更好的想法。为了使模块中的更改可见,您必须重新启动Python进程,或者重新加载模块:”(来自here)。

有人知道做这件事的正确方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-15 09:41:43

简而言之:您需要将PYTHONPATH设置为包含C:\py\twisted

长长的答案..。

rpy脚本基本上只是一些Python代码,就像任何其他Python代码一样。因此,rpy脚本中的导入操作与任何其他Python代码中的导入操作相同。对于最常见的情况,这意味着依次访问sys.path中的目录,如果找到与导入的名称匹配的.py文件,则使用该文件来定义模块。

sys.path主要由静态定义和PYTHONPATH环境变量填充,其中包括C:\Python26LIB\等内容。然而,还有一件事值得我们去了解。当你运行"python“时,当前的工作目录会被添加到sys.path的前面。当你运行"python C:\foo\bar\baz.py“时,python

最后一个行为可能解释了为什么如果您直接运行rpy脚本,或者如果您运行python并尝试交互地导入模块,但在使用twistd时失败,那么您的测试可以正常工作。当从启动PYTHONPATH的服务器运行rpy脚本时,将C:\py\twisted添加到twistd环境变量应该会使模块可导入。

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

https://stackoverflow.com/questions/2838145

复制
相关文章

相似问题

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