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