web-dev-qa-db-fra.com

ImportError: Aucun module nommé twisted.internet

J'ai installé Python 2.7.5 qui fonctionne bien.

J'ai ensuite installé scrapy (qui, je pense, utilise tordu en interne). Mon araignée raclante fonctionne aussi très bien.

J'ai installé twisted:

Sudo apt-get install python-twisted

Ensuite, j'ai créé un exemple de programme utilisant le code Echo Server indiqué ici

Voici le code 

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()

J'essaie d'exécuter ce code en utilisant cette commande:

$ 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

Est-ce que n'importe qui peut m'aider avec comment je peux déboguer pourquoi mon paquet tordu n'est pas ramassé par l'installation de Python?

14
user1700184

Si vous utilisez pip essayez simplement:

pip install twisted

La même chose fonctionne avec w3lib et lxml.

Sur certains systèmes * nix, cela peut vous donner une erreur d’autorisation. Si cela se produit, essayez:

Sudo -H pip install twisted
12
Milev

J'ai compris pourquoi cette erreur se produisait. Pour une raison quelconque, utiliser apt-get pour installer un paquet Python ne l’installait pas correctement.

J'ai donc dû télécharger une boule de tar et installer le paquet à partir d'eux.

J'ai téléchargé Twisted tar à partir de ici .

J'ai fait un tar xjf Twisted-13.1.0.tar.bz2 - cela a créé un répertoire appelé Twisted-13.1.0

ensuite, cd Twisted-13.1.0 Enfin, python setup.py install

Cela m'a donné une erreur. Twisted nécessitait un autre paquet appelé zope.interface. J'ai donc téléchargé tar ball pour zope.interface à partir de ici . Ensuite, exécutez cette commande tar xzf zope.interface-3.6.1.tar.gz qui a créé un dossier appelé zope.interface-3.6.1. Alors, cd dans zope.interface-3.6.1 et lancez python setup.py install

Remarque: En fonction des droits de l'utilisateur, vous souhaiterez peut-être exécuter ces commandes en mode Sudo. Ajoutez simplement le mot-clé Sudo avant chaque commande.

9
user1700184

veuillez renommer le fichier twisted.py en quelque chose d’autre. chaque fois que vous importez une fonction à partir d'un fichier, l'interpréteur le recherchera à l'emplacement actuel, puis dans la bibliothèque. donc si vous avez un fichier au nom de " twisted.py ", vous devriez probablement le renommer.

après l'avoir renommé. Ne manquez pas de supprimer le fichier twisted.pyc avant de le réexécuter.

5
user3800365

Ça m'est aussi arrivé. Enfin, je découvre qu’il existe un fichier nommé twisted.py, mon répertoire de travail actuel. J'ai enlevé twisted.py et twisted.pyc. Problème résolu.

0
Jobin

Je pense qu'il est intéressant de noter que si vous utilisez Sudo pour lancer python, vous utilisez votre système python d'origine. Ceci estNOTle python vers lequel pointe votre PATH. Par exemple, si vous utilisez Anaconda et que vous avez mis à jour votre chemin, de sorte que which python pointe sur path/to/anaconda/bin/python, Sudo which python pointe toujours sur usr/bin/python

Donc, évidemment, Sudo python twistedTester.py ne trouvera pas le module tordu. Pour contourner ce problème, vous devez explicitement indiquer le chemin d'accès au python anaconda. Ainsi:

Sudo path/to/anaconda/bin/python twistedTester.py
0
Grr

J'ai compris pourquoi apt-get install python-twisted n'était pas suffisant ou "installé correctement", comme vous l'avez dit, user1700184.

J'utilise Debian Wheezy et Python 2.7.

Je viens juste de déplacer le dossier nommé "twisted" de /usr/lib/python2.7/dist-packages/ à /usr/lib/python2.7/

La même chose doit être faite avec le paquet "zope" et tous les autres que vous installez mais ne sont pas récupérés lorsque vous essayez d’exécuter votre code.

Cependant, la raison pour laquelle cela est même nécessaire dans mon cas est toujours un mystère puisque mon sys.path inclut à la fois /usr/lib/python2.7/ et /usr/lib/python2.7/dist-packages, de sorte que tout ce qui était sous dist-packages aurait dû être récupéré par l'interprète.

0
iammyr