web-dev-qa-db-ja.com

python pipは、ライブラリディレクトリとインクルードディレクトリを指定します

私はpipを使用して、unixodbc-dev、unixodbc-bin、unixodbcのような非Pythonライブラリにいくつかの依存関係があるpyodbcと呼ばれるpythonモジュールをインストールしようとしています。これらの依存関係をシステム全体にインストールすることはできません現時点では、私はプレイしているだけなので、標準以外の場所にインストールしました。これらの依存関係を探す場所をpipに伝えるにはどうすればいいですか?より正確には、include dirs(gcc -I )およびpyodbc拡張機能をビルドするときに使用するライブラリdirs(gcc -L -l)

64
Cricri

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

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

参考までに... 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
11
bremen_matt

インクルードファイルとライブラリの場所を示す別の方法は、pipを実行する前に関連する環境変数を設定します。

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

virtualenv を使用したことがありますか? Pythonパッケージを使用すると、1台のマシンで複数の隔離された環境を作成および維持できます。それぞれが、システムライブラリまたは別の仮想環境で依存関係を台無しにすることなく、互いに独立した異なるモジュールを使用できます。

ルート権限がない場合は、 ソースから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が付属しているため、新しい環境へのパッケージのインストールは簡単です。

1
James Nicholson

また、Thorfinの回答にも助けられました。私はWindowsでGTK3 +をビルドしてpygobjectをインストールしていましたが、pip installで複数のフォルダーを含める方法に問題がありました。

私はpipドキュメントに従ってpip設定ファイルを作成しようとしました。しかし、失敗しました。動作するのはコマンドラインを使用することです:

--global-option = build_extの後に--global-option = "-IlistOfDirectories"および/または--global-option = "-LlistofDirectories"が続く

windowsの複数のフォルダーで機能する区切り記号は';'セミコロンであり、コロン ':'ではありません。他のOSでは異なる場合があります。

サンプル作業コマンドライン:

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