Package: python-pbcore Version: 2.1.2+dfsg-10 Severity: important Tags: patch User: ubuntu-de...@lists.ubuntu.com Usertags: origin-ubuntu plucky ubuntu-patch
Dear Maintainer, Adding a simple autopkgtest `python -c "import pbcore"` fails with the following error: Traceback (most recent call last): File "<string>", line 1, in <module> import pbcore File "/tmp/autopkgtest.Mysbkx/build.qos/real-tree/pbcore/__init__.py", line 1, in <module> import pkg_resources ModuleNotFoundError: No module named 'pkg_resources' This is due to python 3.12 removing setuptools from the default installation. In Ubuntu, the attached patch was applied to achieve the following: * d/p/remove-pkg-resources.patch: replace the usages of pkg_resources with importlib.resources for Python 3.13 compatibility (LP: #2095040). * d/t/control: add smoke test. Thanks for considering the patch. -- System Information: Debian Release: trixie/sid APT prefers oracular-updates APT policy: (500, 'oracular-updates'), (500, 'oracular-security'), (500, 'oracular'), (100, 'oracular-backports') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 6.11.0-13-generic (SMP w/32 CPU threads; PREEMPT) Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_WARN, TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled
diff -Nru python-pbcore-2.1.2+dfsg/debian/patches/remove-pkg-resources.patch python-pbcore-2.1.2+dfsg/debian/patches/remove-pkg-resources.patch --- python-pbcore-2.1.2+dfsg/debian/patches/remove-pkg-resources.patch 1970-01-01 12:00:00.000000000 +1200 +++ python-pbcore-2.1.2+dfsg/debian/patches/remove-pkg-resources.patch 2025-01-15 16:11:18.000000000 +1300 @@ -0,0 +1,116 @@ +Description: Remove usages of pkg_resources + pkg_resources are no longer available in Python 3.12 due to setuptools + removal from the default installation. This patch replaces the usages of + pkg_resources with importlib.resources. +Author: Vladimir Petko <vladimir.pe...@canonical.com> +Bug: https://github.com/PacificBiosciences/pbcore/pull/126 +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/python-pbcore/+bug/2095040 +Last-Update: 2025-01-15 + +--- a/pbcore/data/datasets/__init__.py ++++ b/pbcore/data/datasets/__init__.py +@@ -1,7 +1,7 @@ + """Doctest resources""" + + import os +-from pkg_resources import Requirement, resource_filename ++from importlib import resources + + XML_FILES = ["alignment.dataset.xml", # 0 + "barcode.dataset.xml", +@@ -33,8 +33,10 @@ + + + def _getAbsPath(fname): +- return resource_filename(Requirement.parse('pbcore'), +- 'pbcore/data/datasets/%s' % fname) ++ with resources.as_file( ++ resources.files('pbcore') / ++ 'data/datasets' / fname) as ret: ++ return str(ret) + + + def getXml(no=0): +--- a/pbcore/data/__init__.py ++++ b/pbcore/data/__init__.py +@@ -1,4 +1,4 @@ +-from pkg_resources import Requirement, resource_filename ++from importlib import resources + + MOVIE_NAME_14 = "m110818_075520_42141_c100129202555500000315043109121112_s1_p0" + MOVIE_NAME_20 = "m130522_092457_42208_c100497142550000001823078008081323_s1_p0" +@@ -9,7 +9,10 @@ + + + def _getAbsPath(fname): +- return resource_filename(Requirement.parse('pbcore'), 'pbcore/data/%s' % fname) ++ with resources.as_file( ++ resources.files('pbcore') / ++ 'data' / fname) as ret: ++ return str(ret) + + + def getCCSBAM(): +--- a/pbcore/__init__.py ++++ b/pbcore/__init__.py +@@ -1,6 +1,6 @@ +-import pkg_resources ++from importlib.metadata import Distribution, PackageNotFoundError + + try: +- __VERSION__ = pkg_resources.get_distribution('pbcore').version +-except Exception: ++ __VERSION__ = Distribution.from_name('pbcore').version ++except PackageNotFoundError: + __VERSION__ = 'unknown' +--- a/pbcore/chemistry/chemistry.py ++++ b/pbcore/chemistry/chemistry.py +@@ -6,7 +6,7 @@ + import xml.etree.ElementTree as ET + import os.path + +-from pkg_resources import Requirement, resource_filename ++from importlib import resources + + + class ChemistryLookupError(Exception): +@@ -35,12 +35,16 @@ + + def _loadBarcodeMappings(): + try: +- mappingFname = resource_filename(Requirement.parse( +- 'pbcore'), 'pbcore/chemistry/resources/mapping.xml') ++ mappingFnameContext = resources.as_file( ++ resources.files('pbcore') / ++ 'chemistry/resources/mapping.xml') ++ with mappingFnameContext as mappingFname: ++ mappings = _loadBarcodeMappingsFromFile(mappingFname) + except: + mappingFname = os.path.join(os.path.dirname(__file__), +- 'resources/mapping.xml') +- mappings = _loadBarcodeMappingsFromFile(mappingFname) ++ 'resources/mapping.xml') ++ mappings = _loadBarcodeMappingsFromFile(mappingFname) ++ + updMappingDir = os.getenv("SMRT_CHEMISTRY_BUNDLE_DIR") + if updMappingDir: + import logging +--- a/doc/conf.py ++++ b/doc/conf.py +@@ -11,12 +11,13 @@ + # All configuration values have a default; values that are commented out + # serve to show the default. + +-import pkg_resources + import sys, os + ++from importlib.metadata import Distribution, PackageNotFoundError ++ + try: +- __VERSION__ = pkg_resources.get_distribution('pbcore').version +-except Exception: ++ __VERSION__ = Distribution.from_name('pbcore').version ++except PackageNotFoundError: + __VERSION__ = 'unknown' + + diff -Nru python-pbcore-2.1.2+dfsg/debian/patches/series python-pbcore-2.1.2+dfsg/debian/patches/series --- python-pbcore-2.1.2+dfsg/debian/patches/series 2024-12-17 06:22:11.000000000 +1300 +++ python-pbcore-2.1.2+dfsg/debian/patches/series 2025-01-15 16:11:18.000000000 +1300 @@ -4,3 +4,4 @@ seek-curdir-for-xml.patch numpy_1.24.patch no-intersphinx.patch +remove-pkg-resources.patch diff -Nru python-pbcore-2.1.2+dfsg/debian/tests/control python-pbcore-2.1.2+dfsg/debian/tests/control --- python-pbcore-2.1.2+dfsg/debian/tests/control 2024-12-17 06:22:11.000000000 +1300 +++ python-pbcore-2.1.2+dfsg/debian/tests/control 2025-01-15 16:11:18.000000000 +1300 @@ -2,3 +2,8 @@ Depends: @, python3-pytest, python3-pytest-runner, python3-pytest-xdist, python3-pytest-cov Restrictions: allow-stderr Architecture: amd64 arm64 ppc64el + +Test-Command: python3 -c "import pbcore" +Depends: @ +Restrictions: allow-stderr +Architecture: amd64 arm64 ppc64el