Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 567110 - app-portage/elogviewer-2.6 : ImportError: cannot import name 'QtGui'
Summary: app-portage/elogviewer-2.6 : ImportError: cannot import name 'QtGui'
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Paul Varner (RETIRED)
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-11-29 18:40 UTC by Toralf Förster
Modified: 2015-12-02 18:26 UTC (History)
2 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments
app-portage:elogviewer-2.6:20151129-111606.log (app-portage:elogviewer-2.6:20151129-111606.log,3.32 KB, text/plain)
2015-11-29 18:40 UTC, Toralf Förster
Details
emerge-history.txt (emerge-history.txt,285.98 KB, text/plain)
2015-11-29 18:41 UTC, Toralf Förster
Details
environment (environment,135.16 KB, text/plain)
2015-11-29 18:41 UTC, Toralf Förster
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Toralf Förster gentoo-dev 2015-11-29 18:40:55 UTC
 * python3_4: running distutils-r1_run_phase distutils-r1_python_compile
/usr/bin/python3.4 setup.py build
Traceback (most recent call last):
  File "/var/tmp/portage/app-portage/elogviewer-2.6/work/elogviewer-2.6/elogviewer.py", line 64, in <module>
    from PyQt5 import QtGui, QtWidgets, QtCore
ImportError: cannot import name 'QtGui'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "setup.py", line 8, in <module>


$ cat ./info.txt
  -----------------------------------------------------------------

  This is an unstable amd64 chroot image (named amd64-13.0-unstable_20151122-175602) at a hardened host acting as a tinderbox.

  -----------------------------------------------------------------

  Portage 2.2.26 (python 2.7.10-final-0, default/linux/amd64/13.0, gcc-4.9.3, glibc-2.22-r1, 4.1.7-hardened-r1 x86_64)
=================================================================
System uname: Linux-4.1.7-hardened-r1-x86_64-Intel-R-_Core-TM-_i7-3770_CPU_@_3.40GHz-with-gentoo-2.2
KiB Mem:    16164644 total,   1549116 free
KiB Swap:          0 total,         0 free
Timestamp of repository gentoo: Sun, 29 Nov 2015 09:41:52 +0000
sh bash 4.3_p42
ld GNU ld (Gentoo 2.25.1 p1.1) 2.25.1
ccache version 3.2.4 [disabled]
app-shells/bash:          4.3_p42::gentoo
dev-java/java-config:     2.2.0::gentoo
dev-lang/perl:            5.22.0::gentoo
dev-lang/python:          2.7.10-r3::gentoo, 3.3.5-r2::gentoo, 3.4.3-r2::gentoo, 3.5.0-r1::gentoo
dev-util/ccache:          3.2.4::gentoo
dev-util/cmake:           3.4.0-r1::gentoo
sys-apps/baselayout:      2.2::gentoo
sys-apps/openrc:          0.18.3::gentoo
sys-apps/sandbox:         2.9::gentoo
sys-devel/autoconf:       2.13::gentoo, 2.69-r1::gentoo
sys-devel/automake:       1.9.6-r4::gentoo, 1.10.3-r1::gentoo, 1.11.6-r1::gentoo, 1.13.4::gentoo, 1.14.1::gentoo, 1.15::gentoo
sys-devel/binutils:       2.25.1-r1::gentoo
sys-devel/gcc:            4.2.4-r1::gentoo, 4.9.3::gentoo
sys-devel/gcc-config:     1.8::gentoo
sys-devel/libtool:        2.4.6-r1::gentoo
sys-devel/make:           4.1-r1::gentoo
sys-kernel/linux-headers: 4.3::gentoo (virtual/os-headers)
sys-libs/glibc:           2.22-r1::gentoo
Repositories:

gentoo
    location: /usr/portage
    sync-type: rsync
    sync-uri: rsync://rsync.gentoo.org/gentoo-portage
    priority: 1

local
    location: /usr/local/portage
    masters: gentoo
    priority: 2

ACCEPT_KEYWORDS="amd64 ~amd64"
ACCEPT_LICENSE="*"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-march=native -O2 -pipe"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/easy-rsa /usr/share/gnupg/qualified.txt /var/lib/i2pd/certificates /var/rancid/.cloginrc /var/yp/Makefile"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php5.5/ext-active/ /etc/php/apache2-php5.6/ext-active/ /etc/php/cgi-php5.5/ext-active/ /etc/php/cgi-php5.6/ext-active/ /etc/php/cli-php5.5/ext-active/ /etc/php/cli-php5.6/ext-active/ /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c"
CXXFLAGS="-march=native -O2 -pipe"
DISTDIR="/var/tmp/distfiles"
EMERGE_DEFAULT_OPTS="--deep --color=n --nospinner --tree --quiet-build --accept-properties=-interactive --accept-restrict=-fetch"
FCFLAGS="-O2 -pipe"
FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles ipc-sandbox merge-sync network-sandbox news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="http://ftp.uni-erlangen.de/pub/mirrors/gentoo rsync://mirror.netcologne.de/gentoo/ ftp://sunsite.informatik.rwth-aachen.de/pub/Linux/gor.bytemark.co.uk/gentoo/ rsync://ftp.snt.utwente.nl/gentoo"
LANG="en_US.utf8"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
MAKEOPTS="-j1"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"
PORTAGE_TMPDIR="/var/tmp"
USE="X acl adns amd64 apache2 avx berkdb btrfs bzip2 cdb cgoups clang cli cracklib crypt custom-cflags cxx designer dri egl eglfs extraengine fontconfig fortran gdbm gif gnuplot hdf5 hpn iconv icu introspection ipv6 javafx javaxml jpeg ldap mbox mmx mmxext mng modules mssql multilib multimedia ncurses nls nptl obj objc ogg openexr openmp pam pax_kernel pcre pdo postgres qt3support readline scrypt sddm seccomp semantic-desktop session sqlite3 sse sse2 sse4_1 ssl system-libvpx system-sqlite tcl tcpd tk tls unicode usb uxa v4l wxwidgets xattr xml xmp xvmc zlib" ABI_X86="64" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="aes avx mmx mmxext popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ublox ubx" INPUT_DEVICES="keyboard mouse evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LINGUAS="en en_GB" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-5" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_4" RUBY_TARGETS="ruby20 ruby21" USERLAND="GNU" VIDEO_CARDS="fbdev glint intel mach64 mga nouveau nv r128 radeon savage sis tdfx trident vesa via vmware dummy v4l" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset:  CC, CPPFLAGS, CTARGET, CXX, INSTALL_MASK, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, USE_PYTHON
Comment 1 Toralf Förster gentoo-dev 2015-11-29 18:40:57 UTC
Created attachment 418154 [details]
app-portage:elogviewer-2.6:20151129-111606.log
Comment 2 Toralf Förster gentoo-dev 2015-11-29 18:41:00 UTC
Created attachment 418156 [details]
emerge-history.txt
Comment 3 Toralf Förster gentoo-dev 2015-11-29 18:41:02 UTC
Created attachment 418158 [details]
environment
Comment 4 Zac Medico gentoo-dev 2015-11-29 19:23:19 UTC
It looks like dev-python/PyQt5 is broken somehow. You should try to rebuild it.
Comment 5 Toralf Förster gentoo-dev 2015-11-30 13:13:55 UTC
(In reply to Zac Medico from comment #4)
> It looks like dev-python/PyQt5 is broken somehow. You should try to rebuild
> it.

Did it, biut same issue - me wonders if USE=egl could play here some role ? :

USE="
  mmx sse sse2
  pax_kernel -cdinstall -oci8 -systemd
  -bindist

  adns apache2 avx btrfs cdb cgoups clang -corefonts custom-cflags
  designer eglfs extraengine fontconfig gif gnuplot hdf5 hpn icu
  -imap -inifile introspection ipv6 javafx javaxml jpeg ldap mbox mng
  mssql multimedia obj objc ogg openexr pdo postgres qt3support
  scrypt sddm semantic-desktop -smartcard sqlite3 sse4_1
  system-libvpx system-sqlite tcl tk tls -truetype usb uxa v4l -v4l2
  -video -widgets wxwidgets -x264 -xa xml xmp -xscreensaver xvmc

  X egl
"
Comment 6 Paul Varner (RETIRED) gentoo-dev 2015-11-30 17:06:07 UTC
What USE flags are set for the installed PyQt5?
Comment 7 Toralf Förster gentoo-dev 2015-11-30 18:28:59 UTC
(In reply to Paul Varner from comment #6)
> What USE flags are set for the installed PyQt5?

...
dev-python/PyQt5-5.5.1::gentoo was built with the following:
USE="designer multimedia -dbus -debug -declarative -doc -examples -gles2 -gui -help -network -opengl -positioning -printsupport -sensors -serialport -sql -svg -testlib -webchannel -webkit -websockets -widgets -x11extras -xmlpatterns" ABI_X86="64" PYTHON_TARGETS="python2_7 python3_4 -python3_3 -python3_5"
Comment 8 Paul Varner (RETIRED) gentoo-dev 2015-11-30 19:26:28 UTC
Okay, PyQt5 needs to be built with gui and widgets enabled in order to work with elogviewer.

This is currently in the RDEPEND of the ebuild:

RDEPEND="|| (
        dev-python/PyQt5[gui,widgets,${PYTHON_USEDEP}]
        dev-python/PyQt4[${PYTHON_USEDEP},X]
        dev-python/pyside[${PYTHON_USEDEP},X] )

The problem is that any of those deps satisfy the requirements of the software.

In your case because PyQt4 is installed, that satisfies the dependency requirement for the ebuild.  However, since PyQt5 is also installed, it is trying to load the appropriate modules from it first and partially failing, It is the partial failure that is causing the problem when it tries to fallback to PyQt4. 

I can try to create a patch to "unload" the PyQt5 imports in the case of a failure, but to my knowledge, Python has never truly supported unloading something once it is loaded.  

Zac, is there anyway to keep the runtime dependency so that any of the 3 options satisfy it, but if PyQt5 is installed, then it has been installed or is needs to be reinstalled with the correct USE flags?

Mathias, I'm adding you to the CC list as you may have some ideas on how to handle this better when elogviewer is imported in setup.py
Comment 9 Zac Medico gentoo-dev 2015-11-30 19:49:27 UTC
(In reply to Paul Varner from comment #8)
> Zac, is there anyway to keep the runtime dependency so that any of the 3
> options satisfy it, but if PyQt5 is installed, then it has been installed or
> is needs to be reinstalled with the correct USE flags?

How about if we use a conditional blocker? For example:

    qt5? ( !dev-python/PyQt5[-gui,-widgets] )
Comment 10 Zac Medico gentoo-dev 2015-11-30 19:51:02 UTC
(In reply to Zac Medico from comment #9)
> (In reply to Paul Varner from comment #8)
> > Zac, is there anyway to keep the runtime dependency so that any of the 3
> > options satisfy it, but if PyQt5 is installed, then it has been installed or
> > is needs to be reinstalled with the correct USE flags?
> 
> How about if we use a conditional blocker? For example:
> 
>     qt5? ( !dev-python/PyQt5[-gui,-widgets] )

Actually, it would have to be like this in order to guarantee that it works correctly:

    qt5? (
        !dev-python/PyQt5[-gui]
        !dev-python/PyQt5[-widgets]
    )
Comment 11 Paul Varner (RETIRED) gentoo-dev 2015-11-30 20:34:16 UTC
I'm not sure introducing the qt5 USE flag would work either.  Someone could have it set as -qt5 and still have PyQt5 installed without the appropriate USE flags.  This is the try block in the upstream code:

try:
    import sip
except ImportError:
    from PySide import QtGui, QtCore
    QtCore.QSortFilterProxyModel = QtGui.QSortFilterProxyModel
    QtWidgets = QtGui
else:
    try:
        from PyQt5 import QtGui, QtWidgets, QtCore
    except ImportError:
        for type in "QDate QDateTime QString QVariant".split():
            sip.setapi(type, 2)
        from PyQt4 import QtGui, QtCore
        QtCore.QSortFilterProxyModel = QtGui.QSortFilterProxyModel
        QtWidgets = QtGui
        del type
    finally:
        del sip

The code is written to work with any of the 3 dependencies, but it definitely has an implicit assumption that PyQt4 and PyQt5 will not be installed at the same time or if they are installed together, then PyQt5 was built with the needed USE flags.

I'm not sure how to fix that on the Python side.  If PyQt5 is installed, then it is going to try to use it first and I'm not seeing a clean way to enforce the needed USE flags and keep the any of many conditional dependency.  I can see that trying to force one or the other will cause blockers for other software.
Comment 12 Zac Medico gentoo-dev 2015-11-30 21:00:15 UTC
(In reply to Paul Varner from comment #11)
Since the code simply does not handle the case where dev-python/PyQt5 has incorrect USE settings, the ebuild should unconditionally block PyQt5 built with the wrong use settings:

   !dev-python/PyQt5[-gui] !dev-python/PyQt5[-widgets]
Comment 13 Paul Varner (RETIRED) gentoo-dev 2015-11-30 21:41:05 UTC
That works perfect even though it is a hard blocker. Thank you, Zac!

I will revbump the ebuild and ask for early stablization since the upstream code is unchanged
Comment 14 Paul Varner (RETIRED) gentoo-dev 2015-12-02 18:26:00 UTC
I have bumped elogviewer to app-portage/elogviewer-2.6-r1 with the correct ebuild dependencies.  I will ask for stabilization and remove app-portage/elogviewer-2.6 once that has occurred.