89 votes

python pip spécifier un répertoire de bibliothèque et un répertoire d'inclusion

J'utilise pip et j'essaie d'installer un module python appelé pyodbc qui a quelques dépendances sur des bibliothèques non-python comme unixodbc-dev, unixodbc-bin, unixodbc. Je ne peux pas installer ces dépendances sur l'ensemble du système pour le moment, car je ne fais que jouer, et je les ai donc installées dans un emplacement non standard. Comment puis-je indiquer à Pip où chercher ces dépendances ? Plus exactement, comment puis-je passer à pip les informations concernant les répertoires d'inclusion (gcc -I) et les répertoires de bibliothèque (gcc -L -l) à utiliser lors de la construction de l'extension pyodbc ?

121voto

Thorfin Points 152

Pip a un --global-option drapeau

Vous pouvez l'utiliser pour passer des drapeaux supplémentaires à build_ext .
Par exemple, pour ajouter un drapeau --library-dirs (-L) :
pip install --global-option=build_ext --global-option="-L/path/to/local" pyodbc

gcc supporte également les variables d'environnement : http://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html

Je n'ai pas pu trouver de documentation sur build_ext, alors voici l'aide en ligne de commande

Options for 'build_ext' command:
  --build-lib (-b)     directory for compiled extension modules
  --build-temp (-t)    directory for temporary files (build by-products)
  --plat-name (-p)     platform name to cross-compile for, if supported
                       (default: linux-x86_64)
  --inplace (-i)       ignore build-lib and put compiled extensions into the
                       source directory alongside your pure Python modules
  --include-dirs (-I)  list of directories to search for header files
                       (separated by ':')
  --define (-D)        C preprocessor macros to define
  --undef (-U)         C preprocessor macros to undefine
  --libraries (-l)     external C libraries to link with
  --library-dirs (-L)  directories to search for external C libraries
                       (separated by ':')
  --rpath (-R)         directories to search for shared C libraries at runtime
  --link-objects (-O)  extra explicit link objects to include in the link
  --debug (-g)         compile/link with debugging information
  --force (-f)         forcibly build everything (ignore file timestamps)
  --compiler (-c)      specify the compiler type
  --swig-cpp           make SWIG create C++ files (default is C)
  --swig-opts          list of SWIG command line options
  --swig               path to the SWIG executable
  --user               add user include, library and rpath
  --help-compiler      list available compilers

32voto

viathon Points 341

En se basant sur la réponse de Thorfin et en supposant que l'emplacement de votre include et de votre bibliothèque se trouve dans /usr/local, vous pouvez passer les deux comme suit :

sudo pip install --global-option=build_ext --global-option="-I/usr/local/include/" --global-option="-L/usr/local/lib"  <you package name>

19voto

Huy Le Points 181

Une autre façon d'indiquer l'emplacement des fichiers d'inclusion et des bibliothèques est de définir les variables d'environnement pertinentes avant l'exécution de pip, par ex.

export LDFLAGS=-L/usr/local/opt/openssl/lib
export CPPFLAGS=-I/usr/local/opt/openssl/include
pip install cryptography

13voto

bremen_matt Points 2293

Juste pour info... Si vous avez des difficultés à installer un paquet avec pip, vous pouvez utiliser la commande suivante

--no-clean pour voir ce qui se passe exactement (c'est-à-dire, pourquoi la construction n'a pas fonctionné). Par exemple, si numpy ne s'installe pas correctement, vous pourriez essayer

pip install --no-clean numpy

puis regardez le dossier temporaire pour voir où en est la construction. Sur une machine Windows, ce dossier devrait se trouver à quelque chose comme :

C:\Users\Bob\AppData\Local\Temp\pip_build_Bob\numpy

Juste pour être clair, l'option --no-clean essaie d'installer le paquet, mais ne nettoie pas après lui-même, vous permettant de voir ce que pip essayait de faire.

Sinon, si vous souhaitez simplement télécharger le code source, j'utiliserais la méthode suivante -d drapeau. Par exemple, pour télécharger le code source de Numpy .tar dans le répertoire courant, utilisez :

pip install -d %cd% numpy

5voto

kite Points 400

J'ai également été aidé par la réponse de Thorfin ; je construisais GTK3+ sous Windows et installais pygobject, j'avais des difficultés sur la façon d'inclure plusieurs dossiers avec pip install.

J'ai essayé de créer un fichier de configuration pip selon la documentation pip, mais sans succès. celui qui fonctionne est avec la ligne de commande :

pip install --global-option=build_ext --global-option="-IlistOfDirectories" 
# and/or with:  --global-option="-LlistofDirectories"

le séparateur qui fonctionne avec des dossiers multiples dans Windows est point-virgule " ; PAS les deux points ':', cela peut être différent dans d'autres systèmes d'exploitation.

exemple de ligne de commande de travail :

pip install --global-option=build_ext --global-option="-Ic:/gtk-build/gtk/x64/release/include;d:/gtk-build/gtk/x64/release/include/gobject-introspection-1.0" --global-option="-Lc:\gtk-build\gtk\x64\release\lib" pygobject==3.27.1

vous pouvez utiliser '' ou '/' pour le chemin, mais assurez-vous de ne pas saisir de barre oblique inverse à côté de "

ce qui suit échouera parce qu'il y a une barre oblique inverse à côté du guillemet double.

pip install --global-option=build_ext --global-option="-Ic:\willFail\" --global-option="-Lc:\willFail\" pygobject==3.27.1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X