python3的包导入, 纠察语法细节时发现了一个问题
包目录如图
绝对导入的规则是可以导入当前模块对应顶级包的同级别模块的, 所以
file11.py
from pk3 import *
该导入是有效的, 但是同目录下使用ipython的交互环境
1 from pk3 import *
ModuleNotFoundError: No module named 'pk3'
求解,为什么 ? 我的理解交互环境不是相当于当前目录下的可交互式的.py文件吗, 为什么静态的.py文件的导入可以成功, 动态不行?
python项目导包很容易出现问题,这一块儿会出现找不到父包,或者说没有这个模块,或者说循环导入问题。
我的建议是导包,不要尽量使用相对导入,相对导入很容易报错,至于绝对导入也出现错误的话,将同级目录的父目录加入路径就行
# 将pk11上上级目录demo1添加到path,添加之前可以输出sys.path看他在里面吗,么有就添加!
import sys,os
sys.path.append(os.path.abspath(os.path.join(os.getcwd(), "../..")
# print(sys.path)
查看一下你进入交互环境的路径。