MagicStack / MagicStack/httptools

Custom build_ext breaks parallel build/wheel

未关闭
#126 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

主要语言
Python
星标
1.3k
派生
107
PR 合并指标
30 天内没有已合并 PR

描述

Our build system typically uses setup.py to generate a wheel via bdist_wheel but to speed up compilation of extensions we also explictly call build and pass -j:

python3 ./setup.py build  -j 8 bdist_wheel

This works for 99% of modules but fails with httptools:


running build
running build_py
creating build/lib.linux-aarch64-cpython-312/httptools
copying httptools/_version.py -> build/lib.linux-aarch64-cpython-312/httptools
copying httptools/__init__.py -> build/lib.linux-aarch64-cpython-312/httptools
creating build/lib.linux-aarch64-cpython-312/httptools/parser
copying httptools/parser/errors.py -> build/lib.linux-aarch64-cpython-312/httptools/parser
copying httptools/parser/__init__.py -> build/lib.linux-aarch64-cpython-312/httptools/parser
running egg_info
writing httptools.egg-info/PKG-INFO
writing dependency_links to httptools.egg-info/dependency_links.txt
writing requirements to httptools.egg-info/requires.txt
writing top-level names to httptools.egg-info/top_level.txt
/usr/lib/python3/dist-packages/pbr/git.py:28: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  import pkg_resources
reading manifest file 'httptools.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
adding license file 'LICENSE'
writing manifest file 'httptools.egg-info/SOURCES.txt'
copying httptools/parser/cparser.pxd -> build/lib.linux-aarch64-cpython-312/httptools/parser
copying httptools/parser/parser.pyx -> build/lib.linux-aarch64-cpython-312/httptools/parser
copying httptools/parser/python.pxd -> build/lib.linux-aarch64-cpython-312/httptools/parser
copying httptools/parser/url_cparser.pxd -> build/lib.linux-aarch64-cpython-312/httptools/parser
copying httptools/parser/url_parser.pyx -> build/lib.linux-aarch64-cpython-312/httptools/parser
running build_ext
building 'httptools.parser.parser' extension
creating build/temp.linux-aarch64-cpython-312/httptools/parser
building 'httptools.parser.url_parser' extension
creating build/temp.linux-aarch64-cpython-312/vendor/llhttp/src
creating build/temp.linux-aarch64-cpython-312/vendor/http-parser
aarch64-linux-gnu-gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O2 -Wall -fPIC -I/work/ross/build/tmp/work/core2-64-poky-linux/python3-httptools/0.6.4/sources/httptools-0.6.4/vendor/llhttp/include -I/work/ross/build/tmp/work/core2-64-poky-linux/python3-httptools/0.6.4/sources/httptools-0.6.4/vendor/llhttp/src -I/usr/include/python3.12 -c httptools/parser/parser.c -o build/temp.linux-aarch64-cpython-312/httptools/parser/parser.o -O2
aarch64-linux-gnu-gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O2 -Wall -fPIC -I/work/ross/build/tmp/work/core2-64-poky-linux/python3-httptools/0.6.4/sources/httptools-0.6.4/vendor/http-parser -I/usr/include/python3.12 -c httptools/parser/url_parser.c -o build/temp.linux-aarch64-cpython-312/httptools/parser/url_parser.o -O2
aarch64-linux-gnu-gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O2 -Wall -fPIC -I/work/ross/build/tmp/work/core2-64-poky-linux/python3-httptools/0.6.4/sources/httptools-0.6.4/vendor/http-parser -I/usr/include/python3.12 -c vendor/http-parser/http_parser.c -o build/temp.linux-aarch64-cpython-312/vendor/http-parser/http_parser.o -O2
aarch64-linux-gnu-gcc -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fwrapv -O2 build/temp.linux-aarch64-cpython-312/httptools/parser/url_parser.o build/temp.linux-aarch64-cpython-312/vendor/http-parser/http_parser.o -L/usr/lib/aarch64-linux-gnu -o build/lib.linux-aarch64-cpython-312/httptools/parser/url_parser.cpython-312-aarch64-linux-gnu.so
aarch64-linux-gnu-gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O2 -Wall -fPIC -I/work/ross/build/tmp/work/core2-64-poky-linux/python3-httptools/0.6.4/sources/httptools-0.6.4/vendor/llhttp/include -I/work/ross/build/tmp/work/core2-64-poky-linux/python3-httptools/0.6.4/sources/httptools-0.6.4/vendor/llhttp/src -I/usr/include/python3.12 -c vendor/llhttp/src/api.c -o build/temp.linux-aarch64-cpython-312/vendor/llhttp/src/api.o -O2
aarch64-linux-gnu-gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O2 -Wall -fPIC -I/work/ross/build/tmp/work/core2-64-poky-linux/python3-httptools/0.6.4/sources/httptools-0.6.4/vendor/llhttp/include -I/work/ross/build/tmp/work/core2-64-poky-linux/python3-httptools/0.6.4/sources/httptools-0.6.4/vendor/llhttp/src -I/usr/include/python3.12 -c vendor/llhttp/src/http.c -o build/temp.linux-aarch64-cpython-312/vendor/llhttp/src/http.o -O2
aarch64-linux-gnu-gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O2 -Wall -fPIC -I/work/ross/build/tmp/work/core2-64-poky-linux/python3-httptools/0.6.4/sources/httptools-0.6.4/vendor/llhttp/include -I/work/ross/build/tmp/work/core2-64-poky-linux/python3-httptools/0.6.4/sources/httptools-0.6.4/vendor/llhttp/src -I/usr/include/python3.12 -c vendor/llhttp/src/llhttp.c -o build/temp.linux-aarch64-cpython-312/vendor/llhttp/src/llhttp.o -O2
aarch64-linux-gnu-gcc -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fwrapv -O2 build/temp.linux-aarch64-cpython-312/httptools/parser/parser.o build/temp.linux-aarch64-cpython-312/vendor/llhttp/src/api.o build/temp.linux-aarch64-cpython-312/vendor/llhttp/src/http.o build/temp.linux-aarch64-cpython-312/vendor/llhttp/src/llhttp.o -L/usr/lib/aarch64-linux-gnu -o build/lib.linux-aarch64-cpython-312/httptools/parser/parser.cpython-312-aarch64-linux-gnu.so

running bdist_wheel
installing to build/bdist.linux-aarch64/wheel
running install
running install_lib
running build_ext
error: don't know how to compile C/C++ code on platform 'posix' with '<distutils.compilers.C.unix.Compiler object at 0xee4af1454c80>' compiler

This behaviour isn't specific to the use of -j, simply doing python3 setup.py build bdist_wheel results in the build failing.

贡献指南

这个仓库没有索引到贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

从 setup.py 开始,使用 python3 setup.py build bdist_wheel 重现失败,然后比较初始的 build_ext 运行与 bdist_wheel 期间的 build_ext 调用。当此命令成功完成并生成一个没有编译器错误的 wheel 时,工作即告完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
python
领域
build-system
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
48/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。