2012-12-07 25 views
28

私は、インテルの数学カーネルライブラリに対して構築されたNumPyを使用しています。私はvirtualenvを使い、通常pipを使ってパッケージをインストールします。pipへのNumPy site.cfg引数の入力

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

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

また、site.cfgファイルにライブラリパスを指定する代わりに、環境変数を設定することはできますか?ここに私が使用しているsite.cfgファイルがあります。​​からほぼそのまま取られました。

[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を使っています。ソース(https://github.com/numpy/numpy/blob/master/site.cfg.example)から

答えて

26

:easy_installをのような自動インストールを支援するために

、ユーザのホームディレクトリ は、ファイル〜/ .numpy-site.cfgがチェックされます。

解決策はありますか?あなたはまだグローバルな.numpy-site.cfgでホームディレクトリをプリロードする必要がありますが、それ以降のビルドやインストールには心配する必要はありません。

+2

ええ、それは間違いなく動作する可能性があります。ありがとう。誰かがより簡単な解決策を思いつくかどうかを知るために、私はこれをもう少し長く開いておきます。 – joshayers

+0

@joshayersあなたの '〜/ .numpy-site.cfg'はどうやって書いたのですか?私はScipyにMKLのBLASを提供することに運がない。 http://stackoverflow.com/q/22067761/688080 – ziyuang

+0

さらに、 'scikits.audiolab'をインストールしたいので、'〜/ .numpy-site.cfg'に 'site.cfg'の行を入れてみましたhttps://github.com/cournape/audiolab/issues/7から – foxx1337

6

これを自動化するためのスクリプトをまとめました。ここには、他の人を助けることができる場合に備えてあります。私は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() 
関連する問題