【问题标题】:How to resolve "ModuleNotFoundError" No module named 'XXXX'如何解决“ModuleNotFoundError”没有名为“XXXX”的模块
【发布时间】:2019-04-18 14:24:35
【问题描述】:

我在 Spyder/Anaconda 环境中使用 scrapy。我有一个项目正在尝试使用 items.py,无论我做什么,我都无法识别它,不断收到“ModuleNotFoundError”

这是我的 dsg_spider.py 和 items.py 文件中的内容。 只要我不尝试在蜘蛛中使用 items.py 文件,它就会按预期运行和工作。我只是想以结构化格式获取数据,并希望在继续之前对其进行设置。

import scrapy
import sys
import os
from DSG2.items import Dsg2Item



        doc = Dsg2Item()
        doc['sku'] = response.xpath("//span[@itemprop='sku']/text()").extract()
        doc['price'] = response.xpath("//span[@itemprop='price']/text()").extract()
        doc['description'] = response.xpath("//meta[@itemprop='name']/@content").extract()

文件“F:/Anaconda/DSG2/DSG2/spiders/dsg_spider.py”,第 4 行,在 从 DSG2.items 导入 Dsg2Item

ModuleNotFoundError: 没有名为“DSG2”的模块

这是 items.py 中的代码

import scrapy

class Dsg2Item(scrapy.Item):
     description = scrapy.Field()
     sku = scrapy.Field()
     price = scrapy.Field()
#brand = brand
#description = name

我拥有所有文件的文件夹结构

Anaconda (folder)
   DSG2 (folder)
   |---DSG2 (folder)
       |---_pycache_ (folder)
       |---spiders (folder)
           |---_pycache_ (folder)
           |---_init_.py (file)
           |---dsg_spider.py (file)
       |---_init_.py (file)
       |---items.py (file)
       |---middlewares.py (file)
       |---pipelines.py (file)
       |---settings.py (file)
   |---scrapy.cfg (file)

【问题讨论】:

  • 您的文件夹结构看起来很奇怪,您确定缩进正确吗?
  • 我不确定如何让它看起来正确,我是根据我的文件夹结构手动输入的,所以我确定它的格式不正确
  • 我现在尝试更新它,所以它读起来更好一点
  • 您似乎缺少一些 __init__.py 文件,以使该结构可以用于模块导入。这里有类似问题的一些高质量答案:*.com/questions/7732685/python-local-modules
  • 查看该链接上的示例和我的文件夹结构,我确实在文件夹中有 init.py 文件。 DSG2 文件夹中有一个,Spiders 文件夹中有一个,两个文件都没有。

标签: python scrapy anaconda spyder


【解决方案1】:

对我来说,解决方案似乎是在 Spyder 中,转到项目 --- 新项目 --- 选择现有目录,然后导航到项目文件夹并选择创建,它创建了一个项目,当我运行它时,它不再抱怨..

【讨论】:

    【解决方案2】:

    我想你忘了把你的包添加到 pythonpath 中。

    import sys
    sys.path.insert(0, "/path/to/your/package_or_module")
    

    【讨论】:

    • 你是什么意思?我有这个变量设置 PYTHONPATH=C:\ProgramData\Anaconda3,今天我们的 IT 部门将把它添加到我的“路径”变量中