Python3 + Django环境下ModuleNotFoundError问题求助:无法导入utilities模块
Python3 + Django环境下ModuleNotFoundError问题求助:无法导入utilities模块
我来帮你分析下问题并给出可行的解决办法~
首先先还原下你的项目结构和问题细节:
项目目录结构
sample-django/ # 项目根目录 ├── scripts/ │ └── run_scripts.py └── utilities/ ├── __init__.py └── methods.py
你的run_scripts.py代码
from utilities.methods import get_name def main(): print(get_name()) main()
运行时的错误
ModuleNotFoundError: No module named 'utilities'
你之前尝试添加sys.path.append('/Users/projects/sample-django/utilities')没解决问题,核心原因是你添加的路径不对——Python要找的是utilities这个包(它在项目根目录下),而不是直接找utilities目录里的文件。下面给你几种靠谱的解决方式:
方法1:在代码中动态添加项目根目录到sys.path
这是最灵活的方式,不需要改环境变量,代码本身就能适配路径:
修改run_scripts.py为:
import sys import os # 获取当前脚本所在的scripts目录的绝对路径 current_script_dir = os.path.dirname(os.path.abspath(__file__)) # 项目根目录是scripts目录的上一级 project_root = os.path.dirname(current_script_dir) # 把根目录添加到Python的模块搜索路径里 sys.path.append(project_root) from utilities.methods import get_name def main(): print(get_name()) main()
这样运行run_scripts.py时,Python就能找到根目录下的utilities包了。
方法2:使用相对导入(需调整运行方式)
如果不想修改sys.path,可以用Python的相对导入语法,但需要满足两个条件:
- 给
scripts目录也添加一个__init__.py,让它变成一个可导入的包; - 不能直接运行
run_scripts.py,要从项目根目录用模块方式执行。
修改后的run_scripts.py:
from ..utilities.methods import get_name def main(): print(get_name()) if __name__ == "__main__": main()
然后在终端切换到sample-django目录,执行:
python -m scripts.run_scripts
方法3:设置PYTHONPATH环境变量
如果你不想改代码,可以在运行脚本前把项目根目录加入PYTHONPATH,让Python全局搜索这个路径下的模块:
- macOS/Linux终端:
export PYTHONPATH="/Users/projects/sample-django:$PYTHONPATH" python scripts/run_scripts.py
- Windows CMD:
set PYTHONPATH=C:\Users\projects\sample-django;%PYTHONPATH% python scripts\run_scripts.py
- Windows PowerShell:
$env:PYTHONPATH = "C:\Users\projects\sample-django;$env:PYTHONPATH" python scripts\run_scripts.py
备注:内容来源于stack exchange,提问作者Developer7
相关产品推荐
相关产品推荐

