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

如何在包安装时(通过pyproject.toml/setup.py)安装自定义库Wheel?

方案一:通过pyproject.toml配置(推荐,符合现代Python打包规范)

无需编写setup.py,完全通过pyproject.toml完成配置:

  1. 将自定义Whl包含到分发包:在pyproject.toml中添加数据文件配置,确保data/library.whl被打包进你的example.whl:
[tool.setuptools.data-files]
"data" = ["data/*.whl"]
  1. 配置依赖查找路径与依赖声明:在pyproject.toml的[project]区块中,声明自定义依赖的名称,并指定查找路径为data/目录:
[project]
name = "example"
version = "0.1.0"
dependencies = [
    "numpy",
    "pandas",
    "library"  # 填写自定义Whl对应的包名称(需和library.whl内部的包名一致)
]

[tool.setuptools.find-links]
file = ["data/"]

配置完成后,用户执行pip install example.whl时,pip会自动从包内的data/目录找到library.whl并安装,再依次处理其他依赖和主包。

方案二:通过setup.py自定义安装流程

如果需要更灵活的安装控制,可以重写setuptools的安装命令:

  1. 编写setup.py:
from setuptools import setup, find_packages
from setuptools.command.install import install
import subprocess
import os
import sys

class CustomInstallCommand(install):
    def run(self):
        # 优先安装自定义依赖Whl
        whl_full_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "data", "library.whl")
        # 使用当前Python环境的pip执行安装,避免环境冲突
        subprocess.check_call([sys.executable, "-m", "pip", "install", whl_full_path])
        # 执行默认安装流程
        super().run()

setup(
    name="example",
    version="0.1.0",
    packages=find_packages(),
    install_requires=["numpy", "pandas"],
    cmdclass={"install": CustomInstallCommand},
    # 确保data目录下的Whl被打包进分发包
    data_files=[("data", ["data/library.whl"])]
)
  1. 打包主包:执行python -m build生成example.whl,此时data/library.whl会被包含在包内。用户安装时,自定义命令会先自动安装library.whl,再完成主包的安装。
注意事项
  • 确保自定义Whl的包名称(即library)和你在依赖声明中写的一致,可通过解压Whl查看内部METADATA文件确认。
  • 方案一中的find-links配置需要setuptools 61.0.0及以上版本支持,若环境版本较低,建议先升级setuptools。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:53:20