基础
- 一个文件就是一个模块,模块包含变量、函数、类
- 包是一堆模块的集合,物理上对应一个目录
- 包的根目录下一般存在一个__init__.py文件,用于输出包中的对象,也就是对外的接口
- 导入一个包和模块,可以用import和 from … import 两种写法
- 自己对外发布的包,顶层包名要唯一,而且你项目中的导入路径推荐以顶层包名开头的形式,当然也可以使用.或…相对路径
- pycharm里自动将ContentRoot和SourceRoot加到PYTHONPATH了,所以你运行项目下的脚本能按包名找到模块
常见问题
ImportError: attempted relative import with no known parent package
主模块只能使用绝对导入。
主模块所在文件夹不会被视作package,因此除了主模块外,与主模块处在同个文件夹的模块(也就是同级的模块)也必须使用绝对导入。
通常发生在你采用相对路径. 或…导入对象,但运行时直接把该脚本当做主模块了。所以你要搞清楚python是怎么去找模块的。
推荐在tests目录的单元测试中去执行你包中的代码,这样在unit test中,你采用的是绝对路径,即 <顶层包名>.<…>…的方式,就不会有此错误了。
请采用如下两种写法:
main.py:
import sys
import os