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

Python3.8包本地安装可正常运行 发布到PyPI后导入报ModuleNotFoundError

问题根本原因

pip install -e . 属于可编辑安装,会把项目目录软链接到Python环境的包路径下,整个项目的所有文件都能被Python解释器检索到,所以你本地测试不会出问题。但正式上传PyPI的安装包(whl/sdist)只会包含setup.py中明确声明要打包的文件,你之前的配置没有正确识别嵌套的子包,导致这些子包没有被打进发布包,安装后自然找不到对应模块。

解决方案

步骤1:调整项目目录结构

把package/目录整体移动到src/目录下,最终结构如下:

repo/
    conda/
        conda_build_config.yaml
        meta.yaml
    setup.py
    src/
        package/
            Group1/
                A/
                    ClassA
                B/
                    ClassB
                __init__.py
            Group2/
                C/
                    ClassC
                D/
                    ClassD
                __init__.py
            __init__.py

步骤2:修改setup.py配置

在setup.py中新增如下配置,自动扫描所有要打包的子包:

from setuptools import setup, find_packages

setup(
    # 你原来的其他配置:name、version、author之类的
    package_dir={"": "src"},
    packages=find_packages(where="src"),
)
  • package_dir={"": "src"} 声明所有Python包的根路径是src目录
  • find_packages(where="src") 会自动扫描src目录下所有包含__init__.py的文件夹,全部纳入打包范围,不需要你手动逐个列子包,避免遗漏

步骤3:本地预校验

发布到PyPI前先执行本地打包测试,确认所有文件都被正确包含:

  1. 执行python setup.py sdist生成源码包
  2. 解压dist/目录下生成的.tar.gz文件,检查内部的src/package目录下是否包含所有Group子包和对应的__init__.py文件,确认无误后再上传到PyPI即可。

额外注意事项

  • 你原来各个层级__init__.py的导出逻辑不需要修改,只要子包被正常打包就可以正常导入
  • 如果你的Anaconda打包流程之前写死了包路径,需要同步修改meta.yaml里的路径配置,确保conda打包时能找到src下的包文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:06:01