1 需求
官网:
- 模块搜索路径:6. 模块 — Python 3.13.5 文档
- 作用域、命名空间:9. 类 — Python 3.13.5 文档
2 接口
3 搜索路径
在 Python 中,搜索路径是解释器查找模块和包的一系列目录。了解搜索路径有助于正确导入模块,解决ModuleNotFoundError
等问题。以下是 Python 搜索路径的核心概念:
1. 搜索路径的组成
Python 解释器按以下顺序查找模块:
- 当前目录:运行脚本所在的目录。
- 环境变量
PYTHONPATH
:自定义的环境变量,包含多个目录路径。 - 标准库目录:Python 自带的标准库模块。
- 第三方库目录:通过
pip
安装的包通常位于site-packages
目录。
2. 查看搜索路径
使用sys.path
可以查看当前 Python 解释器的搜索路径:
import sys
# 打印搜索路径列表
for path in sys.path:
print(path)
输出示例:
/Users/you/code # 当前工作目录
/Users/you/.pyenv/versions/3.9.16/lib/python39.zip
/Users/you/.pyenv/versions/3.9.16/lib/python3.9
/Users/you/.pyenv/versions/3.9.16/lib/python3.9/lib-dynload
/Users/you/.pyenv/versions/3.9.16/lib/python3.9/site-packages
3. 修改搜索路径
有两种常见方式临时修改搜索路径:
方式 1:在代码中动态添加
import sys
# 添加自定义目录到搜索路径(运行时生效)
sys.path.append('/path/to/your/module')
# 现在可以导入该目录下的模块
import my_module
方式 2:设置环境变量PYTHONPATH
在终端中设置(临时生效):
# Linux/macOS
export PYTHONPATH="/path/to/your/module:$PYTHONPATH"
# Windows (PowerShell)
$env:PYTHONPATH = "C:\path\to\your\module;$env:PYTHONPATH"
或在.bashrc
/.zshrc
中永久添加:
echo 'export PYTHONPATH="/path/to/your/module:$PYTHONPATH"' >> ~/.zshrc
source ~/.zshrc
4. 包与相对导入
对于包内模块的导入,可使用相对路径(需通过-m
参数运行):
# 包结构
my_package/
├── __init__.py
├── module_a.py
└── subpackage/
├── __init__.py
└── module_b.py
# 在module_b.py中相对导入module_a
from .. import module_a # 注意两个点表示上一级目录
运行方式:
python -m my_package.subpackage.module_b
常见问题
-
问题 1:
ModuleNotFoundError
解决:检查路径是否在sys.path
中,或使用绝对路径导入。 -
问题 2:不同环境搜索路径不同
解决:使用虚拟环境(如venv
、conda
)隔离依赖。
总结
掌握 Python 搜索路径机制后,你可以:
- 正确组织包结构,避免导入冲突。
- 灵活添加自定义模块路径。
- 调试模块导入问题。
如果需要更具体的示例或有特定场景,请进一步说明!