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

如何在Python中从带短横线的同级文件夹调用函数?

带短横线文件夹的Python模块导入解决方案

问题场景

目录结构如下:

├── folderA
│   └── A.py
└── folder-B
    └── B.py

folder-B/B.py 代码:

def methodB():
    return "\n\nThis is methodB from Folder-B"

folderA/A.py 初始代码:

import sys
sys.path.append("..")
from folder-B.B import methodB
s = methodB()
print(s)

执行 python A.py 时触发语法错误:

File "A.py", line 3
from folder-B.B import methodB
^ SyntaxError: invalid syntax

原因:Python的标识符(包/模块名)不允许包含短横线,解析器会把folder-B误判为folder - B的运算表达式,导致语法错误。

解决方案(保留短横线文件夹名)

方法1:使用importlib.import_module动态导入

这是官方推荐的处理特殊命名模块的方式,修改A.py代码如下:

import sys
import importlib

# 将上级目录加入模块搜索路径
sys.path.append("..")

# 直接导入目标模块
b_module = importlib.import_module("folder-B.B")
# 调用模块中的函数
s = b_module.methodB()
print(s)

方法2:使用__import__函数(兼容旧版本Python)

如果使用Python 3.4之前的版本,可以用内置的__import__函数:

import sys
sys.path.append("..")

# 导入folder-B.B模块
b_module = __import__("folder-B.B", fromlist=["methodB"])
s = b_module.methodB()
print(s)

补充写法

如果希望更贴近常规导入逻辑,也可以分步导入:

import sys
import importlib
sys.path.append("..")

# 先导入folder-B包
folder_b = importlib.import_module("folder-B")
# 再导入包内的B模块
b_module = importlib.import_module("B", package="folder-B")
s = b_module.methodB()
print(s)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:20:35