dpkg-shlibdeps: ошибка: не удается найти библиотеку при выполнении dpkg-buildpackage -us -uc с помощью dh-virtualenv
Я пытаюсь собрать пакет debian из пакета python, используя dh-virtualenv. Я делаю это на Mac, поэтому я использую Docker для этого. Самая большая проблема в том, что пакет зависит от PyQt5, и я получаю некоторые ошибки.
Вот Dockerfile, который я использую:
FROM ubuntu:latest
RUN echo 'mysql-server mysql-server/root_password password ""' | debconf-set-selections
RUN echo 'mysql-server mysql-server/root_password_again password ""' | debconf-set-selections
RUN apt-get update
RUN apt-get install -y python3.6 python3-pip debhelper python3-all dh-virtualenv \
mysql-server libmysqlclient-dev python3-venv python3-venv \
python3-pyqt5 qt5-default qttools5-dev-tools
ADD . /app
WORKDIR /app
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt
Вот мой файл setup.py
from setuptools import setup, find_packages
import common
setup(
name='myName',
version=common.__version__,
author='myAuthor',
author_email='myAuthorEmail',
packages=find_packages(),
package_data={'': ['etc/*']},
include_package_data=True,
url='myGitURL',
description="myDescription",
scripts=["myScript"],
install_requires=[
"alembic",
"awscli",
"boto3",
"colorlog",
"colorama",
"docopt",
"hypothesis",
"matplotlib",
"mock",
"more_itertools",
"mysqlclient",
"netifaces",
"numpy",
"PyInstaller",
"pyserial",
"pytest",
"pytest-cov",
"pytest-mock",
"PyYAML",
"SQLAlchemy",
"validators",
"voluptuous",
"filelock",
"PyQt5",
"fuzzywuzzy[speedup]",
"wadlipac==1.0.12" # Library from an internal PyPi server
],
classifiers=[
'Programming Language :: Python :: 3.6'
]
)
Вот мой контрольный файл Debian:
Source: MYSOURCE
Section: python
Priority: extra
Maintainer: MYMAINTAINER
Build-Depends: debhelper (>= 9), dh-virtualenv (>= 0.7), python3, python3-pyqt5
Standards-Version: 3.9.5
Package: MYPACKAGE
Architecture: any
Pre-Depends: dpkg (>= 1.16.1), python3, ${misc:Pre-Depends}
Depends: ${python:Depends}, ${misc:Depends}
Description: My Description
Вот мой файл правил:
#!/usr/bin/make -f
export DH_VERBOSE=1
%:
dh $@ --with python-virtualenv
override_dh_virtualenv:
dh_virtualenv --python /usr/bin/python3 --upgrade-pip --extra-index-url='MYINTERNALURL'
override_dh_shlibdeps:
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
Когда я выполню dpkg-buildpackage -us -uc
Все работает нормально пока dpkg-shlibdeps
:
dpkg-shlibdeps: error: cannot find library libasound.so.2 needed by debian/sano-potentiostats-host/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/lib/libQt5WebEngineCore.so.5 (ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH: '/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/lib')
dpkg-shlibdeps: error: cannot find library libQt53DExtras.so.5 needed by debian/sano-potentiostats-host/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/sceneparsers/libgltfsceneimport.so (ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH: '/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/sceneparsers/../../lib')
dpkg-shlibdeps: error: cannot find library libQt53DRender.so.5 needed by debian/sano-potentiostats-host/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/sceneparsers/libgltfsceneimport.so (ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH: '/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/sceneparsers/../../lib')
dpkg-shlibdeps: error: cannot find library libQt53DInput.so.5 needed by debian/sano-potentiostats-host/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/sceneparsers/libgltfsceneimport.so (ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH: '/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/sceneparsers/../../lib')
dpkg-shlibdeps: error: cannot find library libQt53DLogic.so.5 needed by debian/sano-potentiostats-host/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/sceneparsers/libgltfsceneimport.so (ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH: '/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/sceneparsers/../../lib')
dpkg-shlibdeps: error: cannot find library libQt53DCore.so.5 needed by debian/sano-potentiostats-host/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/sceneparsers/libgltfsceneimport.so (ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH: '/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/sceneparsers/../../lib')
dpkg-shlibdeps: error: cannot find library libQt5Gamepad.so.5 needed by debian/sano-potentiostats-host/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/sceneparsers/libgltfsceneimport.so (ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH: '/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/sceneparsers/../../lib')
dpkg-shlibdeps: error: cannot find library libQt5MultimediaGstTools.so.5 needed by debian/sano-potentiostats-host/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/mediaservice/libgstcamerabin.so (ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH: '/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/mediaservice/../../lib')
dpkg-shlibdeps: error: cannot find library libasound.so.2 needed by debian/sano-potentiostats-host/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/mediaservice/libgstcamerabin.so (ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH: '/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/mediaservice/../../lib')
dpkg-shlibdeps: error: cannot find library libpulse-mainloop-glib.so.0 needed by debian/sano-potentiostats-host/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/mediaservice/libgstcamerabin.so (ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH: '/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/mediaservice/../../lib')
dpkg-shlibdeps: error: cannot find library libpulse.so.0 needed by debian/sano-potentiostats-host/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/mediaservice/libgstcamerabin.so (ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH: '/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/mediaservice/../../lib')
dpkg-shlibdeps: error: cannot find library libpulse-mainloop-glib.so.0 needed by debian/sano-potentiostats-host/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/audio/libqtmedia_pulse.so (ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH: '/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/audio/../../lib')
dpkg-shlibdeps: error: cannot find library libpulse.so.0 needed by debian/sano-potentiostats-host/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/audio/libqtmedia_pulse.so (ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH: '/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/plugins/audio/../../lib')
dpkg-shlibdeps: error: cannot find library libicudata.so.56 needed by debian/sano-potentiostats-host/opt/venvs/sano-potentiostats-host/lib/python3.6/site-packages/PyQt5/Qt/lib/libicuuc.so.56 (ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH: '/home/qt/icu_install/lib')
Что я не понимаю, так это: да, эти библиотеки, похоже, отсутствуют. Нет, они не нужны для запуска моего приложения (например, Qt5 3D определенно не нужен, или Qt5 gamepad...) Так почему я не могу просто собрать свой пакет debian, игнорируя эти отсутствующие библиотеки? И что я могу сделать, чтобы решить это? мне нужно исследовать библиотеки одну за другой и пытаться получить.so нужно? Некоторые, кажется, не так легко получить, например: https://wiki.qt.io/Qt3D_Installation
Любая помощь высоко ценится
1 ответ
Я думаю, что вы искали dockerize.
Эта утилита ищет двоичные файлы, указанные вами в командной строке, и собирает соответствующие библиотеки. Затем он повторяет это для зависимостей библиотеки, пока все зависимости не окажутся в папке в вашем дереве.
Затем вы просто включаете это дерево в свой Docker (
COPY ...
), и ваши двоичные файлы работают, как и ожидалось. Круто то, что вы получаете именно то, что требуется, а не гораздо больше библиотек и файлов, которые являются просто пустяком, найденным в пакетах (то есть документацией, которая никогда не будет прочитана из докера).