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

pip可编辑安装未触发自定义install命令的问题咨询

问题分析

常规pip install .会触发自定义install命令完成共享对象编译,但可编辑安装(pip install -e .)走的是editable_wheel/develop流程,不会触发install命令,导致编译步骤被跳过。之前重写editable_wheel时错误调用了install.run(self),而非父类的run()方法,打断了可编辑安装的后续流程,导致安装失败。

解决方案

推荐将编译步骤绑定到build阶段——这是所有安装方式(常规/可编辑)的必经流程,无需分别处理不同安装命令,实现更可靠的统一编译逻辑。

修改后的setup.py代码

import os
import subprocess
from typing import List

from setuptools import find_namespace_packages, setup
from setuptools.command.build import build


class CustomBuild(build):
    def run(self):
        # 获取编译脚本的绝对路径,避免安装时工作目录变化导致找不到脚本
        compile_script = os.path.abspath("./compile.sh")
        # 执行编译脚本,check=True会在脚本执行失败时中断安装并抛出异常
        # 捕获输出方便调试编译错误
        result = subprocess.run(
            [compile_script],
            check=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT,
            text=True
        )
        # 可选:将编译日志写入文件
        with open("compile.log", "w") as f:
            f.write(result.stdout)
        # 执行父类的build流程,确保后续安装步骤正常执行
        super().run()


requirements: List[str] = [
    # 填写你的依赖包,比如"requests>=2.28.0"
]

setup(
    author="",
    python_requires=">=3.11",
    install_requires=requirements,
    name="mypkg",
    license="",
    packages=find_namespace_packages(include=["mypkg", "mypkg.*"]),
    cmdclass={"build": CustomBuild},  # 注册自定义build命令
    include_package_data=True,
    zip_safe=False,
)

额外注意事项

  1. 编译脚本权限:确保compile.sh有可执行权限,执行命令:
    chmod +x compile.sh
    
  2. 共享对象路径:确保编译脚本生成的libc.*文件在MANIFEST.in能捕获的目录下(当前目录即可),保证include_package_data=True能将其纳入包中。
  3. 错误调试:如果编译失败,subprocess.run的check=True会直接抛出异常,结合compile.log能快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:19:52