python包导入细节

 

包导入格式

导入模块时除了使用模块名进行导入,还可以使用目录名进行导入。例如,在sys.path路径下,有一个dir1/dir2/mod.py模块,那么在任意位置处都可以使用下面这种方式导入这个模块。

import dir1.dir2.mod from dir1.dir2.mod import XXX

一个实际一点的示例,设置PYTHONPATH环境变量为d:\pypath,然后在此目录下创建以上目录和mod.py文件:

set PYTHONPATH="D:\pypath" mkdir d:\pypath\dir1\dir2 echo print("mod.py") >d:\pypath\dir1\dir2\mod.py echo x=3 >>d:\pypath\dir1\dir2\mod.py  # 进入交互式python >>> import dir1.dir2.mod mod.py >>> dir1.dir2.mod.x 3

注1:在python3.3版本及更高版本是可以导入成功的,但是在python3.3之前的版本将失败,因为缺少__init__.py文件,稍后会解释该文件
注2:顶级目录dir1必须位于sys.path列出的路径搜索列表下

如果输出dir1和dir2,将会看到它们的是模块对象,且是名称空间

>>> import dir1.dir2.mod mod.py  >>> dir1 <module 'dir1' (namespace)>  >>> dir1.dir2 <module 'dir1.dir2' (namespace)>  >>> dir1.dir2.mod <module 'dir1.dir2.mod' from 'd:\\pypath\\dir1\\dir2\\mod.py'>

这种模块+名称空间的形式就是包(严格地说是包的一种形式),也就是说dir1是包,dir2也是包,这种方式是包的导入形式。包主要用来组织它里面的模块。

从上面的结果也可以看出,包也是模块,所以能使用模块的地方就能使用包。例如下面的代码,可以像导入模块一样直接导入包dir2,包和模块的区别在于它们的组织形式不一样,模块可能位于包内,仅此而已。

import dir1.dir2 from dir1 import dir2

另外,导入dir1.dir2.mod时,它声明的模块变量名为dir1,而不是dir1.dir2.mod,但是导入的对象却包含了3个模块:dir1、dir1.dir2以及dir1.dir2.mod。如下:

                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信