Skip to main content

Generate a valid Fedora specfile from Python package from PyPI

Project description

pyp2spec

This project is a thought descendant of specfile_generator.

It generates working Fedora RPM spec file for Python projects. The produced spec files must be compliant with the current Python Packaging Guidelines (in effect since 2021). It utilizes the benefits of pyproject-rpm-macros.

This project's maturity state is alpha. Its API may be a subject of change.

What it does

pyp2spec gathers all the necessary information from PyPI to produce a valid Fedora spec file and stores it in the current directory alongside with the config file used to produce the spec file.

Inside, there are two parts:

  • pyp2conf: gathers of all the necessary information to produce a spec file and stores it in a configuration file
  • conf2spec: produces working spec file using all the information from configuration file

Standard mode

pyp2spec attempts to detect all unambiguous information from the package metadata, but avoids applying complicated heuristics to provide at least somewhat accurate results. In the standard mode it generates files with all the detected information which may not be enough to generate a valid RPM immediately. There are placeholders in the fields that couldn't be determined automatically which are left for the packager to fill in. The generated spec contains comments helping to locate the missing pieces. This is the default mode of pyp2spec.

Automode

Automode, invoked with --automode or -a command-line options, is the preferred way of generating spec files in the automated environments. It sets the convenient defaults that increase the chance of creating a buildable package. The defaults:

  • import check attempts to import the the top-level modules only (since importing all of the detected modules can fail on e.g. OS-related dependencies)
  • all the found license names are validated as existing SPDX identifiers and checked for compliance with Fedora Legal data - the script warns about the incorrectness but creates a spec file anyways
  • the license string, if not a valid SPDX expression already, is a combination of all detected identifiers joined with the "AND" operator

The generated spec files don't fulfill all the necessities of the official Fedora packages and hence cannot be submitted for review.

How to run

To run whatever this project offers at this point, install package pyp2spec from PyPI with the command:

pip install pyp2spec

Then you can run:

pyp2spec <pypi_package_name>

or those two commands which will together produce the same result as pyp2spec:

pyp2conf <pypi_package_name>
conf2spec <config_file>

To see all available command-line options, run --help with the respective commands.

Development

Alternatively, you can clone the project from GitHub and install the dependencies to you virtual environment:

python -m pip install -r requirements.txt

To run the script and generate both the config and spec file, type:

python -m pyp2spec.pyp2spec <pypi_package_name>

You can run either of the tools separately to generate partial results:

python -m pyp2spec.pyp2conf <pypi_package_name>
python -m pyp2spec.conf2spec <config_file>

Tests

To run the tests, run tox:

tox

You can install tox from your OS repository or PyPI. Test dependencies are defined in the project's [test] extra.

Configuration file specification

Configuration data is stored in a TOML file.

Fields generated by pyp2conf

Field Description Type
pypi_name package name as stored in PyPI string
python_name pypi_name prepended with python- and alternative Python version, if python_alt_version is defined string
pypi_version package version string as on PyPI string
summary short package summary string
license license name string
url project URL string
source source of the sdist tarball, currently only "PyPI" supported string
extras extra subpackages names list of strings
archful package contains compiled extensions, implies not using BuildArch: noarch and adding BuildRequires: gcc bool
python_alt_version specific Python version to create the spec file for, e.g. 3.9, 3.10, 3.12 string
automode create buildable spec files that don't have to fully comply with Fedora Guidelines; useful for automatic build environments bool
license_files_present License-File field was detected in the package metadata bool
archive_name filename of the sdist string

Example config file generated by pyp2spec

license = "MIT"
archful = false
summary = "A simple Python 3 library for Notion Home Monitoring"
pypi_version = "2024.3.1"
pypi_name = "aionotion"
python_name = "python-aionotion"
url = "https://github.com/bachya/aionotion"
source = "PyPI"
extras = []
license_files_present = true
archive_name = "aionotion-2.0.3.tar.gz"

Spec file generated using the example config

Name:           python-aionotion
Version:        2024.3.1
Release:        %autorelease
# Fill in the actual package summary to submit package to Fedora
Summary:        A simple Python 3 library for Notion Home Monitoring

# Check if the automatically generated License and its spelling is correct for Fedora
# https://docs.fedoraproject.org/en-US/packaging-guidelines/LicensingGuidelines/
License:        MIT
URL:            https://github.com/bachya/aionotion
Source:         %{pypi_source aionotion}

BuildArch:      noarch
BuildRequires:  python3-devel


# Fill in the actual package description to submit package to Fedora
%global _description %{expand:
This is package 'aionotion' generated automatically by pyp2spec.}

%description %_description

%package -n     python3-aionotion
Summary:        %{summary}

%description -n python3-aionotion %_description


%prep
%autosetup -p1 -n aionotion-%{version}


%generate_buildrequires
%pyproject_buildrequires


%build
%pyproject_wheel


%install
%pyproject_install
# Add top-level Python module names here as arguments, you can use globs
%pyproject_save_files -l ...


%check
%pyproject_check_import


%files -n python3-aionotion -f %{pyproject_files}


%changelog
%autochangelog

License

The code is licensed under MIT.

The spec file template - template.spec and the files generated by the tool are licensed under MIT-0 (No Attribution).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyp2spec-0.11.1.tar.gz (313.8 kB view details)

Uploaded Source

Built Distribution

pyp2spec-0.11.1-py3-none-any.whl (21.0 kB view details)

Uploaded Python 3

File details

Details for the file pyp2spec-0.11.1.tar.gz.

File metadata

  • Download URL: pyp2spec-0.11.1.tar.gz
  • Upload date:
  • Size: 313.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.13.0

File hashes

Hashes for pyp2spec-0.11.1.tar.gz
Algorithm Hash digest
SHA256 ad51f7a88452e7b80f7f70896c25dcaf5420da369344619727e9457c9ccfbffe
MD5 92144723cb26fc1f6ed336a9feb17bb6
BLAKE2b-256 ba16d3bd5f08386e61f99e84d727d0114f9b8d01bb05d45913761ef6f1ba890d

See more details on using hashes here.

File details

Details for the file pyp2spec-0.11.1-py3-none-any.whl.

File metadata

  • Download URL: pyp2spec-0.11.1-py3-none-any.whl
  • Upload date:
  • Size: 21.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.13.0

File hashes

Hashes for pyp2spec-0.11.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ea0866c9230c34af43bff04d54fb925cf5dc08215353b48da7c54c1a727fc351
MD5 6d0b3d1f425e26ca35e538b95354caed
BLAKE2b-256 628b80ccee55c0090daa8d6f5394945dee67578869f5793e9dfe68c8865ae60f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page