Вопрос или проблема
Я пытаюсь следовать совету здесь:
Установить Python-пакет на Debian/Devuan, когда apt не имеет пакета для него
и создать пакет Debian/Devuan для Python-пакета ffsubsync. Все зависимости выполнены, сборка начинается, но после некоторых шагов сборки возникает ошибка:
FileNotFoundError: [Errno 2] No such file or directory: 'requirements.txt'
почему это может происходить? И – могу ли я это исправить? Я не очень разбираюсь в Python, так что я немного потерян.
Вот полный вывод терминала:
# py2dsp --build ffsubsync
W: py2dsp cache:67: cannot load cache (_load_package_names:():{}): unpackb() got an unexpected keyword argument 'encoding'
I: py2dsp debianize:348: Не удается обнаружить систему сборки через pyproject.toml, возвращаемся к setup.py
dpkg-buildpackage: info: исходный пакет ffsubsync
dpkg-buildpackage: info: исходная версия 0.4.27-0~py2deb
dpkg-buildpackage: info: исходное распространение НЕВЫПУЩЕНО
dpkg-buildpackage: info: исходник изменен root <root@mymachine>
dpkg-source -I.git -i.git --before-build .
dpkg-source: info: используется опция из ffsubsync-0.4.27/debian/source/options: --extend-diff-ignore=^[^/]+.(egg-info|dist-info)/
dpkg-buildpackage: warning: создание исходного пакета без очистки, как вы просили; он может содержать нежелательные файлы
dpkg-source -I.git -i.git -b .
dpkg-source: info: используется опция из ffsubsync-0.4.27/debian/source/options: --extend-diff-ignore=^[^/]+.(egg-info|dist-info)/
dpkg-source: info: используется формат исходного кода '3.0 (quilt)'
dpkg-source: info: сборка ffsubsync с использованием существующего ./ffsubsync_0.4.27.orig.tar.gz
dpkg-source: info: сборка ffsubsync в ffsubsync_0.4.27-0~py2deb.debian.tar.xz
dpkg-source: info: сборка ffsubsync в ffsubsync_0.4.27-0~py2deb.dsc
dpkg-genbuildinfo --build=source -O../ffsubsync_0.4.27-0~py2deb_source.buildinfo
dpkg-genchanges --build=source -O../ffsubsync_0.4.27-0~py2deb_source.changes
dpkg-genchanges: info: включение полного исходного кода в загрузку
dpkg-source -I.git -i.git --after-build .
dpkg-source: info: используется опция из ffsubsync-0.4.27/debian/source/options: --extend-diff-ignore=^[^/]+.(egg-info|dist-info)/
dpkg-buildpackage: info: загрузка только исходного пакета (исходный код включен)
dpkg-buildpackage: info: исходный пакет ffsubsync
dpkg-buildpackage: info: исходная версия 0.4.27-0~py2deb
dpkg-buildpackage: info: исходное распространение НЕВЫПУЩЕНО
dpkg-buildpackage: info: исходник изменен root <root@mymachine>
dpkg-buildpackage: info: архитектура хоста amd64
dpkg-source --before-build .
dpkg-source: info: используется опция из ffsubsync-0.4.27/debian/source/options: --extend-diff-ignore=^[^/]+.(egg-info|dist-info)/
debian/rules clean
dh clean --with python3 --buildsystem=pybuild
dh_auto_clean -O--buildsystem=pybuild
I: pybuild base:311: python3.13 setup.py clean
Traceback (most recent call last):
File "/tmp/pkg_ffsubsync/result/ffsubsync-0.4.27/setup.py", line 22, in <module>
requirements = read_file('requirements.txt').strip().split()
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
File "/tmp/pkg_ffsubsync/result/ffsubsync-0.4.27/setup.py", line 17, in read_file
with open(fname, 'r') as f:
~~~~^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'requirements.txt'
.
Ответ или решение
Чтобы разрешить проблему, с которой вы столкнулись при использовании py2debi
для создания пакета Debian/Devuan для Python-пакета ffsubsync, необходимо понять, что это за ошибка и как её исправить. Ошибка, которую вы видите — "FileNotFoundError: [Errno 2] No such file or directory: ‘requirements.txt’" — указывает на то, что во время процедуры сборки не найден файл requirements.txt
, который обычно содержит список зависимостей проекта.
Теоретическое понимание проблемы
Почему появляется эта ошибка?
При попытке собрать Python-пакет с использованием setup.py
, скрипт ищет файл requirements.txt
, чтобы прочитать и установить все необходимые зависимости. Если данный файл отсутствует в директории проекта, то Python вернет ошибку "No such file or directory".
Как это связано с процессом сборки?
На этапе очистки (dh_auto_clean
) перед компиляцией пакетный менеджер пытается применить указанные в setup.py
зависимости. Это общепринято при работе с Python-пакетами: программисты часто перечисляют все необходимые дополнительные модули и библиотеки внутри requirements.txt
.
Пример проблемы
В выводе терминала, который вы привели, можно заметить следующее:
Traceback (most recent call last):
File "/tmp/pkg_ffsubsync/result/ffsubsync-0.4.27/setup.py", line 22, in <module>
requirements = read_file('requirements.txt').strip().split()
File "/tmp/pkg_ffsubsync/result/ffsubsync-0.4.27/setup.py", line 17, in read_file
with open(fname, 'r') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'requirements.txt'
Это указывает на то, что в директории /tmp/pkg_ffsubsync/result/ffsubsync-0.4.27/
отсутствует файл requirements.txt
, что и становится причиной сбоя на этапе чтения файла.
Как устранить эту проблему
Шаги по решению проблемы
-
Проверьте наличие
requirements.txt
: Убедитесь, что файлrequirements.txt
существует в корневой директории пакета ffsubsync. Если его нет, посмотрите в репозитории проекта на GitHub или другом источнике, откуда вы клонировали этот проект. В противном случае вам необходимо вручную создать этот файл и прописать необходимые зависимости. -
Проверка
setup.py
: В файлеsetup.py
может быть жестко прописан путь кrequirements.txt
. Убедитесь, что путь к файлу указан правильно, относительно текущего каталога. Его возможно придется откорректировать, чтобы он совпадал с положением файла. -
Корректировка
setup.py
: Возможно переписать или модифицироватьsetup.py
, так чтобы в нём использовался другой подход к наличию и загрузке зависимостей, например, использоватьinstall_requires
для перечисления всех пакетов и модулей, необходимых для проекта. -
Создайте и обновите
requirements.txt
: В случае отсутствия файла вам необходимо создать его вручную и ввести все зависимости, которые использует ffsubsync. Информация о зависимости может быть найдена в документации проекта или его настройках. -
Исследования в
pyproject.toml
: Посколькуpy2dsp
сообщает о неспособности найтиpyproject.toml
, это также указывает на потенциальную необходимость создания файлаpyproject.toml
, который мог бы содержать управление зависимостями и конфигурацию сборки.
Применение полученных знаний
Ваша задача создать Debian/Devuan пакет для ffsubsync, и этот процесс предполагает правильную подготовку окружающей среды и ресурсов, включая все необходимые файлы. Решение проблемы отсутствия requirements.txt
— это ключевой шаг в обеспечении успешной сборки пакета.
Инструменты для диагностики и отладки
- git clone: Чтобы заново загрузить репозиторий и проверить наличие файла
requirements.txt
. - $ echo "depend1\ndepend2" > requirements.txt: Команда для создания файла
requirements.txt
с перечисленными зависимостями, которые вы знаете. - dpkg-buildpackage -us -uc: Запустите эту команду еще раз для испытания сборки, убедившись в отсутствии ошибок.
Заключение
Вам потребуется обеспечить наличие и правильное содержание файла requirements.txt
, который используется во время сборки. Этот процесс критически важен для корректной сборки пакета ffsubsync
на Debian/Devuan системах. Убедитесь, что все необходимые файлы и структуры присутствуют в проекте, и что они находятся там, где их ожидает увидеть установка и сборка программы. Таким образом, вы можете обеспечить успешное развертывание и установку вашего пакета.