pass build_ext options to pip install
Solution 1
It's possible using pip --global-option=build_ext
.
For example this is requirements.txt
for Pillow with PNG and JPEG support and no other external libraries:
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"
This is really an abuse of pip --global-option
, inspired by this answer, as build_ext
is a pip command and not really a global pip option. But this would make pip to execute two commands — first build_ext
and then install
— like this:
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
Solution 2
You can create .pydistutils.cfg
file in your home directory and override build options like you could do with custom setup.cfg
, but without need to unpack package first.
So, for example, you can write something like this to alter include & lib search path:
[build_ext]
include_dirs=/usr/local/include
library_dirs=/usr/local/lib64
rpath=/usr/local/lib64
Solution 3
I searched for such option in pip
and found none (searched the source too).
I don't think there is no such option in easy_install/setuptools too.
The only solution I see is an old-school way:
download / unpack / setup.py build_ext [options] / setup.py install
.
Related videos on Youtube
lebedov
Data scientist and machine learning researcher at DuPont.
Updated on September 15, 2022Comments
-
lebedov over 1 year
Is there some way to pass
build_ext
options to pip install to alter how an extension included in a package is compiled? (Yes, I know that one can download the source and build/install with a customsetup.cfg
, but I'm curious whether it is possible to pass options that can be specified insetup.cfg
directly through pip.) -
toriningen over 6 yearsFunny that I've googled up my own answer after completely forgetting I once knew this.