Twisted изменил свои зависимости? - PullRequest
3 голосов
/ 02 мая 2010

В настоящее время я работаю над проектом 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 ]

10 голосов
/ 02 мая 2010

Один из ваших собственных файлов, /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 голос
/ 02 мая 2010

ImportError вызывается в операторе import, когда имя не может быть импортировано, поскольку модуль, пакет или имя не существует. В вашем случае attrgetter не существует в модуле operator.

Первая идея заключается в том, что вы определяете модуль с именем operator в главном каталоге проекта. Модули или пакеты ищутся в порядке sys.path, если вы определяете модуль с тем же именем в вашем основном каталоге, вы скрываете все остальные модули с тем же именем в пути поиска.

...