extractcode


Nameextractcode JSON
Version 31.0.0 PyPI version JSON
download
home_pagehttps://github.com/nexB/extractcode
SummaryA mostly universal archive extractor using 7zip, libarchive and the Python standard library for reliable archive extraction.
upload_time2022-05-09 17:38:24
maintainer
docs_urlNone
authornexB. Inc. and others
requires_python>=3.6.*
licenseApache-2.0
keywords utilities archive extraction libarchive 7zip 7z gzip bzip2 xz lzma lz4 lzip zstd z tar xar ar cpio vmdk qcow2 vhd iso deb cab rpm patch scancode-toolkit
VCS
bugtrack_url
requirements attrs banal beautifulsoup4 binaryornot boolean.py certifi cffi chardet charset-normalizer click colorama commoncode construct container-inspector cryptography debian-inspector dockerfile-parse dparse2 extractcode-7z extractcode-libarchive fasteners fingerprints ftfy future gemfileparser html5lib idna importlib-metadata inflection intbitset isodate jaraco.functools javaproperties Jinja2 jsonstreams license-expression lxml MarkupSafe more-itertools normality packagedcode-msitools packageurl-python packaging parameter-expansion-patched patch pdfminer.six pefile pip-requirements-parser pkginfo2 pluggy plugincode ply publicsuffix2 pyahocorasick pycparser pygmars Pygments pymaven-patch pyparsing pytz PyYAML rdflib regipy requests rpm-inspector-rpm saneyaml six soupsieve spdx-tools text-unidecode toml typecode typecode-libmagic urllib3 urlpy wcwidth webencodings xmltodict zipp
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ============
ExtractCode
============

- license: Apache-2.0
- copyright: copyright (c) nexB. Inc. and others
- homepage_url: https://github.com/nexB/extractcode
- keywords: archive, extraction, libarchive, 7zip, scancode-toolkit, extractcode

Supports Windows, Linux and macOS on 64 bits processors and Python 3.6 to 3.9.


**ExtractCode is a (mostly) universal archive extractor.**

Install with::

    pip install extractcode[full]


Why another extractor?
----------------------

**it will extract!**

ExtractCode will extract things where other archive and compressed file extractors may fail.

ExtractCode supports one of largest number of archive formats listed in the
long  `List of supported archive formats`_ found at the bottom of this document.

- Say you want to extract the tarball of the Linux kernel source code on Windows.
  It contains paths that are the same when ignoring the case and therefore will
  not extract OK on Windows: some file may be munged or the extract may file.

- Or a tarball (on any OS) may contain multiple times the exact same path. In
  these cases the paths showing up earlier in the archive may be "hidden" and
  overwritten by the same path showing up later in the archive giving the
  impression that there is only one file.

- Or an archive may be damaged a little but most files can still be extracted.

- Or the extracted files are such permissions that you cannot read them and are
  not owned by you.

- Or the archive may contain weird paths inluding relative paths that may be
  problematic to extract.

- Or the archive may contain special file types (character/device files) that
  may be problematic to extract.

- Or an archive may be a virtual disk or some file system(s) images that would
  typically need to be mounted to be accessed, and may require root access
  and guesswork to find out which partition and filesystem are at play and
  which driver to use.

In all these cases, ExtractCode will extract and try hard do the right thing to
obtain the actual archived content when other tools may fail.

It can also extract recursively any type of (nested) archives-in-archives.


As a downside, the extracted content may not be exactly what would be extracted
for a typical usage of the contained files: for instance some file may be
renamed, special files and symlinks are skipped, permissions and owners are
changed but this it is fine for prmary the use case which is analysis of file
content for software composition or forensic analysis.

Behind the scene, ExtractCode uses multiple tools such as:

- the Python standard library,
- a custom ctypes binding to libarchive,
- the 7zip command line tool, and
- optionally libguestfs on Linux.

With these, it is possible to extract a large number of common and less common
archives and compressed file types. ExtractCode tries to extract things in the
same way on all supported OSes, including auto-renaming files that would have
invalid, non-extractible names on certain filesystems or when there are multiple
copies of the same path in a given archive (which is possible in a tar).

The extraction is driven from  a "voting" system that considers the file
extension(s) and name, the filetype and mimetype (using a ctypes binding to
libmagic) to select the most appropriate extractor or decompressor function.
It can handle multi-level archives such as tar.gz and can extract recursively
any nested archives.

Visit https://aboutcode.org and https://github.com/nexB/ for support and download.


We run CI tests on:

 - Azure pipelines https://dev.azure.com/nexB/extractcode/_build


Installation
------------

To install this package with its full capability (where the binaries for
7zip and libarchive are installed), use the `full` extra option::

    pip install extractcode[full]

If you want to use the version of binaries (possibly) provided by your operating
system, use the `minimal` option::

    pip install extractcode

In this case, you will need to provide a working and compatible libarchive and
7zip installed and configured in one of these ways such that ExtractCode can
find them:

- **a typecode-libarchive and typecode-7z plugin**: See the standard ones at
  https://github.com/nexB/scancode-plugins/tree/main/builtins
  These can either bundle a libarchive library, a 7z executable or expose a
  system-installed libraries.
  It does so by providing plugin entry points as ``scancode_location_provider``
  for ``extractcode_libarchive`` that should point to a ``LocationProviderPlugin``
  subclass with a ``get_locations()`` method that must return a mapping with
  this key:

    - 'extractcode.libarchive.dll': the absolute path to a **libarchive** shared object/DLL

  See for example:

    - https://github.com/nexB/scancode-plugins/blob/4da5fe8a5ab1c87b9b4af9e54d7ad60e289747f5/builtins/extractcode_libarchive-linux/setup.py#L40
    - https://github.com/nexB/scancode-plugins/blob/4da5fe8a5ab1c87b9b4af9e54d7ad60e289747f5/builtins/extractcode_libarchive-linux/src/extractcode_libarchive/__init__.py#L17

  And in the same way, the ``scancode_location_provider`` for ``extractcode_7zip``
  should point to a ``LocationProviderPlugin`` subclass with a ``get_locations()``
  method that must return a mapping with this key:

    - 'extractcode.sevenzip.exe': the absolute path to a **7zip** executable

  See for example:

    - https://github.com/nexB/scancode-plugins/blob/4da5fe8a5ab1c87b9b4af9e54d7ad60e289747f5/builtins/extractcode_7z-linux/setup.py#L40
    - https://github.com/nexB/scancode-plugins/blob/4da5fe8a5ab1c87b9b4af9e54d7ad60e289747f5/builtins/extractcode_7z-linux/src/extractcode_7z/__init__.py#L18

- use **environment variables** to point to installed binaries:

    - EXTRACTCODE_LIBARCHIVE_PATH: the absolute path to a libarchive DLL
    - EXTRACTCODE_7Z_PATH: the absolute path to a 7zip executable


- **a system-installed libarchive and 7zip executable** available in the system **PATH**.


The supported binary tools versions are:

- libarchive  3.5.x
- 7zip 16.5.x

Development
-----------

To set up the development environment::

    ./configure --dev
    source venv/bin/activate


To run unit tests::

    pytest -vvs -n 2


To clean up development environment::

    ./configure --clean


To run the command line tool in the activated environment::

    ./extractcode -h


Configuration with environment variables
----------------------------------------

ExtractCode will use these environment variables if set:

- EXTRACTCODE_LIBARCHIVE_PATH : the path to the ``libarchive.so`` libarchive
  shared library used to support some of the archive formats. If not provided,
  ExtractCode will look for a plugin-provided libarchive library path. See
  https://github.com/nexB/scancode-plugins/tree/main/builtins for such plugins.
  If no plugin contributes libarchive, then a final attempt is made to look for
  it in the PATH using standard DLL loading techniques.

- EXTRACTCODE_7Z_PATH : the path to the ``7z`` 7zip executable used to support
  some of the archive formats. If not provided, ExtractCode will look for a
  plugin-provided 7z executable path. See
  https://github.com/nexB/scancode-plugins/tree/main/builtins for such plugins.
  If no plugin contributes 7z, then a final attempt is made to look for
  it in the PATH.

- EXTRACTCODE_GUESTFISH_PATH : the path to the ``guestfish`` tool from
  libguestfs to use to extract VM images. If not provided, ExtractCode will look
  in the PATH for an installed ``guestfish`` executable instead.



Adding support for VM images extraction
---------------------------------------

Adding support for VM images requires the manual installation of the
libguestfs-tools system package. This is suported only on Linux.
On Debian and Ubuntu you can use this command::

    sudo apt-get install libguestfs-tools


On Ubuntu only, an additional manual step is required as the kernel executable
file cannot be read by users as required by libguestfish.

Run this command as a temporary and immediate fix::

    sudo chmod 0644 /boot/vmlinuz-*
    for k in /boot/vmlinuz-*
        do sudo dpkg-statoverride --add --update root root 0644 /boot/vmlinuz-$k
    done

You likely want both this temporary fix and a more permanent fix; otherwise each
kernel update will revert to the default permissions and ExtractCode will stop
working for VM images extraction.

Therefore follow these instructions:

1. As sudo, create the file /etc/kernel/postinst.d/statoverride with this
content, devised by Kees Cook (@kees) in
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725/comments/3 ::

    #!/bin/sh
    version="$1"
    # passing the kernel version is required
    [ -z "${version}" ] && exit 0
    dpkg-statoverride --update --add root root 0644 /boot/vmlinuz-${version}

2. Set executable permissions::

    sudo chmod +x /etc/kernel/postinst.d/statoverride

See also these links for a complete discussion:

    - https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725
    - https://bugzilla.redhat.com/show_bug.cgi?id=1670790
    - https://bugs.launchpad.net/ubuntu/+source/libguestfs/+bug/1813662/comments/24


Alternative
-----------

These other tools are related and were considered before creating ExtractCode:

These tools provide built-in, original extraction capabilities:

- https://libarchive.org/ (integrated in ExtractCode) (BSD license)
- https://www.7-zip.org/ (integrated in ExtractCode) (LGPL license)
- https://theunarchiver.com/command-line (maintenance status unknown) (LGPL license)

These tools are command line tools  wrapping other extraction tools and are
similar to ExtractCode but with different goals:

- https://github.com/wummel/patool (wrapper on many CLI tools) (GPL license)
- https://github.com/dtrx-py/dtrx (wrapper on a few CLI tools) (recently revived) (GPL license)



List of supported archive formats
-------------------------------------

ExtractCode can extract the folowing archives formats:

Archive format kind: docs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  name: Office doc
     - extensions: .docx, .dotx, .docm, .xlsx, .xltx, .xlsm, .xltm, .pptx, .ppsx, .potx, .pptm, .potm, .ppsm, .odt, .odf, .sxw, .stw, .ods, .ots, .sxc, .stc, .odp, .otp, .odg, .otg, .sxi, .sti, .sxd, .sxg, .std, .sdc, .sda, .sdd, .smf, .sdw, .sxm, .stw, .oxt, .sldx, .epub
     - filetypes : zip archive, microsoft word 2007+, microsoft excel 2007+, microsoft powerpoint 2007+
     - mimetypes : application/zip, application/vnd.openxmlformats

  name: Dia diagram doc
     - extensions: .dia
     - filetypes : gzip compressed
     - mimetypes : application/gzip

  name: Graffle diagram doc
     - extensions: .graffle
     - filetypes : gzip compressed
     - mimetypes : application/gzip

  name: SVG Compressed doc
     - extensions: .svgz
     - filetypes : gzip compressed
     - mimetypes : application/gzip

Archive format kind: regular
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  name: Tar
     - extensions: .tar
     - filetypes : .tar, tar archive
     - mimetypes : application/x-tar

  name: Zip
     - extensions: .zip, .zipx
     - filetypes : zip archive
     - mimetypes : application/zip

  name: Java archive
     - extensions: .war, .sar, .ear
     - filetypes : zip archive
     - mimetypes : application/zip, application/java-archive

  name: xz
     - extensions: .xz
     - filetypes : xz compressed
     - mimetypes : application/x-xz

  name: lzma
     - extensions: .lzma
     - filetypes : lzma compressed
     - mimetypes : application/x-xz

  name: Gzip
     - extensions: .gz, .gzip, .wmz, .arz
     - filetypes : gzip compressed, gzip compressed data
     - mimetypes : application/gzip

  name: bzip2
     - extensions: .bz, .bz2, bzip2
     - filetypes : bzip2 compressed
     - mimetypes : application/x-bzip2

  name: lzip
     - extensions: .lzip
     - filetypes : lzip compressed
     - mimetypes : application/x-lzip

  name: RAR
     - extensions: .rar
     - filetypes : rar archive
     - mimetypes : application/x-rar

  name: ar archive
     - extensions: .ar
     - filetypes : current ar archive
     - mimetypes : application/x-archive

  name: 7zip
     - extensions: .7z
     - filetypes : 7-zip archive
     - mimetypes : application/x-7z-compressed

  name: cpio
     - extensions: .cpio
     - filetypes : cpio archive
     - mimetypes : application/x-cpio

  name: Z
     - extensions: .z
     - filetypes : compress'd data
     - mimetypes : application/x-compress

Archive format kind: regular_nested
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  name: Tar xz
     - extensions: .tar.xz, .txz, .tarxz
     - filetypes : xz compressed
     - mimetypes : application/x-xz

  name: Tar lzma
     - extensions: tar.lzma, .tlz, .tarlz, .tarlzma
     - filetypes : lzma compressed
     - mimetypes : application/x-lzma

  name: Tar gzip
     - extensions: .tgz, .tar.gz, .tar.gzip, .targz, .targzip, .tgzip
     - filetypes : gzip compressed
     - mimetypes : application/gzip

  name: Tar lzip
     - extensions: .tar.lz, .tar.lzip
     - filetypes : lzip compressed
     - mimetypes : application/x-lzip

  name: Tar lz4
     - extensions: .tar.lz4
     - filetypes : lz4 compressed
     - mimetypes : application/x-lz4

  name: Tar zstd
     - extensions: .tar.zst, .tar.zstd
     - filetypes : zstandard compressed
     - mimetypes : application/x-zstd

  name: Tar bzip2
     - extensions: .tar.bz2, .tar.bz, .tar.bzip, .tar.bzip2, .tbz, .tbz2, .tb2, .tarbz2
     - filetypes : bzip2 compressed
     - mimetypes : application/x-bzip2

  name: lz4
     - extensions: .lz4
     - filetypes : lz4 compressed
     - mimetypes : application/x-lz4

  name: zstd
     - extensions: .zst, .zstd
     - filetypes : zstandard compressed
     - mimetypes : application/x-zstd

  name: Tar 7zip
     - extensions: .tar.7z, .tar.7zip, .t7z
     - filetypes : 7-zip archive
     - mimetypes : application/x-7z-compressed

  name: Tar Z
     - extensions: .tz, .tar.z, .tarz
     - filetypes : compress'd data
     - mimetypes : application/x-compress


Archive format kind: package
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  name: Ruby Gem package
     - extensions: .gem
     - filetypes : .tar, tar archive
     - mimetypes : application/x-tar

  name: Android app
     - extensions: .apk
     - filetypes : zip archive
     - mimetypes : application/zip

  name: Android library
     - extensions: .aar
     - filetypes : zip archive
     - mimetypes : application/zip

  name: Mozilla extension
     - extensions: .xpi
     - filetypes : zip archive
     - mimetypes : application/zip

  name: iOS app
     - extensions: .ipa
     - filetypes : zip archive
     - mimetypes : application/zip

  name: Springboot Java Jar package
     - extensions: .jar
     - filetypes : bourne-again shell script executable (binary data)
     - mimetypes : text/x-shellscript

  name: Java Jar package
     - extensions: .jar, .zip
     - filetypes : java archive
     - mimetypes : application/java-archive

  name: Java Jar package
     - extensions: .jar
     - filetypes : zip archive
     - mimetypes : application/zip

  name: Python package
     - extensions: .egg, .whl, .pyz, .pex
     - filetypes : zip archive
     - mimetypes : application/zip

  name: Microsoft cab
     - extensions: .cab
     - filetypes : microsoft cabinet
     - mimetypes : application/vnd.ms-cab-compressed

  name: Microsoft MSI Installer
     - extensions: .msi
     - filetypes : msi installer
     - mimetypes : application/x-msi

  name: Apple pkg or mpkg package installer
     - extensions: .pkg, .mpkg
     - filetypes : xar archive
     - mimetypes : application/octet-stream

  name: Xar archive v1
     - extensions: .xar
     - filetypes : xar archive
     - mimetypes : application/octet-stream, application/x-xar

  name: Nuget
     - extensions: .nupkg
     - filetypes : zip archive, microsoft ooxml
     - mimetypes : application/zip, application/octet-stream

  name: Static Library
     - extensions: .a, .lib, .out, .ka
     - filetypes : current ar archive, current ar archive random library
     - mimetypes : application/x-archive

  name: Debian package
     - extensions: .deb, .udeb
     - filetypes : debian binary package
     - mimetypes : application/vnd.debian.binary-package, application/x-archive

  name: RPM package
     - extensions: .rpm, .srpm, .mvl, .vip
     - filetypes : rpm 
     - mimetypes : application/x-rpm

  name: Apple dmg
     - extensions: .dmg, .sparseimage
     - filetypes : zlib compressed
     - mimetypes : application/zlib

Archive format kind: file_system
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  name: ISO CD image
     - extensions: .iso, .udf, .img
     - filetypes : iso 9660 cd-rom, high sierra cd-rom
     - mimetypes : application/x-iso9660-image

  name: SquashFS disk image
     - extensions: 
     - filetypes : squashfs
     - mimetypes : 

  name: QEMU QCOW2 disk image
     - extensions: .qcow2, .qcow, .qcow2c, .img
     - filetypes : qemu qcow2 image, qemu qcow image
     - mimetypes : application/octet-stream

  name: VMDK disk image
     - extensions: .vmdk
     - filetypes : vmware4 disk image
     - mimetypes : application/octet-stream

  name: VirtualBox disk image
     - extensions: .vdi
     - filetypes : virtualbox disk image
     - mimetypes : application/octet-stream

Archive format kind: patches
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  name: Patch
     - extensions: .diff, .patch
     - filetypes : diff, patch
     - mimetypes : text/x-diff

Archive format kind: special_package
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  name: InstallShield Installer
     - extensions: .exe
     - filetypes : installshield
     - mimetypes : application/x-dosexec

  name: Nullsoft Installer
     - extensions: .exe
     - filetypes : nullsoft installer
     - mimetypes : application/x-dosexec





            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/nexB/extractcode",
    "name": "extractcode",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.6.*",
    "maintainer_email": "",
    "keywords": "utilities,archive,extraction,libarchive,7zip,7z,gzip,bzip2,xz,lzma,lz4,lzip,zstd,Z,tar,xar,ar,cpio,vmdk,qcow2,vhd,iso,deb,cab,rpm,patch,scancode-toolkit",
    "author": "nexB. Inc. and others",
    "author_email": "info@aboutcode.org",
    "download_url": "https://files.pythonhosted.org/packages/58/24/40848587ae0f03ec6da2ae8a28b7ace7219fcbad0bc74e84c582324208ed/extractcode-31.0.0.tar.gz",
    "platform": null,
    "description": "============\nExtractCode\n============\n\n- license: Apache-2.0\n- copyright: copyright (c) nexB. Inc. and others\n- homepage_url: https://github.com/nexB/extractcode\n- keywords: archive, extraction, libarchive, 7zip, scancode-toolkit, extractcode\n\nSupports Windows, Linux and macOS on 64 bits processors and Python 3.6 to 3.9.\n\n\n**ExtractCode is a (mostly) universal archive extractor.**\n\nInstall with::\n\n    pip install extractcode[full]\n\n\nWhy another extractor?\n----------------------\n\n**it will extract!**\n\nExtractCode will extract things where other archive and compressed file extractors may fail.\n\nExtractCode supports one of largest number of archive formats listed in the\nlong  `List of supported archive formats`_ found at the bottom of this document.\n\n- Say you want to extract the tarball of the Linux kernel source code on Windows.\n  It contains paths that are the same when ignoring the case and therefore will\n  not extract OK on Windows: some file may be munged or the extract may file.\n\n- Or a tarball (on any OS) may contain multiple times the exact same path. In\n  these cases the paths showing up earlier in the archive may be \"hidden\" and\n  overwritten by the same path showing up later in the archive giving the\n  impression that there is only one file.\n\n- Or an archive may be damaged a little but most files can still be extracted.\n\n- Or the extracted files are such permissions that you cannot read them and are\n  not owned by you.\n\n- Or the archive may contain weird paths inluding relative paths that may be\n  problematic to extract.\n\n- Or the archive may contain special file types (character/device files) that\n  may be problematic to extract.\n\n- Or an archive may be a virtual disk or some file system(s) images that would\n  typically need to be mounted to be accessed, and may require root access\n  and guesswork to find out which partition and filesystem are at play and\n  which driver to use.\n\nIn all these cases, ExtractCode will extract and try hard do the right thing to\nobtain the actual archived content when other tools may fail.\n\nIt can also extract recursively any type of (nested) archives-in-archives.\n\n\nAs a downside, the extracted content may not be exactly what would be extracted\nfor a typical usage of the contained files: for instance some file may be\nrenamed, special files and symlinks are skipped, permissions and owners are\nchanged but this it is fine for prmary the use case which is analysis of file\ncontent for software composition or forensic analysis.\n\nBehind the scene, ExtractCode uses multiple tools such as:\n\n- the Python standard library,\n- a custom ctypes binding to libarchive,\n- the 7zip command line tool, and\n- optionally libguestfs on Linux.\n\nWith these, it is possible to extract a large number of common and less common\narchives and compressed file types. ExtractCode tries to extract things in the\nsame way on all supported OSes, including auto-renaming files that would have\ninvalid, non-extractible names on certain filesystems or when there are multiple\ncopies of the same path in a given archive (which is possible in a tar).\n\nThe extraction is driven from  a \"voting\" system that considers the file\nextension(s) and name, the filetype and mimetype (using a ctypes binding to\nlibmagic) to select the most appropriate extractor or decompressor function.\nIt can handle multi-level archives such as tar.gz and can extract recursively\nany nested archives.\n\nVisit https://aboutcode.org and https://github.com/nexB/ for support and download.\n\n\nWe run CI tests on:\n\n - Azure pipelines https://dev.azure.com/nexB/extractcode/_build\n\n\nInstallation\n------------\n\nTo install this package with its full capability (where the binaries for\n7zip and libarchive are installed), use the `full` extra option::\n\n    pip install extractcode[full]\n\nIf you want to use the version of binaries (possibly) provided by your operating\nsystem, use the `minimal` option::\n\n    pip install extractcode\n\nIn this case, you will need to provide a working and compatible libarchive and\n7zip installed and configured in one of these ways such that ExtractCode can\nfind them:\n\n- **a typecode-libarchive and typecode-7z plugin**: See the standard ones at\n  https://github.com/nexB/scancode-plugins/tree/main/builtins\n  These can either bundle a libarchive library, a 7z executable or expose a\n  system-installed libraries.\n  It does so by providing plugin entry points as ``scancode_location_provider``\n  for ``extractcode_libarchive`` that should point to a ``LocationProviderPlugin``\n  subclass with a ``get_locations()`` method that must return a mapping with\n  this key:\n\n    - 'extractcode.libarchive.dll': the absolute path to a **libarchive** shared object/DLL\n\n  See for example:\n\n    - https://github.com/nexB/scancode-plugins/blob/4da5fe8a5ab1c87b9b4af9e54d7ad60e289747f5/builtins/extractcode_libarchive-linux/setup.py#L40\n    - https://github.com/nexB/scancode-plugins/blob/4da5fe8a5ab1c87b9b4af9e54d7ad60e289747f5/builtins/extractcode_libarchive-linux/src/extractcode_libarchive/__init__.py#L17\n\n  And in the same way, the ``scancode_location_provider`` for ``extractcode_7zip``\n  should point to a ``LocationProviderPlugin`` subclass with a ``get_locations()``\n  method that must return a mapping with this key:\n\n    - 'extractcode.sevenzip.exe': the absolute path to a **7zip** executable\n\n  See for example:\n\n    - https://github.com/nexB/scancode-plugins/blob/4da5fe8a5ab1c87b9b4af9e54d7ad60e289747f5/builtins/extractcode_7z-linux/setup.py#L40\n    - https://github.com/nexB/scancode-plugins/blob/4da5fe8a5ab1c87b9b4af9e54d7ad60e289747f5/builtins/extractcode_7z-linux/src/extractcode_7z/__init__.py#L18\n\n- use **environment variables** to point to installed binaries:\n\n    - EXTRACTCODE_LIBARCHIVE_PATH: the absolute path to a libarchive DLL\n    - EXTRACTCODE_7Z_PATH: the absolute path to a 7zip executable\n\n\n- **a system-installed libarchive and 7zip executable** available in the system **PATH**.\n\n\nThe supported binary tools versions are:\n\n- libarchive  3.5.x\n- 7zip 16.5.x\n\nDevelopment\n-----------\n\nTo set up the development environment::\n\n    ./configure --dev\n    source venv/bin/activate\n\n\nTo run unit tests::\n\n    pytest -vvs -n 2\n\n\nTo clean up development environment::\n\n    ./configure --clean\n\n\nTo run the command line tool in the activated environment::\n\n    ./extractcode -h\n\n\nConfiguration with environment variables\n----------------------------------------\n\nExtractCode will use these environment variables if set:\n\n- EXTRACTCODE_LIBARCHIVE_PATH : the path to the ``libarchive.so`` libarchive\n  shared library used to support some of the archive formats. If not provided,\n  ExtractCode will look for a plugin-provided libarchive library path. See\n  https://github.com/nexB/scancode-plugins/tree/main/builtins for such plugins.\n  If no plugin contributes libarchive, then a final attempt is made to look for\n  it in the PATH using standard DLL loading techniques.\n\n- EXTRACTCODE_7Z_PATH : the path to the ``7z`` 7zip executable used to support\n  some of the archive formats. If not provided, ExtractCode will look for a\n  plugin-provided 7z executable path. See\n  https://github.com/nexB/scancode-plugins/tree/main/builtins for such plugins.\n  If no plugin contributes 7z, then a final attempt is made to look for\n  it in the PATH.\n\n- EXTRACTCODE_GUESTFISH_PATH : the path to the ``guestfish`` tool from\n  libguestfs to use to extract VM images. If not provided, ExtractCode will look\n  in the PATH for an installed ``guestfish`` executable instead.\n\n\n\nAdding support for VM images extraction\n---------------------------------------\n\nAdding support for VM images requires the manual installation of the\nlibguestfs-tools system package. This is suported only on Linux.\nOn Debian and Ubuntu you can use this command::\n\n    sudo apt-get install libguestfs-tools\n\n\nOn Ubuntu only, an additional manual step is required as the kernel executable\nfile cannot be read by users as required by libguestfish.\n\nRun this command as a temporary and immediate fix::\n\n    sudo chmod 0644 /boot/vmlinuz-*\n    for k in /boot/vmlinuz-*\n        do sudo dpkg-statoverride --add --update root root 0644 /boot/vmlinuz-$k\n    done\n\nYou likely want both this temporary fix and a more permanent fix; otherwise each\nkernel update will revert to the default permissions and ExtractCode will stop\nworking for VM images extraction.\n\nTherefore follow these instructions:\n\n1. As sudo, create the file /etc/kernel/postinst.d/statoverride with this\ncontent, devised by Kees Cook (@kees) in\nhttps://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725/comments/3 ::\n\n    #!/bin/sh\n    version=\"$1\"\n    # passing the kernel version is required\n    [ -z \"${version}\" ] && exit 0\n    dpkg-statoverride --update --add root root 0644 /boot/vmlinuz-${version}\n\n2. Set executable permissions::\n\n    sudo chmod +x /etc/kernel/postinst.d/statoverride\n\nSee also these links for a complete discussion:\n\n    - https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725\n    - https://bugzilla.redhat.com/show_bug.cgi?id=1670790\n    - https://bugs.launchpad.net/ubuntu/+source/libguestfs/+bug/1813662/comments/24\n\n\nAlternative\n-----------\n\nThese other tools are related and were considered before creating ExtractCode:\n\nThese tools provide built-in, original extraction capabilities:\n\n- https://libarchive.org/ (integrated in ExtractCode) (BSD license)\n- https://www.7-zip.org/ (integrated in ExtractCode) (LGPL license)\n- https://theunarchiver.com/command-line (maintenance status unknown) (LGPL license)\n\nThese tools are command line tools  wrapping other extraction tools and are\nsimilar to ExtractCode but with different goals:\n\n- https://github.com/wummel/patool (wrapper on many CLI tools) (GPL license)\n- https://github.com/dtrx-py/dtrx (wrapper on a few CLI tools) (recently revived) (GPL license)\n\n\n\nList of supported archive formats\n-------------------------------------\n\nExtractCode can extract the folowing archives formats:\n\nArchive format kind: docs\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n  name: Office doc\n     - extensions: .docx, .dotx, .docm, .xlsx, .xltx, .xlsm, .xltm, .pptx, .ppsx, .potx, .pptm, .potm, .ppsm, .odt, .odf, .sxw, .stw, .ods, .ots, .sxc, .stc, .odp, .otp, .odg, .otg, .sxi, .sti, .sxd, .sxg, .std, .sdc, .sda, .sdd, .smf, .sdw, .sxm, .stw, .oxt, .sldx, .epub\n     - filetypes : zip archive, microsoft word 2007+, microsoft excel 2007+, microsoft powerpoint 2007+\n     - mimetypes : application/zip, application/vnd.openxmlformats\n\n  name: Dia diagram doc\n     - extensions: .dia\n     - filetypes : gzip compressed\n     - mimetypes : application/gzip\n\n  name: Graffle diagram doc\n     - extensions: .graffle\n     - filetypes : gzip compressed\n     - mimetypes : application/gzip\n\n  name: SVG Compressed doc\n     - extensions: .svgz\n     - filetypes : gzip compressed\n     - mimetypes : application/gzip\n\nArchive format kind: regular\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n  name: Tar\n     - extensions: .tar\n     - filetypes : .tar, tar archive\n     - mimetypes : application/x-tar\n\n  name: Zip\n     - extensions: .zip, .zipx\n     - filetypes : zip archive\n     - mimetypes : application/zip\n\n  name: Java archive\n     - extensions: .war, .sar, .ear\n     - filetypes : zip archive\n     - mimetypes : application/zip, application/java-archive\n\n  name: xz\n     - extensions: .xz\n     - filetypes : xz compressed\n     - mimetypes : application/x-xz\n\n  name: lzma\n     - extensions: .lzma\n     - filetypes : lzma compressed\n     - mimetypes : application/x-xz\n\n  name: Gzip\n     - extensions: .gz, .gzip, .wmz, .arz\n     - filetypes : gzip compressed, gzip compressed data\n     - mimetypes : application/gzip\n\n  name: bzip2\n     - extensions: .bz, .bz2, bzip2\n     - filetypes : bzip2 compressed\n     - mimetypes : application/x-bzip2\n\n  name: lzip\n     - extensions: .lzip\n     - filetypes : lzip compressed\n     - mimetypes : application/x-lzip\n\n  name: RAR\n     - extensions: .rar\n     - filetypes : rar archive\n     - mimetypes : application/x-rar\n\n  name: ar archive\n     - extensions: .ar\n     - filetypes : current ar archive\n     - mimetypes : application/x-archive\n\n  name: 7zip\n     - extensions: .7z\n     - filetypes : 7-zip archive\n     - mimetypes : application/x-7z-compressed\n\n  name: cpio\n     - extensions: .cpio\n     - filetypes : cpio archive\n     - mimetypes : application/x-cpio\n\n  name: Z\n     - extensions: .z\n     - filetypes : compress'd data\n     - mimetypes : application/x-compress\n\nArchive format kind: regular_nested\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n  name: Tar xz\n     - extensions: .tar.xz, .txz, .tarxz\n     - filetypes : xz compressed\n     - mimetypes : application/x-xz\n\n  name: Tar lzma\n     - extensions: tar.lzma, .tlz, .tarlz, .tarlzma\n     - filetypes : lzma compressed\n     - mimetypes : application/x-lzma\n\n  name: Tar gzip\n     - extensions: .tgz, .tar.gz, .tar.gzip, .targz, .targzip, .tgzip\n     - filetypes : gzip compressed\n     - mimetypes : application/gzip\n\n  name: Tar lzip\n     - extensions: .tar.lz, .tar.lzip\n     - filetypes : lzip compressed\n     - mimetypes : application/x-lzip\n\n  name: Tar lz4\n     - extensions: .tar.lz4\n     - filetypes : lz4 compressed\n     - mimetypes : application/x-lz4\n\n  name: Tar zstd\n     - extensions: .tar.zst, .tar.zstd\n     - filetypes : zstandard compressed\n     - mimetypes : application/x-zstd\n\n  name: Tar bzip2\n     - extensions: .tar.bz2, .tar.bz, .tar.bzip, .tar.bzip2, .tbz, .tbz2, .tb2, .tarbz2\n     - filetypes : bzip2 compressed\n     - mimetypes : application/x-bzip2\n\n  name: lz4\n     - extensions: .lz4\n     - filetypes : lz4 compressed\n     - mimetypes : application/x-lz4\n\n  name: zstd\n     - extensions: .zst, .zstd\n     - filetypes : zstandard compressed\n     - mimetypes : application/x-zstd\n\n  name: Tar 7zip\n     - extensions: .tar.7z, .tar.7zip, .t7z\n     - filetypes : 7-zip archive\n     - mimetypes : application/x-7z-compressed\n\n  name: Tar Z\n     - extensions: .tz, .tar.z, .tarz\n     - filetypes : compress'd data\n     - mimetypes : application/x-compress\n\n\nArchive format kind: package\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n  name: Ruby Gem package\n     - extensions: .gem\n     - filetypes : .tar, tar archive\n     - mimetypes : application/x-tar\n\n  name: Android app\n     - extensions: .apk\n     - filetypes : zip archive\n     - mimetypes : application/zip\n\n  name: Android library\n     - extensions: .aar\n     - filetypes : zip archive\n     - mimetypes : application/zip\n\n  name: Mozilla extension\n     - extensions: .xpi\n     - filetypes : zip archive\n     - mimetypes : application/zip\n\n  name: iOS app\n     - extensions: .ipa\n     - filetypes : zip archive\n     - mimetypes : application/zip\n\n  name: Springboot Java Jar package\n     - extensions: .jar\n     - filetypes : bourne-again shell script executable (binary data)\n     - mimetypes : text/x-shellscript\n\n  name: Java Jar package\n     - extensions: .jar, .zip\n     - filetypes : java archive\n     - mimetypes : application/java-archive\n\n  name: Java Jar package\n     - extensions: .jar\n     - filetypes : zip archive\n     - mimetypes : application/zip\n\n  name: Python package\n     - extensions: .egg, .whl, .pyz, .pex\n     - filetypes : zip archive\n     - mimetypes : application/zip\n\n  name: Microsoft cab\n     - extensions: .cab\n     - filetypes : microsoft cabinet\n     - mimetypes : application/vnd.ms-cab-compressed\n\n  name: Microsoft MSI Installer\n     - extensions: .msi\n     - filetypes : msi installer\n     - mimetypes : application/x-msi\n\n  name: Apple pkg or mpkg package installer\n     - extensions: .pkg, .mpkg\n     - filetypes : xar archive\n     - mimetypes : application/octet-stream\n\n  name: Xar archive v1\n     - extensions: .xar\n     - filetypes : xar archive\n     - mimetypes : application/octet-stream, application/x-xar\n\n  name: Nuget\n     - extensions: .nupkg\n     - filetypes : zip archive, microsoft ooxml\n     - mimetypes : application/zip, application/octet-stream\n\n  name: Static Library\n     - extensions: .a, .lib, .out, .ka\n     - filetypes : current ar archive, current ar archive random library\n     - mimetypes : application/x-archive\n\n  name: Debian package\n     - extensions: .deb, .udeb\n     - filetypes : debian binary package\n     - mimetypes : application/vnd.debian.binary-package, application/x-archive\n\n  name: RPM package\n     - extensions: .rpm, .srpm, .mvl, .vip\n     - filetypes : rpm \n     - mimetypes : application/x-rpm\n\n  name: Apple dmg\n     - extensions: .dmg, .sparseimage\n     - filetypes : zlib compressed\n     - mimetypes : application/zlib\n\nArchive format kind: file_system\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n  name: ISO CD image\n     - extensions: .iso, .udf, .img\n     - filetypes : iso 9660 cd-rom, high sierra cd-rom\n     - mimetypes : application/x-iso9660-image\n\n  name: SquashFS disk image\n     - extensions: \n     - filetypes : squashfs\n     - mimetypes : \n\n  name: QEMU QCOW2 disk image\n     - extensions: .qcow2, .qcow, .qcow2c, .img\n     - filetypes : qemu qcow2 image, qemu qcow image\n     - mimetypes : application/octet-stream\n\n  name: VMDK disk image\n     - extensions: .vmdk\n     - filetypes : vmware4 disk image\n     - mimetypes : application/octet-stream\n\n  name: VirtualBox disk image\n     - extensions: .vdi\n     - filetypes : virtualbox disk image\n     - mimetypes : application/octet-stream\n\nArchive format kind: patches\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n  name: Patch\n     - extensions: .diff, .patch\n     - filetypes : diff, patch\n     - mimetypes : text/x-diff\n\nArchive format kind: special_package\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n  name: InstallShield Installer\n     - extensions: .exe\n     - filetypes : installshield\n     - mimetypes : application/x-dosexec\n\n  name: Nullsoft Installer\n     - extensions: .exe\n     - filetypes : nullsoft installer\n     - mimetypes : application/x-dosexec\n\n\n\n\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "A mostly universal archive extractor using 7zip, libarchive and the Python standard library for reliable archive extraction.",
    "version": "31.0.0",
    "split_keywords": [
        "utilities",
        "archive",
        "extraction",
        "libarchive",
        "7zip",
        "7z",
        "gzip",
        "bzip2",
        "xz",
        "lzma",
        "lz4",
        "lzip",
        "zstd",
        "z",
        "tar",
        "xar",
        "ar",
        "cpio",
        "vmdk",
        "qcow2",
        "vhd",
        "iso",
        "deb",
        "cab",
        "rpm",
        "patch",
        "scancode-toolkit"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "md5": "65f1f10501f25774c068a9a38b9f2979",
                "sha256": "9838465035a0e12a744026ef7300c8559fdcce2790cc72faaf2513d1e57a5d94"
            },
            "downloads": -1,
            "filename": "extractcode-31.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "65f1f10501f25774c068a9a38b9f2979",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6.*",
            "size": 56676,
            "upload_time": "2022-05-09T17:38:21",
            "upload_time_iso_8601": "2022-05-09T17:38:21.969623Z",
            "url": "https://files.pythonhosted.org/packages/d6/7e/0a60071cc9fdd2ec364d6fe7d6bc77632a36c44e9d467b4921ba84f9c921/extractcode-31.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "md5": "428c307fc9199dfef2c3a284cacc03b0",
                "sha256": "80819392e9bcf8129f74d8904fe8a98c0dfed2782356842737282c0283113d88"
            },
            "downloads": -1,
            "filename": "extractcode-31.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "428c307fc9199dfef2c3a284cacc03b0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6.*",
            "size": 11305241,
            "upload_time": "2022-05-09T17:38:24",
            "upload_time_iso_8601": "2022-05-09T17:38:24.648563Z",
            "url": "https://files.pythonhosted.org/packages/58/24/40848587ae0f03ec6da2ae8a28b7ace7219fcbad0bc74e84c582324208ed/extractcode-31.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2022-05-09 17:38:24",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "nexB",
    "github_project": "extractcode",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "appveyor": true,
    "requirements": [
        {
            "name": "attrs",
            "specs": [
                [
                    "==",
                    "21.4.0"
                ]
            ]
        },
        {
            "name": "banal",
            "specs": [
                [
                    "==",
                    "1.0.6"
                ]
            ]
        },
        {
            "name": "beautifulsoup4",
            "specs": [
                [
                    "==",
                    "4.11.1"
                ]
            ]
        },
        {
            "name": "binaryornot",
            "specs": [
                [
                    "==",
                    "0.4.4"
                ]
            ]
        },
        {
            "name": "boolean.py",
            "specs": [
                [
                    "==",
                    "3.8"
                ]
            ]
        },
        {
            "name": "certifi",
            "specs": [
                [
                    "==",
                    "2021.10.8"
                ]
            ]
        },
        {
            "name": "cffi",
            "specs": [
                [
                    "==",
                    "1.15.0"
                ]
            ]
        },
        {
            "name": "chardet",
            "specs": [
                [
                    "==",
                    "4.0.0"
                ]
            ]
        },
        {
            "name": "charset-normalizer",
            "specs": [
                [
                    "==",
                    "2.0.12"
                ]
            ]
        },
        {
            "name": "click",
            "specs": [
                [
                    "==",
                    "8.0.4"
                ]
            ]
        },
        {
            "name": "colorama",
            "specs": [
                [
                    "==",
                    "0.4.4"
                ]
            ]
        },
        {
            "name": "commoncode",
            "specs": [
                [
                    "==",
                    "30.2.0"
                ]
            ]
        },
        {
            "name": "construct",
            "specs": [
                [
                    "==",
                    "2.10.68"
                ]
            ]
        },
        {
            "name": "container-inspector",
            "specs": [
                [
                    "==",
                    "30.0.0"
                ]
            ]
        },
        {
            "name": "cryptography",
            "specs": [
                [
                    "==",
                    "36.0.2"
                ]
            ]
        },
        {
            "name": "debian-inspector",
            "specs": [
                [
                    "==",
                    "30.0.0"
                ]
            ]
        },
        {
            "name": "dockerfile-parse",
            "specs": [
                [
                    "==",
                    "1.2.0"
                ]
            ]
        },
        {
            "name": "dparse2",
            "specs": [
                [
                    "==",
                    "0.6.1"
                ]
            ]
        },
        {
            "name": "extractcode-7z",
            "specs": [
                [
                    "==",
                    "16.5.210531"
                ]
            ]
        },
        {
            "name": "extractcode-libarchive",
            "specs": [
                [
                    "==",
                    "3.5.1.210531"
                ]
            ]
        },
        {
            "name": "fasteners",
            "specs": [
                [
                    "==",
                    "0.17.3"
                ]
            ]
        },
        {
            "name": "fingerprints",
            "specs": [
                [
                    "==",
                    "1.0.3"
                ]
            ]
        },
        {
            "name": "ftfy",
            "specs": [
                [
                    "==",
                    "6.0.3"
                ]
            ]
        },
        {
            "name": "future",
            "specs": [
                [
                    "==",
                    "0.18.2"
                ]
            ]
        },
        {
            "name": "gemfileparser",
            "specs": [
                [
                    "==",
                    "0.8.0"
                ]
            ]
        },
        {
            "name": "html5lib",
            "specs": [
                [
                    "==",
                    "1.1"
                ]
            ]
        },
        {
            "name": "idna",
            "specs": [
                [
                    "==",
                    "3.3"
                ]
            ]
        },
        {
            "name": "importlib-metadata",
            "specs": [
                [
                    "==",
                    "4.8.3"
                ]
            ]
        },
        {
            "name": "inflection",
            "specs": [
                [
                    "==",
                    "0.5.1"
                ]
            ]
        },
        {
            "name": "intbitset",
            "specs": [
                [
                    "==",
                    "3.0.1"
                ]
            ]
        },
        {
            "name": "isodate",
            "specs": [
                [
                    "==",
                    "0.6.1"
                ]
            ]
        },
        {
            "name": "jaraco.functools",
            "specs": [
                [
                    "==",
                    "3.4.0"
                ]
            ]
        },
        {
            "name": "javaproperties",
            "specs": [
                [
                    "==",
                    "0.8.1"
                ]
            ]
        },
        {
            "name": "Jinja2",
            "specs": [
                [
                    "==",
                    "3.0.3"
                ]
            ]
        },
        {
            "name": "jsonstreams",
            "specs": [
                [
                    "==",
                    "0.6.0"
                ]
            ]
        },
        {
            "name": "license-expression",
            "specs": [
                [
                    "==",
                    "21.6.14"
                ]
            ]
        },
        {
            "name": "lxml",
            "specs": [
                [
                    "==",
                    "4.8.0"
                ]
            ]
        },
        {
            "name": "MarkupSafe",
            "specs": [
                [
                    "==",
                    "2.0.1"
                ]
            ]
        },
        {
            "name": "more-itertools",
            "specs": [
                [
                    "==",
                    "8.13.0"
                ]
            ]
        },
        {
            "name": "normality",
            "specs": [
                [
                    "==",
                    "2.3.3"
                ]
            ]
        },
        {
            "name": "packagedcode-msitools",
            "specs": [
                [
                    "==",
                    "0.101.210706"
                ]
            ]
        },
        {
            "name": "packageurl-python",
            "specs": [
                [
                    "==",
                    "0.9.9"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": [
                [
                    "==",
                    "21.3"
                ]
            ]
        },
        {
            "name": "parameter-expansion-patched",
            "specs": [
                [
                    "==",
                    "0.3.1"
                ]
            ]
        },
        {
            "name": "patch",
            "specs": [
                [
                    "==",
                    "1.16"
                ]
            ]
        },
        {
            "name": "pdfminer.six",
            "specs": [
                [
                    "==",
                    "20220506"
                ]
            ]
        },
        {
            "name": "pefile",
            "specs": [
                [
                    "==",
                    "2021.9.3"
                ]
            ]
        },
        {
            "name": "pip-requirements-parser",
            "specs": [
                [
                    "==",
                    "31.2.0"
                ]
            ]
        },
        {
            "name": "pkginfo2",
            "specs": [
                [
                    "==",
                    "30.0.0"
                ]
            ]
        },
        {
            "name": "pluggy",
            "specs": [
                [
                    "==",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "plugincode",
            "specs": [
                [
                    "==",
                    "21.1.21"
                ]
            ]
        },
        {
            "name": "ply",
            "specs": [
                [
                    "==",
                    "3.11"
                ]
            ]
        },
        {
            "name": "publicsuffix2",
            "specs": [
                [
                    "==",
                    "2.20191221"
                ]
            ]
        },
        {
            "name": "pyahocorasick",
            "specs": [
                [
                    "==",
                    "2.0.0b1"
                ]
            ]
        },
        {
            "name": "pycparser",
            "specs": [
                [
                    "==",
                    "2.21"
                ]
            ]
        },
        {
            "name": "pygmars",
            "specs": [
                [
                    "==",
                    "0.7.0"
                ]
            ]
        },
        {
            "name": "Pygments",
            "specs": [
                [
                    "==",
                    "2.12.0"
                ]
            ]
        },
        {
            "name": "pymaven-patch",
            "specs": [
                [
                    "==",
                    "0.3.0"
                ]
            ]
        },
        {
            "name": "pyparsing",
            "specs": [
                [
                    "==",
                    "3.0.8"
                ]
            ]
        },
        {
            "name": "pytz",
            "specs": [
                [
                    "==",
                    "2022.1"
                ]
            ]
        },
        {
            "name": "PyYAML",
            "specs": [
                [
                    "==",
                    "6.0"
                ]
            ]
        },
        {
            "name": "rdflib",
            "specs": [
                [
                    "==",
                    "5.0.0"
                ]
            ]
        },
        {
            "name": "regipy",
            "specs": [
                [
                    "==",
                    "2.2.2"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "==",
                    "2.27.1"
                ]
            ]
        },
        {
            "name": "rpm-inspector-rpm",
            "specs": [
                [
                    "==",
                    "4.16.1.3.210404"
                ]
            ]
        },
        {
            "name": "saneyaml",
            "specs": [
                [
                    "==",
                    "0.5.2"
                ]
            ]
        },
        {
            "name": "six",
            "specs": [
                [
                    "==",
                    "1.16.0"
                ]
            ]
        },
        {
            "name": "soupsieve",
            "specs": [
                [
                    "==",
                    "2.3.1"
                ]
            ]
        },
        {
            "name": "spdx-tools",
            "specs": [
                [
                    "==",
                    "0.7.0a3"
                ]
            ]
        },
        {
            "name": "text-unidecode",
            "specs": [
                [
                    "==",
                    "1.3"
                ]
            ]
        },
        {
            "name": "toml",
            "specs": [
                [
                    "==",
                    "0.10.2"
                ]
            ]
        },
        {
            "name": "typecode",
            "specs": [
                [
                    "==",
                    "21.6.1"
                ]
            ]
        },
        {
            "name": "typecode-libmagic",
            "specs": [
                [
                    "==",
                    "5.39.210531"
                ]
            ]
        },
        {
            "name": "urllib3",
            "specs": [
                [
                    "==",
                    "1.26.9"
                ]
            ]
        },
        {
            "name": "urlpy",
            "specs": [
                [
                    "==",
                    "0.5"
                ]
            ]
        },
        {
            "name": "wcwidth",
            "specs": [
                [
                    "==",
                    "0.2.5"
                ]
            ]
        },
        {
            "name": "webencodings",
            "specs": [
                [
                    "==",
                    "0.5.1"
                ]
            ]
        },
        {
            "name": "xmltodict",
            "specs": [
                [
                    "==",
                    "0.12.0"
                ]
            ]
        },
        {
            "name": "zipp",
            "specs": [
                [
                    "==",
                    "3.6.0"
                ]
            ]
        }
    ],
    "lcname": "extractcode"
}
        
Elapsed time: 0.02759s