2013-07-04 3 views
14

Ich habe Python 2.7.5 installiert, das funktioniert gut.ImportError: Kein Modul namens twisted.internet

Ich installiere dann scrapy (was, glaube ich, intern verdreht verwendet). Meine Scrapy Spinne funktioniert auch gut.

Ich installierte twisted:

sudo apt-get install python-twisted

Dann habe ich erstellt ein Beispielprogramm mit Echo-Code Server here gezeigt

Hier ist der 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() 

Ich versuche, diesen Code zu laufen mit dieser Befehl:

$ 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 

Kann mir jemand helfen, wie ich debuggen kann, warum mein verdrehtes Paket nicht von der Python-Installation übernommen wird?

+0

Versuchen Sie, 'which python' auszuführen - was sagt es Ihnen? Was ist mit 'welchem ​​Python2.7'? Wie wäre es mit 'python -c" import twisted; print (twisted) "'? Hast du vielleicht eine Datei namens 'twisted.py' irgendwo auf' sys.path'? – Glyph

Antwort

9

Ich habe herausgefunden, warum dieser Fehler passiert ist. Aus irgendeinem Grund hat die Verwendung von apt-get, um ein Python-Paket zu installieren, es nicht richtig installiert.

Also musste ich einen Teerball herunterladen und das Paket von ihnen installieren.

Ich verdrehten Teer aus here heruntergeladen.

Ich habe ein tar xjf Twisted-13.1.0.tar.bz2 - das ein Verzeichnis Twisted 13.1.0

nächsten, cd Twisted-13.1.0 Schließlich python setup.py install

Dies gab mir einen Fehler genannt erstellt. Twisted benötigte ein weiteres Paket namens zope.interface. Also, ich habe Tar Ball für zope.interface von here heruntergeladen. Dann führte diesen Befehl tar xzf zope.interface-3.6.1.tar.gz Das erstellte einen Ordner namens zope.interface-3.6.1. Also, cd in zope.interface-3.6.1 und run python setup.py install

Hinweis: Abhängig von den Rechten Ihres Benutzers, können Sie diese Befehle im Sudo-Modus tun möchten. Fügen Sie einfach das Schlüsselwort sudo vor jedem Befehl hinzu.

+4

'apt-get install python-twisted 'funktioniert im Allgemeinen immer. Wenn dies nicht der Fall ist, sollten Sie einen detaillierten Fehlerbericht an Ihr Distro-Team senden (entweder Debian oder Ubuntu, so scheint es), damit sie das Problem beheben können. Das wird mehr Details als "nicht richtig installieren" benötigen. –

+1

sudo python setup.py install – gbk

+1

mann du hast meinen tag gespeichert:] –

0

habe ich herausgefunden, warum apt-get install python-twisted nicht genug oder war „es richtig Installation“, wie Sie sagten, user1700184.

Ich benutze Debian Wheezy und Python 2.7.

Ich hatte gerade den Ordner zu verschieben Namen „verdreht“ /usr/lib/python2.7/dist-packages/-/usr/lib/python2.7/

Das gleiche hat mit dem Paket „Zope“ und alle anderen ein, die Sie installieren getan werden, aber nicht abgerufen, wenn Sie versuchen, Führe deinen Code aus.

jedoch, warum dies auch in meinem Fall notwendig ist, ist immer noch ein Rätsel, da meine sys.path enthält sowohl /usr/lib/python2.7/ und /usr/lib/python2.7/dist-packages, so was unter dist-packages war vom Interpreter aufgerufen werden sollen.

+2

Verschieben Sie keine Pakete in '/ usr'. Etwas auf deinem System ist kaputt; Dies ist ein Fehler in Debian. Bitte melden Sie den Fehler. – Glyph

9

Wenn Sie pip nur verwenden versuchen:

pip install twisted 

Das gleiche funktioniert mit w3lib und lxml.

Auf einigen * nix-Systemen kann dies zu einem Berechtigungsfehler führen. Wenn das passiert, versuchen Sie:

sudo -H pip install twisted 
+1

Das funktionierte für mich auch, beachten Sie, auf Mac OS X kann es "Fehler 1: Erlaubnis verweigert" sagen, es sei denn sudo wird benutzt. "sudo pip install twisted" –

+0

Dies funktionierte nicht für mich http://pastebin.com/N7czaF5k –

0

Es ist mir auch passiert. Schließlich finde ich heraus, dass es eine Datei namens twisted.py meines aktuellen Arbeitsverzeichnisses gibt. Ich entfernte twisted.py und twisted.pyc. Problem gelöst.

5

Bitte benennen Sie die Datei twisted.py zu etwas anderem. Immer wenn Sie eine Funktion aus einer Datei importieren, sucht der Interpreter nach der Datei an der aktuellen Position und sucht dann in der Bibliothek. Wenn Sie also eine Datei im Namen von "twisted.py" haben, sollten Sie sie wahrscheinlich umbenennen.

nach dem Umbenennen. versäumen Sie nicht, die Datei twisted.pyc zu entfernen, bevor Sie sie erneut ausführen.

0

Ich denke, es ist erwähnenswert, dass wenn Sie sudo verwenden, um Python zu starten, Sie Ihre ursprüngliche Standard-System Python verwenden. Dies ist NICHT der Python, den Ihre PATH verweist. Wenn Sie beispielsweise Anaconda verwenden und Ihren Pfad so aktualisiert haben, dass which python auf path/to/anaconda/bin/python zeigt, zeigt sudo which python immer noch auf usr/bin/python.

So offensichtlich sudo python twistedTester.py wird das verdrillte Modul nicht finden. Um dies zu umgehen, sollten Sie den Pfad zum Anaconda-Python explizit übergeben. Wie so:

sudo path/to/anaconda/bin/python twistedTester.py