Python模块导入的基本原理:
当您在Python中导入模块时,Python会按照以下顺序搜索模块路径:
- 当前脚本所在的目录(或称工作目录)
- 环境变量
PYTHONPATH
指定的目录 - 标准库和第三方库的安装目录
创建如下结构
my_project/
│
├── main.py
├── package_a/
│ ├── __init__.py
│ ├── module_a1.py
│ └── module_a2.py
└── package_b/
├── __init__.py
└── module_b1.py
文件内容:
-
package_a/module_a1.py
def function_a1():
print("Function A1 from Module A1")
-
package_a/module_a2.py
from .module_a1 import function_a1
def function_a2():
print("Function A2 from Module A2")
function_a1()
-
package_b/module_b1.py
from package_a.module_a1 import function_a1
def function_b1():
print("Function B1 from Module B1")
function_a1()
-
main.py
from package_a.module_a2 import function_a2
from package_b.module_b1 import function_b1function_a2()
function_b1()
上面的main是可以运行成功的,但是如果你在其中
from ../a/a1 import function_a1
就会报错
这是因为
import
语句的语法限制:
-
在
import
语句中,您需要使用模块名或包名,而不是文件系统路径。
.和..只能在包内部使用,比如a2中导入a1的方法
也可以通过在 main.py
的顶部手动修改 sys.path
,但这通常不被推荐,因为它会导致代码的可移植性和可维护性降低。
import sys
import os# 将上级目录添加到 sys.path
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))from a.a1 import function_a1function_a1()