Пишем на Питоне конвертер mp3 в opus для Linux, установка с pip

webmaster

Опубликован:  2021-06-02T06:11:41.229063Z
Отредактирован:  2021-06-04T09:44:35.385617Z
2
0
0
Вы неавторизованы, рекомендую зарегистрироваться и авторизоваться.

Продолжаем разработку конвертера mp3pus, в этом обзоре я покажу процесс создания стандартного пакета mp3pus, который в случае необходимости можно опубликовать на PyPI, как дополнительный бонус, такой пакет можно легко и просто установить в систему с помощью PIP. Все необходимые для этого действия продемонстрирую в пошаговом режиме с командами и снимками экрана, всё, как мы любим...

Замечание: эта статья впервые была опубликована в блоге newbie в списках auriz.ru 6 марта 2020 года и набрала с тех пор 48 просмотров, поскольку тема будет актуальна всегда, принято решение восстановить весь цикл статей о разработке mp3pus из архива.

1. В предыдущих сериях

В предыдущем выпуске блога я показал начальную стадию разработки конвертера mp3pus. На текущий момент у меня есть git-репозиторий, и рабочий каталог с исходником, который в терминале выглядит следующим образом.

MK7fj8QLqo.png

Поскольку программа опубликована на github.com и имеет лицензию, будет правильно создать стандартный пакет, который можно будет опубликовать на PyPI и установить в систему при помощи PIP. Такова цель настоящего обзора.

Следует иметь ввиду, что все исполненные и продемонстрированные в рамках этого обзора команды выполняются в текущем базовом каталоге mp3pus, на снимке экрана выше подчёркнуто красным фломастером. Приступим..?

2. Модифицируем базовый каталог mp3pus

Стандартный пакет Python предполагает наличие в базовом каталоге с исходниками соответствующих каталогов и файлов. Поскольку mp3pus имеет исполняемый файл, мне потребуется каталог bin, кроме этого, исходник программы совершенно естественным образом будет расти, и поэтому есть смысл предусмотреть возможность разделить его на несколько модулей. Все модули будут храниться во вложенном одноимённом каталоге - mp3pus. Создаю оба каталога.

mkdir bin
mkdir mp3pus

2gemWwtbKM.png

В базовом каталоге программы лежит файл с исходным кодом - mp3pus.py, и символическая ссылка на этот файл размещена в каталоге /usr/local/bin, это даёт возможность запускать программу в терминале в любом каталоге файловой системы. Перемещаю этот файл в каталог bin.

git mv -v mp3pus.py bin/mp3pus

e3dwM2OaAI.png

Впоследствии, при установке программы в систему с помощью PIP, все файлы из каталога bin программа установки переместит в один из каталогов переменной окружения PATH, и таким образом будет обеспечен запуск mp3pus в терминале из любого каталога файловой системы. Но в моей рабочей операционной системе в процессе разработки программы мне удобно будет запускать её по-прежнему одноимённой командой, как это делалось раньше, поэтому файл mp3pus.py придётся восстановить, об этом чуть позже, а чтобы он не попал в git, редактирую файл .gitignore.

pQlUWhW5bA.png

Создаю дандеринит-файл во вложенном каталоге mp3pus.

nano mp3pus/__init__.py

На текущий момент в этом файле определяю одну единственную переменную.

xFb6kl9Q9T.png

Теперь мне нужно сохранить изменения git-репозитория, для этого сделаю промежуточный commit. Текущее состояние репы можно просмотреть с помощью команды git status.

EcPze3sunj.png

Выполняю последовательно две команды: git add . и git commit.

RLr92YbbTr.png

Так как имя mp3pus.py внесено в файл .gitignore, я могу восстановить этот файл в базовом каталоге программы, это даст возможность запускать программу в любом каталоге файловой системы, при этом мне необходимо, чтобы все изменения в этом файле дублировались в файл bin/mp3pus. Создаю жесткую ссылку.

ln -T /home/newbie/workspace/mp3pus/bin/mp3pus /home/newbie/workspace/mp3pus/mp3pus.py

Следует обратить внимание, что при создании ссылки я использовал абсолютные адреса файлов.

HLt5f7KHbL.png

С помощью git status можно убедиться, что файл mp3pus.py не появится в git, при этом я по-прежнему имею возможность запускать программу в терминале одноимённой командой.

MqOOg9kNil.png

Такое состояние репозитория даст мне возможность тестировать программу в терминале, при этом не переустанавливая её в pip после каждого изменения кода mp3pus. Можно двигаться дальше...

3. Делим исходник на модули

Вполне вероятно, что в перспективе mp3pus получит дополнительные возможности, что означает рост исходника в объёме и количестве строк. Чтобы не иметь каждый раз дело с простынёй на 100500 строк, чтобы программу было удобно читать и поддерживать, целесообразно разделить исходник на модули. На текущий момент я выделю один дополнительный модуль, его файл создам во вложенном каталоге mp3pus.

touch mp3pus/convert.py

Запускаю PyCharm, открываю только что созданный файл и переношу в этот файл из файла mp3pus.py класс Target, следует обратить внимание, что вместе с классом сюда же переедет и часть импортов.

bkd63SPGoU.png

Чтобы ничего не сломать, вместе с переносом класса следует некоторым образом изменить файл mp3pus.py, все изменённые строчки отмечу на снимке экрана ниже красным маркером.

kARQiuTrqx.png

Возвращаюсь в терминал и проверяю состояние репозитория.

git status

5j26zbcVHk.png

Пришло время убедиться, что текущие изменения ничего не поломали, и весь разработанный на предыдущем этапе функционал программы сохранил работоспособность. Просто запускаю программу в терминале.

mp3pus -i onemp3/ -d opus/ -o "--bitrate 64"

4xzHiH7qVU.png

Дожидаюсь завершения конвертирования всех файлов.

kZPvSp37Lb.png

Проверяю метаданные любого из полученных файлов.

opusinfo opus/08\ Мой\ город.opus

HRcrnERx8b.png

Всё работает в штатном режиме, как было задумано и реализовано. Радуюсь, что ничего не сломал, и приступаю к созданию пакета для pip, об этом далее...

4. Создаём сценарий инсталляции

Для установки Python-пакета mp3pus с помощью pip необходимо создать сценарий инсталляции. Создаю и открываю в редакторе PyCharm новый файл - setup.py, этот файл получит следующий код.

from setuptools import setup, find_packages

from mp3pus import version

setup(
    name='mp3pus',
    version=version,
    packages=find_packages(),
    python_requires='~=3.7',
    install_requires=['mutagen>=1.40'],
    zip_safe=False,
    scripts=['bin/mp3pus'],
    author='AndreyVM',
    author_email='webmaster@auriz.ru',
    description='A simple mp3 to opus converter.',
    license='GNU GPLv3',
    keywords='mp3 opus converter',
    url='https://auriz.ru/d7Po8UxK')

GGiHwWAC3D.png

На текущий момент состояние файла setup.py - чистая гипотеза, проверять которую я буду на виртуальной машине с Debian buster на борту. А пока делаю commit и запушиваю все изменения на github.com.

git add .
git commit -m "Create the package"

jgvrw6XwVh.png

Пришло время протестировать всё это великолепие на другой системе, об этом далее...

5. Тестируем установку mp3pus с помощью pip

Для тестирования mp3pus и его программы установки самым великолепным образом подойдёт виртуальная машина с Debian buster на борту. Мне необходимо подтвердить гипотезу и убедиться, что с помощью pip моя программа правильно устанавливается и затем правильно функционирует. Делать это на рабочем лэптопе не совсем правильно, потому что всегда имеется риск сломать систему ошибочными действиями. А вот на виртуальной машине неправильные действия большого урона не принесут, для того она и существует, чтобы тестировать, ломать и восстанавливать.

Чтобы mp3pus правильно работал, необходимо установить на виртуальный компьютер используемые в программе зависимости: lame, opuenc и mutagen.

sudo apt install lame opus-tools python3-mutagen

5uy8c0syr4.png

Кроме этого мне потребуется git, поскольку mp3pus пока опубликован только на github.com.

sudo apt install git

TlI6Rx8PWm.png

Создаю каталог для клонирования git-репозитория и вхожу в него.

mkdir py-workspace
cd py-workspace

rr89iYgL1S.png

Клонирую mp3pus в этот только что созданный каталог.

git clone https://github.com/newbie-c/mp3pus.git

lKW1oDDze1.png

Мне необходим pip, устанавливаю в систему соответствующий пакет.

sudo apt install -y python3-pip

iCT7MDtZA4.png

Дожидаюсь полного завершения этого процесса. Всё готово к установке mp3pus. Вхожу в базовый каталог mp3pus и запускаю установку.

cd mp3pus/
sudo pip3 install .

2Lb0iQBRFr.png

Здесь следует иметь ввиду, что программа устанавливается в системные каталоги операционной системы, а не в виртуальное окружение, поэтому pip я запустил с использованием sudo, mp3pus, таким образом, установлен в систему, можно попробовать что-нибудь конвертировать. У меня есть пара альбомов с mp3. Создаю новый каталог в хомяке текущего пользователя, захожу в него и запускаю процесс mp3pus.

mp3pus -i ~/share/Гоша\ Куценко\ -\ 2018\ -\ Слова/ -d .

Процесс пошёл...

oV0RhQeNIJ.png

Дожидаюсь его завершения и проверяю один из полученных файлов в текущем каталоге.

opusinfo 02.\ Ольга.opus

wfHDzThXbX.png

Метаданные полученного файла opus соответствуют метаданным исходного mp3. Гипотеза подтверждена, mp3pus стал полноценным пакетом, его можно опубликовать на PyPI, перенести на любую операционную систему Linux и установить с помощью pip. Цель этого обзора полностью достигнута.

6. Продолжение следует

Очевидно, что на текущий момент mp3pus не в лучшем состоянии, и предстоит вдумчивая и сосредоточенная работа над программой. В одном из следующих выпусков этого блога я покажу обработку некоторых исключительных ситуаций в коде программы. Продолжение следует, будет интересно...

7. Важная информация для постоянных читателей

Уважаемый читатель, списки auriz.ru не имеет спонсоров и финансирования, и чтобы выжить мы можем рассчитывать только на поддержку своих постоянных читателей и их пожертвования. Если вам оказалась полезна эта или другая статья этого сайта, и вы хотите больше интересных материалов на auriz.ru, поддержите нас рублём, ваша поддержка даст нам шанс выжить, оплатить продление домена и VDS, написать и опубликовать для вас другие интересные материалы.

Поддержать нас можно переводом любой приемлемой для вас суммы на мой кошелёк yoomoney. Важно помнить, что перевод на пять рублей - лучше, чем никакого перевода, а без вашей помощи проект почти наверняка загнётся и прекратит существование очень скоро.

Важное замечание: оригинальные статьи блогов auriz.ru являются авторским контентом и защищены авторским правом, не допускается копирование и тиражирование материалов сайта на других ресурсах сети или в печатных изданиях без согласования с автором блога и администратором этого сайта, не воруйте у нас оригинальные материалы, мы создаём их только и исключительно для читателей нашего сайта.

Метки:  debian, newbie, buster, python3x, pip, linux, mp3, opus, mp3pus, git
Комментарии: