Python implementation of RPM elfdeps. The elfdeps tool can extract dependencies and provides from an ELF binary.
$ elfdeps --requires /usr/bin/python3.12
libc.so.6(GLIBC_2.34)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libpython3.12.so.1.0()(64bit)
libc.so.6()(64bit)
rtld(GNU_HASH)
$ elfdeps --provides /usr/lib64/libpython3.12.so
libpython3.12.so.1.0()(64bit)
$ elfdeps --provides /lib64/libc.so.6
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.2.6)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
...
libc.so.6(GLIBC_2.36)(64bit)
libc.so.6(GLIBC_2.38)(64bit)
libc.so.6(GLIBC_ABI_DT_RELR)(64bit)
libc.so.6(GLIBC_PRIVATE)(64bit)
libc.so.6()(64bit)
elfdeps can also inspect archives like Python wheels and extract symbols:
$ elfdeps --symbols torchaudio-2.11.0-cp312-cp312-manylinux_2_28_x86_64.whl
filename: torchaudio/lib/_torchaudio.abi3.so
requires:
- libgcc_s.so.1(GCC_3.0)(64bit)
- libc.so.6(GLIBC_2.2.5)(64bit)
- ...
provides: []
machine: EM_X86_64
is_dso: true
is_exec: true
got_debug: false
got_hash: false
got_gnuhash: true
soname: _torchaudio.abi3.so
exported_symbols:
- _ZN10torchaudio12cuda_versionEv
- _ZN10torchaudio18is_align_availableEv
- ...
imported_symbols:
- ...
- aoti_torch_abi_version
- aoti_torch_delete_library_object
- ...
In Fedora-based distributions, RPM packages provide and require virtual packages with ELF sonames and versions. The package manager can install virtual provides.
The python3 base package depends on libpython3.12.so.1.0()(64bit) and libc.so.6(GLIBC_2.34)(64bit):
$ rpm -qR python3
libc.so.6()(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.34)(64bit)
libpython3.12.so.1.0()(64bit)
...
rtld(GNU_HASH)
The python3-libs package virtually provides libpython3.12.so.1.0()(64bit):
$ rpm -qP python3-libs
bundled(libb2) = 0.98.1
libpython3.12.so.1.0()(64bit)
libpython3.so()(64bit)
python-libs = 3.12.3-2.fc39
python3-libs = 3.12.3-2.fc39
python3-libs(x86-64) = 3.12.3-2.fc39
python3.12-libs = 3.12.3-2.fc39
$ sudo dnf install 'libc.so.6(GLIBC_2.34)(64bit)' 'libpython3.12.so.1.0()(64bit)'
Package glibc-2.38-18.fc39.x86_64 is already installed.
Package python3-libs-3.12.3-2.fc39.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
- dataclass
elfdeps.ELFAnalyzeSettings - exception
elfdeps.ELFError - dataclass
elfdeps.ELFInfo - dataclass
elfdeps.SOInfo elfdeps.analyze_dirtree(dirname, settings=None) -> Generator[ELFInfo, None, None]elfdeps.analyze_elffile(elffile, *, filename, is_exec, settings=None) -> ELFInfoelfdeps.analyze_file(filename, *, settings=None) -> ELFInfoelfdeps.analyze_tarfile(tfile, *, settings=None) -> Generator[ELFInfo, None, None]elfdeps.analyze_tarmember(tfile, tarinfo, *, settings=None) -> ELFInfoelfdeps.analyze_zipfile(zfile, *, settings=None) -> Generator[ELFInfo, None, None]elfdeps.analyze_zipmember(zfile, zipinfo, *, settings=None) -> ELFInfo