web-dev-qa-db-ja.com

NumPysite.cfg引数をpipに提供する

IntelのMathKernelLibraryに対して構築されたNumPyを使用しています。私はvirtualenvを使用しており、通常はpipを使用してパッケージをインストールします。

ただし、NumPyがMKLライブラリを見つけるには、コンパイルする前にNumPyソースディレクトリにsite.cfgファイルを作成してから、手動でビルドしてインストールする必要があります。このプロセス全体をスクリプト化することはできましたが、もっと簡単な解決策を望んでいました。

バージョン管理下でこの目的に使用できる標準のsite.cfgファイルがあります。パッケージをビルドする前に特定のファイルをソースディレクトリにコピーするように指示するpipコマンドラインオプションはありますか?

または、site.cfgファイルでライブラリパスを指定する代わりに設定できる環境変数はありますか?これが私が使用するsite.cfgファイルです。 Intelのサイト からほぼ逐語的に取得されました。

[mkl]
library_dirs = /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64
include_dirs = /opt/intel/composer_xe_2013.1.117/mkl/include
mkl_libs = mkl_rt
lapack_libs =

参考までに、私はUbuntu、Python 2.7、およびNumPy1.6を実行しています。

31
joshayers

ソースから( https://github.com/numpy/numpy/blob/master/site.cfg.example ):

Easy_installのような自動インストールを支援するために、ユーザーのホームディレクトリでファイル〜/ .numpy-site.cfgもチェックされます。

それは実行可能な解決策ですか?それでも、グローバル.numpy-site.cfgを使用してホームディレクトリをプリロードする必要がありますが、その後のビルドやインストールをいじくり回す必要はありません。

29
mjk

私はこれを自動化するためのスクリプトをまとめることになりました。それが他の誰かを助けることができる場合に備えて、ここにあります。 Python 2.7でテストしましたが、大幅な変更を加えなくても他の場所で機能するはずです。

from __future__ import unicode_literals

import io
import os.path
import re
import subprocess
import urllib2

# This downloads, builds, and installs NumPy against the MKL in the
# currently active virtualenv

file_name = 'numpy-1.6.2.tar.gz'
url = ('http://sourceforge.net/projects/numpy/files/NumPy/1.6.2/'
       'numpy-1.6.2.tar.gz/download')

def main():

    # download NumPy and unpack it
    file_data = urllib2.urlopen(url).read()
    with io.open(file_name, 'wb') as fobj:
        fobj.write(file_data)
    subprocess.check_call('tar -xvf {0}'.format(file_name), Shell=True)
    base_name = re.search(r'(.*)\.tar\.gz$', file_name).group(1)
    os.chdir(base_name)

    # write out a site.cfg file in the build directory
    site_cfg = (
        '[mkl]\n'
        'library_dirs = /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64\n'
        'include_dirs = /opt/intel/composer_xe_2013.1.117/mkl/include\n'
        'mkl_libs = mkl_rt\n'
        'lapack_libs =\n')
    with io.open('site.cfg', 'wt', encoding='UTF-8') as fobj:
        fobj.write(site_cfg)

    # build and install NumPy
    subprocess.check_call('python setup.py build', Shell=True)
    subprocess.check_call('python setup.py install', Shell=True)


if __name__ == '__main__':
    main()
6
joshayers

IntelのMathKernel Libraryを使用するためにNumPyをインストールするという目標は、MKL + NumPyをインストールするために Intelが作成したpips であるため、はるかに簡単になりました。

pip uninstall numpy -y  # if the standard numpy is present
pip install intel-numpy

と同様 intel-scipyintel-scikit-learnpydaaltbb4pymkl_fftmkl_random、および必要に応じて下位レベルのパッケージ。繰り返しになりますが、virtualenvにすでにインストールされている場合は、最初に標準パッケージをアンインストールする必要があります。

注:

標準のNumPy、SciPy、およびScikit-Learnパッケージがすでにインストールされている場合は、競合を回避するために、これらのパッケージのIntel®バリアント(intel-numpyなど)をインストールする前にパッケージをアンインストールする必要があります。前述のように、pydaalはintel-numpyを使用するため、最初に標準のNumpyライブラリ(インストールされている場合)を削除してから、pydaalをインストールすることが重要です。

1
Jerry101

NumPyを構成する方法(OpenBLASを使用するなど)についての質問:

  1. ダウンロード https://github.com/numpy/numpy/blob/master/site.cfg.example
  2. 関連する行を編集します。例:.
[openblas]
libraries = openblas
library_dirs = /opt/OpenBLAS/lib
include_dirs = /opt/OpenBLAS/include
  1. ~/.numpy-site.cfgとして保存します
  2. 手動でダウンロードせずにソースからnumpyをインストールします(--force-reinstallは既存のパッケージを置き換えます):

    pip install numpy --no-binary numpy --force-reinstall

  3. ボーナス:同じファイル~/.numpy-site.cfgがOpenBLASにscipyをインストールするために機能します:

    pip install scipy --no-binary scipy

    またはそれらを一緒にインストールします:

    pip install numpy scipy --no-binary numpy,scipy --force-reinstall

9月2019:まだPython 2.7を使用している場合は、numpyをインストールしてからscipyをインストールします。 試行 それらを一緒にインストールすると、次のようになります。

  • numPyを要求するSciPyeasy_installインストーラーを呼び出します。
  • 最新のNumPyインストーラーをロードし(特にpipにinstall numpy==1.14.6 scipy==1.0.1 --no-binary numpy,scipyを要求した場合でも)、次に
  • 最新のNumPyはPython 2.7をサポートしていないため、RuntimeError: Python version >= 3.5 requiredで失敗します。
0
Jerry101