将build_ext选项传递给pip install

leb*_*dov 21 python install pip build

有没有办法将build_ext选项传递给pip install来改变包中包含的扩展的编译方式?(是的,我知道可以下载源代码并使用自定义构建/安装setup.cfg,但我很好奇是否可以传递可以setup.cfg通过pip直接指定的选项.)

Tom*_*zky 13

它可以使用pip --global-option=build_ext.

例如,这是requirements.txtPillow支持PNG和JPEG而没有其他外部库:

pillow \
        --global-option="build_ext" \
        --global-option="--enable-zlib" \
        --global-option="--enable-jpeg" \
        --global-option="--disable-tiff" \
        --global-option="--disable-freetype" \
        --global-option="--disable-tcl" \
        --global-option="--disable-tk" \ 
        --global-option="--disable-lcms" \
        --global-option="--disable-webp" \
        --global-option="--disable-webpmux" \
        --global-option="--disable-jpeg2000"
Run Code Online (Sandbox Code Playgroud)

这是一个滥用pip --global-option,受这个答案的启发,就像build_ext一个pip命令,而不是一个真正的全球点选项.但是这会使pip执行两个命令 - 首先build_ext然后install- 像这样:

pip \
    build_ext \
        --enable-zlib --enable-jpeg \
        --disable-tiff --disable-freetype --disable-tcl --disable-tk \
        --disable-lcms --disable-webp --disable-webpmux --disable-jpeg2000 \
    install pillow
Run Code Online (Sandbox Code Playgroud)


tor*_*gen 11

您可以.pydistutils.cfg在主目录中创建文件并覆盖构建选项,就像您可以使用自定义一样setup.cfg,但无需先解压缩包.

因此,例如,您可以编写类似这样的内容来改变include&lib搜索路径:

[build_ext]
include_dirs=/usr/local/include
library_dirs=/usr/local/lib64
rpath=/usr/local/lib64
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,在完全忘记我曾经知道这一点后,我已经用自己的答案搜索了一下. (7认同)

Rob*_*ujo 1

我在中搜索了这样的选项pip,但没有找到(也搜索了来源)。

我认为easy_install/setuptools中也没有这样的选项。

我看到的唯一解决方案是一种老式的方法:

download / unpack / setup.py build_ext [options] / setup.py install。