Python包无依赖测试时执行setup.py卡在running build_ext问题排查
问题原因分析
1. 测试运行的核心上下文缺失
本地测试时,你在main_folder/my_package目录执行python manage.py pytest,这个命令依赖同级目录的manage.py和django_project配置:
manage.py会自动加载Django项目的settings,初始化完整的Django运行环境- 本地目录中的
django_app和django_project提供了测试所需的Django上下文(如模型定义、路由配置等)
但你仅将my_package推送到GitHub,解压后目录中没有manage.py、django_project这些关键文件。执行python setup.py pytest时,测试代码无法找到Django的配置入口,尝试初始化Django环境时陷入阻塞,表现为日志停在running build_ext(实际是后续测试初始化卡住,而非build_ext步骤本身存在问题)。
2. 测试命令的运行逻辑完全不同
- 本地用
manage.py pytest:通过Django命令行工具启动pytest,天然集成了Django环境,无需额外配置 - 远程用
python setup.py pytest:通过setuptools的pytest插件启动测试,默认没有加载Django环境的逻辑,测试代码中如果依赖Django组件(如django.test模块),会因无法初始化环境而卡住。
3. 隐性依赖未被满足
你提到本地“无需通过setup.py安装依赖”就能运行测试,本质是本地venv中已经通过Django项目间接安装了Django等依赖,或者manage.py所在目录的依赖已提前安装。但新创建的环境中没有这些隐性依赖,测试代码在尝试导入Django模块时出现阻塞(而非直接报错,可能是某些初始化逻辑在等待资源),导致进程停滞。
4. setuptools的默认构建逻辑干扰
如果你的setup.py中没有明确禁用C扩展构建(比如未设置ext_modules=[]),setuptools会默认执行build_ext步骤检查是否有C扩展需要编译。虽然你的包是纯Python的Django包,但测试初始化阶段的阻塞会让日志停留在running build_ext这一步,误导你认为是build_ext本身的问题。
内容的提问来源于stack exchange,提问作者Shrijan
相关产品推荐
相关产品推荐

