美文网首页
Python导入不同目录下模块的方法

Python导入不同目录下模块的方法

作者: 忘了呼吸的那只猫 | 来源:发表于2018-11-30 17:12 被阅读19次

    python在不同层级目录import模块的方法
    使用python进行程序编写时,经常会调用不同目录下的模块及函数。

    1. 同级目录下的调用

    目录结构如下:
    – src
    |– mod1.py
    |– test1.py

    若在程序test1.py中导入模块mod1, 则直接使用

    import mod1*或from mod1 import ;
    
    1. 调用子目录下的模块

    目录结构如下:
    – src
    |– mod1.py
    |– lib
    | |– mod2.py
    |– test1.py

    这时,如果想在程序test1.py中导入模块mod2.py ,可以在lib件夹中建立空文件init.py文件

    新的目录结构如下:
    – src
    |– mod1.py
    |– lib
    | |–init.py
    | |– mod2.py
    |– test1.py

    调用方法:

    from lib.mod2 import *或import lib.mod2.
    
    1. 调用上级目录下的文件

    目录结构如下:
    – src
    |– mod1.py
    |– lib
    | |– mod2.py
    |– sub
    | |– test2.py

    这里想要实现test2.py调用mod1.py和mod2.py ,做法是我们先跳到src目录下面,直接可以调用mod1,然后在lib上当下建一个空文件init.py ,就可以像第二步调用子目录下的模块一样,通过import lib.mod2进行调用了。具体代码如下:

    import sys
    sys.path.append('C:\\test\\A\\C')
    import mod1
    import lib.mod2
    

    需要注意的一点是:sys.path添加目录时注意是在windows还是在Linux下,windows下需要‘\\’否则会出错。

    补充init.py

    在python模块的每一个包中,都有一个init.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中也有init.py 那么它就是这个包的子包了。当你将一个包作为模块导入(比如从 xml 导入 dom )的时候,实际上导入了它的init.py 文件。

    一个包是一个带有特殊文件 init.py 的目录。init.py 文件定义了包的属性和方法。其实它可以什么也不定义;可以只是一个空文件,但是必须存在。如果 init.py 不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包。

    init.py 中还有一个重要的变量,叫做all.

    如果此时目录如下:
    – src
    |– mod1.py
    |– lib
    | |– mod2.py
    | |– mod3.py
    | |– sub
    | |– | |– mod3.py

    我们有时会使出一招“全部导入”,也就是这样:

    from lib import *
    

    这时 import 就会把注册在包init.py 文件中 all 列表中的子模块和子包导入到当前作用域中来。比如:

    文件init.py

    __all__ = ["mod2", "mod3", "sub"]
    

    相关文章

      网友评论

          本文标题:Python导入不同目录下模块的方法

          本文链接:https://www.haomeiwen.com/subject/qyghcqtx.html