2013-09-13 4 views
45

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

+0

был питон установлен с [--user' '] (http://docs.python.org/2/install/index.html#alternate-installation-the-user-scheme) вариант? – Bryan

ответ

-2

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

+1

Как вы указали setup.py на зависимости, которые вы установили в нестандартном местоположении? –

+0

как этот 'python setup.py build_ext --rpath =/usr/local/lib'? – yota

1

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

Если вы не имеете права администратора, вы можете download and use the virtualenv package from 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 

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

+0

Джеймс, действительно. В ответе, который я дал, я должен был указать, что я тоже использовал virtualenv. – Cricri

+3

Это действительно не помогает, поскольку ОП четко заявили, что им необходимо установить библиотеки, отличные от python (например, передать args компилятору/компоновщику). Я нахожусь в одной лодке, и я немного разочарован тем, что каждый третий ответ на этот вопрос - «использовать virtualenv», потому что (хотя я согласен, что virtualenv - отличный инструмент), на самом деле это не проблема. – gred

+0

@gred, после более пристального изучения вопроса, я согласен ... virtualenv здесь не является правильным решением. Похоже, что OP нашел обходное решение с помощью setup.py. –

68

пип имеет --global-option пометки

Вы можете использовать его, чтобы передать дополнительные флаги build_ext.
Например, чтобы добавить --library-каталоги (-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 
+0

Спасибо! Это помогло мне создать python-ldap на Mac. –

+0

Хотелось бы, чтобы это было лучше документировано. Это было почти единственное, что сработало для меня, установив scikit-learn против статически скомпилированного ATLAS в сочетании с опциональной спецификацией, как описано [здесь] (http://scikit-learn-general.narkive.com/FSKFd98i/on -построение-scikit-узнать-0-14-1-с-статическим-атласом-на-нестандартное место) – Praveen

10

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

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

pip install --no-clean numpy

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

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

Просто чтобы быть ясно, то --no-чистый вариант пытается установить пакет, но не убирать за собой, позволяя вам см., что пыталось сделать пип.

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

pip install -d %cd% numpy 
9

Опираясь на ответ Thorfin и при условии, что ваш желаемый включать и места библиотеки в/USR/местные, вы можете пройти как в например:

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

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

export LDFLAGS=-L/usr/local/opt/openssl/lib 
export CPPFLAGS=-I/usr/local/opt/openssl/include 
pip install cryptography 
Смежные вопросы