From Fedora Project Wiki
m (Churchyard moved page Changes/System Python Stack to Changes/Platform Python Stack: Change renamed)
No edit summary
Line 21: Line 21:


<!-- The actual name of your proposed change page should look something like: Changes/Your_Change_Proposal_Name.  This keeps all change proposals in the same namespace -->
<!-- The actual name of your proposed change page should look something like: Changes/Your_Change_Proposal_Name.  This keeps all change proposals in the same namespace -->
= System Python Stack <!-- The name of your change proposal --> =
= Platform Python Stack <!-- The name of your change proposal --> =


== Summary ==
== Summary ==
<!-- A sentence or two summarizing what this change is and what it will do. This information is used for the overall changeset summary page for each release. -->
<!-- A sentence or two summarizing what this change is and what it will do. This information is used for the overall changeset summary page for each release. -->


A revisit of the [[Changes/System Python|System Python]] change from [[Releases/24 | Fedora 24]]. System Python will be a separate stack fo Python packages aimed to provide all necessary dependencies to run and build dnf. In [[Releases/27 | Fedora 27]] this will be Python 3.6 (same version as {{package|python3}}, but this might change in the future with the Modularity effort).
A revisit of the [[Changes/System Python|System Python]] change from [[Releases/24 | Fedora 24]]. Platform Python will be a separate stack fo Python packages aimed to provide all necessary dependencies to run and build dnf. In [[Releases/27 | Fedora 27]] this will be Python 3.6 (same version as {{package|python3}}, but this might change in the future with the Modularity effort).


== Owner ==
== Owner ==
Line 64: Line 64:
The changes made during the [[Changes/System Python|System Python]] change from [[Releases/24 | Fedora 24]] will be reverted.
The changes made during the [[Changes/System Python|System Python]] change from [[Releases/24 | Fedora 24]] will be reverted.


A new system-python (source) package will be created as a copy of python3 package. Unlike python3, it will be changed so that:
A new platform-python (source) package will be created as a copy of python3 package. Unlike python3, it will be changed so that:


* the location of files will not be <code>/usr/lib/python3.6/</code> but <code>/usr/lib/system-python/</code>
* the location of files will not be <code>/usr/lib/python3.6/</code> but <code>/usr/lib/platform-python/</code>
** the script that generates the <code>python(abi)</code> requirement will be adapted to generate <code>system-python(abi)</code> requirement for that location
** the script that generates the <code>python(abi)</code> requirement will be adapted to generate <code>platform-python(abi)</code> requirement for that location
* the location of the binary will be <code>/usr/libexec/system-python</code>
* the location of the binary will be <code>/usr/libexec/platform-python</code>
* all the macros will use the system python binary and will be renamed
* all the macros will use the platform python binary and will be renamed
* all subpackages will be named <code>system-python-*</code>
* all subpackages will be named <code>platform-python-*</code>
* the debug build will be disabled
* the debug build will be disabled
* the modules that are (before this change) not part of <code>system-python-libs</code> but rather <code>python3-libs</code> will relocate to <code>system-python-libs-devel</code> to be available only on build-time
* the modules that are (before this change) not part of <code>platform-python-libs</code> but rather <code>python3-libs</code> will relocate to <code>platform-python-libs-devel</code> to be available only on build-time
* <code>system-python-libs</code> will provide <code>system-python(abi)</code> instead of <code>python(abi)</code>
* <code>platform-python-libs</code> will provide <code>platform-python(abi)</code> instead of <code>python(abi)</code>


Several packages (see bellow) will introduce a new <code>system-python-</code> subpackage. Example specfile of such package:
Several packages (see bellow) will introduce a new <code>platform-python-</code> subpackage. Example specfile of such package:


  %global pypi_name foo
  %global pypi_name foo
Line 94: Line 94:
  BuildRequires:  python3-setuptools
  BuildRequires:  python3-setuptools
   
   
  BuildRequires:  system-python-devel
  BuildRequires:  platform-python-devel
  BuildRequires:  system-python-setuptools
  BuildRequires:  platform-python-setuptools
   
   
  BuildArch:      noarch
  BuildArch:      noarch
Line 119: Line 119:
   
   
   
   
  %package -n    system-python-%{pypi_name}
  %package -n    platform-python-%{pypi_name}
  Summary:        %{summary}
  Summary:        %{summary}
  Requires:      system-python-bar
  Requires:      platform-python-bar
   
   
  %description -n system-python-%{pypi_name}
  %description -n platform-python-%{pypi_name}
  ...
  ...
   
   
Line 134: Line 134:
  %py2_build
  %py2_build
  %py3_build
  %py3_build
  %sypy_build
  %plpy_build
   
   
  %install
  %install
Line 140: Line 140:
  rm %{buildroot}%{_bindir}/%{pypi_name}
  rm %{buildroot}%{_bindir}/%{pypi_name}
   
   
  %sypy_install
  %plpy_install
  rm %{buildroot}%{_bindir}/%{pypi_name}
  rm %{buildroot}%{_bindir}/%{pypi_name}
   
   
Line 153: Line 153:
  %{__python3} -m unittest discover -v
  %{__python3} -m unittest discover -v
   
   
  export PYTHONPATH=%{buildroot}%{systempython_sitelib}
  export PYTHONPATH=%{buildroot}%{platformpython_sitelib}
  %{__systempython} -m unittest discover -v
  %{__platformpython} -m unittest discover -v
   
   
   
   
Line 170: Line 170:
  %{python3_sitelib}/%{pypi_name}-%{version}-py?.?.egg-info
  %{python3_sitelib}/%{pypi_name}-%{version}-py?.?.egg-info
   
   
  %files -n system-python-%{pypi_name}
  %files -n platform-python-%{pypi_name}
  %doc README.rst CHANGES.rst
  %doc README.rst CHANGES.rst
  %license COPYING
  %license COPYING
  %{systempython_sitelib}/%{pypi_name}.cpython-%{systempython_version_nodots}*.so
  %{platformpython_sitelib}/%{pypi_name}.cpython-%{platformplatformpython_version_nodots}*.so
  %{systempython_sitelib}/%{pypi_name}-%{version}-py?.?.egg-info
  %{platformpython_sitelib}/%{pypi_name}-%{version}-py?.?.egg-info
   
   
  %changelog
  %changelog

Revision as of 11:30, 4 July 2017


Platform Python Stack

Summary

A revisit of the System Python change from Fedora 24. Platform Python will be a separate stack fo Python packages aimed to provide all necessary dependencies to run and build dnf. In Fedora 27 this will be Python 3.6 (same version as Package-x-generic-16.pngpython3, but this might change in the future with the Modularity effort).

Owner

  • Name: Miro Hrončok
  • Email: <python-maint at redhat.com>
  • Release notes owner:

Current status

  • Targeted release: Fedora 27
  • Last updated: 2017-07-04
  • Tracker bug: <will be assigned by the Wrangler>

Detailed Description

The changes made during the System Python change from Fedora 24 will be reverted.

A new platform-python (source) package will be created as a copy of python3 package. Unlike python3, it will be changed so that:

  • the location of files will not be /usr/lib/python3.6/ but /usr/lib/platform-python/
    • the script that generates the python(abi) requirement will be adapted to generate platform-python(abi) requirement for that location
  • the location of the binary will be /usr/libexec/platform-python
  • all the macros will use the platform python binary and will be renamed
  • all subpackages will be named platform-python-*
  • the debug build will be disabled
  • the modules that are (before this change) not part of platform-python-libs but rather python3-libs will relocate to platform-python-libs-devel to be available only on build-time
  • platform-python-libs will provide platform-python(abi) instead of python(abi)

Several packages (see bellow) will introduce a new platform-python- subpackage. Example specfile of such package:

%global pypi_name foo

Name:           python-%{pypi_name}
Version:        0.13
Release:        1%{?dist}
Summary:        Python %{pypi_name} module

License:        GPLv2
URL:            https://github.com/fedora-python/%{pypi_name}
Source0:        https://files.pythonhosted.org/packages/source/f/%{pypi_name}/%{pypi_name}-%{version}.tar.gz

BuildRequires:  python2-devel
BuildRequires:  python2-setuptools

BuildRequires:  python3-devel
BuildRequires:  python3-setuptools

BuildRequires:  platform-python-devel
BuildRequires:  platform-python-setuptools

BuildArch:      noarch

%description
...

%package -n     python2-%{pypi_name}
Summary:        %{summary}
Requires:       python2-bar
%{?python_provide:%python_provide python2-%{pypi_name}}

%description -n python2-%{pypi_name}
...

%package -n     python3-%{pypi_name}
Summary:        %{summary}
Requires:       python3-bar
%{?python_provide:%python_provide python3-%{pypi_name}}

%description -n python3-%{pypi_name}
...


%package -n     platform-python-%{pypi_name}
Summary:        %{summary}
Requires:       platform-python-bar

%description -n platform-python-%{pypi_name}
...


%prep
%autosetup -n %{pypi_name}-%{version}


%build
%py2_build
%py3_build
%plpy_build

%install
%py2_install
rm %{buildroot}%{_bindir}/%{pypi_name}

%plpy_install
rm %{buildroot}%{_bindir}/%{pypi_name}

%py3_install


%check
export PYTHONPATH=%{buildroot}%{python2_sitelib}
%{__python2} -m unittest discover -v

export PYTHONPATH=%{buildroot}%{python3_sitelib}
%{__python3} -m unittest discover -v

export PYTHONPATH=%{buildroot}%{platformpython_sitelib}
%{__platformpython} -m unittest discover -v


%files -n python2-%{pypi_name}
%doc README.rst CHANGES.rst
%license COPYING
%{python2_sitelib}/%{pypi_name}.so
%{python2_sitelib}/%{pypi_name}-%{version}-py?.?.egg-info

%files -n python3-%{pypi_name}
%doc README.rst CHANGES.rst
%license COPYING
%{_bindir}/%{pypi_name}
%{python3_sitelib}/%{pypi_name}.cpython-%{python3_version_nodots}*.so
%{python3_sitelib}/%{pypi_name}-%{version}-py?.?.egg-info

%files -n platform-python-%{pypi_name}
%doc README.rst CHANGES.rst
%license COPYING
%{platformpython_sitelib}/%{pypi_name}.cpython-%{platformplatformpython_version_nodots}*.so
%{platformpython_sitelib}/%{pypi_name}-%{version}-py?.?.egg-info

%changelog
...

The complete list of affected packages is not final yet. It should be all the Python build dependencies of dnf and their build dependencies as well, excluding packages only needed to build the documentation.

Currently, we have established this:

dbus-python
gpgme
libcomps
libdnf
librepo
pytest
python-argcomplete
python-cffi
python-contextlib2
python-coverage
python-cryptography
python-decorator
python-extras
python-fixtures
python-funcsigs
python-hypothesis
python-idna
python-iniparse
python-jinja2
python-jsonschema
python-keyring
python-linecache2
python-markupsafe
python-mimeparse
python-mock
python-nose
python-pbr
python-pexpect
python-pip
python-ply
python-ptyprocess
python-py
python-pyasn1
python-pycparser
python-pygpgme
python-pytest-timeout
python-rpm-macros
python-SecretStorage
python-setuptools
python-setuptools_scm
python-six
python-testtools
python-traceback2
python-unittest2
python-wheel
pyxattr
pyxdg
rpm

Benefit to Fedora

With the Modularity effort a minimal stack of Python only needed to run dnf is needed to be part of the Platform. Changing System Python to be a separate stack will allow us to do that.


Scope

  • Proposal owners:
    • identify a list of runtime and build dependencies of dnf
    • create a system-python source package
    • change the script that generates the python(abi) requirements to also generate system-python(abi) requirements
    • revert system-python related things from the Package-x-generic-16.pngpython3 package
    • add a system-python- subpackage to identified list of packages
    • switch dnf to use that stack
  • Other developers: N/A (not a System Wide Change)
  • Policies and guidelines: N/A (not a System Wide Change)
  • Trademark approval: N/A (not needed for this Change)

Upgrade/compatibility impact

N/A (not a System Wide Change)

How To Test

N/A (not a System Wide Change)

User Experience

Nothing should change for the user, except a slightly larger amount of packages will be installed on the system.

Dependencies

N/A (not a System Wide Change)

Contingency Plan

  • Contingency mechanism: (What to do? Who will do it?) N/A (not a System Wide Change)
  • Contingency deadline: N/A (not a System Wide Change)
  • Blocks release? No (not a System Wide Change)
  • Blocks product? No

If not done on time: Keep dnf running on Package-x-generic-16.pngpython3. Finish the work in time of Fedora 28.

If proven not to work as designed: Retire system-python package and remove all the system-python- subpackages. Provide/obsolete system-python- subpackages from their python3- counterparts.

Documentation

N/A (not a System Wide Change)

Release Notes