ImportError: нет модуля с именем twisted.internet
Я установил python 2.7.5, который работает нормально.
Затем я устанавливаю scrapy (который, я думаю, использует скрученный внутри). Мой спайдер также хорошо работает.
Я установил скручен:
sudo apt-get install python-twisted
Затем я создал образец программы, используя код Echo Server, показанный здесь
Вот код
from twisted.internet import protocol, reactor
class Echo(protocol.Protocol):
def dataReceived(self, data):
self.transport.write(data)
class EchoFactory(protocol.Factory):
def buildProtocol(self, addr):
return Echo()
reactor.listenTCP(1234, EchoFactory())
reactor.run()
Я пытаюсь запустить этот код с помощью этой команды:
$ python twistedTester.py
Traceback (most recent call last):
File "twistedTester.py", line 1, in <module>
from twisted.internet import protocol, reactor
ImportError: No module named twisted.internet
Может ли кто-нибудь помочь мне с тем, как я могу отлаживать, почему мой скрученный пакет не подхвачен установкой Python?
Ответы
Ответ 1
Я понял, почему эта ошибка происходит. По какой-то причине использование apt-get
для установки пакета python не устанавливало его правильно.
Итак, мне пришлось загрузить tar-мяч и установить пакет из них.
Я загрузил Twisted tar из здесь.
Я сделал tar xjf Twisted-13.1.0.tar.bz2
- создал каталог с именем Twisted-13.1.0
next, cd Twisted-13.1.0
Наконец, python setup.py install
Это дало мне ошибку. Twisted потребовал другой пакет под названием zope.interface. Итак, я загрузил tar ball для zope.interface из здесь. Затем запустите эту команду tar xzf zope.interface-3.6.1.tar.gz
, которая создала папку с именем zope.interface-3.6.1. Итак, cd в zope.interface-3.6.1 и запустите python setup.py install
Примечание. В зависимости от ваших прав пользователя вы можете выполнять эти команды в режиме sudo. Просто добавьте ключевое слово sudo перед каждой командой.
Ответ 2
Если вы используете pip, попробуйте:
pip install twisted
То же самое работает с w3lib и lxml.
В некоторых системах * nix это может привести к ошибке разрешения. Если это произойдет, попробуйте:
sudo -H pip install twisted
Ответ 3
переименуйте файл twisted.py в другое. всякий раз, когда вы импортируете функцию из файла, интерпретатор будет искать файл в текущем местоположении, а затем он будет искать в библиотеке. поэтому, если у вас есть файл с именем " twisted.py", вы должны, вероятно, переименовать его.
после переименования. dont не удалите файл twisted.pyc, прежде чем запускать его снова.
Ответ 4
Я понял, почему apt-get install python-twisted
недостаточно или "правильно установить его", как вы сказали, user1700184.
Я использую Debian Wheezy и Python 2.7.
Мне просто пришлось переместить папку с именем "twisted" от /usr/lib/python2.7/dist-packages/
до /usr/lib/python2.7/
То же самое должно быть сделано с пакетом "zope" и любым другим, который вы устанавливаете, но не извлекается при попытке запустить ваш код.
Однако, почему это даже необходимо в моем случае, остается загадкой, так как мой sys.path
включает в себя как /usr/lib/python2.7/
, так и /usr/lib/python2.7/dist-packages
, поэтому все, что было под dist-packages
, должно было быть получено интерпретатором.
Ответ 5
Это случилось со мной. Наконец, я выясню, что есть файл с именем twisted.py
мой текущий рабочий каталог. Я удалил twisted.py
и twisted.pyc
. Проблема решена.
Ответ 6
Я думаю, стоит отметить, что если вы используете sudo для запуска python, вы используете исходный системный python по умолчанию. Это НЕ питон, на который указывает ваш PATH
. Например, если вы используете Anaconda, и вы обновили свой путь таким образом, что which python
указывает на path/to/anaconda/bin/python
, sudo which python
будет по-прежнему указывать на usr/bin/python
.
Таким образом, очевидно, что sudo python twistedTester.py
не найдет скрученный модуль. Чтобы обойти это, вы должны явно передать путь к python anaconda. Например:
sudo path/to/anaconda/bin/python twistedTester.py