python中的import小坑
-
当文件名(a.py文件)和文件夹名(文件夹a)相同时,在a.py文件中使用
from a import xxx,此时a会优先解析为a.py文件,而非文件夹a -
python中
import某个A模块时,首先会从python的内置模块中查找是否含义该模块的定义;若未查询到会从sys.path对应的模块路径查询是否含有对应模块的定义,如果搜索完成依然没有对应A模块时则抛出import的异常 -
引用同级目录的其他*.py文件,可以直接用
import -
引用下级目录的其他*.py文件,可以直接用
from xx import xx -
引用其他目录的其他*.py文件,可以用如下代码将项目根目录所在的绝对路径加入
sys.path,即python搜索模块的路径列表,再从项目根目录采用from xx import xx逐级向下引用# 将项目根目录加入到sys.path中 # way 1 import sys import os # 返回当前目录的绝对路径(实质上,在vscode环境下,是项目所在的绝对路径,即.vscode文件夹所在的目录) # 参数为'..'时,返回当前目录的上级目录的绝对路径 dir = os.path.abspath('.') sys.path.append(dir) # way 2 import sys # 参数随引用文件所在的位置而定 # 参数为''或者'.',指的是项目的根目录 sys.path.append('.') -
关于"."和".."
# 从当前package中查找XX from . import XX # 从上一层package中查找XX from .. import XX注意:若case/main.py作为入口文件"__main__",此时文件夹case是不会被当成一个package的。例如有目录树如下:
case/ |—— package1 | |—— __init__.py | |—— file1.py |—— package2 | |—— __init__.py | |—— file2.py |—— __init__.py |—— main.py同时有如下代码
# case/package1/file1.py from .. import package2 # case/main.py import package1.file1此时虽然case文件夹下有"__init__.py"文件,理应作为一个package。但是当直接执行case/main.py时,就没有把完整的case当作一个package来处理。因此在main.py里
import package1.file1的时候,文件file1.py中的from .. import package2会因为找不到上一层的package而报错。同样的,将file1.py作为入口文件,文件夹case也不会被当作是一个package

浙公网安备 33010602011771号