【问题标题】:LPTHW ex50:Can't find module utilsLPTHW ex50:找不到模块实用程序
【发布时间】:2012-08-10 23:07:44
【问题描述】:

我正在进行 lpthw this is the link 的第 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 的一种非常混乱的方式(我遇到了很多错误,但多次尝试了多种方式。) 提前谢谢!
如果有人需要更多信息评论,我可以编辑。

【问题讨论】:

    标签: python


    【解决方案1】:

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

    Exercise 0: The Setup

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

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

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

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

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

    【讨论】:

    • 你为什么要告诉我这个!这是因为兼容性问题,因为我确实有 python3 而不是 python2,但直到现在它还没有给我带来真正的问题?
    • 我告诉您这是您用于教程的网站的直接引用。它与 python3 不兼容。因此,当您开始安装其他不适用于 py3 的软件包时,它们会失败。许多现有的软件包还不能工作。人们更新的进展缓慢。这就是为什么很多人留在 python2.7 上的原因。我已经知道你的路径中有 python3.1。这是未安装 Web 框架的原因。删除它并安装 python 2.7
    【解决方案2】:

    按照教程状态,您可以尝试从命令行使用easy_installpip 进行安装,它将是easy_install lpthw.webpip install lpthw.web

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

    如果你对python micro-web-frameworks感兴趣,我推荐bottle.py,它不需要安装它只是一个名为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。

    【讨论】:

    • 我已经使用 pip 安装了 lpthw.web 并且代码已经有 web.appliction(...) 但很抱歉只是复制错了。有什么想法吗??
    • @user1544624 问题是lpthw.web不能与python3一起使用,只有python2,我已经更新了答案,希望对你有帮助。
    猜你喜欢
    • 2018-10-23
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2016-12-07
    • 2017-03-09
    • 1970-01-01
    相关资源
    最近更新 更多