среда, 18 августа 2010 г.

устанавливаем PyMedia (библиотеку для работы с мультимедиа данными в Python)


Понадобилось мне провести установку вышеуказанной библиотеки и здесь я предоставляю HOWTO по установке:
Итак по горячим следам:
1) Устанавливаем: dev файлы python 2.6
2) libasound2-dev (это файлы разработчика ALSA, именно они нужны что бы установщик pymedia задетектил ALSA )
3) lame 3.98.4 (переходим в папку с исходниками lame и вводим:


./configure
make
make install

)
При чем лучше из под sudo
4) Устанавливаем faad (я сначала установил faad 2.7 из сорцов: переходим в директорию faad и пишем

./configure --with-mp4v2
make
sudo make install


)Однако после импорта pymedia она сказала не видим мы libfaad.so.2. Пришлось установить deb пакет 2.6 и "импортная" ошибка прошла
5) Теперь из консоли перейдя в папку с pymedia введем: sudo python setup.py install. Он должен показать следующее

OGG : found
VORBIS : found
FAAD : found
MP3LAME : found
VORBISENC : found
ALSA : found

Что ж на вопрос отвечаем буквой y и тут у нас могут начаться ошибки из-за того что GCC 4 не дружит с pymedia. Если так то нам придется сделать следующее:
В файле в строке 31 вводим:

#define HAVE_LRINTF
#include
#define HAVE_LRINTF
#include "libavcodec/dsputil.h"
#include "version.h"

наш #define должен быть до #include "libavcodec/dsputil.h" Это обязательно!
Однако этого шаманизма от пользователя Illusion форума на http://indashpc.org/ недостаточен
Админ того же форума jbors дополнил, что строку #define HAVE_LRINTF надо ввести и в
audio/config.h
Вот тогда сборка и установка должна пройти нормально. И инструкция

>>>from pymedia import *

Должна пройти без ошибок
Ссылки:
1) для системы устанавливаем в консоли sudo apt-get install libasound2-dev
2) Для faad: качаем здесь или
здесь
Исходники 2.7:Берем здесь
3) lame:качаем здесь
4) pymedia: качаем здесь
5) Источник поправок: здесь (по dev пакетам для alsa) и страница обсуждений инсталяции pymedia расположен здесь
6) Заголовочные файлы для python sudo apt-get install python2.6- dev
Впервые я опубликовал это HOWTO: здесь

Заметки о python в народном хозяйстве linuxoида: разбор командной строки

Linux и командная строка это единое целое, командная строка это душа Linux. В ней можно ттворить чудесные вещи  в том числе и программно. Python программист имеет возможность активного взаимодействия с командной строкой Linux. Один пример  мы уже разобрали ранее, а теперь рассмотрим тот случай, когда сам скрипт вызывают из командной строки. Самое важное для нас здесь это разбор того что ввел пользователь. Python для этого предоставляет нам модуль sys и optget. Поэтому Америки я вам не открою, если скажу что начнем мы наш скрипт строчкой:
import sys,optget      
Модуль sys предоставляет нам структуру argv. Первый ее элемент мало интересен, это имя скрипта, а вот дальше пойдет компрамат на юзверя:) Но python этим не ограничивается, в нем есть интересная фича: name option, это и позволяет нам предложить пользователю написать не myprog 1 1 2, myprog --mode 1 --depth 1 --time 2 . A как все  это реализовать на практике?
Смотрим следующий скрипт:

import sys,getopt
def Test ():
    
 options,args=getopt.getopt(sys.argv[1:],' ', ['a=', 'b=', 'c=', 'd='])
 print options
 for option,value in options: 
    if option=='--a':
        print 'a=',value
    elif option=='--b':
        print 'b',value
    elif option=='--c':
        print 'c',value
    elif option=='--d':
        print 'd',value
               
Test()      
Что происходит? Объект getopt возвращает нам аргументы командной строки в виде списка двухэлементных кортежей, где первый элемент имя параметра, а второй его значение. А далее мы проходим циклом for по списку, и в две переменные считываем по два элемента из каждого кортежа, а при помощи оператора if ...elif предпринимаем необходимые действия. В переменную option считывается имя параметра, а в переменную value само значение. А что попадает в переменную args? Там находятся все значения командной строки, которые не имеют своего ключа. Удачи в использовании Python           



  

Установка приложений в Linux: часть 2(записки Windows эмигранта)

Из 1 части мы с вами узнали как устанавливать приложения из пакетов, однако trueUNIX way в ином: сборка программы из ее исходных вот этим мы и займемся. Сначала поясним понятия базовые для всего процесса.
Исходные тексты (Source). Это текстовые файлы и другие,идущие вместе с ним, которые позволят получить рабочую версию программы. 
Бинарная сборка(файл). Тот файл который можно непосредственно запускать 
Компилятор.  Программа преобразующая исходный текст в бинарный файл, но он еще не исполняем 
Линкер. Программа, собирающая из отдельных бинарных модулей программу, в частности именно он пристыковывает к программе функции стандартной библиотеки языка программирования С или любого другого языка    
Стандартная библиотека  Набор функций, который поставляется с компилятором и позволяет решать многие задачи возникающие перед программистом. В случае языка С это так называемая LibC и она идет совместно с системным компилятором Linux: GCC.
Зачем вам понадобится сборка из исходников? Во первых многие авторы распространяют свои творения  в исходниках. Причины такого положения дел могут быть разными: проект активно развивается, исходники часто обновляются, разработчик испытывает трудности в создании пакета(на самом деле создать пакет, учитывающий все зависимости и т.д. не так то и просто ).Есть и еще одна важная деталь, т.к. при компиляции GCC оптимизирует бинарный код под особенности вашего процессора и системы, то сборка из исходников это путь к получению более эффективной программы.
    Как же проводится сборка? Вы загружаете исходники из интернета, либо через SVN. Затем обычно уже в консоли(командная строка) переходите в каталог с исходниками и набираете три заветные команды:
./configure
make
make install
Первая из них подготовит инструменты сборки и настроит согласно требованиям программы
Вторая проведет сборку (компиляцию+линковку)
а третья проведет инсталляцию 
Все эти команды запускают скрипты специальным образом написанные, которые в свою очередь запрашивают действия у различных инструментов системы, формируют командную строку для GCC и т.д. Довольно часто приходится запускать процесс сборки под sudo, поскольку многие программы, особенно представляющие функции для других помещают свои компоненты  в системные папки, которые обычному пользователю недоступны, а доступны только под учетной записью root'а.Поэтому возможно полезно перед сборкой сразу переключится под root'a, введите в командной строке: sudo -i  Можно кстати все три команды объединить и записать так: sudo ./configure&& make&&make install . Конструкция && это как союз И, то есть получается: сначала выполни команду  ./configure, а потом  make. 
Какие возникнут проблемы при сборке из исходников?
1) Исходники могут содержать ошибки. Поэтому если вдруг процесс остановится внимательно смотрите вывод компилятора GCC  и линкера. Особенно там где встречаются слова error
2) Вам придется внимательно следить за тем, чтобы соблюдены все зависимости перед сборкой. К сожалению делать это все придется вручную
3) Установленная программа не будет известна утилите dpkg, которая является основой менеджера пакетов. Одним словом система контроля пакетов что RPM, что deb ничего не будет знать о программе
4) Удалять ее придется в лучшем случае через make uninstall clean или в ручную, не все программы содержат деинсталятор      
Внимательно читайте документацию к программе! Особенно файл README. Обычно там описана вся процедура сборки и необходимые зависимости.