You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

克隆项目后执行python setup.py install无法安装主包的原因排查

这种情况我之前在维护自己的PyPI包时也碰到过,大概率是你的setup.py里的包配置没写对,导致setuptools找不到你的主包代码。下面给你列几个最常见的问题和对应的解决办法:

可能的原因及解决办法

1. 未正确指定packages参数

setuptools需要明确知道要打包哪些代码目录。假设你的项目结构是这样的:

GapBot/
├── gapbot/          # 你的主包目录,必须包含__init__.py
│   ├── __init__.py
│   └── 其他代码文件/模块
└── setup.py

那你的setup.py里必须通过find_packages()自动发现包,或者手动指定包名:

from setuptools import setup, find_packages

setup(
    name="GapBot",
    version="0.1.0",
    packages=find_packages(),  # 自动扫描所有含__init__.py的目录作为包
    # 或者手动指定:packages=["gapbot"],
    install_requires=[...],  # 你的依赖包列表
)

如果完全没写packages参数,或者指定的包名和实际目录名不匹配,setuptools就只会安装依赖,不会打包你的主代码。

2. 主包目录缺少__init__.py

setuptools默认只把包含__init__.py的目录识别为Python包。如果你的主包目录(比如gapbot)里没有这个文件,哪怕你写了find_packages(),也会被忽略。赶紧在主包根目录加一个空的__init__.py(如果不需要初始化逻辑的话)。

3. package_dir配置错误

如果你的代码目录和包名不是直接对应的(比如主代码放在src/gapbot下),那需要用package_dir指定映射关系:

setup(
    ...
    package_dir={"": "src"},  # 表示所有包的根目录是src
    packages=find_packages(where="src"),  # 在src目录下找包
    ...
)

如果你的项目结构有嵌套但没配置这个,也会导致setuptools找不到你的主包。

4. 误排除了主包

如果使用find_packages(exclude=["tests", "docs"])之类的参数,有没有不小心把主包也加到排除列表里?仔细检查这个参数的内容,确保没有误删主包。

额外排查步骤
  • 先执行python setup.py sdist生成源码包,然后解压生成的.tar.gz文件,看看里面有没有你的主包代码。如果没有,说明打包阶段就没把代码加进去,install自然也不会装。
  • 执行python setup.py install --verbose,查看输出日志,如果完全没有提到你的主包(比如Installing xxx.py to ...的日志),那肯定是setuptools没识别到你的包。

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

火山引擎 最新活动