我正在使用 pip 并尝试安装一个名为 pyodbc 的 python 模块,该模块对 unixodbc-dev、unixodbc-bin、unixodbc 等非 python 库有一些依赖。我目前无法在系统范围内安装这些依赖项,因为我只是在玩,所以我将它们安装在非标准位置。我如何告诉 pip 在哪里寻找这些依赖项?更准确地说,如何通过包含目录(gcc -I)和库目录(gcc -L -l)的 pip 传递信息以在构建 pyodbc 扩展时使用?
pip 有一个
--global-option
标志
您可以使用它将附加标志传递给
build_ext
。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 的答案并假设您所需的包含和库位置位于 /usr/local 中,您可以像这样传递两者:
sudo pip install --global-option=build_ext --global-option="-I/usr/local/include/" --global-option="-L/usr/local/lib" <you package name>
指示包含文件和库位置的另一种方法是在运行 pip 之前设置相关的环境变量,例如
export LDFLAGS=-L/usr/local/opt/openssl/lib
export CPPFLAGS=-I/usr/local/opt/openssl/include
pip install cryptography
仅供参考...如果您在使用 pip 安装软件包时遇到问题,那么您可以使用
--no-clean
选项可查看到底发生了什么(即构建失败的原因)。例如,如果 numpy 未正确安装,您可以尝试
pip install --no-clean numpy
然后查看临时文件夹以查看构建进度。在 Windows 计算机上,该位置应类似于:
C:\Users\Bob\AppData\Local\Temp\pip_build_Bob\numpy
需要明确的是,--no-clean 选项尝试安装软件包,但不会自行清理,让您看到 pip 试图做什么。
否则,如果您只想下载源代码,那么我会使用
-d
标志。例如,要将 Numpy 源代码 .tar
文件下载到当前目录,请使用:
pip install -d %cd% numpy
Thorfin 的回答也对我有所帮助;我正在 Windows 上构建 GTK3+ 并安装 pygobject,我在如何使用 pip install 包含多个文件夹方面遇到了困难。
我尝试根据 pip 文档创建 pip 配置文件。但失败了。 一种是使用命令行:
pip install --global-option=build_ext --global-option="-IlistOfDirectories"
# and/or with: --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
为了使用 Visual Studio 编译器 (MVSC) 指示 Windows 上包含文件和库的位置,您也可以将它们指定为环境变量。
在 powershell 中,输入
$Env:INCLUDE='path\to\include'
$Env:LIB='path\to\libs'
在通过 pip 运行安装之前。
有关 MVSC 使用的环境变量的更多信息:https://learn.microsoft.com/en-us/cpp/build/building-on-the-command-line?view=msvc-170#path_and_environment
你用过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,因此将软件包安装到新环境中非常容易。
以防万一它对某人有帮助,我仍然找不到通过 pip 来完成此操作的方法,所以最终只是下载了该包并通过其“setup.py”进行操作。还切换到似乎更容易安装的 API,称为“pymssql”。