【发布时间】: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_fileif yes 我已经试过了,但很遗憾也没有用但是 sys.path.append(..) 的提示有效,但你能解释一下它对我有什么作用吗?我知道它会将当前目录上方的目录的路径添加到某个系统路径,但我不明白为什么?