【问题标题】:Failing at importing modules on items.py file - Scrapy在 items.py 文件上导入模块失败 - Scrapy
【发布时间】:2021-09-18 11:29:58
【问题描述】:

我是 Python 新手,目前正在学习使用蜘蛛进行网页抓取。按照教程,我坚持使用 Python 进行相对导入。

这是我当前文件夹的结构(scrapy startproject p1提供):

我的 items.py 文件:

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class Test(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    price = scrapy.Field()
    pass

在我的 filetwo.py 中,它包含:

import scrapy
from p1.items import Test

当我运行代码时,我得到“ModuleNotFoundError: No module named 'p1'”

我也在网上看到一些人遇到同样的问题,所以我尝试了..items import Test,但仍然没有工作。它给了我错误:ImportError: attempted relative import with no known parent package

谁能给我一盏灯?

提前致谢!

【问题讨论】:

标签: python scrapy relative-import


【解决方案1】:

很遗憾,您接受的答案是错误的。你不应该弄乱 sys.path。你应该改为:

$ cd P1
$ python -m p1.spiders.filetwo # note no .py

您显然是直接从 spiders 包内部运行 filetwo.py 脚本 - 这是导致所有这些错误的 python 中的反模式。另一方面,弄乱 sys.path 可能会导致一系列微妙的错误。

【讨论】:

  • 首先,感谢您的回答!但是,我不确定我是否完全理解它。我面临的(或我认为我面临的)问题是相对导入。你的指示是关于运行程序的,对吧?我应该如何在 items.py 文件中相对导入我的类“Test”?
  • @DanielSiman 运行程序(或者更确切地说是模块)的方式会影响导入的解析方式。因此,在运行它们所在的模块时,相对或绝对导入会起作用,正如我在这里所描述的(pycharm 运行配置支持 -m 开关 btw)。 from p1.items import Testfrom ..items import Test 都应该工作
【解决方案2】:

我相信我的评论应该对你有所帮助。但这里有一个例子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2019-04-28
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多