【问题标题】:import problem with twisted.web servertwisted.web 服务器的导入问题
【发布时间】:2010-05-14 22:54:22
【问题描述】:

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

C:\py\twisted\mysite.py,我有这个:

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,我有这个:

import mysite
reload(mysite)

resource = mysite.MySite()

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

&lt;type 'exceptions.ImportError'&gt;: No module named mysite

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

有谁知道这样做的正确方法吗?

【问题讨论】:

    标签: python twisted twisted.web


    【解决方案1】:

    简短回答:您需要将 PYTHONPATH 设置为包含 C:\py\twisted

    长答案...

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

    sys.path 主要由静态定义填充,包括 C:\Python26\Lib\ 和 PYTHONPATH 环境变量。但是,还有一件额外的事情值得了解。当你运行“python”时,当前工作目录被添加到sys.path的前面。当你运行“python C:\foo\bar\baz.py”时,C:\foo\bar\' is added to the front ofsys.path. But when you run "twistd ...", nothing useful is added tosys.path`。

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

    【讨论】:

    • 这是一个简单问题的绝佳答案。我想一直以来我只是不那么幸福地不知道PYTHONPATH
    • 我没有更改环境变量,而是设置了我的 .tac 文件,以便在创建应用程序实例之前将应用程序目录添加到 sys.path。这样设置测试副本没有本地配置更方便。
    • 但是你的源码位置本地配置!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多