Python包创建后跨项目导入失败,求排查解决方案
Python包构建后无法导入的问题排查与修复
项目情况
有一个新Python项目,PineconeClient是包含3个方法的类,通过Poetry构建whl包,安装后出现导入失败问题。
相关文件内容
indexes目录下的__init__.py
"""Wrappers on top of vector stores.""" from e61indexingclient.indexes.PineconeClient import (CreateIndex, DeleteIndex, IndexAllDocumentsFromBlobStorage) __all__ = [ "PineconeClient", "CreateIndex", "DeleteIndex", "IndexAllDocumentsFromBlobStorage" ]
项目根目录的__init__.py
"""Main entrypoint into package.""" from importlib import metadata from typing import Optional try: __version__ = metadata.version(__package__) except metadata.PackageNotFoundError: # Case where package metadata is not available. __version__ = "" del metadata # optional, avoids polluting the results of dir(__package__) verbose: bool = False debug: bool = False __all__ = [ "PineconeClient", "CreateIndex", "DeleteIndex", "IndexAllDocumentsFromBlobStorage" ]
pyproject.toml
[tool.poetry] name = "e61indexingclient" version = "0.0.5" description = "" authors = ["x"] readme = "README.md" [tool.poetry.dependencies] python = "^3.10" langchain = "^0.0.232" openai = "^0.27.8" pinecone-client = "^2.2.2" azure-storage-blob = "^12.17.0" azure-identity = "^1.13.0" azure-ai-textanalytics = "^5.3.0" azure-core = "^1.28.0" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"
问题现象
通过pip install pathtowhlfile成功安装包后:
- 执行
import e61indexingclient无法识别该包 - 执行
from e61indexingclient.indexes.Pineconeclient import CreateIndex, DeleteIndex无法识别相关类
错误原因与修复步骤
1. __init__.py未实际导入目标对象
根目录和indexes目录的__init__.py中,__all__列出了PineconeClient等对象,但没有对应的导入语句,导致包无法暴露这些对象。
修复:
- 更新indexes目录下的
__init__.py,添加PineconeClient的导入:"""Wrappers on top of vector stores.""" from e61indexingclient.indexes.PineconeClient import ( PineconeClient, CreateIndex, DeleteIndex, IndexAllDocumentsFromBlobStorage ) __all__ = [ "PineconeClient", "CreateIndex", "DeleteIndex", "IndexAllDocumentsFromBlobStorage" ] - 更新根目录的
__init__.py,添加对应导入:"""Main entrypoint into package.""" from importlib import metadata from typing import Optional from e61indexingclient.indexes.PineconeClient import ( PineconeClient, CreateIndex, DeleteIndex, IndexAllDocumentsFromBlobStorage ) try: __version__ = metadata.version(__package__) except metadata.PackageNotFoundError: # Case where package metadata is not available. __version__ = "" del metadata # optional, avoids polluting the results of dir(__package__) verbose: bool = False debug: bool = False __all__ = [ "PineconeClient", "CreateIndex", "DeleteIndex", "IndexAllDocumentsFromBlobStorage" ]
2. 导入语句拼写错误
导入时写的Pineconeclient是小写c,但实际类名是PineconeClient(大写C),Python对大小写敏感,导致找不到类。
修复:
将导入语句修正为:
from e61indexingclient.indexes.PineconeClient import CreateIndex, DeleteIndex
3. 重新构建并安装包
执行以下命令重新生成whl并安装:
poetry build pip install dist/e61indexingclient-0.0.5-py3-none-any.whl --force-reinstall
内容的提问来源于stack exchange,提问作者Luis Valencia
相关产品推荐
相关产品推荐

