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