LPTHW ex50:找不到模块实用程序



我正在练习 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 "binapp.py", line 1, in <module>
      import web
    File "c:Python31libsite-packagesweb__init__.py", line 14, in <module>
      import utils, db, net, wsgi, http, webapi, httpserver, debugerror
ImportError: No module named utils

问题是由什么引起的,

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

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

练习 0:设置

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

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

初学者警告
程序员可能会尝试让你安装 Python 3 并学习它。你应该告诉他们,"当你电脑上所有的python代码都是Python 3时,我会试着学习它。 这应该让他们忙上大约10年。

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

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

作为教程状态,您可以尝试使用命令行中的easy_installpip进行安装,这将是easy_install lpthw.webpip install lpthw.web

另请注意,您需要正确引用application
这个app = application(urls, globals())应该是

app = web.application(urls, globals())请注意 ^^^ 部分。

另外,如果您对我推荐 bottle.py 的python微Web框架感兴趣,它不需要安装,只需安装一个名为bottle.py的python文件

更新
我设法使用 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。

最新更新