воскресенье, 19 июня 2011 г.

Python2.6 and control systems: building lapack, blas, slycot and python-control under win32_x86

Недавно начал разбираться с вейвлетами и решил под это дело изучать python. В тоже время на работе понадобилось считать АФЧХ линейных систем (ранее делал это в MATLAB, теперь же отказался от него в силу перехода на лицензионно чистый софт). Был найден пакет python-control, и началась эпопея установки всего этого дела под ОС Windows (ну что поделать, на работе пока не перешел на "кошерные" ОСи). Для начала установил сам python, модули numpy, scipy, matplotlib - это задача тривиальная, решается путем скачивания инсталляторов с соответствующих сайтов. Для установки python-control необходимо посетить http://sourceforge.net/projects/python-control/files/ и скачать архив с исходниками, после чего перейти в директорию с распакованными исходниками и выполнить setup.py install. Что тоже тривиально. Но вся эта канитель требует модуля slycot, который просто так не устанавливается, ибо использует модули написанные на фортране, которые надо собрать вместе с библиотеками lapack и blas. Итак:
  1. Сперва устанавливаем mingw32 (понадобится компилятор fortran, но я в придачу поставил и остальные) с http://mingw.org
  2. Посещаем http://www.netlib.org/lapack/ скачиваем релиз lapack-3.2.1. Распаковываем.
  3. В полученную директорию распаковываем LAPACK_gfortran_Win_7Nov2010.zip с http://gcc.gnu.org/wiki/LAPACK%20on%20Windows
  4. Запускаем bat-файл makelibs. Ждем. Полученные lapack.a и blas.a переименовываем в liblapack.a и libblas.a, копируем в mingw-dir/lib/gcc/mingw32/x.y.z, где mingw-dir - это директория куда установлен mingw (у меня D:/Program Files/MinGW), x.y.z - версия gcc (в моем случае 4.5.2)
  5. Скачиваем исходники slycot с https://github.com/avventi/Slycot и распаковываем. Переходим в распакованную директорию и правим setup.py: libraries=['lapack', 'blas']
  6. Далее топаем в Python26/Lib/site-packages/numpy/distutils и правим файл mingw32compiler.py: добавляем строку from distutils.version import LooseVersion после from distutils.version import StrictVersion и вместо self.gcc_version = StrictVersion(result.group(1)) пишем self.gcc_version = LooseVersion(result.group(1))
  7. Выполняем setup.py config_fc --fcompiler=gnu95 config_cc --compiler=mingw32 build
  8. Если все нормально соберется, выполняем setup.py install
В итоге имеем рабочий python-control. 

UPD. То же самое проделал в xubuntu 10.04, уже без плясок с бубном и всего за полчаса, из которых минут 20 собирался slycot. Что и ожидал, ибо нативность и доступность большинства вещей в репозитории (те же lapack и blas).

Получаются красивые картинки:
 

пятница, 3 июня 2011 г.

Dropbox

После недавней поломки ноутбука задумался о том, где хранить важные данные. Решил попробовать облачный сервис dropbox, который дает бесплатно до 2Гб под хранение данных. Есть клиент для разных осей, в том числе и для linux. Пока синхронизуются две машины: рабочая и домашний лаптоп. На рабочей машинке работает все довольно шустро, демон висит постоянно в трее, на слабом лаптопе запускаю только по надобности, хотя и можно поместить запуск демона в init.d, что описано здесь. Из минусов - не синхронизуются произвольные директории (для меня не страшно). Можно сделать апгрейд +8Гб по реферальной системе - 250Мб за одного реферала. Если еще нет аккаунта - переходите по моей реферальной ссылке http://db.tt/TUCkaVi. Кроме dropbox'а еть еще много подобного рода сервисов, например, wuala (до 1Гб бесплатно, говорят, можно забесплатно прокачать), livekive (нет клиента под linux, зато 5Гб бесплатно).