python的package import 以及相对导入和绝对导入
1、首先基本的概念可以参考书或者百度,我这里是给出实践说明,同时提供源码说明;
2、要注意:如果要将一个文件夹目录当做package的话,必须要在该目录下加一个__init__.py的文件(注意是两个下划线连在一起__),否则将无法作为一个package;
3、程序的目录结构如下:
3、谨记:执行应用程序的模块,不能使用相对导入;比如a.py,打算执行该文件,那么该文件文件名就会变成__main__,若使用相对导入 也就是from .* 这种形式,就会出错;因为当前的模块名改变后,解释器认为相对路径失效;
4、注意该工程是在testPythonPackageImport的目录下打开的;
5、当我们执行test21.py文件的时候,文件中打印出了sys.path,我们可以观察到包含了路径 xxx/testPythonPackageImport 和 xxx/testPythonPackageImport/top/test2
前者的出现原因应该是pycharm这个IDE自动帮我们把项目的目录加进去了,后者的出现是因为是在该目录下执行了test21.py文件;
如果要增加搜索路径的话,可以在当前的已有的某个路径下,添加后缀为.pth的文件,在文件中加入需要搜索的路径,python就会自动加入了;
6、关于执行out,说明相对导入产生的错误:
out.py中导入模块有两种方式,一种是绝对导入:import top.test1.test11 as test11
一种是相对导入:from .top.test1 import test11
应该说这两种都是正确的,但是当我们要直接执行out.py的时候,相对导入就会发生错误,所以前面3中说了,要执行该文件,必须使用绝对导入;