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?
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
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.
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.
Ç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.
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
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.