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 Порядок, если вы определяете модуль с тем же именем в вашем основном каталоге, вы скрываете все остальные модули с тем же именем в пути поиска.

Другие вопросы по тегам