Python模块导入问题

Python模块导入

项目目录结构
  
PythonProject                --父目录
        __init__.py
        main.py
        |    --pac1          --子目录:pac1
            __init__.py
            f1.py

        |    --pac2          --子目录:pac2
            __init__.py
            f2.py


注:Python新建一个包时,该目录下回自动生成一个 __init__.py 文件。

    --f1.py
# -*- coding:utf-8 -*-

def func1():
    print('Hello World!')



    --f2.py
# -*- coding:utf-8 -*

def func2():
    x = 9 + 9
    print(x)



场景:要在 f2 中导入 f1 并调用 f1 中的方法 func1()
①、f1 和 f2 在同级目录的不同的子目录中,所以不能直接调用,并且也不能直接调用父目录的模块
②、父目录调用子目录的模块、子目录之间调用模块,使用如下相同方法

1)方式一:import  PythonProject.pac1.f1    --导入模块PythonProject.pac1.f1
注:导入后,只能全名访问模块属性    --例如:PythonProject.pac1.f1.func1()
# -*- coding:utf-8 -*
import PythonProject.pac1.f1        # 导入模块 f1

def func2():
    x = 9 + 9
    print(x)

PythonProject.pac1.f1.func1()       # 调用模块 f1 中的func1()方法,只能全名访问模块属性 ---PythonProject.pac1.f1.func1()



2)方式二:from  PythonProject.pac1  import f1    --导入模块PythonProject.pac1.f1
注:导入后,只能以 f1.属性名访问模块属性
# -*- coding:utf-8 -*
from PythonProject.pac1 import f1      # 导入模块 f1

def func2():
    x = 9 + 9
    print(x)

f1.func1()      # 导入后,只能以 f1.属性名 访问模块属性



3)方式三:from  PythonProject.pac1.f1  import func1()    --导入模块PythonProject.pac1.f1
注:导入后,直接把 func1() 放入当前名称空间,可直接访问
# -*- coding:utf-8 -*
from PythonProject.pac1.f1 import func1     # 导入模块fill

def func2():
    x = 9 + 9
    print(x)

func1()     # 导入后,直接把 func1() 放入当前名称空间,可直接访问



4)方式4:from  PythonProject.pac1  import *
注:这个语句的原意图是想将PythonProject.pac1包下的所有模块导入到当前的名称空间.然而,由于不同平台间文件名规则不同(比如大小写敏感问题), Python不能正确判定哪些模块要被导入.这个语句只会顺序运行PythonProject和pac1 文件夹下的__init__.py文件. 要解决这个问题,应该在 pac1 文件夹下面的 __init__.py 中定义一个名字all的列表,例如:
# -*- coding:utf-8 -*-
__all__ = ["f1"]                    ---如果还有其他属性,直接用逗号“,”分隔,一次添加在后面即可  


# -*- coding:utf-8 -*
from PythonProject.pac1 import *     # 导入模块fill

def func2():
    x = 9 + 9
    print(x)

f1.func1()     # 导入后,通过 f1.属性名 访问模块属性


                     



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页