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

从PyPI/TestPyPI安装自定义Python包后无法直接import导入问题

问题根因

你从PyPI安装的包出现双层导入问题,核心是构建的发布包包含了冗余的目录层级:site-packages目录下生成了没有__init__.py的外层package_name目录(即你看到的命名空间模块),实际包含代码的内层包被放到了site-packages/package_name/package_name/路径下。
开发模式pip install -e正常是因为该模式会直接把项目根目录加入Python搜索路径,内层package_name包直接暴露在路径下,无需额外层级即可导入。

解决步骤

1. 清理旧构建产物

每次打包前必须删除历史构建生成的缓存文件,避免旧错误产物被重复上传,在setup.py所在目录执行命令:

# Linux/Mac 环境
rm -rf build dist *.egg-info
# Windows 环境
rd /s /q build dist
del /s /q *.egg-info

2. 验证构建工作目录

必须在setup.py所在的目录执行打包、上传命令,不允许在该目录的上级路径执行构建操作,否则会把外层项目目录纳入包结构。

3. 调整setup.py配置(可选,如仍有问题可添加)

如果按上述步骤操作后问题仍存在,可在setup.py中明确指定包路径映射:

from setuptools import setup, find_packages

setup(
  name = 'package_name',
  packages = find_packages(),
  package_dir = {'package_name': 'package_name'},
  version = '0.1.0',
  # 其余原有配置保持不变
)

4. 验证构建产物结构

重新执行构建命令:

python -m build

打开生成的dist目录,将.whl后缀改为.zip解压,确认解压后的package_name目录直接包含__init__.py、name.py等代码文件,不存在嵌套的第二层package_name目录。

5. 重新上传测试

确认结构正确后重新上传到TestPyPI,测试安装前先卸载本地旧版本:

pip uninstall -y package_name
pip install --index-url https://test.pypi.org/simple/ package_name

此时执行import package_name即可正常加载包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:06:02