共享库-python pip指定一个库目录和一个include目录

我正在使用pip并尝试安装一个名为pyodbc的python模块,该模块对非Python库(例如unixodbc-dev,unixodbc-bin,unixodbc)具有一定的依赖性。 目前,由于我仅在玩游戏,因此无法在整个系统上安装这些依赖项,因此我已将它们安装在非标准位置。 如何告诉pip在哪里寻找这些依赖项? 更确切地说,如何在构建pyodbc扩展时通过包含dirs(gcc -I)和库dirs(gcc -L -l)的点传递信息?

7个解决方案
83 votes

点有--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
Thorfin answered 2019-10-09T17:05:58Z
15 votes

以Thorfin的答案为基础,并假设您所需的include和库位置位于/ usr / local中,您可以像这样传递两者:

sudo pip install --global-option=build_ext --global-option="-I/usr/local/include/" --global-option="-L/usr/local/lib"  <you package name>
viathon answered 2019-10-09T17:06:23Z
11 votes

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

-d选项以查看到底发生了什么(即,为什么构建不起作用)。 例如,如果numpy安装不正确,则可以尝试

-d

然后查看“临时”文件夹以查看构建的内容。 在Windows计算机上,它应该位于类似以下的位置:

-d

请注意,--no-clean选项尝试安装软件包,但不会自行清除,让您了解pip尝试执行的操作。

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

pip install -d %cd% numpy
bremen_matt answered 2019-10-09T17:07:31Z
6 votes

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

export LDFLAGS=-L/usr/local/opt/openssl/lib
export CPPFLAGS=-I/usr/local/opt/openssl/include
pip install cryptography
Huy Le answered 2019-10-09T17:07:57Z
2 votes

您曾经使用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,因此轻松将软件包安装到新环境中。

James Nicholson answered 2019-10-09T17:08:36Z
0 votes

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
kite answered 2019-10-09T17:09:43Z
-2 votes

以防万一它对某人有所帮助,我仍然找不到通过pip完成此操作的方法,因此最终只是下载了该软件包并通过其“ setup.py”进行了操作。 也切换到了似乎更易于安装的API,称为“ pymssql”。

Cricri answered 2019-10-09T17:10:09Z
translate from https://stackoverflow.com:/questions/18783390/python-pip-specify-a-library-directory-and-an-include-directory