Twisted的依赖项有变更吗?

3 投票
2 回答
1181 浏览
提问于 2025-04-15 22:15

我现在正在做一个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 个回答

1

ImportError 是在使用 import 语句时出现的错误,意思是你想导入的东西找不到,可能是因为这个模块、包或者名称根本不存在。在你的情况中,attrgetteroperator 模块里是不存在的。

首先要考虑的是,你在项目的主目录下定义了一个叫 operator 的模块。模块或包的搜索是按照 sys.path 的顺序进行的。如果你在主目录下定义了一个同名的模块,那么在搜索时就会把其他同名的模块给遮住了。

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,就不会和内置模块冲突了。

撰写回答