Python包安装后子模块handlers无法导入问题求助
问题出在两个核心点:目录结构不符合Python包规范,以及pyproject.toml缺少包发现配置,导致子模块没被正确识别。
1. 先修正目录结构
你当前的src目录下直接放了project.py和handlers子目录,这会让project被当成单个模块文件,而非能包含子模块的包。正确的src布局应该是在src下建一个和包名同名的project目录,把所有相关文件和子目录都塞进去:
project/ src/ project/ handlers/ __init__.py sqlserver.py # 包含SqlServerHandler类 __init__.py project.py # 包含其他类 pyproject.toml
2. 完善pyproject.toml配置
给pyproject.toml加一段配置,让setuptools自动从src目录里找所有包:
[build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta" [project] name = "project" version = "1.0.0" requires-python = ">=3.10.5" authors = [{ name = "me" }] dependencies = [ "pyodbc" ] # 新增:自动从src目录查找所有包 [tool.setuptools.find] where = ["src"]
3. 重新安装包
先卸载旧版本,再重新安装:
pip uninstall project -y pip install c:\path\to\project
测试导入
现在就能正常导入子模块了:
from project import SomeClass # 正常工作 from project.handlers.sqlserver import SqlServerHandler # 现在可以正确导入
简单说下原因:
- 改完目录结构后,
project才是标准的Python包,handlers作为它的子包存在,符合导入路径的逻辑。 tool.setuptools.find配置会让setuptools递归扫描src下所有带__init__.py的目录,确保所有子包都被打包并安装到site-packages里。
内容的提问来源于stack exchange,提问作者t3chb0t
相关产品推荐
相关产品推荐

