关于Python的import你要知道的种种
常见用法
-
引入模块
import <模块名>
,例如import os
-
引入模块并起别名
import <模块名> as <模块别名>
,例如import numpy as np
-
引入部分函数、变量或类
from <模块> import <要引入的>
,例如from sys import path
解决项目中不同路径关系下py文件相互引用的问题
测试工程目录结构:
$ tree
.
├── module_1
│ ├── test_import_2.py
│ └── test.py
├── module_2
│ ├── test_import_3.py
│ └── test.py
├── test_import_0.py
└── test_import_1.py
2 directories, 6 files
总结起来两句话:
- 若要引用子目录上的py文件(例如
test_import_1.py
要引用module_1
文件夹下的test_import_2.py
),需要将被引文件所在目录升级为为模块,即在被引文件的目录下创建__init__.py
# 此时的module1目录下的目录树为:
├── module_1
│ ├── __init__.py
│ ├── test_import_2.py
│ └── test.py
- 若要引用父目录上的py文件(例如
test_import_2.py
要引用父目录文件夹下的test_import_1.py
),需要将该父目录添加到当前文件的sys.path
中
# 此时的test_import_2.py文件中有:
import sys
sys.path.append("..") #相对路径或绝对路径
举个栗子,module_2
文件夹下的test_import_3.py
要引用module_1
文件夹下的test_import_2.py
- 分析
test_import_3.py
要引用其父目录下另一子目录中的文件(读起来绕但是好理解) - 将父目录添加到
test_import_3.py
的sys.path
中
# in test_import_3.py
import sys
sys.path.append("..")
- 将子目录提升为模块,即在
module_1
文件夹下新建__init__.py
# module目录下的目录树
├── module_1
│ ├── __init__.py
│ ├── test_import_2.py
│ └── test.py
注意:引用进来的变量名为module_1.test_import_2
不同引用方式下引用函数或变量是否为相同? ——> 相同
测试样例:test_import_0.py
引用test_import_1.py
文件中的函数及变量
- test_import_0.py文件
import test_import_1
from test_import_1 import test_function
from test_import_1 import test_var
if __name__ == '__main__':
if test_function == test_import_1.test_function:
print("same function")
else:
print("different function")
if test_var == test_import_1.test_var:
print("same var")
else:
print("different var")
- test_import_1.py文件
def test_function():
return "123"
test_var = "123"
标签:py,子目录,module,引用,test,import,目录
From: https://www.cnblogs.com/lidabo/p/17043882.html