python中的包管理与导入

包中的__init__.py文件

1、python的每个模块的包中,包含一个__init__.py文件,有了这个文件,才能导入目录下的module。

2、__init__.py为空时,使用from xxx import *从该包导入时,虽然正常工作,但是没有导入任何内容。

3、可以在__init__.py中导入其它包或模块,这样当引入该包时,__init__.py运行,自动导入这些模块。

    如__init__.py内容为:

    import aa

    import bb

    使用时,from xxx import *,将自动导入aa和bb。

4、__init__.py中有一个特殊变量__all__,定义一个列表,当使用from xxx import *时,将自动导入所有__all__中列出的子包或子模块。

   如:__all__ = ['cc','dd']

   from xxx import *将自动导入cc和dd。

import格式

1、import xxx /import packagename.xxx /import package1.package2.xxx

每级package目录中都需要__init__.py。

3、from packagename import xxx/from package1.package2 import xxx

4、from packagename import */from package1.package2 import *

*只用放在有from的导入的import后面。

import */from package1 import package2.*,格式都是不正确的。

绝对路径与相对路径

1、absolute import

 相对于sys.path中定义的路径。

2、relative import

 import xxx/import package1.xxx

 从语句上,看不出来是sys.path下的模块,还是当前包下的模块。relative import不建议使用。

可以在文件中加入from __future__ import absolute_import禁止relative import。这样会认为import xxx/import package1.xxx都是absolute import,相对于sys.path中的路径。

3、explicit relative import

from . import xxx/from .package1 import xxx/from ..package1 import xxx

用一个点表示当前package中进行查找,两个点表示上一层package中进行查找。

注意事项:

python中只能在模块中使用relative import,而不能在应用程序中使用relative import。应用程序必需使用absolute import,而package中可以使用相对导入。

explicit relative import 使用模块的名字确定模块在包中的位置,入口文件模块名字总是__main__。在package中使用relative import时,一定不能引用到入口文件所在的那一层目录。

如:

main.py

|___________core

|                  |____________sunny.py

|                  |____________ __init__.py

|___________effect

|                  |____________windy.py

|                  |____________ __init__.py

|________________________ __init__.py  

在sunny.py中使用from ..effect import windy,因为 .. 运算符进入上一层的package, 然后发现入口文件就在这一层,所以不会把这一层当作一个package, 这样就会出现 下面的错误:

ValueError: Attempted relative import beyond toplevel package。


    

转载于:https://my.oschina.net/u/136074/blog/551151

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值