【问题标题】:How to import my own modules into a scrapy project?如何将我自己的模块导入到一个scrapy项目中?
【发布时间】:2019-05-12 18:06:19
【问题描述】:

我正在尝试编写具有多个管道的爬虫蜘蛛。我选择与蜘蛛属性一起使用的管道。该属性是我自己编写的枚举类型。现在的问题是在管道类中导入该枚举。每次我尝试导入它时,都会出现以下错误:

from data.file_types import FileTypes
builtins.ModuleNotFoundError: No module named 'data'

我已经尝试了不同的变体来放置枚举类并在相对导入和绝对导入之间切换。如果我将枚举类放在独立于scrapy包的自己的包中,如果我直接运行管道文件,我可以导入并使用枚举,但如果我想在shell上运行蜘蛛,我仍然会收到错误。

我目前的项目结构是:

noveldownloader:
    data
        enum_file.py
        __init__.py
    novelscraper
        novelscraper
           pipelines
           spiders
           etc
        __init__.py
        scrapy.cfg

我目前的导入是: from data.file_types import FileTypes

如果对我将代码上传到 GitHub 有帮助: https://github.com/JustACodingFox/NovelDownloader

【问题讨论】:

  • 换句话说,你想从邻居文件夹中导入一些东西?这很难,我在这一点上已经挣扎了好几次了。也许您需要根文件夹中的__init__.py 和sys.path.append('...'),如图所示here
  • 您可以将data 移动到外部novelscraper 中并使用绝对导入吗?
  • 你的意思是这样的结构吗? Noveldownloader: novelscraper data enum_file.py init.py novelscraper pipelines spiders etc init.py scrapy.cfg and this as import novelscraper.data.enum_file if yes 我已经试过了,但很遗憾也没有用但是 sys.path.append(..) 的提示有效,但你能解释一下它对我有什么作用吗?我知道它会将当前目录上方的目录的路径添加到某个系统路径,但我不明白为什么?

标签: python scrapy


【解决方案1】:

对我有用的另一种文件夹结构,同时模块化我的代码。

在./noveldownloader/noveldownloader/中创建新文件夹“data”

然后你可以像这样导入它

from noveldownloader.data import enum_file

然后你就可以使用这个函数了

enum_file.whatever_function_to_call()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多