在写Python脚本时,经常会遇到ModuleNotFoundError: No module named 'xxx'这种错误。尤其是项目结构复杂,或者用到了自己写的模块,Python找不到该去哪儿加载,这时候就得手动干预一下库路径了。
什么是Python库路径?
Python在导入模块时,并不是全盘扫描硬盘,而是按照一个叫 sys.path 的列表顺序去查找。这个列表包含了当前目录、标准库路径、第三方库安装位置等。你可以简单理解成“Python找包的路线图”。
想看看这张“地图”长啥样?运行下面这段代码:
import sys
for path in sys.path:
print(path)
临时添加路径:适合调试
如果你只是在测试阶段,想让Python临时认得某个文件夹里的模块,可以直接修改 sys.path。比如你的项目结构是这样的:
my_project/
├── main.py
└── my_modules/
└── utils.py
在 main.py 里想导入 utils,可以这样写:
import sys
import os
# 将 my_modules 添加到搜索路径
sys.path.append(os.path.join(os.path.dirname(__file__), 'my_modules'))
from utils import some_function
这种方式简单直接,重启脚本就失效,适合临时调试。
永久设置:通过PYTHONPATH环境变量
如果多个项目都要用到同一个工具库,反复写 sys.path.append 就太麻烦了。这时候可以设置系统环境变量 PYTHONPATH。
在 Linux 或 macOS 上,打开终端,编辑 shell 配置文件(如 ~/.zshrc 或 ~/.bash_profile):
export PYTHONPATH="$PYTHONPATH:/path/to/your/modules"
Windows 用户可以在“系统属性 → 环境变量”中添加:
- 变量名:
PYTHONPATH - 变量值:
D:\my_python_libs;E:\projects\shared_utils
设置完成后,所有 Python 脚本都能直接导入这些路径下的模块。
使用.pth文件:更优雅的方案
还有一种更“Pythonic”的方式:在 Python 安装目录的 site-packages 下创建一个以 .pth 结尾的文件,每行写一个你想加入的路径。
比如创建 my_paths.pth,内容如下:
/Users/name/dev/python-libs
/Dropbox/shared/modules
只要文件放在正确位置,Python 启动时会自动读取并加入 sys.path。这种方式不依赖环境变量,适合团队协作时统一配置。
虚拟环境中的路径设置
现在大多数项目都用虚拟环境(venv)。你可以在虚拟环境的 lib/python3.x/site-packages/ 目录下放 .pth 文件,这样只影响当前项目,不会污染全局环境。
举个例子,你在项目根目录执行:
python -m venv venv
# 激活环境后
echo '/Users/name/myproject/custom_modules' > venv/lib/python3.9/site-packages/local.pth
之后在这个环境中运行的脚本,都能直接导入 custom_modules 里的内容。
路径设置看似小技巧,但在实际开发中能省去不少“找不到模块”的烦恼。根据使用场景选择合适的方式,既能保持代码整洁,又能提升协作效率。