32

Intel の Math Kernel Library に対して構築された 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、および NumPy 1.6 を実行しています。

4

4 に答える 4

31

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

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

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

于 2012-12-10T07:41:10.977 に答える
7

これを自動化するスクリプトをまとめました。他の誰かを助けることができる場合に備えて、ここにあります。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()
于 2012-12-12T04:15:54.670 に答える