2013-03-31 10 views
16

C'è un modo per passare le opzioni build_ext all'installazione di pip per modificare come viene compilata un'estensione inclusa in un pacchetto? (Sì, so che si può scaricare l'origine e compilare/installare con un setup.cfg personalizzato, ma sono curioso se è possibile passare opzioni che possono essere specificate in setup.cfg direttamente tramite pip.)passare le opzioni build_ext all'installazione di pip

risposta

2

Ho cercato tale opzione in pip e trovato nessuno (cercato anche il source).

Non penso che non ci sia tale opzione anche in easy_install/setuptools.

L'unica soluzione che vedo è un modo vecchio stampo:

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

8

È possibile creare il file .pydistutils.cfg nella home directory e sovrascrivere le opzioni di creazione come si potrebbe fare con l'setup.cfg personalizzato, ma senza dover prima decomprimere il pacchetto.

Così, per esempio, è possibile scrivere qualcosa di simile per alterare includere & lib percorso di ricerca:

[build_ext] 
include_dirs=/usr/local/include 
library_dirs=/usr/local/lib64 
rpath=/usr/local/lib64 
+2

divertente che Googled una mia risposta dopo dimenticando completamente che conoscevo una volta che questo. – toriningen

9

E 'possibile utilizzando pip --global-option=build_ext.

Per esempio, questo è requirements.txt per Cuscino con il supporto PNG e JPEG e nessun altro librerie esterne:

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" 

Questo è davvero un abuso di pip --global-option, ispirati da this answer, come build_ext è un comando pip e non realmente un'opzione di pip globale. Ma questo renderebbe pip di eseguire due comandi - prima build_ext e poi install - come questo:

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 
+0

Eccellente. Funziona come un fascino. –

Problemi correlati