Python包安装后下划线变连字符致无法导入问题求助
问题解答
1. 为什么会出现包名下划线变连字符且无法导入的情况?
- pip的命名转换规则:PyPI和pip允许包的分发名称使用下划线或连字符,并且会自动将两者视为等价。在安装时,pip会统一把下划线转换成连字符显示(因为连字符在URL和命令行场景中更友好),这属于正常的规范行为,不是错误。
- 核心问题是你混淆了分发名称和模块名称:
- pyproject.toml里的
name字段是分发名称,也就是pip安装时显示的名字,它可以包含下划线或连字符; - 实际能在Python中导入的是模块名称,也就是你src目录下的
devops_python_utils_package文件夹名,这个必须符合Python标识符规则(只能用下划线,不能用连字符)。你误以为分发名就是模块名,所以用了错误的名字尝试导入,导致失败。
- pyproject.toml里的
2. 如何解决并正常使用包内文件?
方法一:直接使用正确的模块名导入
你的实际可导入模块名是devops_python_utils_package,所以在代码里应该这样写:
# 导入整个包 import devops_python_utils_package # 或者导入包内的具体文件 from devops_python_utils_package import file1
方法二:优化包配置(可选,让打包更规范)
如果你希望分发名和模块名的关系更清晰,或者确保setuptools正确识别你的包,可以修改pyproject.toml,添加包发现配置:
在文件中新增[tool.setuptools]部分:
[tool.setuptools] packages = find: package-dir = {"" = "src"}
这个配置会让setuptools自动从src目录下查找所有Python包,确保打包时正确包含你的模块,避免出现打包遗漏或名称混淆的问题。
另外,你尝试的importlib.import_module('myorg-devops-utils')必然失败,因为连字符不是合法的Python标识符,Python模块名不允许使用连字符。
内容的提问来源于stack exchange,提问作者bcunning
相关产品推荐
相关产品推荐

