多 Python 项目导入问题解决方案:修改 sys.path、设置 PYTHONPATH、优化项目结构、使用 importlib。
方案对比
| 方案 | 优点 | 缺点 | 适用场景 |
|---|
修改 sys.path | 简单直接 | 需在每个入口添加代码 | 快速调试、脚本开发 |
设置 PYTHONPATH | 一次设置全局生效 | 依赖系统配置 | 长期开发 |
| 优化项目结构 | 结构规范、依赖明确 | 需创建 setup.py | 长期维护项目 |
使用 importlib | 灵活、避免全局污染 | 语法复杂 | 动态加载场景 |
方案详解
1. 修改 sys.path
1
2
3
4
| import sys, os
project_path = os.path.join(os.path.dirname(__file__), "models", "Practical-RIFE")
sys.path.append(project_path)
from video_interpolation_operator import VideoInterpolationOperator
|
2. 设置 PYTHONPATH
Linux/MacOS:
1
| export PYTHONPATH=/path/to/models/Practical-RIFE:/path/to/models/AMT:$PYTHONPATH
|
Windows:
1
| set PYTHONPATH=C:\path\models\Practical-RIFE;C:\path\models\AMT;%PYTHONPATH%
|
3. 优化项目结构(推荐)
创建 setup.py:
1
2
| from setuptools import setup, find_packages
setup(name="practical-rife", version="0.1.0", packages=find_packages())
|
安装:
4. 使用 importlib
1
2
3
4
| import importlib.util, os
spec = importlib.util.spec_from_file_location("module", "/path/to/module.py")
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
|
通用建议
- 使用虚拟环境隔离依赖
- 确保每个子项目包含
__init__.py - 避免循环导入
Comments