On 29 August 2017 at 19:33, Petr Viktorin <pvikt...@redhat.com> wrote:
> On 08/25/2017 10:23 AM, Nick Coghlan wrote:
>> Traditionally, that would have meant that we wouldn't get a Fedora
>> based Python 3.7 container out the door until the release of Fedora 29
>> in October, and we'd never ship the F28+3.7 combination at all, even
>> for folks that mainly just want the Python runtime, and then will use
>> pip to install everything else they need.
>
>
> Traditionally, that's very well possible: there'd be a "python37" package
> that provides a /usr/bin/python37. We do the same for old versions, and for
> python36 on f25. It works quite well.
>
> If the intended use for 3.7 in f28 is to make a virtualenv and use pip to
> install things, that virtualenv can very well be made by calling
> /usr/bin/python37. I still see no reason for a stream that makes
> /usr/bin/python3 point to 3.7.

My aim is to be able to define a "Fedora 28 + Python 3.7" container
image that meets the following criteria:

1. Everything that's installed by default is owned by an RPM (no
injecting extra symlinks as part of the container build process)
2. Invocations of "python3" and "/usr/bin/python3" (whether
interactively or via shebang) run Python 3.7
3. I'm able to do this with just the Fedora Modularity tooling - no
extra downstream tools like scl-utils

>> However, I think modularity gives us access to a more flexible
>> approach: we can set up the F28 System Profile to *default* to the 3.6
>> Python App Runtime stream, allowing the sequence of updates to be:
>>
>> 1. In Fedora 28, we split the Python 3 runtime module into two pieces:
>> - the App Runtime, with a 3.6 stream
>> - the Integrated Runtime, with an f28 stream that depends on
>> AppRuntime:3.6
>> 2. After 3.7 hits beta in January 2018, we add a "3.7" stream to the App
>> Runtime
>> 3. After 3.7 is released, we start building a new F28+3.7 app
>> development container
>> - in this configuration, most system packages that need Python 3 can't
>> be installed
>
> How do you achieve this for package that depend on /usr/bin/python3?

If that's all they depend on, I guess they'll still be installable.
However, if they depend on a particular version of the Python ABI,
then the 3.7 package won't provide it.

>>> Also, the names are a mouthful; let's revise naming after we get the
>>> semantics down :)
>>
>>
>> I'm reasonably happy with App Runtime (since I stole that directly
>> from "OpenShift Application Runtimes", which is the downstream use
>> case I'm interested in making easier to maintain), and I think
>> "Integrated Python" or "Integrated Runtime" accurately conveys the
>> significance of the proposed stream mapping between Fedora versions
>> and Python versions ("F28 integration testing uses Python 3.6", "F29
>> integration testing uses Python 3.7", etc).
>>
>> For the Testing Runtimes, we could likely just drop the
>> "interoperability" qualifier, giving:
>>
>> - Platform Python: the private, always installed, potentially
>> non-standards-compliant, Python that dnf uses
>> - Integrated Python: an optional standards-compliant Python used for
>> development and automated scripting *of* Fedora
>> - Application Python: used to run Python apps *on* Fedora (but may not
>> be integrated fully, depending on version)
>> - Testing Python: sufficient for cross-version compatibility testing,
>> but not recommended for app deployments
>
> It seems that the Application and Testing Pythons differ only in "SLA"s and
> availablility of additional packages, is that right?
>
> Also, it seems that the difference between Integrated Python and Application
> Python is that one provides /usr/bin/python3. Is that correct?

Originally that's what I had, but as I wrote it up in more detail (see
https://github.com/fedora-python/fedora-python/commit/e76aa19870627059c9b1539f19060e77ef95317e)
I came to realise that it probably makes more sense to have a module
level dependency from the Integrated Python branches to the
corresponding Application Python branches and then have the "python3
symlink or not?" distinction exist between the Application module
config and the Testing module configs.

That way, the "Integrated Python" module shouldn't actually need to
pull in any new source trees - it just becomes a way of mapping from
Fedora versions to their integrated Python versions in a
machine-readable way such that other Fedora modules can easily declare
either "build for all Fedora Integrated Python streams" (by defining a
module dependency on "python: []") *or* "build for all CPython version
streams" (by depending on "cpython: []").

While exactly how the stream expansions are going to work is still a
bit fuzzy (and I assume that's one of the things that will be resolved
at Flock this week), my understanding based on the last fedora-devel
thread about it is that we'll want to actively discourage folks from
doing the latter without a compelling reason, as that's the approach
that can lead to a combinatorial explosion of component builds: every
version of Python on every active version of Fedora. While there are
some cases where we'll actually want to do that (e.g. for the
python-ecosystem modules), there are a lot of Fedora components that
only need to be usable on the Python build that's integrated directly
with the OS.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncogh...@gmail.com   |   Brisbane, Australia
_______________________________________________
python-devel mailing list -- python-devel@lists.fedoraproject.org
To unsubscribe send an email to python-devel-le...@lists.fedoraproject.org

Reply via email to