【问题标题】:twistd -n web not working with Klein and Python3twistd -n web 不适用于 Klein 和 Python3
【发布时间】:2018-11-26 01:00:34
【问题描述】:

我正在尝试使用 Klein 运行twistd web,但遇到了很多问题。 即使尝试从示例中运行它-得到相同的结果。 Source

from klein import Klein
app = Klein()

@app.route('/')
def hello(request):
    return "Hello, world!"

resource = app.resource

然后运行它(在本例中,上面的文件保存为twistdPlugin.py:

$ twistd -n web --class=twistdPlugin.resource

错误: sh-3.2# twistd -n web --class=twistdPlugin.resource Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.6/bin/twistd", line 11, in <module> load_entry_point('Twisted==17.9.0', 'console_scripts', 'twistd')() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/twisted/scripts/twistd.py", line 29, in run app.run(runApp, ServerOptions) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/twisted/application/app.py", line 657, in run config.parseOptions() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/twisted/application/app.py", line 624, in parseOptions usage.Options.parseOptions(self, options) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/twisted/python/usage.py", line 267, in parseOptions self.subOptions.parseOptions(rest) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/twisted/python/usage.py", line 255, in parseOptions self._dispatch[optMangled](optMangled, arg) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/twisted/python/usage.py", line 411, in <lambda> fn = lambda name, value, m=method: m(value) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/twisted/web/tap.py", line 121, in opt_class classObj = reflect.namedClass(className) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/twisted/python/reflect.py", line 173, in namedObject module = namedModule('.'.join(classSplit[:-1])) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/twisted/python/reflect.py", line 159, in namedModule topLevel = __import__(name) ModuleNotFoundError: No module named 'twistdPlugin'

这个怎么办?

【问题讨论】:

    标签: python-3.x twisted klein-mvc


    【解决方案1】:

    您可以通过 2 种方法中的 1 种方法来解决此问题。第一种方法是将包含源代码的目录添加到PYTHONPATH 环境变量中。这是最简单的方法。

    PYTHONPATH=$(pwd) twistd -n web --class twistdPlugin.resource
    

    或者你可以创建一个 virtualenv 并在那里安装你的 twistdPlugin 模块。这样您就不必自己弄乱环境变量了。

    问题的关键在于,twistd 用于在 Python 2 Twisted Python 3 中不再这样做了最新的扭曲。换句话说,twistd 期望所有模块都是可导入的。尽管有时会令人讨厌,但这种设计使扭曲的应用程序具有便携性。

    【讨论】:

    • 其实和 Python 3 一点关系都没有。在 Python 2 和 Python 3 上,最新版本的 Twisted 的 twistd 加载插件都没有在 ${PWD} 找到。我相信,该更改是在 16.4 中引入的(作为无关维护的无意、未宣布的副作用)。见twistedmatrix.com/pipermail/twisted-python/2016-September/…
    • 谢谢,也许您知道最好等一下,将 Klein 作为 Web 应用程序在服务器上运行?本地运行良好,我尝试在服务器上运行,就像使用 Apache2 的 Flask 一样,但对于 Klein,它不起作用。
    • 您的 Apache 设置如何? Flask 通常通过 Klein 不需要且无法使用的 WSGI 服务器运行。我已经使用代理在 Apache 和 Nginx 后面运行 Klein,没有任何问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    相关资源
    最近更新 更多