Подтвердить что ты не робот

Python pip определяет каталог библиотеки и каталог include

Я использую pip и пытаюсь установить модуль python под названием pyodbc, который имеет некоторые зависимости от библиотек, отличных от python, таких как unixodbc-dev, unixodbc-bin, unixodbc. На данный момент я не могу установить эти зависимости в системе, так как я только играю, поэтому я установил их в нестандартном месте. Как я могу указать, где искать эти зависимости? Точнее, как передать информацию через pip of include dirs (gcc -I) и библиотечные dirs (gcc -L -l), которые будут использоваться при создании расширения pyodbc?

4b9b3361

Ответ 1

pip имеет флаг --global-option

Вы можете использовать его для передачи дополнительных флагов в build_ext.
Например, чтобы добавить флаг -library-dirs (-L):
pip install --global-option=build_ext --global-option="-L/path/to/local" pyodbc

gcc поддерживает также переменные среды: http://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html

Я не смог найти документацию по build_ext, поэтому вот подсказка из командной строки

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

Ответ 2

Просто FYI... Если у вас возникли проблемы с установкой пакета с помощью pip, вы можете использовать

--no-clean возможность увидеть, что именно происходит (то есть, почему сборка не работает). Например, если numpy не устанавливается правильно, вы можете попробовать

pip install --no-clean numpy

затем просмотрите папку Temporary, чтобы узнать, как далеко построена сборка. На машине с Windows это должно быть расположено примерно так:

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

Чтобы быть понятным, опция -no-clean пытается установить пакет, но не очищает после себя, позволяя вам увидеть, что пытается сделать пип.

В противном случае, если вы просто хотите загрузить исходный код, я бы использовал флаг -d. Например, чтобы загрузить исходный код Nump .tar в текущий каталог, используйте:

pip install -d %cd% numpy

Ответ 3

Основываясь на ответах Thorfin и предполагая, что ваши желаемые местоположения и библиотеки находятся в /usr/local, вы можете пройти оба так:

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

Ответ 4

Вы когда-нибудь использовали virtualenv? Это пакет Python, который позволяет создавать и поддерживать несколько изолированных сред на одной машине. Каждый из них может использовать разные модули независимо друг от друга без зависания зависимостей в вашей системной библиотеке или отдельной виртуальной среде.

Если у вас нет привилегий root, вы можете загрузить и использовать пакет virtualenv из источника:

$ 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

Я выполнил следующие шаги в эти выходные на Ubuntu Server 12.0.4, и он отлично работал. Каждая новая виртуальная среда, которую вы создаете, поставляется с PIP по умолчанию, поэтому легко установить пакеты в новую среду.

Ответ 5

Другой способ указать расположение включенных файлов и библиотек - установить соответствующие переменные среды перед запуском pip, например.

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

Ответ 6

На всякий случай это помогло кому-то, я все равно не смог найти способ сделать это через pip, так что просто загрузил пакет и выполнил его "setup.py". Также переключается на то, что кажется более простым в установке API под названием "pymssql".