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

Setuptools构建setuptools-rust时生成UNKNOWN.egg而非目标包问题求助

问题描述

使用Python 3.10.4、OpenSSL 3.0和setuptools v58.2构建setuptools-rust(v1.3)时出现以下异常:

  • 执行命令 python cayman_pyo3_setuptools-rust/pyo3_setuptools-rust/src/setup.py build,仅输出running build,无后续构建动作
  • 执行install命令后,生成UNKNOWN-0.0.0-py3.10.egg文件,同时提示无Python模块可安装;解压该egg文件,仅包含EGG-INFO相关文件,无实际代码模块

相关配置文件

setup.py

#!/usr/bin/env python

from setuptools import setup

if __name__ == "__main__":
    setup()

pyproject.toml

[build-system]
requires = ["setuptools>=58.0", "setuptools_scm[toml]>=3.4.3"]
build-backend = "setuptools.build_meta"

[tool.setuptools_scm]
write_to = "setuptools_rust/version.py"

[tool.isort]
profile = "black"

[tool.pytest.ini_options]
minversion = "6.0"
addopts = "--doctest-modules"

setup.cfg

[metadata]
name = setuptools-rust
version = attr: setuptools_rust.__version__
author = Nikolay Kim
author_email = fafhrd91@gmail.com
license = MIT
description = Setuptools Rust extension plugin
keywords = distutils, setuptools, rust
url = https://github.com/PyO3/setuptools-rust
long_description = file: README.md
long_description_content_type = text/markdown
classifiers =
    Topic :: Software Development :: Version Control
    License :: OSI Approved :: MIT License
    Intended Audience :: Developers
    Programming Language :: Python :: 3
    Programming Language :: Python :: 3.6
    Programming Language :: Python :: 3.7
    Programming Language :: Python :: 3.8
    Programming Language :: Python :: 3.9
    Development Status :: 5 - Production/Stable
    Operating System :: POSIX
    Operating System :: MacOS :: MacOS X
    Operating System :: Microsoft :: Windows

[options]
packages = setuptools_rust
zip_safe = True
install_requires = setuptools>=58.0; semantic_version>=2.8.2,<3; typing_extensions>=3.7.4.3
setup_requires = setuptools>=58.0; setuptools_scm>=6.3.2
python_requires = >=3.7

[options.entry_points]
distutils.commands =
    clean_rust=setuptools_rust:clean_rust
    build_rust=setuptools_rust:build_rust
distutils.setup_keywords =
    rust_extensions=setuptools_rust.setuptools_ext:rust_extensions
问题原因及解决方案

核心原因

  1. setuptools_scm版本生成失败:配置依赖setuptools_scm从Git仓库生成版本号并写入setuptools_rust/version.py,但如果代码未处于Git仓库中、无有效标签/提交记录,setuptools_scm无法生成该文件。setup.cfg中版本配置为attr: setuptools_rust.__version__,无法获取版本号时,setuptools会默认使用UNKNOWN-0.0.0作为包标识。
  2. 包目录未被正确识别:setup.cfg指定packages = setuptools_rust,但如果执行命令时工作目录不正确,或者setuptools_rust目录不存在于setup.py同级路径下(或缺少__init__.py文件),setuptools无法找到要打包的Python模块,最终生成的egg仅包含元数据文件。

解决方案

  1. 修复版本生成问题:

    • 临时方案:修改setup.cfg的[metadata]段,将version = attr: setuptools_rust.__version__替换为固定版本号,如version = 1.3
    • 长期方案:确保代码处于Git仓库中,添加符合规范的版本标签(如v1.3),让setuptools_scm自动生成version.py
  2. 确保包目录可被识别:

    • 切换到setup.py所在目录执行命令:cd cayman_pyo3_setuptools-rust/pyo3_setuptools-rust/src && python setup.py build
    • 确认setuptools_rust目录存在于setup.py同级路径下,且目录内包含__init__.py(可创建空文件)
  3. 检查命令执行路径:
    若无法切换工作目录,可使用Python的-C参数指定工作目录:python -C cayman_pyo3_setuptools-rust/pyo3_setuptools-rust/src setup.py build

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:39:57