python包导入失败_python包内导入模块失败?

博主在尝试从w3school_spider.py导入items.py中的W3schoolItem类时遇到了ImportError和ValueError。错误分别提示找不到模块和在非包环境下尝试相对导入。解决方案包括:使用`-m`命令行参数进行模块化启动,修改sys.path添加模块路径,或者调整目录结构使用相对导入。建议在package的__init__.py中放置常用类和函数。
摘要由CSDN通过智能技术生成

我的文件是这样的

w3school:

spiders

__ __init___.py

w3school_spider.py

__init__.py

items.py

我现在在w3school_spider.py中导入items中的一个类,我写的是这样:

from w3school.items import W3schoolItem

但是显示

ImportError: No module named w3school.items

如果我改成:

from .items import W3schoolItem

则会显示:

ValueError: Attempted relative import in non-package

我搜了一下是不是路径问题?需要我把这个items.py放进c/python2.7/lib中吗?

请各位看看,谢谢。

命令行参数-m可以将模块进行模块化启动,此时名称为模块名(不是__main__),程序中就可以添加相对导入

-m操作必须在模块上一层目录执行(不在当前目录),格式:python -m new.w3school_spider

记住末尾没有.py。

也可以直接把items.py放到spiders里面,此时items.py和w3school_spider.py在同一个

文件夹里,默认进行相对导入,直接from items import W3schoolItem

第一个错误原因就是Python没有在同文件中找到你要的模块,第二个错误是因为运行的模块

中(名称为__main__)不能有相对导入。

试试在前面加上

import sys

#加入w3school的路径

sys.path.append('/path/to')

而且相对路径是相对当前模块名的,而主模块名一定是“__main__”,所以

是在主模块中无法找到相对路径的包的,必须使用绝对路径。非主模块

才可以使用相对路径

w3school

spiders

__init__.py

w3school_spider.py

__init__.py

items.py

你的目录结构是这样吗,然后在w3school_spider.py中引用items.py中的内容?

from ..items import W3schoolItem

这样应该能行了吧。

在一个package中,同级使用

.

,父级使用

..

最后有一个建议,可以把一个package中的一些常用的类或者函数放到__init__.py中。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值