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

Python中无法修改PYTHONPATH及文件名时,如何导入不同文件夹的同名文件?

解决同名模块导入问题

首先纠正一个关键错误:你的PYTHONPATH设置错了——它应该添加目录路径,而不是具体的.py文件路径。这也是你之前导入异常的根源之一。

针对你的场景,无法修改文件名或PYTHONPATH的话,有两种可靠的方法导入Folder1中的needtotest.py:

方法一:调整sys.path优先级

通过把Folder1的目录路径插入到sys.path最前面,让Python优先搜索这个目录下的模块:

import sys
import os

# 获取测试文件所在目录的绝对路径
test_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接出Folder1的绝对路径
folder1_path = os.path.join(test_dir, "../Task/Folder1")
# 插入到sys.path最前面,确保优先加载Folder1的模块
sys.path.insert(0, folder1_path)

# 现在导入的needtotest就是Folder1中的版本
import needtotest

注:之前用sys.append无效是因为append会把路径加到末尾,Python搜索模块时会先找PYTHONPATH里已有的路径(Folder2相关),所以优先加载了Folder2的文件。

方法二:直接加载指定文件(推荐)

用importlib.util模块直接加载目标文件,完全绕过sys.path的搜索机制,避免同名冲突:

import importlib.util
import os

test_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接Folder1中needtotest.py的绝对路径
target_file = os.path.join(test_dir, "../Task/Folder1/needtotest.py")

# 创建模块规范并加载
spec = importlib.util.spec_from_file_location("folder1_needtotest", target_file)
folder1_needtotest = importlib.util.module_from_spec(spec)
spec.loader.exec_module(folder1_needtotest)

# 直接通过加载后的模块对象调用函数,比如:
# folder1_needtotest.lambda_handler(...)

关于你遇到的语法错误

你尝试from Proj.Task.Folder2.needtotest import lambda_handler报错,是因为Proj、Task等目录没有被识别为Python包。要使用这种绝对导入方式,需要在Proj、Task、Folder1、Folder2每个目录下创建空的__init__.py文件(Python 3.3+支持命名空间包,但兼容性不如显式添加__init__.py)。不过这种方法需要修改目录结构,如果你不想这么做,上面两种方法更适合你。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:23:38