Python 3.9如何导入名称带'-'字符的文件夹模块
问题根因
Python原生import语法要求包名、模块名必须为合法Python标识符,-属于减号运算符,无法被解析为模块路径的组成部分,直接写from folder-utils.utils_b import xxx会直接抛出语法或模块找不到错误。
将导入语句中的-替换为_无法生效,原因是磁盘上实际存在的目录名仍为folder-utils,Python按模块名查找目录时只会匹配名称完全一致的文件夹,自然找不到名称为folder_utils的对应路径。
解决方案
方案1(优先选择,无额外兼容成本)
直接把磁盘上的folder-utils文件夹重命名为folder_utils,之后使用常规导入语句即可正常运行:
from folder.utils_a import hello_world_from_a from folder_utils.utils_b import hello_world_from_b
该方案完全符合Python包命名规范,不会引入路径冲突、跨环境导入失效等问题,长期维护成本最低。
方案2(无法修改原目录名时使用,纯原生实现)
如果受项目规范、外部依赖限制不能修改原文件夹名,可以通过Python内置标准库sys修改模块搜索路径实现导入,不需要使用importlib,也不依赖任何第三方包:
import sys # 把folder-utils目录加入Python模块搜索路径 sys.path.append("./folder-utils") # 导入正常命名的模块 from folder.utils_a import hello_world_from_a # 直接导入搜索路径下的utils_b模块 from utils_b import hello_world_from_b
提示:如果执行脚本时的工作目录不是main.py所在目录,请把
./folder-utils替换为folder-utils目录的绝对路径,避免相对路径匹配失败。
内容的提问来源于stack exchange,提问作者pedroprates
相关产品推荐
相关产品推荐

