【问题标题】:Has Twisted changed its dependencies?Twisted 是否改变了它的依赖关系?
【发布时间】:2010-05-02 21:32:51
【问题描述】:

我目前正在开发一个 Python/Twisted 项目,该项目将在 Planetlab 上分发和测试。出于某种原因,我的代码在星期五工作,现在我想测试一个小的更改,它根本拒绝工作:

Traceback (most recent call last):
  File "acn_a4/src/node.py", line 6, in <module>
    from twisted.internet.protocol import DatagramProtocol
  File "/usr/lib/python2.5/site-packages/Twisted-10.0.0-py2.5-linux-i686.egg/twisted/__init__.py", line 18, in <module>
    from twisted.python import compat
  File "/usr/lib/python2.5/site-packages/Twisted-10.0.0-py2.5-linux-i686.egg/twisted/python/compat.py", line 146, in <module>
    import operator
  File "/home/cdecker/dev/acn/acn_a4/src/operator.py", line 7, in <module>
  File "/home/cdecker/acn_a4/src/node.py", line 6, in <module>
    from twisted.internet.protocol import DatagramProtocol
  File "/usr/lib/python2.5/site-packages/Twisted-10.0.0-py2.5-linux-i686.egg/twisted/internet/protocol.py", line 20, in <module>
    from twisted.python import log, failure, components
  File "/usr/lib/python2.5/site-packages/Twisted-10.0.0-py2.5-linux-i686.egg/twisted/python/log.py", line 19, in <module>
    from twisted.python import util, context, reflect
  File "/usr/lib/python2.5/site-packages/Twisted-10.0.0-py2.5-linux-i686.egg/twisted/python/util.py", line 5, in <module>
    import os, sys, hmac, errno, new, inspect, warnings
  File "/usr/lib/python2.5/inspect.py", line 32, in <module>
    from operator import attrgetter
ImportError: cannot import name attrgetter

而且由于我对 python 还很陌生,所以我不知道是什么导致了这个问题。

欢迎所有建议:-)

【问题讨论】:

    标签: python twisted


    【解决方案1】:

    您自己的一个文件,/home/cdecker/dev/acn/acn_a4/src/operator.py 会影响 Python 的内置 operator 模块。您应该将自己的 operator.py 重命名为其他名称。

    你可以在这里看到问题:

    File "/usr/lib/python2.5/site-packages/Twisted-10.0.0-py2.5-linux-i686.egg/twisted/python/compat.py", line 146, in <module>
    import operator
    File "/home/cdecker/dev/acn/acn_a4/src/operator.py", line 7, in <module>
    

    Twisted 尝试 import operator 但 Python 加载了您自己的模块之一。

    为了防止以后发生类似的事情,您可能不应该像那样将您的 src 文件夹添加到 PYTHONPATH 中。而是创建一个包,以便您自己的文件显示为 myproject.mymodule 并且不能隐藏内置文件。

    【讨论】:

      【解决方案2】:

      ImportError 在无法导入名称时在 import 语句中引发,因为模块或包或名称不存在。在您的情况下,attrgetter 不存在于 operator 模块中。

      第一个想法是在项目的主目录中定义一个名为operator 的模块。模块或包按照sys.path 顺序搜索,如果您在主目录中定义了同名模块,则将在搜索路径中隐藏所有其他同名模块。

      【讨论】:

        猜你喜欢
        • 2019-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-28
        • 2011-05-12
        • 2021-11-05
        相关资源
        最近更新 更多