You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Python 3.6跨文件导入类时出现ModuleNotFoundError问题咨询

解决Python导入Article类时的ModuleNotFoundError问题

嘿,我来帮你排查这个导入错误的问题!虽然你提到用Django开发,但代码里用到了Scrapy的Item类,不过不管是Scrapy还是Django项目,Python模块导入的核心逻辑是一致的,咱们从几个常见的方向来排查:

1. 检查文件结构与导入路径是否匹配

首先得确认你的文件层级,举个典型的Scrapy项目结构例子:

your_scrapy_project/
├── your_scrapy_project/
│   ├── __init__.py
│   ├── items.py       # 这里定义了Article类
│   └── spiders/
│       ├── __init__.py
│       └── my_spider.py  # 这里是你写第二个类的文件

如果是在my_spider.py里导入Article,要根据层级用正确的导入方式:

  • 绝对导入(推荐,更清晰):
    from your_scrapy_project.items import Article
    
  • 相对导入(适用于包内部的模块):
    from ..items import Article
    

如果两个文件在同一目录下,直接写from items import Article就可以,但要保证这个目录在Python的可搜索路径里。

2. 确认目录已被标记为Python包

Python需要识别你的目录为可导入的包,虽然Python3.3+支持无__init__.py的命名空间包,但有些旧环境或者框架(比如Scrapy)还是依赖这个文件。如果你的代码目录里没有__init__.py,创建一个空的就行,它不需要写任何代码,只是告诉Python“这是一个包”。

3. 检查项目根目录是否在Python的搜索路径中

有时候你运行脚本的位置不对,导致Python找不到你的模块。可以在第二个类的文件开头加几行代码排查:

import sys
print(sys.path)

如果输出里看不到你的项目根目录,就手动把它添加到路径里:

import sys
from pathlib import Path
# 根据你的文件层级调整parent的数量,比如这里是回到项目根目录
sys.path.append(str(Path(__file__).parent.parent))

另外,尽量在项目根目录下运行你的爬虫/脚本,比如用scrapy crawl your_spider,而不是进入spiders目录再执行。

4. 检查拼写是否正确

Python是大小写敏感的,一定要确认导入语句里的文件名、类名没有拼写错误:

  • 比如是不是把items写成了item
  • 是不是把Article写成了article
    这些小细节很容易出错,仔细核对一下!

内容的提问来源于stack exchange,提问作者user8665559

火山引擎 最新活动