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

pip安装sdist格式Python包时未部署代码的原因及解决方法

为什么pip install没有安装我的Python包代码?

我来帮你分析这个问题——你遇到的核心问题是setup.py里的packages参数配置有误,导致setuptools没有正确识别并打包你的嵌套包结构。

问题原因

当你使用find_packages(include=["PackageA.PackageB"])时,这个函数只会返回PackageA.PackageB这一个子包。但Python的嵌套包依赖于上层包(也就是PackageA)的存在才能被正确导入:如果PackageA没有被安装到site-packages目录里,Python就找不到PackageA.PackageB这个路径。

更关键的是,setuptools在这种仅指定子包的情况下,不会自动将上层的PackageA包含进来,最终导致安装后只有egg-info目录,而没有实际的包代码文件。

解决方法

你有两种简单的修复方式,任选其一即可:

方式一:修改find_packages的include参数

让find_packages同时包含PackageA及其所有子包,修改后的setup.py如下:

from setuptools import find_packages, setup
setup(
    name="my-code",
    version="0.1",
    install_requires=[],
    # 包含PackageA本身和它下面的所有子包
    packages=find_packages(include=["PackageA", "PackageA.*"]),
    include_package_data=True,
    description="My Code"
)

方式二:显式列出所有需要的包

如果你想更明确地控制打包内容,可以直接把所有需要的包都列出来:

from setuptools import setup
setup(
    name="my-code",
    version="0.1",
    install_requires=[],
    packages=["PackageA", "PackageA.PackageB"],
    include_package_data=True,
    description="My Code"
)

验证步骤

修改完setup.py后,按照以下步骤重新打包安装:

  • 先清理之前的构建文件:rm -rf dist build *.egg-info(Windows系统用rmdir /s /q dist build *.egg-info)
  • 重新生成sdist:python setup.py sdist --formats=gztar
  • 安装新的包文件:pip install dist/my-code-0.1.tar.gz

这时候你再去venv的Lib/site-packages目录,就能看到PackageA目录了,也可以正常导入PackageA.PackageB.Module1了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:53:09