0

我正在练习 lpthw 的第 50 次,这是链接
在以非常混乱的方式下载 lpthw.web 框架之后。
我通过编写一个 .py 文件继续练习。

import web
urls = ('/', 'index')

app = web.application(urls, globals())

class index:
    def GET(self):
        greeting = "Hello World"
        return greeting

if __name__ == "__main__":
    app.run()

但我收到了这个错误:

Traceback (most recent call last):
    File "bin\app.py", line 1, in <module>
      import web
    File "c:\Python31\lib\site-packages\web\__init__.py", line 14, in <module>
      import utils, db, net, wsgi, http, webapi, httpserver, debugerror
ImportError: No module named utils

是什么问题造成的,

我怀疑这是我安装 lpthw.web 的一种非常混乱的方式(我遇到了很多错误,但多次尝试了多种方式。)提前谢谢你!
如果有人需要更多信息评论,我可以编辑。

4

2 回答 2

4

我想你忘了阅读设置说明。本学习指南兼容 python3:

练习 0:设置

您应尽可能完全按照这些说明进行操作。例如,Mac OSX 计算机已经有 Python 2,所以不要安装 Python 3(或任何 Python)。

确保安装的是 Python 2 而不是 Python 3。

初学者警告
程序员可能会尝试让您安装 Python 3 并学习它。你应该告诉他们,“当你计算机上的所有 Python 代码都是 Python 3 时,我会努力学习它。” 这应该让他们忙碌大约 10 年。

从系统中删除 python3 并安装 python2.7 以在安装建议的包时允许本教程工作。

否则,请查找另一个使用与 python3 兼容的库中的示例的教程。截至目前,并非所有内容都已更新。由于这个原因,许多人坚持使用python2.7。

于 2012-08-10T23:29:45.500 回答
1

作为教程状态,您可以尝试使用或easy_install从命令行pip安装easy_install lpthw.webpip install lpthw.web

另请注意,您需要正确引用application
app = application(urls, globals())应该
app = web.application(urls, globals())
注意 ^^^ 部分。

另外,如果您对 python micro-web-frameworks 我推荐bottle.py 感兴趣,它不需要安装它只是一个名为的 python 文件bottle.py

更新
我设法使用python3重新创建问题,所以jdi是对的,这里的问题是python3不向后兼容python2,一些python2投诉应用程序无法在python3下正确运行,反之亦然。

在这种情况下,python3 似乎不支持包内的相对导入,确实发现这个http://www.python.org/dev/peps/pep-0328/很有趣。

从鼓舞士气中发挥:

对于第二个问题,建议默认情况下所有导入语句都是绝对的(仅搜索 sys.path),并使用特殊语法(前导点)来访问包相对导入。

所以lpthw.web尝试导入相关包,但它根本不能。这就是我们得到的原因,ImportError: No module named utils因为 utils 是包中的相对模块。
即使它可以加载它,它也会遇到其他非向后兼容性问题,只是试图import utils在我们得到的包中

>>> import utils 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "utils.py", line 75
    except KeyError, k:
               ^
SyntaxError: invalid syntax

这与这个 pep http://www.python.org/dev/peps/pep-3110/except相关,它说明了语句的不同语法。

正如您所看到的,尝试将这个包迁移到 python3 将是一个主要障碍,所以最好把它留给开发人员,这适用于那里的许多包,为什么 python3 与 python2 如此不同,主要是因为他们想尽可能地修补语言......

暂时坚持python2,最终大部分包都会迁移到python3。

于 2012-08-10T23:29:07.907 回答