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 个回答
1
ImportError
是在使用 import
语句时出现的错误,意思是你想导入的东西找不到,可能是因为这个模块、包或者名称根本不存在。在你的情况中,attrgetter
在 operator
模块里是不存在的。
首先要考虑的是,你在项目的主目录下定义了一个叫 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
,就不会和内置模块冲突了。