* 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
Created attachment 418154 [details] app-portage:elogviewer-2.6:20151129-111606.log
Created attachment 418156 [details] emerge-history.txt
Created attachment 418158 [details] environment
It looks like dev-python/PyQt5 is broken somehow. You should try to rebuild it.
(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 "
What USE flags are set for the installed PyQt5?
(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"
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
(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] )
(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] )
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.
(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]
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
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.