ImportError: No module named [name].items
ImportError: No module named [name].items
我正在尝试 运行 我自己的 scrapy 项目。我以为我在 post 编辑的帖子中解决了一个相关问题:[
我做了 完整的系统映像恢复 并简单地安装了 Python 2.7 和 Miniconda。但是,Atom 编辑器仍然是 flagging/underlining 'import urlparse'。
代码基于一本写得很好的书,作者为书中示例的 运行 脚本提供了一个很好的虚拟机游乐场。在 VM 中,代码工作正常。
但是,在尝试自己练习时,我现在收到以下错误:
(p2env) C:\Users\User-1\Desktop\scrapy_projects\dictionary>scrapy crawl basic
Traceback (most recent call last):
File "C:\Users\User-1\Miniconda2\envs\p2env\Scripts\scrapy-script.py", line 5, in <module>
sys.exit(scrapy.cmdline.execute())
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\cmdline.py", line 148, in execute cmd.crawler_process = CrawlerProcess(settings)
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\crawler.py", line 243, in __init__
super(CrawlerProcess, self).__init__(settings)
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\crawler.py", line 134, in __init__
self.spider_loader = _get_spider_loader(settings)
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\crawler.py", line 330, in _get_spider_loader
return loader_cls.from_settings(settings.frozencopy())
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\spiderloader.py", line 61, in from_settings
return cls(settings)
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\spiderloader.py", line 25, in __init__
self._load_all_spiders()
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\spiderloader.py", line 47, in _load_all_spiders
for module in walk_modules(name):
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\utils\misc.py", line 71, in walk_modules
submod = import_module(fullpath)
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\importlib\__init__.py", line 37, in import_module
__import__(name)
File "C:\Users\User-1\Desktop\scrapy_projects\dictionary\dictionary\spiders\basic.py", line 11, in <module>
from terms.items import TermsItem
ImportError: No module named terms.items
我的文件夹层次结构如下:
└───dictionary
│ scrapy.cfg
│
└───dictionary
│ items.py
│ middlewares.py
│ pipelines.py
│ settings.py
│ settings.pyc
│ __init__.py
│ __init__.pyc
│
└───spiders
basic.py
basic.pyc
__init__.py
__init__.pyc
我的items.py代码如下:
# -*- coding: utf-8 -*-
from scrapy.item import Item, Field
class TermsItem(Item):
# Primary fields
title = Field()
definition = Field()
# Housekeeping fields
url = Field()
project = Field()
spider = Field()
server = Field()
date = Field()
我的spider.py如下:
# -*- coding: utf-8 -*-
import datetime
import urlparse
import socket
import scrapy
from scrapy.loader.processors import MapCompose, Join
from scrapy.loader import ItemLoader
from terms.items import TermsItem
class BasicSpider(scrapy.Spider):
name = "basic"
allowed_domains = ["web"]
# Start on a property page
start_urls = (
'http://dictionary.com/browse/there',
)
def parse(self, response):
# Create the loader using the response
l = ItemLoader(item=TermsItem(), response=response)
# Load fields using XPath expressions
l.add_xpath('title', '//h1[@class="head-entry"][1] / text()',
MapCompose(unicode.strip, unicode.title))
l.add_xpath('definition', '//*[@class="def-list"][1]/text()',
MapCompose(unicode.strip, unicode.title))
# Housekeeping fields
l.add_value('url', response.url)
l.add_value('project', self.settings.get('BOT_NAME'))
l.add_value('spider', self.name)
l.add_value('server', socket.gethostname())
l.add_value('date', datetime.datetime.now())
return l.load_item()
Atom Editor still flags 'import urlparse' and 'from scrapy.loader.processors import MapCompose, Join'
基于这个 Whosebug 问题: where coders are instructed to '**execute the Scrapy command from inside the top level directory of your project. – alecxe'** has me wondering if the conda environment I am using is causing the error? No module named items stack 问题有一个相似点 '**导入是做什么的? sys.path 的工作 directory/the 内容是什么?如果父目录不是工作目录并且没有出现在 sys.path 中,则无法找到 Project_L。 – ShadowRanger 5 月 11 日 22:24'** 但是,据我所知,我正在正确构建项目并且相应的层次结构是正确的。
如有任何帮助,我们将不胜感激。为冗长的 post 道歉,我只是想尽可能全面,并确保人们理解这个问题与我链接到的类似问题之间的区别。
此致,
回溯表明问题出在特定的导入中。
您可以从命令行验证这一点。例如在我的
我得到的机器
$ python -c 'from terms.items import TermsItem'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named terms.items
查看您的文件夹层次结构,我看不到名为 "terms" 的模块
所以这可能就是你所缺少的,但既然你指出了
代码在作者的 VM 中运行我会做的是尝试 运行
该 VM 中的以下命令:
$ python -v -c 'from terms.items import TermsItem'
-v
选项将使 python 显示所有正在导入的路径。
例如
$ python -v -c 'from terms.items import TermsItem'
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# /usr/local/var/pyenv/versions/2.7.12/lib/python2.7/site.pyc matches /usr/local/var/pyenv/versions/2.7.12/lib/python2.7/site.py
import site # precompiled from /usr/local/var/pyenv/versions/2.7.12/lib/python2.7/site.pyc
...
import encodings.ascii # precompiled from /usr/local/var/pyenv/versions/2.7.12/lib/python2.7/encodings/ascii.pyc
Python 2.7.12 (default, Nov 29 2016, 14:57:54)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named terms.items
# clear __builtin__._
# clear sys.path
...
# cleanup ints: 20 unfreed ints
# cleanup floats
如果你在代码有效的地方这样做,那么输出中的某个地方将会
成为成功的进口。从中你可以算出
系统上缺少的模块并相应地安装它。
编辑:仔细观察你的 post 我注意到你提到你的 "items.py" 包含
class TermsItem(Item):
# Primary fields
...
所以我怀疑你的问题是你的导入应该是
from items import TermsItem
简而言之,我能够生成一个解决方案并通过替换来绕过错误:
from terms.items import TermsItem
和
from ..items import TermsItem
此解决方案及其变体已在 link 中提供,我最初在上面附上:
我确定我最初尝试过,但是我怀疑当我尝试重新 运行 代码时我一定是忘记保存了,因此从之前的 .pyc
需要说明的是,代码出自那本书,前面提到的link表示我的原代码
from terms.items import TermsItem
应该可以。 我强烈推荐给那些遇到同样错误的人,他们已经尝试过我link编辑的相关堆栈流问题中提供的解决方案,并确保区分父级蜘蛛名称中的目录名称,以查看 jq170727 在此线程中所做的评论。该个人提供了有关如何使用 -v 选项更好地识别问题的重要说明,并在他记录的使用 PYTHONVERBOSE 命令的非常详细的错误跟踪方法中包含了 link。我是一个新手,因此此时无法完全理解其中的含义,但是,我将 post 我认为是从 jq170727 的 中追溯的问题方法:
import scrapy.loader.processors # precompiled from C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\loader\processors.pyc
Traceback (most recent call last):
我认为这是由于使用了我目前用来容纳 Python2.7 和我正在使用的 Scrapy 的 conda 环境。同样,在完整的线程中,我 link 并引用了其他 stackflow 贡献者的相关观点,我认为这可能会让某人完全纠正他们的问题(因为我在这方面仍然很新)。
我正在尝试 运行 我自己的 scrapy 项目。我以为我在 post 编辑的帖子中解决了一个相关问题:[
我做了 完整的系统映像恢复 并简单地安装了 Python 2.7 和 Miniconda。但是,Atom 编辑器仍然是 flagging/underlining 'import urlparse'。
代码基于一本写得很好的书,作者为书中示例的 运行 脚本提供了一个很好的虚拟机游乐场。在 VM 中,代码工作正常。
但是,在尝试自己练习时,我现在收到以下错误:
(p2env) C:\Users\User-1\Desktop\scrapy_projects\dictionary>scrapy crawl basic
Traceback (most recent call last):
File "C:\Users\User-1\Miniconda2\envs\p2env\Scripts\scrapy-script.py", line 5, in <module>
sys.exit(scrapy.cmdline.execute())
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\cmdline.py", line 148, in execute cmd.crawler_process = CrawlerProcess(settings)
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\crawler.py", line 243, in __init__
super(CrawlerProcess, self).__init__(settings)
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\crawler.py", line 134, in __init__
self.spider_loader = _get_spider_loader(settings)
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\crawler.py", line 330, in _get_spider_loader
return loader_cls.from_settings(settings.frozencopy())
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\spiderloader.py", line 61, in from_settings
return cls(settings)
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\spiderloader.py", line 25, in __init__
self._load_all_spiders()
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\spiderloader.py", line 47, in _load_all_spiders
for module in walk_modules(name):
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\utils\misc.py", line 71, in walk_modules
submod = import_module(fullpath)
File "C:\Users\User-1\Miniconda2\envs\p2env\lib\importlib\__init__.py", line 37, in import_module
__import__(name)
File "C:\Users\User-1\Desktop\scrapy_projects\dictionary\dictionary\spiders\basic.py", line 11, in <module>
from terms.items import TermsItem
ImportError: No module named terms.items
我的文件夹层次结构如下:
└───dictionary
│ scrapy.cfg
│
└───dictionary
│ items.py
│ middlewares.py
│ pipelines.py
│ settings.py
│ settings.pyc
│ __init__.py
│ __init__.pyc
│
└───spiders
basic.py
basic.pyc
__init__.py
__init__.pyc
我的items.py代码如下:
# -*- coding: utf-8 -*-
from scrapy.item import Item, Field
class TermsItem(Item):
# Primary fields
title = Field()
definition = Field()
# Housekeeping fields
url = Field()
project = Field()
spider = Field()
server = Field()
date = Field()
我的spider.py如下:
# -*- coding: utf-8 -*-
import datetime
import urlparse
import socket
import scrapy
from scrapy.loader.processors import MapCompose, Join
from scrapy.loader import ItemLoader
from terms.items import TermsItem
class BasicSpider(scrapy.Spider):
name = "basic"
allowed_domains = ["web"]
# Start on a property page
start_urls = (
'http://dictionary.com/browse/there',
)
def parse(self, response):
# Create the loader using the response
l = ItemLoader(item=TermsItem(), response=response)
# Load fields using XPath expressions
l.add_xpath('title', '//h1[@class="head-entry"][1] / text()',
MapCompose(unicode.strip, unicode.title))
l.add_xpath('definition', '//*[@class="def-list"][1]/text()',
MapCompose(unicode.strip, unicode.title))
# Housekeeping fields
l.add_value('url', response.url)
l.add_value('project', self.settings.get('BOT_NAME'))
l.add_value('spider', self.name)
l.add_value('server', socket.gethostname())
l.add_value('date', datetime.datetime.now())
return l.load_item()
Atom Editor still flags 'import urlparse' and 'from scrapy.loader.processors import MapCompose, Join'
基于这个 Whosebug 问题:
如有任何帮助,我们将不胜感激。为冗长的 post 道歉,我只是想尽可能全面,并确保人们理解这个问题与我链接到的类似问题之间的区别。
此致,
回溯表明问题出在特定的导入中。 您可以从命令行验证这一点。例如在我的 我得到的机器
$ python -c 'from terms.items import TermsItem'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named terms.items
查看您的文件夹层次结构,我看不到名为 "terms" 的模块 所以这可能就是你所缺少的,但既然你指出了 代码在作者的 VM 中运行我会做的是尝试 运行 该 VM 中的以下命令:
$ python -v -c 'from terms.items import TermsItem'
-v
选项将使 python 显示所有正在导入的路径。
例如
$ python -v -c 'from terms.items import TermsItem'
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# /usr/local/var/pyenv/versions/2.7.12/lib/python2.7/site.pyc matches /usr/local/var/pyenv/versions/2.7.12/lib/python2.7/site.py
import site # precompiled from /usr/local/var/pyenv/versions/2.7.12/lib/python2.7/site.pyc
...
import encodings.ascii # precompiled from /usr/local/var/pyenv/versions/2.7.12/lib/python2.7/encodings/ascii.pyc
Python 2.7.12 (default, Nov 29 2016, 14:57:54)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named terms.items
# clear __builtin__._
# clear sys.path
...
# cleanup ints: 20 unfreed ints
# cleanup floats
如果你在代码有效的地方这样做,那么输出中的某个地方将会 成为成功的进口。从中你可以算出 系统上缺少的模块并相应地安装它。
编辑:仔细观察你的 post 我注意到你提到你的 "items.py" 包含
class TermsItem(Item):
# Primary fields
...
所以我怀疑你的问题是你的导入应该是
from items import TermsItem
简而言之,我能够生成一个解决方案并通过替换来绕过错误:
from terms.items import TermsItem
和
from ..items import TermsItem
此解决方案及其变体已在 link 中提供,我最初在上面附上:
我确定我最初尝试过,但是我怀疑当我尝试重新 运行 代码时我一定是忘记保存了,因此从之前的 .pyc
需要说明的是,代码出自那本书,前面提到的link
from terms.items import TermsItem
应该可以。 我强烈推荐给那些遇到同样错误的人,他们已经尝试过我link编辑的相关堆栈流问题中提供的解决方案,并确保区分父级蜘蛛名称中的目录名称,以查看 jq170727 在此线程中所做的评论。该个人提供了有关如何使用 -v 选项更好地识别问题的重要说明,并在他记录的使用 PYTHONVERBOSE 命令的非常详细的错误跟踪方法中包含了 link。我是一个新手,因此此时无法完全理解其中的含义,但是,我将 post 我认为是从 jq170727 的 中追溯的问题方法:
import scrapy.loader.processors # precompiled from C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\loader\processors.pyc
Traceback (most recent call last):
我认为这是由于使用了我目前用来容纳 Python2.7 和我正在使用的 Scrapy 的 conda 环境。同样,在完整的线程中,我 link 并引用了其他 stackflow 贡献者的相关观点,我认为这可能会让某人完全纠正他们的问题(因为我在这方面仍然很新)。