Twisted是否改变了它的依赖关系?

时间:2010-05-02 13:13:51

标签: python twisted

我目前正在开发一个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很陌生,所以我不知道是什么导致了这个问题。

欢迎所有建议: - )

2 个答案:

答案 0 :(得分:10)

您自己的一个文件/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,并且不能影响内置组件。

答案 1 :(得分:1)

无法导入名称时,ImportError语句会引发

import,因为模块或包或名称不存在。在您的情况下,attrgetter模块中不存在operator

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