You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sys.path.append后导入自定义模块失败,报ModuleNotFoundError如何解决?

问题解决:ModuleNotFoundError 修复及更优导入方法

1. 直接修复当前代码

你的错误在于sys.path.append添加的是文件路径而非目录路径。Python需要识别模块所在的目录,而非具体的.py文件。修改代码如下:

#! /usr/bin/env python3
import sys
# 替换为模块所在的目录路径
sys.path.append('/Users/admin/Desktop/programming/pythonscripts')
for i in sys.path:
    print(i)
import myscript

修改后Python就能在指定目录下找到myscript.py模块并成功导入。

2. 更优的导入方法推荐

方法一:设置PYTHONPATH环境变量

将模块所在目录添加到系统的PYTHONPATH环境变量中,所有Python脚本会自动识别该目录下的模块,无需每次在代码中修改sys.path。

  • Unix/Linux/macOS: 在终端执行以下命令(永久生效需添加到~/.bashrc或~/.zshrc):
    export PYTHONPATH="/Users/admin/Desktop/programming/pythonscripts:$PYTHONPATH"
    
  • Windows: 在系统环境变量中新增PYTHONPATH变量,值为目标目录的绝对路径。

方法二:将目录转为Python包

在pythonscripts目录下创建空的__init__.py文件,将其转为Python包,之后可通过两种方式导入:

  1. 相对导入:若主脚本与pythonscripts目录在同一父目录下,可使用:
    from pythonscripts import myscript
    
  2. 可编辑安装:在pythonscripts目录下创建pyproject.toml文件(内容如下),执行pip install -e .后即可全局导入该包:
    [build-system]
    requires = ["setuptools>=61.0"]
    build-backend = "setuptools.build_meta"
    
    [project]
    name = "pythonscripts"
    version = "0.1.0"
    

方法三:使用importlib.util动态导入

无需修改sys.path,直接通过文件路径导入模块:

import importlib.util

module_path = '/Users/admin/Desktop/programming/pythonscripts/myscript.py'
spec = importlib.util.spec_from_file_location('myscript', module_path)
myscript = importlib.util.module_from_spec(spec)
spec.loader.exec_module(myscript)

# 调用模块内的函数/变量示例
myscript.your_function()

内容的提问来源于stack exchange,提问作者Abhijeet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:52:22