RedHat Linux下Python相对导入遇utils模块找不到错误的解决办法
解决Python模块导入错误的方法
目录结构
. ├── another_dir │ └── main.py └── utils ├── __init__.py ├── config.py └── helper.py
问题原因
运行another_dir/main.py时抛出no module utils错误,是因为Python默认只会把当前脚本所在的another_dir目录加入模块搜索路径,而utils所在的上层根目录不在搜索范围内,导致无法找到该模块。
以下是几种在RedHat Linux中可行的解决方式:
方法1:在代码中手动添加模块搜索路径
在main.py开头加入代码,将utils所在的根目录添加到Python的模块搜索路径中:
import sys import os # 获取当前脚本的绝对路径,进而得到上层根目录 root_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(root_path) # 现在可以正常导入utils模块 from utils import config from utils import helper
方法2:通过环境变量PYTHONPATH指定路径
在运行脚本前,将根目录添加到PYTHONPATH环境变量中(适用于临时测试场景):
- 切换到项目根目录(即包含
another_dir和utils的目录) - 执行以下命令设置环境变量并运行脚本:
export PYTHONPATH=$(pwd):$PYTHONPATH python another_dir/main.py
如果是绝对路径,比如项目根目录为/home/user/my_project,可以直接写:
export PYTHONPATH=/home/user/my_project:$PYTHONPATH python /home/user/my_project/another_dir/main.py
方法3:使用相对导入(需以模块方式运行脚本)
修改main.py的导入语句为相对路径格式:
from ..utils import config from ..utils import helper
然后在项目根目录下,以模块的方式运行main.py:
python -m another_dir.main
注意:这种方式不能直接用python another_dir/main.py运行,必须通过-m参数指定模块路径,否则会触发相对导入错误。
方法4:将项目作为可安装包(适合长期维护的项目)
在项目根目录下创建setup.py文件,内容如下:
from setuptools import setup, find_packages setup( name="my_project", version="0.1", packages=find_packages() )
然后在根目录下执行命令,以可编辑模式安装项目:
pip install -e .
安装完成后,无论在哪个目录运行main.py,都能直接导入utils模块。
内容的提问来源于stack exchange,提问作者Vin Bolisetti
相关产品推荐
相关产品推荐

