【发布时间】:2013-03-21 11:45:40
【问题描述】:
有没有办法将build_ext 选项传递给 pip install 以改变包中包含的扩展的编译方式? (是的,我知道可以下载源代码并使用自定义setup.cfg 构建/安装,但我很好奇是否可以通过 pip 直接传递setup.cfg 中指定的选项。)
【问题讨论】:
标签: python build installation pip
有没有办法将build_ext 选项传递给 pip install 以改变包中包含的扩展的编译方式? (是的,我知道可以下载源代码并使用自定义setup.cfg 构建/安装,但我很好奇是否可以通过 pip 直接传递setup.cfg 中指定的选项。)
【问题讨论】:
标签: python build installation pip
可以使用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 的滥用,其灵感来自this answer,因为build_ext 是一个pip 命令,而不是真正的全局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
【讨论】:
您可以在主目录中创建.pydistutils.cfg 文件并覆盖构建选项,就像使用自定义setup.cfg 一样,但无需先解压缩包。
因此,例如,您可以编写类似这样的内容来更改 include & lib 搜索路径:
[build_ext]
include_dirs=/usr/local/include
library_dirs=/usr/local/lib64
rpath=/usr/local/lib64
【讨论】:
我在pip 中搜索了此类选项,但没有找到(也搜索了source)。
我认为easy_install/setuptools 中也没有这样的选项。
我看到的唯一解决方案是一种老式的方法:
download / unpack / setup.py build_ext [options] / setup.py install。
【讨论】: