目录
- Python引用与目录结构
- 模块的概念
- 包的概念
- 引用时搜索模块的顺序
- python工程常用目录结构
- 参考资料
哎。差点找不到之前写的这篇笔记。
Python引用与目录结构
模块的概念
模块即单个.py文件。
模块名即文件名。
引用模块:
- 只在第一次引用时执行、且执行一次。
- 引用及使用方法:
# 仅引模块
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。
引用时搜索模块的顺序
- 当前文件所在目录
- 环境变量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.py
中import mod1
在test1.py
中from pkg import mod2
- 方式三:
-- src
|-- mod1.py
|-- pkg
| |-- __init__.py(必须有)
| `-- mod2.py
|-- sub
| `-- test2.py
`-- test1.py
在test1.py
中import mod1
在test1.py
中from 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.py
中from pkg import mod2