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 ответа
Один из ваших собственных файлов, /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>
Витая пытается import operator
но Python загружает один из ваших собственных модулей.
Чтобы предотвратить подобные вещи в будущем, вы, вероятно, не должны добавлять свою папку src в PYTHONPATH таким образом. Вместо этого создайте пакет, чтобы ваши собственные файлы выглядели как myproject.mymodule
и не может скрывать встроенных
ImportError
поднят на import
оператор, когда имя не может быть импортировано, потому что модуль, пакет или имя не существует. В твоем случае attrgetter
не существует в operator
модуль.
Первая идея заключается в том, что вы определяете модуль с именем operator
в главном каталоге проекта. Модули, или пакеты, ищутся после sys.path
Порядок, если вы определяете модуль с тем же именем в вашем основном каталоге, вы скрываете все остальные модули с тем же именем в пути поиска.