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

如何在Python中添加本地wheel包作为依赖构建独立安装包

解决本地依赖Wheel的Python包构建与自动安装问题

问题原因

你遇到的报错是因为install_requires仅支持符合PEP 508规范的依赖声明格式,直接填写本地文件路径不符合解析规则,因此触发语法错误。

解决方案

方法一:自定义安装命令(自动安装本地依赖)

该方案通过重写setuptools的安装命令,实现安装你的包前自动安装本地依赖Wheel,无需用户额外操作。

  1. 项目结构调整
    在项目根目录创建wheels文件夹,将依赖的PROJECT_NAME-1.1.1-py3-none-any.whl放入其中。

  2. 修改setup.py
    添加自定义安装命令,同时确保本地依赖Wheel被打包进你的包中:

from setuptools import setup, find_packages
from setuptools.command.install import install
import subprocess
import os

# 保留你原有的CleanCommand定义
class CleanCommand(...):
    # 你的CleanCommand实现代码...

class CustomInstallCommand(install):
    def run(self):
        # 先执行默认安装逻辑,将包文件(含依赖Wheel)复制到安装目录
        super().run()
        # 获取安装后依赖Wheel的绝对路径
        dep_wheel_path = os.path.join(
            self.install_lib, 
            "my_package_name", 
            "wheels", 
            "PROJECT_NAME-1.1.1-py3-none-any.whl"
        )
        # 安装本地依赖
        subprocess.check_call([self.executable, "-m", "pip", "install", dep_wheel_path])

setup(
    name="my_package_name",
    version=version,
    author_email="my-name@my-asso.com",  # 注意移除原代码中的多余逗号
    description=description,
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="...",
    python_requires=">=3.6.0",
    cmdclass={
        "clean": CleanCommand,
        "install": CustomInstallCommand,  # 绑定自定义安装命令
    },
    package_data={
        "my_package_name": ["wheels/*.whl", "*.pkl", "*.json", "VERSION"],
    },
    packages=find_packages(exclude=('tests', 'tests.*')),
    # 可移除install_requires中的PROJECT_NAME,避免重复安装检测
    install_requires=[req for req in requirements if not req.startswith("PROJECT_NAME")],
    include_package_data=True,
    classifiers=[
        "Programming Language :: Python :: 3.6",
        "Programming Language :: Python :: 3.7",
        "Programming Language :: Python :: 3.8",
        "Programming Language :: Python :: 3.9",
        "Programming Language :: Python :: 3.10",
        "Programming Language :: Python :: Implementation :: CPython",
        "Operating System :: OS Independent",
        "Topic :: Software Development :: Libraries"
    ],
)
  1. 构建Wheel包
    执行以下命令生成你的包:
python setup.py bdist_wheel

安装生成的Wheel时,会自动先安装附带的本地依赖。

方法二:配合pip的--find-links参数(轻量方案)

若无需完全自动,可通过以下方式让pip优先从本地获取依赖:

  1. 将你的包Wheel和依赖Wheel放在同一目录。
  2. 创建requirements-local.txt文件,内容如下:
--find-links=.
PROJECT_NAME==1.1.1
  1. 用户安装时执行:
pip install my_package_name-xxx.whl -r requirements-local.txt

pip会优先从当前目录查找依赖Wheel,不会触发网络下载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:40:37