Bug 1546682

Summary: recoll: recoll requires both Python 2 and Python 3
Product: [Fedora] Fedora Reporter: Iryna Shcherbina <ishcherb>
Component: recollAssignee: Terje Røsten <terje.rosten>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: rawhideCC: ferdnyc, lbalhar, mhroncok, pbonzini, pviktori, terje.rosten
Target Milestone: ---Keywords: Reopened
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2019-08-07 06:45:01 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1285816, 1340802, 1698500    

Description Iryna Shcherbina 2018-02-19 10:32:03 UTC
The recoll RPM requires both Python 2 and Python 3.

Except in very special circumstances, there is no need for one package
to drag in both Python stacks. Usually, this is a packaging error: for
example, a stray "/usr/bin/python" shebang in a Python 3 package can
introduce a Python 2 dependency.

Please split your package, or remove the stray dependencies.
There is a section on shebangs in the Python RPM Porting Guide [0]
which covers this issue.

It's ok to do this in Rawhide only, however, it would be greatly
appreciated if you could push it to Fedora 27 as well.


If anything is unclear, or if you need any kind of assistance, you can
ask on IRC (#fedora-python on Freenode), or reply here. We'll be happy
to help investigating or fixing this issue!


[0] http://python-rpm-porting.readthedocs.io/en/latest/application-modules.html#are-shebangs-dragging-you-down-to-python-2

Comment 1 Terje Røsten 2018-02-19 13:01:05 UTC
Hi!

This is not a bug, recoll have helper scripts (filters) written in 
both Python 2 and 3, for recoll to work both stacks are needed.

In the future upstream might convert everything to Python 3, however 
no eta for that to happen.

Comment 2 Iryna Shcherbina 2018-02-19 17:57:40 UTC
Thanks for the information.

Comment 3 "FeRD" (Frank Dana) 2018-09-30 14:35:56 UTC
Part of the release notes for recoll 1.24.0 (see bug #1565866 for release-monitoring's automated "is available" updates, the latest upstream is 1.24.1) reads:

* All input handlers should now be compatible with Python3, but still use Python2.

So, it sounds like recoll SHOULD be ready to go full Python3, if we were inclined to repackage 1.24.x that way by regexp-updating all of the shebangs during rpmbuild.

Comment 4 Terje Røsten 2018-09-30 16:54:58 UTC
hi!

I have talked to upstream maintainer, next release will use Python 3 only,
he had to reimplement some filters as some were Python 2 only.

Release should be available long before Fedora 30 is here.

Comment 5 Petr Viktorin (@encukou) 2019-07-08 15:48:07 UTC
Re-opening, then.
What is the status for Fedora 31?

Comment 6 "FeRD" (Frank Dana) 2019-07-08 18:04:10 UTC
(In reply to Petr Viktorin from comment #5)
> Re-opening, then.
> What is the status for Fedora 31?

Current recoll-1.25.16-1.fc30.x86_64 in Fedora 30 includes both Python2 and Python3 modules together in the same package, but all files are present in both packages. All of the filters in /usr/share/recoll/filters/ use python3 shebangs:

$ grep usr/bin/python /usr/share/recoll/filters/*
/usr/share/recoll/filters/hotrecoll.py:#!/usr/bin/python2
/usr/share/recoll/filters/ppt-dump.py:#!/usr/bin/python3
/usr/share/recoll/filters/rcl7z:#!/usr/bin/python3
/usr/share/recoll/filters/rclabw.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclaudio:#!/usr/bin/python3
/usr/share/recoll/filters/rclbasehandler.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclchm:#!/usr/bin/python3
/usr/share/recoll/filters/rcldia:#!/usr/bin/python3
/usr/share/recoll/filters/rcldjvu.py:#!/usr/bin/python3
/usr/share/recoll/filters/rcldoc.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclepub:#!/usr/bin/python3
/usr/share/recoll/filters/rclepub1:#!/usr/bin/python3
/usr/share/recoll/filters/rclfb2.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclgenxslt.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclgnm.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclics:#!/usr/bin/python3
/usr/share/recoll/filters/rclimg.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclinfo:#!/usr/bin/python3
/usr/share/recoll/filters/rclkar:#!/usr/bin/python3
/usr/share/recoll/filters/rcllatinclass.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclokulnote.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclopxml.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclpdf.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclppt.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclpython:#!/usr/bin/python3
/usr/share/recoll/filters/rclrar:#!/usr/bin/python3
/usr/share/recoll/filters/rclrtf.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclsoff-flat.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclsoff.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclsvg.py:#!/usr/bin/python3
/usr/share/recoll/filters/rcltar:#!/usr/bin/python3
/usr/share/recoll/filters/rcltext.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclwar:#!/usr/bin/python3
/usr/share/recoll/filters/rclxls.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclxml.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclxmp.py:#!/usr/bin/python3
/usr/share/recoll/filters/rclzip:#!/usr/bin/python3
/usr/share/recoll/filters/recoll-we-move-files.py:#!/usr/bin/python3
/usr/share/recoll/filters/xls-dump.py:#!/usr/bin/python3
/usr/share/recoll/filters/xlsxmltocsv.py:#!/usr/bin/python3

So, recoll in F30 is already fully migrated to Python3. The F31 builds can just drop /usr/lib/64/python2.7/site-packages/recoll* as no longer needed.

Comment 7 "FeRD" (Frank Dana) 2019-08-01 20:43:47 UTC
(In reply to "FeRD" (Frank Dana) from comment #6)
> All of the filters in /usr/share/recoll/filters/ use python3
> shebangs:

"...except hotrecoll.py." (I have no idea how I missed that one.)
 
> $ grep usr/bin/python /usr/share/recoll/filters/*
> /usr/share/recoll/filters/hotrecoll.py:#!/usr/bin/python2

The comments at the top of the file say:

# wnck does not have a python3 binding as far as I can see (or at
# least it's not packaged by, e.g. Debian. So python2 only for now.

So it sounds like that script will just have to be dropped when Python 2 goes away. (It's not a filter anyway, it's a hotkey-bindable control script for the Recoll GUI. So, no loss of Recoll functionality without it.)

Comment 8 Terje Røsten 2019-08-05 18:12:57 UTC
Python 2 deps has been removed from recoll package:
 https://src.fedoraproject.org/rpms/recoll/c/8d38facf90397231648ab49f2508bc566e2acd61?branch=master

Comment 9 Miro Hrončok 2019-08-05 21:59:09 UTC
Thank you.

I have noticed the build dependency is still there:

	
    BuildRequires:  python2-devel
    BuildRequires:  python2-setuptools


From this line it seems the Python 2 bits are built an removed:

    rm -rf %{buildroot}%{python2_sitearch}

Any chance to build entirely without Python 2?

Comment 10 Terje Røsten 2019-08-06 04:41:35 UTC
Yeah, this requires more work, need to patch the auto* generated files, will have  a look.

Comment 12 Miro Hrončok 2019-08-07 06:45:01 UTC
Thank You!

Comment 13 Terje Røsten 2019-08-08 15:19:01 UTC
*** Bug 1738807 has been marked as a duplicate of this bug. ***