我的文件是这样的
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__)不能有相对导入。
试试在前面加上
而且相对路径是相对当前模块名的,而主模块名一定是“__main__”,所以
是在主模块中无法找到相对路径的包的,必须使用绝对路径。非主模块
才可以使用相对路径
w3school
spiders
__init__.py
w3school_spider.py
__init__.py
items.py
你的目录结构是这样吗,然后在w3school_spider.py中引用items.py中的内容?
这样应该能行了吧。
在一个package中,同级使用
.
,父级使用..
。最后有一个建议,可以把一个package中的一些常用的类或者函数放到__init__.py中。