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

Python模块导入问题:同目录模块导入失败的原因与解决方法

Python模块导入失败的原因与解决办法

咱们先把问题的核心原因拆解清楚:

为什么移目录后导入失败?

Python找模块全靠sys.path这个搜索路径列表——当你运行脚本时,Python会把当前工作目录(就是你执行python命令时所在的文件夹)和一些系统默认路径加到这个列表里,然后只在这些路径里找要导入的模块。

  • 之前两个文件都在Python-Part目录下时,你肯定是在Python-Part里运行脚本,这时候sys.path包含了这个目录,自然能找到同目录的salute.py。
  • 移到Python-Part/Modules&Packages后,如果你还是在Python-Part目录下运行python Modules&Packages/my_module.py,sys.path里只有Python-Part,而salute.py在子文件夹里,Python根本搜不到它;就算你进了子文件夹运行,如果IDE的工作目录没同步切换,也会出现同样的问题。

几个实用的解决办法

根据你的使用场景选就行:

1. 切换到脚本所在目录运行

最直接的办法,打开终端先跳转到Modules&Packages文件夹,再运行脚本:

cd Python-Part/Modules&Packages
python my_module.py

这时候Python会把当前目录(也就是salute.py所在的文件夹)加到sys.path里,自然能找到模块。

2. 手动给Python加搜索路径

如果不想每次都切换目录,可以在my_module.py开头加几行代码,主动把脚本所在目录加到sys.path里:

import sys
import os

# 获取当前脚本的绝对路径所在目录
script_folder = os.path.dirname(os.path.abspath(__file__))
# 把这个目录加入Python的搜索路径
sys.path.append(script_folder)

# 后面正常导入就行
import salute
from salute import fruits
salute.say_hello('Rafi')
print(fruits['name'])

不管你在哪个目录运行这个脚本,Python都能精准找到salute.py。

3. 把文件夹变成Python包(适合长期维护)

如果这个文件夹以后要放更多模块,推荐把它变成标准的Python包:

  1. 在Modules&Packages目录下创建一个空的__init__.py文件(不用写任何代码,只是告诉Python这是个包);
  2. 修改my_module.py里的导入代码为相对导入:
from . import salute
from .salute import fruits
salute.say_hello('Rafi')
print(fruits['name'])
  1. 回到Python-Part目录,用包的方式运行脚本:
python -m Modules&Packages.my_module

用-m参数运行会让Python把Python-Part加入搜索路径,同时识别Modules&Packages为包,相对导入就能正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:22:46