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

PyPI包上传求助:执行python setup.py sdist报错及模块导入失败

解决PyPI包上传与模块导入的双重问题

我来帮你搞定这个PyPI打包和导入的问题,咱们一步步来排查解决:

问题根源分析

从你给出的报错和操作经历来看,核心问题是setup.py里声明的包名和实际项目的目录结构不匹配:

  • 第一次执行sdist时提示找不到LootGameApi目录,说明你setup.py里packages参数指定的名称和实际存在的目录名对不上;
  • 强行指定后虽然打包成功,但导入失败,是因为你的目录没有符合Python的模块规范(要么缺了__init__.py,要么层级/名称还是错的)。

具体解决步骤

1. 先把项目目录结构掰正

Python对包的结构有明确要求,你的项目得是这种标准格式:

你的项目根文件夹/
├── LootGameBotApi/       # 这里是你的实际包目录,名字必须和setup.py里的声明完全一致(大小写敏感!)
│   ├── __init__.py       # 这个文件必须有!哪怕是空的,它是Python识别这是个包的标记
│   └── 你的模块文件.py   # 比如你写的api核心代码、工具类之类的文件
└── setup.py

⚠️ 重点:如果你的setup.py里写的name="LootGameBotApi",那实际目录名就必须是LootGameBotApi,不能是LootGameApi(少了Bot的后缀),这就是你第一次报错的核心原因!

2. 修正setup.py的packages配置

推荐用find_packages()自动识别包,避免手动输入出错,setup.py可以这么写:

from setuptools import setup, find_packages

setup(
    name="LootGameBotApi",
    version="0.1.0",
    packages=find_packages(),  # 自动找到所有符合规范的包目录
    # 下面是其他必填/可选配置,按需补充
    author="你的名字",
    description="LootGame Bot的API封装",
    install_requires=["requests", ...],  # 你的包依赖的其他库
)

如果非要手动指定packages,就写你实际存在的目录名:

packages=["LootGameBotApi"],

3. 本地先验证,再打包

别着急直接上传,先在本地测试是否能正常导入:

  • 执行pip install -e .(这是开发模式安装,修改代码后不用重新安装就能生效);
  • 打开Python终端,尝试导入:
    import LootGameBotApi
    # 或者导入具体模块
    from LootGameBotApi import your_module_name
    

如果导入成功,说明包结构没问题,再执行python setup.py sdist,这次应该不会再报目录不存在的错了。

4. 上传PyPI的小建议

现在官方更推荐用twine来上传包,比直接用setup.py upload更安全,步骤是:

  1. 先安装twine:pip install twine;
  2. 打包完成后,执行twine upload dist/*,然后输入你的PyPI账号密码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:56:59