2016-06-19 10 views
0

Ich habe den folgenden Fehler beim Versuch, Scrapy in Python 3 zu verwenden. Ich benutze Ubuntu 16.04 und die Installation python3-twisted hat das Problem nicht gelöst.Twisted Import Fehler bei der Verwendung von Scrapy in Python 3

File "/home/fran/.local/lib/python3.5/site-packages/scrapy/crawler.py", line 150, in crawl 
    crawler = self._create_crawler(crawler_or_spidercls) 
    File "/home/fran/.local/lib/python3.5/site-packages/scrapy/crawler.py", line 166, in _create_crawler 
    return Crawler(spidercls, self.settings) 
    File "/home/fran/.local/lib/python3.5/site-packages/scrapy/crawler.py", line 46, in __init__ 
    self.extensions = ExtensionManager.from_crawler(self) 
    File "/home/fran/.local/lib/python3.5/site-packages/scrapy/middleware.py", line 56, in from_crawler 
    return cls.from_settings(crawler.settings, crawler) 
    File "/home/fran/.local/lib/python3.5/site-packages/scrapy/middleware.py", line 32, in from_settings 
    mwcls = load_object(clspath) 
    File "/home/fran/.local/lib/python3.5/site-packages/scrapy/utils/misc.py", line 44, in load_object 
    mod = import_module(module) 
    File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 986, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 662, in exec_module 
    File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed 
    File "/home/fran/.local/lib/python3.5/site-packages/scrapy/extensions/memusage.py", line 16, in <module> 
    from scrapy.mail import MailSender 
    File "/home/fran/.local/lib/python3.5/site-packages/scrapy/mail.py", line 23, in <module> 
    from twisted.mail.smtp import ESMTPSenderFactory 
ImportError: No module named 'twisted.mail.smtp' 
+0

Vielleicht versuchen verdreht 'sudo apt-get zu installieren installiere Python-Twis ted' –

+0

Auch versucht, dass ohne Erfolg – FranGoitia

+0

@FranGoitia, welche Version von Scrapy verwenden Sie? Es scheint mir, dass Sie Scrapy <= 1.0 verwenden, was NICHT python3-kompatibel ist. Diese Zeile 23 ['from twisted.mail.smtp Import ESMTPSenderFactory'] (https://github.com/scrapy/scrapy/blob/1.0/scrapy/mail.py) wurde [in Scrapy 1.1 verschoben] (https: // github.com/scrapy/scrapy/blob/1.1/scrapy/mail.py). Bitte upgrade auf Scrapy 1.1 –

Antwort

4

Scrapy Python 3 Unterstützung noch in einer Beta-Phase ist und (nach den release notes)

Senden von E-Mail

nicht unterstützt wird

so ist es unwahrscheinlich, dass Sie alles tun können, um zu beheben Dies.

+0

Ich brauche keine E-Mails zu senden. Kann ich etwas in settings.py ändern, um zu verhindern, dass diese Funktion geladen und dieses Modul importiert wird? – FranGoitia

+1

Haben Sie die Erweiterung "scrapy.extensions.memuse.MemoryUsage" aktiviert? Wenn ja, entferne es in deinem 'EXTENSIONS'-Diktat. Außerdem glaube ich, dass es ein Fehler in scrapy ist, diese Erweiterung nicht zu importieren, da [mail standardmäßig deaktiviert ist] (http://doc.scrapy.org/en/latest/topics/settings.html?#memuseon-notify-mail)) in den Einstellungen für diese Erweiterung. –

+0

'scrapy.extensions.memuse.MemoryUsage' funktioniert mit Python 3 und Scrapy 1.1, wenn Sie keine Mailbenachrichtigungen benötigen. Der Import von nicht-Python3-gestütztem SMTP in Twisted wird nur in [importiert, wenn benötigt] (https://github.com/scrapy/scrapy/blob/1.1/scrapy/mail.py#L108) in Scrapy 1.1 vs Scrapy 1.0 –

3

Scrapy unterstützt keine Mail mit Python Senden 3.

Es ist eine Beschränkung von Verdreht, die es noch twisted.mail Modul nicht portiert ist!
(Leider ziehen Anforderung ansteht)

See:

  1. Twisted #8770

  2. [#8770] Port twisted.mail.smtp to Python 3 #509

+1

Dort ist eine PR, aber es ist nicht für die Überprüfung und es fehlt eine Menge Testabdeckung. Jemand muss aufsteigen und die Entwicklung beenden. –