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 ?
Réponses
Trop de publicités?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
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>
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
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
- Réponses précédentes
- Plus de réponses