25

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

4

3 回答 3

18

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

例如,这是requirements.txt用于支持 PNG 和 JPEG 且没有其他外部库的 Pillow:

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"

受此答案pip --global-option启发,这确实是对 pip 命令的滥用,而不是真正的全局 pip 选项。但这会使 pip 执行两个命令——首先是然后——像这样:build_extbuild_extinstall

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
于 2015-08-02T13:13:49.140 回答
12

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

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

[build_ext]
include_dirs=/usr/local/include
library_dirs=/usr/local/lib64
rpath=/usr/local/lib64
于 2013-10-08T16:51:40.877 回答
1

我在其中搜索了此类选项,pip但没有找到(也搜索了源代码)。

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

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

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

于 2013-06-09T15:20:09.967 回答