web-dev-qa-db-fra.com

python pip spécifie 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 contient des dépendances sur des bibliothèques non python, telles que unixodbc-dev, unixodbc-bin, unixodbc. Je ne peux pas installer ces dépendances à l'échelle du système pour le moment, car je ne joue que pour le jeu, alors je les ai installées dans un emplacement non standard. Comment puis-je dire à pip où chercher ces dépendances? Plus précisément, comment puis-je transmettre des informations via pip des répertoires d'inclusion (gcc -I) et des répertoires de bibliothèque (gcc -L -l) à utiliser lors de la construction de l'extension pyodbc?

57
Cricri

pip a un drapeau --global-option

Vous pouvez l'utiliser pour passer des indicateurs supplémentaires à build_ext.
Par exemple, pour ajouter un indicateur --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 trouvé aucune documentation 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
81
Thorfin

En vous basant sur la réponse de Thorfin et en supposant que votre inclusion souhaitée et les emplacements de bibliothèque soient dans/usr/local, vous pouvez transmettre les deux de la même manière:

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

Just FYI ... Si vous rencontrez des problèmes pour installer un paquet avec pip, vous pouvez utiliser le 

--no-clean option 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 pouvez essayer

pip install --no-clean numpy 

ensuite, regardez dans le dossier Temporary pour voir jusqu'où la construction est arrivée. Sur une machine Windows, cela devrait être situé à quelque chose comme:

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

Pour être clair, l'option --no-clean essaie d'installer le paquet, mais ne nettoie pas après, ce qui vous permet de voir ce que pip essayait de faire. 

Sinon, si vous voulez seulement télécharger le code source, j'utiliserais le drapeau -d. Par exemple, pour télécharger le fichier de code source Numpy .tar dans le répertoire en cours, utilisez:

pip install -d %cd% numpy
11
bremen_matt

Une autre façon d'indiquer l'emplacement des fichiers d'inclusion et des bibliothèques consiste à définir des variables d'environnement pertinentes avant d'exécuter pip, par exemple.

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

Avez-vous déjà utilisé virtualenv ? C'est le paquet Python qui vous permet de créer et de gérer plusieurs environnements isolés sur une seule machine. Chacun peut utiliser différents modules indépendamment les uns des autres sans foirer les dépendances de votre bibliothèque système ou d'un environnement virtuel séparé.

Si vous ne possédez pas les privilèges root, vous pouvez télécharger et utiliser le paquet virtualenv à partir de la source :

$ curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-X.X.tar.gz
$ tar xvfz virtualenv-X.X.tar.gz
$ cd virtualenv-X.X
$ python virtualenv.py myVE

J'ai suivi les étapes ci-dessus ce week-end sur Ubuntu Server 12.0.4 et cela a parfaitement fonctionné. Chaque nouvel environnement virtuel que vous créez est livré avec PIP par défaut, ce qui facilite l'installation des packages dans votre nouvel environnement.

1
James Nicholson

La réponse de Thorfin m'aidait également; J'étais en train de construire GTK3 + sous Windows et d'installer pygobject. J'avais des difficultés pour inclure plusieurs dossiers avec pip install.

J'ai essayé de créer un fichier de configuration pip conformément à la documentation pip. mais a échoué. celui qui travaille est avec la ligne de commande:

--global-option = build_ext suivi de --global-option = "- IlistOfDirectories" et/ou --global-option = "- LlistofDirectories"

le séparateur qui fonctionne avec plusieurs dossiers dans Windows est ';' point-virgule , pas deux points ':' cela peut être différent dans d'autres OS.

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 taper de barre oblique inverse à côté de "

cela va échouer ci-dessous car il y a une barre oblique inverse à côté de la citation double

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