The first beta for Python 3.7 is out. It will hopefully get into Fedora
soon as python37.
After it comes out of beta, we'll upgrade python3 to it.
The What's New list is at: https://docs.python.org/3.7/whatsnew/3.7.html
One thing that's interesting for packagers is PEP 552: Deterministic
Let me summarize in my own words.
A new opt-in mode for byte-compilation makes .pyc (bytecode cache) files
depend only on the contents of the corresponding source file.
If we use this, it will slow down imports, because the whole source file
would need to be read and hashed in order to verify if a .pyc file is
valid. (Currently, metadata like the modification time and file size is
To speed things up, there's an option, UNCHECKED_HASH, which skips cache
validation entirely. Using this would mean that if you modify a .py
source file installed by RPM, the changes wouldn't take effect (the .py
contents would only be shown in tracebacks).
Modifying installed files in production is extremely bad practice, of
course, but it's quite useful for debugging on throw-away systems. If we
adopt UNCHECKED_HASH, anyone doing it will have to remember to remove
the corresponding .pyc file.
Honestly, I'm not sure we want to use this in Fedora. Is anyone here
into reproducible builds, to make a better argument for this?
When I filed the Python 3.8 [change] for Fedora 31, we knew that the schedule
would be tight.
For that very reason, we have not yet started to build for Python 3.8 in a f31
side tag, but instead we've only been doing it in [copr] so far.
The mass rebuild happens on 2019-07-24, according to the Fedora 31 [schedule].
That gives us about 1 month + 1 week to be able to merge the side tag back in
case we decide to start building it now.
There are several challenges:
- there are ~200 build failures that block this, tracked on [bugzilla]
- further there are about ~300 packages that are blocked by the above,
- some of the packages are quite crucial to make this happen (tornado, pygobject3)
- the 3.8.0 [releases] have been delayed so far, so continuing the trend, we
could very well end up with the first RC just one day before the F31 Final
Freeze or even after that (risking 3.8 beta in Fedora 31 GA)
I've met with Petr Viktorin and Tomáš Orsava today and we are prepared to deffer
this change to Fedora 32, unless there is a large push-back against that.
However we don't want this to be an internal decision behind closed doors, so we
are sharing it with you and we are happy to reconsider, in case there is
something that we haven't anticipated.
What would that mean:
- we would continue to build the packages in [copr] as new Python 3.8 beta
versions are released
- we would continue to report build failures and to provide pointers to
- right after the F32 branching (2019-08-13 according to the [schedule]), we
would start with the side tag builds
- the Koji builds would start ~2 months later
- we would not be stressed by the immediate mass rebuild deadline
- we would not need to care about ABI incompatibilities between beta releases,
because the last beta should be out when we start
- the users would get 3.8 as the main python3 about 6 months later, but they
already have Python 3.8 interpreter in Fedora to develop on
We could of course just start building now and than decide not to merge the side
tag, but we are worried that it would leave a big mess in git repos and RPM
If you think this is not a wise decision and would prefer to have Python 3.8 in
Fedora 31 (as the main python3), please discuss quickly. The F31 mass rebuild is
approaching fast and there's a lot to be done, so every day counts now; in other
words, the later you present your argument, the stronger it must be ;)
on behalf of the Fedora's Python SIG
and Red Hat's Python Maintenance team
pip and Python packages generally deem 5.4.0 == 5.4.
In order to allow processing != dependencies in Python generators, we now strip
the trailing zero(s) for automatic Python provides and requires.
E.g. python3-josepy-1.1.0-9.fc31 provides python3.7dist(josepy) = 1.1
What I wrongfully have not anticipated at first is that now some dependent
packages can break if they are no both rebuilt. Packages rebuilt prior to this
change might require stuff like "python3.7dist(josepy) >= 1.1.0".
I'm sorry for that breakage, it should not be very common.
Rebuilding the package with such broken dependencies should fix it and evrything
should be fine after the mass rebuild.
There is a very little change when a package cannot be rebuilt to be fixed,
because some other package (needed to build this one) suffers from the same
problem. Let me know if you need my help to untagle any possible mess in this.
Sorry about the breakage.
On 26. 06. 19 23:59, Ned Deily wrote:
> On Jun 25, 2019, at 18:10, Miro Hrončok <mhroncok(a)redhat.com> wrote:
>> I'm working on getting 3.7.4rc1 to Fedora rawhide (the "master branch" of Fedora). If nothing goes wrong with the build, it should land within a day. There are checks in Fedora that should uncover any suspicious test failures of our Python packages, if that happens, we'll report back hopefully before 2019-06-28 AOE.
> Thanks for the heads-up, Miro! I'm hoping to be able to start the manufacture of 3.7.4 final a bit early so we can release on 06-28, it would be very helpful if you could pass along any potential showstopper problems as soon as you can and before approximately 06-28 1600Z.
There are couple Fedora packages that started to fail around the time when we
(However, they can be, and mostly are, unrelated to Python 3.4.7 update.)
Fox example pipenv is a false positive, pyqt5 fails on Python 2 for unrelated
One package that seems weird is python-dask, where there are some memory errors
and threading errors:
Not sure if this is random or related to 3.7.4, running a couple more builds now.
We have an interesting request for python3-rpm-macros to depend on python3.
- users who build for Python 3 are told (in the guidelines) to BR python3-devel
(that brings in both python3 and python3-rpm-macros)
- the existence of python3-rpm-macros is left as an implementation detail for ^
- in theory, those macros can be used with other Pythons
(such as pypy3 or python36, that is most likely not done in practice)
- to require: the macros are broken without a python3 interpreter
- to not: the macros should work with any python3 interpreter
- declare direct BR of macros without a python3 interpreter unsupported
- add dependency on python3. unused if used with another interpreter
- add a common virtual provide for all python3 interpreters
or require (python3 or pypy3 or python36...) - very tedious
On Mon, Jun 10, 2019 at 8:28 AM Panu Matilainen <pmatilai(a)redhat.com> wrote:
> A pile of language-specific macros and scripts have been eliminated from
> rpm upstream, notably %__python and %__perl and everything built around
> them, such as %python_sitelib and %perl_sitelib and their relatives.
> Python packages should be using the version specific macros already,
> provided by respective pythonN-devel packages so this shouldn't be an
> issue. On perl-side, those macros have been temporarily added to
> redhat-rpm-config instead to avoid breaking things right now, later to
> be moved to final destination in perl-macros or such.
Unversioned Python macros need to get added to python-rpm-macros, as
there are a number of packages that do rely on their existence (as a
means of supporting only a single version of Python depending on
distro releases or legacy reasons).
CC'd python-devel, Miro, and Igor about this.
真実はいつも一つ！/ Always, there's only one truth!
I'm not sure in which package the error lies here and thus where to
file the bug report. This occurs on only ppc64le with a matplotlib
build . Does anyone have any ideas?
>>> import wx
>>> from PIL import Image
and this works:
>>> import numpy
>>> from PIL import Image
but if you import both first, then it fails:
>>> import numpy, wx # or wx, numpy
>>> from PIL import Image
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python3.7/site-packages/PIL/Image.py", line 93, in <module>
from . import _imaging as core
ImportError: /lib64/libgomp.so.1: cannot allocate memory in static TLS block
Also, if you import pillow first, it works fine.
Using the ppc64le test machine with: