import导入的两种方式
- 使用点的方式可以导入,但是不能直接运行。
- 使用根目录名称导入,需要有init.py文件,否则不认为文件夹名是一个包
python模块引用的顺序:
import引用时首先判断这个module是不是built-in即内建模块,比如import sys。如果是则引入内建模块,
如果不是则在一个称为sys.path的list中寻找(引用的时候会按照下面的顺序去引用)
sys.path在python脚本执行时动态生成,包括以下3个部分:
1 | 1.脚本执行的位置,即运行模块的路径 (顺序第一) |
可以看到脚本执行的位置是位于第一优先级的。
查看python模块查找路径
1 | import sys |
同名模块冲突问题:
cvtools与pycocotools
ImportError: cannot import name XXX
Main:
1 | import time |
Entity:
1 | from vector import Vect |
Vector:
1 | from math import * |
Physics:
1 | from entity import Ent |
I then run from main.py and I get the following error:
1
2
3
4
5
6
7
8
9 > Traceback (most recent call last):
> File "main.py", line 2, in <module>
> from entity import Ent
> File ".../entity.py", line 5, in <module>
> from physics import Physics
> File ".../physics.py", line 2, in <module>
> from entity import Ent
> ImportError: cannot import name Ent
>
You have circular dependent imports. physics.py
is imported from entity
before class Ent
is defined and physics
tries to import entity
that is already initializing. Remove the dependency to physics
from entity
module.