目录


  • Python引用与目录结构
  • 模块的概念
  • 包的概念
  • 引用时搜索模块的顺序
  • python工程常用目录结构
  • 参考资料



哎。差点找不到之前写的这篇笔记。

Python引用与目录结构

模块的概念

模块即单个.py文件。
模块名即文件名。

引用模块:

  1. 只在第一次引用时执行、且执行一次。
  2. 引用及使用方法:
# 仅引模块
import module
m1.fun() ##使用其内变量/函数,必须使用"模块名."。否则报错

# 引模块的特定变量/函数
from module import fun
fun() ##不必使用"模块名."
# 仅引模块
import module
m1.fun() ##使用其内变量/函数,必须使用"模块名."。否则报错

# 引模块的特定变量/函数
from module import fun
fun() ##不必使用"模块名."

模块也是对象,具有一个内置属性__name__。该属性有两种取值:模块名__main__

  • 举例说明取值问题:当在A文件中引入B模块,A文件的__name__取值为__main__,B模块的__name__取值为模块名
  • __name__的使用场景:在import模块时,默认情况下,模块的所有语句都会被执行一次。如果希望模块中有某些语句,在import时避免执行,可以:
if __name__ == 'main':
    ## 这里的语句将在import时避免执行
    ## 因为import时,条件为假
if __name__ == 'main':
    ## 这里的语句将在import时避免执行
    ## 因为import时,条件为假

包的概念

包即一个文件夹。
包含了__init__.py和一系列.py文件。包名即文件夹名。

__init__.py是为了避免将文件夹名当作普通的字符串,其内容可以为空,一般用来进行包的某些初始化工作或者设置__all__值,用以暴露该包的 API。

引用时搜索模块的顺序

  1. 当前文件所在目录
  2. 环境变量PYTHONPATH(包含python带的模块、自己安装的模块),可以通过bash或sys.path修改

python工程常用目录结构

  • 方式一
-- src
    |-- mod1.py(被引用的模块)
    `-- test1.py(主程序)

test1.py中直接import mod1即可。

  • 方式二:
-- src
    |-- mod1.py(被引用的模块1)
    |-- pkg
    | |-- __init__.py(必须有)
    |   `-- mod2.py(被引用的模块2)
    `-- test1.py(主程序)

test1.pyimport mod1

test1.pyfrom pkg import mod2

  • 方式三:
-- src
    |-- mod1.py
    |-- pkg
    | |-- __init__.py(必须有)
    |   `-- mod2.py
    |-- sub
    |   `-- test2.py
    `-- test1.py

test1.pyimport mod1

test1.pyfrom pkg import mod2

test2.py

import sys
sys.path.append("..") ## 临时加入父目录
## 然后就可以正常地:
import mod1
from pkg import mod2

import sys
sys.path.append("..") ## 临时加入父目录
## 然后就可以正常地:
import mod1
from pkg import mod2

test1.pyfrom pkg import mod2