python pip指定库目录和include目录

时间:2013-09-13 09:56:43

标签: python shared-libraries pip include-path pyodbc

我正在使用pip并尝试安装一个名为pyodbc的python模块,它对unixodbc-dev,unixodbc-bin,unixodbc等非python库有一些依赖性。我目前无法在系统中安装这些依赖项,因为我只是在玩,所以我已将它们安装在非标准位置。我如何告诉pip在哪里寻找这些依赖项?更准确地说,如何通过包含dirs(gcc -I)和库dirs(gcc -L -l)的pip来传递信息,以便在构建pyodbc扩展时使用?

7 个答案:

答案 0 :(得分:86)

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

答案 1 :(得分:16)

以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>

答案 2 :(得分:11)

仅供参考...如果您在使用pip安装软件包时遇到问题,那么您可以使用

--no-clean选项,看看究竟发生了什么(也就是说,为什么构建不起作用)。例如,如果numpy安装不正确,您可以尝试

pip install --no-clean numpy

然后查看Temporary文件夹以查看构建的程度。在Windows机器上,它应该位于:

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

为了清楚起见, - no-clean选项试图安装包,但不会自行清理,让你看看pip正在尝试做什么。

否则,如果您只想下载源代码,那么我会使用-d标志。例如,要将Numpy源代码.tar文件下载到当前目录,请使用:

pip install -d %cd% numpy

答案 3 :(得分:8)

在运行pip之前,另一种指示包含文件和库的位置的方法是设置相关的环境变量。

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

答案 4 :(得分:1)

你曾经使用过virtualenv吗?它是Python包,让您在一台机器上创建和维护多个隔离环境。每个模块都可以使用彼此独立的不同模块,而不会破坏系统库或单独虚拟环境中的依赖关系。

如果您没有root权限,可以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,因此很容易将软件包安装到新环境中。

答案 5 :(得分:0)

Thorfin的回答也得到了我的帮助;我正在Windows上构建GTK3 +并安装pygobject,我在如何使用pip install包含多个文件夹方面遇到了困难。

我尝试按照pip文档创建pip配置文件。但失败了。 一个工作是使用命令行:

- global-option = build_ext后跟--global-option =“ - IlistOfDirectories”和/或--global-option =“ - LlistofDirectories”

在Windows中使用多个文件夹的分隔符是';'分号,非冒号':'在其他操作系统中可能有所不同。

示例工作命令行:

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

您可以使用'\'或'/'作为路径,但请确保不要在“

旁边输入反斜杠

以下内容将失败,因为双引号旁边有反斜杠

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

答案 6 :(得分:-2)

为了防止对某人有所帮助,我仍然无法通过pip找到方法,所以最终只需下载软件包并完成其'setup.py'。同样切换到似乎更容易安装的API'pymssql'。