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中说了,要执行该文件,必须使用绝对导入;













猜你喜欢

转载自blog.csdn.net/sloanqin/article/details/51513173