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

Python中如何导入名称包含连字符(-)的目录?

解决Python导入含连字符目录的语法错误

这个问题我之前也碰到过!核心原因其实是Python的命名规则在搞鬼——Python里的模块、包名必须是合法的标识符,而连字符(-)是不允许出现在标识符里的,解析器会把gib-bin当成gib - bin(减法运算),自然就抛出SyntaxError: invalid syntax了。

下面给你几种可行的解决方案,按推荐优先级排序:

1. 重命名目录(最推荐,符合Python规范)

直接把带连字符的目录gib-bin改成符合PEP8命名规范的名字,比如用下划线代替连字符的gib_bin。修改后,你的导入语句就可以正常运行了:

from gib_bin.Test import print_test
print_test()

这是最简洁、最易维护的方案,能避免后续其他潜在的命名相关问题。

2. 使用importlib动态导入(无法修改目录名时)

如果因为项目约束等原因不能修改目录名,可以用Python标准库的importlib模块来实现动态导入:

import importlib.util
import sys

# 指向你的Test.py文件路径
module_file_path = "./gib-bin/Test.py"
# 自定义一个合法的模块名
module_name = "gib_bin_test"

# 创建模块规格并加载模块
spec = importlib.util.spec_from_file_location(module_name, module_file_path)
test_module = importlib.util.module_from_spec(spec)
sys.modules[module_name] = test_module
spec.loader.exec_module(test_module)

# 调用目标函数
test_module.print_test()

这种方式绕开了静态导入的命名限制,适合必须保留原目录名的场景。

3. 通过sys.path配合__import__导入(另一种动态方式)

你也可以把目标目录的父路径添加到Python的模块搜索路径,再用__import__函数动态导入:

import sys
# 把gib-bin所在的目录添加到sys.path(这里假设它在当前工作目录下)
sys.path.append("./")

# 动态导入指定模块
test_module = __import__("gib-bin.Test", fromlist=["print_test"])
test_module.print_test()

不过这种方式的可读性和规范性不如前两种,仅作为备选方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:31:22