簡體   English   中英

python pip 指定一個庫目錄和一個包含目錄

[英]python pip specify a library directory and an include directory

我正在使用 pip 並嘗試安裝一個名為 pyodbc 的 python 模塊,該模塊對 unixodbc-dev、unixodbc-bin、unixodbc 等非 python 庫有一些依賴性。 我目前無法在系統范圍內安裝這些依賴項,因為我只是在玩,所以我將它們安裝在非標准位置。 我如何告訴 pip 在哪里尋找這些依賴項? 更確切地說,如何通過包含目錄(gcc -I)和庫目錄(gcc -L -l)的 pip 傳遞信息以在構建 pyodbc 擴展時使用?

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

基於 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 安裝軟件包時遇到問題,那么您可以使用

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

另一種指示包含文件和庫位置的方法是在運行 pip 之前設置相關的環境變量,例如

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

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

你用過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”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM