pass build_ext options to pip install

14,109

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.

Share:
14,109

Related videos on Youtube

lebedov
Author by

lebedov

Data scientist and machine learning researcher at DuPont.

Updated on September 15, 2022

Comments

  • lebedov
    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 custom setup.cfg, but I'm curious whether it is possible to pass options that can be specified in setup.cfg directly through pip.)

  • toriningen
    toriningen over 6 years
    Funny that I've googled up my own answer after completely forgetting I once knew this.