Python 3 as a Default - Status

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,
since the "Python 3 as a Default" change [1] has been accepted a while ago and is scheduled for F22, I'd like to share with you the status.

The proposed change [1] mentions several goals that should be reached to pronounce python3 the "default":
1) DNF is the default package manager instead of Yum, which only works with Python 2
2) Python 3 is the only Python implementation in the minimal buildroot
3) Python 3 is the only Python implementation on the LiveCD
4) Anaconda and all of its dependencies run on Python 3
5) cloud-init and all of its dependencies run on Python 3

Before I go through the 5 goals, let me explain the approach that has been taken so far:
There are basically two types of packages (from Fedora's point of view) that depend on Python: "libraries" and "applications" (note that the distinction is intentionally not very clear, there are packages that are both)
"Libraries" are, simply put, Python extension modules, those that live in %{python2_sitelib} and %{python2_sitearch} in python2 builds. "Libraries" were receiving both upstream and downstream care from the people working on the change - upstream porting and downstream python3- subpackage additions, to also put files in %{python3_sitelib} and %{python3_sitearch}. We could afford to do the subpackage additions downstream during F21 lifecycle, since this doesn't change anything, it's just one more binary RPM that's spit out of the SRPM build process.
"Applications" are stuff that users run (an important characteristic is that users don't care under which Python the application runs) - like Anaconda. "Applications" have been receiving some upstream patches, but weren't rebuilt with Python 3 yet. The reason for not rebuilding yet is that we first wanted to make sure that we've ported all "applications" upstream to be able to switch them all to Python 3 in Fedora at once - we wanted to be sure we wouldn't introduce both Python runtimes to livemedia, cloudimages, etc. As of now, Python 2 is still the suggested Python runtime to build "applications" against. We will start filing bugs to rebuild against Python 3 once we're sure that the switch can safely happen (which I think is now according to the points below).

Let's go through the 5 goals:
1) DNF will be the default package manager for F22 [2], so everything is ok here.
2) One of our goals was to not make minimal buildroot larger. The only package from minimal buildroot requiring python (python-libs to be precise) is gdb, which is compatible with python3 in upstream (but it's considered to be an "application", so it hasn't been rebuilt yet). So minimal buildroot is fine.
3) As for LiveCD, we now have more of these - Workstation, Server and all the various flavours and spins. Let me go through Workstation and Server:
Workstation:
Fedora LiveCDs have, since at least Fedora 20, included both Python 2 and Python 3 runtimes (the primary reason for having Python 3 back then was AFAICS speech-dispatcher, which is Python 3 only in upstream). Although we may not be able to port all libraries and applications (but we may, there's still chance!) from workstation livecd to Python 3, the fact that it already ships both runtimes makes me think that we should build as much apps as possible with Python 3.
Server:
Because of giants like samba and freeipa, I think we won't be able to achieve python2-free server livecd for F22. But as it is with Workstation, I think we should proceed and build as much with Python 3 as possible.
4) Anaconda is work in progress. I'm communicating with Anaconda devs quite regularly and everything looks promising.
5) cloud-init is a problem. Basically, Python 3 cloud-init is the only thing blocking the cloud images (*). Other packages are ready or being worked on. The problem here is that cloud-init upstream is really unresponsive about Python 3 porting (patch is submitted in their bug tracker [3]) - if someone knows these people, please help us by pinging them.

Attached to this mail, you'll find 3 files (fedora-cloud-base.txt, fedora-install-server.txt, fedora-live-workstation.txt). Each one of them is a result of automated script that tells with quite a good certainty what Python dependent packages are on a livecd/image generated by a kickstart with the same name.
The files have two sections: "Good" and "Bad". "Good" packages are either "libraries" that have python3- subpackage or "applications" that have already been built with Python 3. "Bad" packages are either "libraries" not having python3- subpackage or "applications" built with Python 2. Note that lots of applications are now "bad" even though their code is Python 3 compatible, they just haven't been built with Python 3 yet. Also, "Bad" contains packages that will not be ported at all and will disappear from livecd, e.g. pyliblzma or yum.
We're tracking all packages needed for Workstation and Cloud images at [4] - feel free to grab anything unassigned there or help us pushing our patches upstream. All help is welcome!


All in all, I think we're in a good shape and I suggest that we move on by building all current "applications" (those that are Python 3 compatbile in upstream) with Python 3. I already suggested a change to Python guidelines that all *new* "applications" should be built with Python 3 if possible [5].


(*) Assuming cloud images are created out of fedora-cloud-base.ks, which I'd like someone to confirm.

-- 
Regards,
Slavek Kabrda

[1] http://fedoraproject.org/wiki/Changes/Python_3_as_Default
[2] http://fedoraproject.org/wiki/Changes/ReplaceYumWithDNF
[3] https://code.launchpad.net/~harlowja/cloud-init/py2-3/+merge/225240
[4] https://fedoraproject.org/wiki/User:Churchyard/python3
[5] https://fedorahosted.org/fpc/ticket/475
----- Good -----
PyYAML: PyYAML
dbus-python: dbus-python
dnf: dnf
dnf-plugins-core: dnf-plugins-core
hawkey: python-hawkey
libcomps: python-libcomps
librepo: python-librepo
libselinux: libselinux-python
libsemanage: libsemanage-python
newt: newt-python
policycoreutils: policycoreutils-python
pygobject3: pygobject3-base
pygpgme: pygpgme
python-IPy: python-IPy
python-boto: python-boto
python-chardet: python-chardet
python-configobj: python-configobj
python-decorator: python-decorator
python-iniparse: python-iniparse
python-jsonpatch: python-jsonpatch
python-jsonpointer: python-jsonpointer
python-prettytable: python-prettytable
python-psutil: python-psutil
python-pycurl: python-pycurl
python-requests: python-requests
python-rsa: python-rsa
python-setuptools: python-setuptools
python-six: python-six
python-slip: python-slip python-slip-dbus
python-urllib3: python-urllib3
rpm: rpm-python

----- Bad -----
audit: audit-libs-python
authconfig: authconfig
cloud-init: cloud-init
firewalld: firewalld
heat-cfntools: heat-cfntools
pykickstart: pykickstart
pyliblzma: pyliblzma
python: python
python-backports: python-backports
python-backports-ssl_match_hostname: python-backports-ssl_match_hostname
python-urlgrabber: python-urlgrabber
# excludes optional groups from @^server-product-environment, also excludes @dogtag, @dns-server, @freeipa-server (broken deps)
----- Good -----
PyXB: python3-PyXB
abrt: abrt-addon-python3 abrt abrt-cli abrt-addon-ccpp abrt-python3 abrt-addon-pstoreoops abrt-addon-vmcore abrt-addon-python abrt-python
boost: boost-devel boost boost-python
cryptsetup: cryptsetup-python
dbus-python: dbus-python python3-dbus
dnf: dnf
dnf-plugins-core: dnf-plugins-core
file: python-magic
gutenprint: gutenprint-cups
hawkey: python-hawkey
hplip: hplip-libs hplip
javapackages-tools: javapackages-tools python3-javapackages
libcomps: python-libcomps
librepo: python-librepo
libreport: libreport-python libreport-python3 libreport
libselinux: libselinux-python
libvirt-python: libvirt-python
mock: mock
mod_wsgi: mod_wsgi
newt: newt-python
numpy: numpy-f2py numpy
pyOpenSSL: pyOpenSSL
pygobject3: pygobject3-base pygobject3 python3-gobject
pygpgme: pygpgme
pyparsing: pyparsing
pyparted: pyparted
python-IPy: python-IPy
python-beautifulsoup4: python-beautifulsoup4
python-bugzilla: python-bugzilla
python-cffi: python-cffi python3-cffi
python-chardet: python3-chardet python-chardet
python-crypto: python-crypto
python-cryptography: python-cryptography python3-cryptography
python-cssselect: python3-cssselect python-cssselect
python-cups: python3-cups
python-decorator: python-decorator
python-dns: python-dns
python-ecdsa: python-ecdsa
python-enchant: python-enchant
python-html5lib: python-html5lib
python-iniparse: python-iniparse
python-kitchen: python-kitchen
python-lxml: python-lxml python3-lxml
python-netaddr: python-netaddr
python-nose: python-nose
python-paramiko: python-paramiko
python-pexpect: python-pexpect
python-pillow: python-pillow
python-pip: python3-pip
python-ply: python3-ply python-ply
python-psycopg2: python-psycopg2
python-pyasn1: python-pyasn1 python-pyasn1-modules
python-pycparser: python-pycparser python3-pycparser
python-pycurl: python-pycurl python3-pycurl
python-pymongo: python-bson python-pymongo python-pymongo-gridfs
python-pyudev: python-pyudev
python-requests: python3-requests python-requests
python-setuptools: python-setuptools python3-setuptools
python-simplejson: python-simplejson
python-six: python-six python3-six
python-slip: python-slip-dbus python-slip
python-urllib3: python-urllib3 python3-urllib3
python-virtualenv: python-virtualenv
python3: python3 python3-libs
python3-cairo: python3-cairo
pyusb: pyusb
pyxattr: pyxattr
rpm: rpm-python rpm-python3
system-config-printer: system-config-printer-libs system-config-printer-udev
systemd: systemd-python systemd-python3
unbound: unbound-libs

----- Bad -----
GitPython: GitPython
MySQL-python: MySQL-python
PyGreSQL: PyGreSQL
authconfig: authconfig
bind: bind-utils
bitfrost: bitfrost
bodhi: bodhi-client
bzr: bzr
cmpi-bindings: cmpi-bindings-pywbem
dnf-langpacks: dnf-langpacks
dracut-modules-olpc: dracut-modules-olpc
fedora-easy-karma: fedora-easy-karma
fedora-packager: fedora-cert fedora-packager
fedpkg: fedpkg
fence-agents: fence-agents-netio fence-agents-ilo-moonshot fence-agents-wti fence-agents-intelmodular fence-agents-rsb fence-agents-ipmilan fence-agents-scsi fence-agents-zvm fence-agents-amt fence-agents-ovh fence-agents-common fence-agents-alom fence-agents-hpblade fence-agents-emerson fence-agents-ifmib fence-agents-ilo2 fence-agents-ibmblade fence-agents-eps fence-agents-bladecenter fence-agents-drac5 fence-agents-rhevm fence-agents-cisco-ucs fence-agents-ilo-mp fence-agents-ldom fence-agents-cisco-mds fence-agents-rsa fence-agents-apc-snmp fence-agents-apc fence-agents-docker fence-agents-ilo-ssh fence-agents-ipdu fence-agents-eaton-snmp fence-agents-lpar fence-agents-brocade fence-agents-vmware-soap
firewalld: firewalld
freeipa: freeipa-client freeipa-python
gdb: gdb
gettext: gettext
glib2: glib2-devel
glusterfs: glusterfs-api
iscsi-initiator-utils: iscsi-initiator-utils
koji: koji
libreswan: libreswan
libtalloc: pytalloc
libxml2: libxml2-python libxml2-devel
m2crypto: m2crypto
mercurial: mercurial
nfs-utils: nfs-utils
nmap: nmap
openlmi-networking: openlmi-networking
openlmi-providers: openlmi-providers openlmi-python-base openlmi-python-providers
openlmi-storage: openlmi-storage
pacemaker: pacemaker
packagedb-cli: packagedb-cli
pcs: pcs
pcsc-lite: pcsc-lite-devel
pycairo: pycairo
pygobject2: pygobject2
pygtk2: pygtk2-libglade pygtk2
pykickstart: pykickstart
pyliblzma: pyliblzma
python: python python-devel
python-async: python-async
python-augeas: python-augeas
python-backports: python-backports
python-backports-ssl_match_hostname: python-backports-ssl_match_hostname
python-blivet: python-blivet
python-bunch: python-bunch
python-dateutil: python-dateutil
python-dmidecode: python-dmidecode
python-fedora: python-fedora
python-futures: python-futures
python-gitdb: python-gitdb
python-ipaddr: python-ipaddr
python-kerberos: python-kerberos
python-krbV: python-krbV
python-ldap: python-ldap
python-nss: python-nss
python-pyblock: python-pyblock
python-qrcode: python-qrcode-core
python-smmap: python-smmap
python-suds: python-suds
python-urlgrabber: python-urlgrabber
python-xpyb: python-xpyb
python-yubico: python-yubico
pywbem: pywbem
rolekit: rolekit
rpkg: pyrpkg
rpmdevtools: rpmdevtools
rpmlint: rpmlint
samba: samba-libs
sos: sos
sssd: sssd-common libipa_hbac-python python-sssdconfig sssd
subversion: subversion
system-config-samba: system-config-samba
systemtap: systemtap-sdt-devel
virt-manager: virt-install virt-manager virt-manager-common
vte: vte
yum: yum
yum-metadata-parser: yum-metadata-parser
yum-utils: yum-utils
----- Good -----
PyXB: python3-PyXB
PyYAML: PyYAML
abrt: abrt-addon-vmcore abrt-addon-python abrt-python3 abrt abrt-addon-python3 abrt-addon-ccpp abrt-desktop abrt-python abrt-addon-pstoreoops abrt-cli
babel: python-babel
brltty: python3-brlapi
cryptsetup: cryptsetup-python
dbus-python: python3-dbus dbus-python
dnf: dnf
dnf-plugins-core: dnf-plugins-core
gedit: gedit
gnome-shell: gnome-shell
gutenprint: gutenprint-cups
hawkey: python-hawkey
hplip: hplip-libs hplip
ibus: ibus-setup ibus
ibus-typing-booster: ibus-typing-booster
javapackages-tools: javapackages-tools python3-javapackages
langtable: langtable-python
libcomps: python-libcomps
liblouis: liblouis-python3
libpeas: libpeas
libpwquality: python-pwquality
libreoffice: libreoffice-pyuno
librepo: python-librepo
libreport: libreport-python3 libreport-python libreport
libselinux: libselinux-python
libsemanage: libsemanage-python
newt: newt-python
orca: orca
policycoreutils: policycoreutils-python
pyatspi: pyatspi python3-pyatspi
pygobject3: pygobject3 python3-gobject pygobject3-base
pygpgme: pygpgme
pyparted: pyparted
python-IPy: python-IPy
python-PyGithub: python-PyGithub
python-beaker: python3-beaker
python-chardet: python-chardet
python-coverage: python-coverage
python-cssselect: python3-cssselect
python-cups: python3-cups
python-decorator: python-decorator
python-enchant: python3-enchant
python-humanize: python-humanize
python-iniparse: python-iniparse
python-inotify: python-inotify
python-jinja2: python-jinja2
python-kitchen: python-kitchen
python-lxml: python3-lxml
python-mako: python3-mako
python-markupsafe: python-markupsafe python3-markupsafe
python-meh: python-meh-gui python-meh
python-ntplib: python-ntplib
python-pillow: python-pillow
python-pip: python3-pip
python-progress: python-progress
python-pycurl: python-pycurl python3-pycurl
python-pyudev: python-pyudev
python-requests: python-requests
python-setuptools: python-setuptools python3-setuptools
python-six: python-six
python-slip: python-slip-dbus python-slip
python-urllib3: python-urllib3
python3: python3 python3-libs
python3-cairo: python3-cairo
pytz: pytz
pyxattr: pyxattr
pyxdg: python3-pyxdg
rhythmbox: rhythmbox
rpm: rpm-python
speech-dispatcher: python3-speechd
system-config-printer: system-config-printer-libs system-config-printer-udev
systemd: systemd-python systemd-python3
unbound: unbound-libs

----- Bad -----
anaconda: anaconda-core anaconda-gui anaconda-tui anaconda-widgets
audit: audit-libs-python
authconfig: authconfig
bind: bind-utils
caribou: caribou python-caribou
devassistant: devassistant
environment-modules: environment-modules
firewalld: firewalld
fros: fros
gdb: gdb
gettext: gettext
glade: glade-libs
glusterfs: glusterfs-api
gnome-abrt: gnome-abrt
gupnp: gupnp
iscsi-initiator-utils: iscsi-initiator-utils
libtalloc: pytalloc
libuser: libuser-python
libxml2: libxml2-python
nfs-utils: nfs-utils
pidgin: libpurple
pycairo: pycairo
pygobject2: pygobject2
pygtk2: pygtk2-libglade pygtk2
pykickstart: pykickstart
pyliblzma: pyliblzma
python: python
python-augeas: python-augeas
python-backports: python-backports
python-backports-ssl_match_hostname: python-backports-ssl_match_hostname
python-blivet: python-blivet
python-dmidecode: python-dmidecode
python-pyblock: python-pyblock
python-urlgrabber: python-urlgrabber
python-xpyb: python-xpyb
samba: samba-libs
setroubleshoot: setroubleshoot setroubleshoot-server
sos: sos
sssd: python-sssdconfig sssd sssd-common
telepathy-gabble: telepathy-gabble
totem: totem
unoconv: unoconv
yum: yum
yum-metadata-parser: yum-metadata-parser
yum-utils: yum-utils
-- 
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxxx
https://admin.fedoraproject.org/mailman/listinfo/devel
Fedora Code of Conduct: http://fedoraproject.org/code-of-conduct

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]
  Powered by Linux