#2436 closed defect (fixed)

"tahoe --version" shouldn't show scary diagnostic warnings

Reported by: warner Owned by: daira
Priority: normal Milestone: 1.10.2
Component: packaging Version: 1.10.0
Keywords: error packaging setuptools Cc:
Launchpad Bug:

Description

It is very common for tahoe --version to report diagnostics warnings about the difference between what pkg_resources claims to provide, and what the actual imported modules (and their __version__) reports. These warnings have convinced several users that their tahoe installation has failed, when in fact everything will would work normally apart from those warnings.

Zooko and I agreed on IRC to change tahoe --version to report the versions of Tahoe itself and its dependencies (foolscap, pycryptopp, etc), but to remove the import-vs-pkg_resources warnings. We'll add a separate tahoe debug versions command that emits complete diagnostics.

For reference, this is what the problematic output looks like:

% bin/tahoe -V
allmydata-tahoe: 1.10.0
foolscap: 0.8.0
pycryptopp: 0.6.0.1206569328141510525648634803928199668821045408958
zfec: 1.4.24
Twisted: 13.0.0
Nevow: 0.11.1
zope.interface: unknown
python: 2.7.9
platform: Linux-fedora_22-x86_64-64bit_ELF
pyOpenSSL: 0.14
simplejson: 3.7.2
pycrypto: 2.6.1
pyasn1: 0.1.7
mock: 1.0.1
setuptools: 0.6c16dev4

Warning: dependency 'pycparser' (version '2.10') found by pkg_resources not found by import.
Warning: dependency 'six' (version '1.9.0') found by pkg_resources not found by import.
Warning: dependency 'cryptography' (version '0.8.2') found by pkg_resources not found by import.
Warning: dependency 'cffi' (version '0.8.6') found by pkg_resources not found by import.
Warning: dependency 'pyasn1-modules' (version '0.0.5') found by pkg_resources not found by import.
Warning: dependency 'enum34' (version '1.0') found by pkg_resources not found by import.
Warning: dependency 'characteristic' (version '14.3.0') found by pkg_resources not found by import.
Warning: dependency 'service-identity' (version '14.0.0') found by pkg_resources not found by import.

For debugging purposes, the PYTHONPATH was
  '/home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages'
install_requires was
  ['setuptools >= 0.6c6', 'zfec >= 1.1.0', 'simplejson >= 1.4', 'zope.interface == 3.6.0, == 3.6.1, == 3.6.2, >= 3.6.5', 'Twisted >= 11.0.0', 'foolscap >= 0.6.3', 'pyOpenSSL', 'Nevow >= 0.6.0', 'pycrypto == 2.1.0, == 2.3, >= 2.4.1', 'pyasn1 >= 0.0.8a', 'mock >= 0.8.0', 'pycryptopp >= 0.6.0']
sys.path after importing pkg_resources was
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/bin:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages/setuptools-0.6c16dev4.egg:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/src:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages/pycryptopp-0.6.0.1206569328141510525648634803928199668821045408958-py2.7-linux-x86_64.egg:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages/mock-1.0.1-py2.7.egg:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages/Nevow-0.11.1-py2.7.egg:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages/foolscap-0.8.0-py2.7.egg:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages/zfec-1.4.24-py2.7-linux-x86_64.egg:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages/service_identity-14.0.0-py2.7.egg:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages/pyutil-2.0.0-py2.7.egg:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages/pyasn1_modules-0.0.5-py2.7.egg:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages/characteristic-14.3.0-py2.7.egg:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages/zbase32-1.1.5-py2.7.egg:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages/Twisted-13.0.0-py2.7-linux-x86_64.egg:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages/zope.interface-4.1.2-py2.7-linux-x86_64.egg:
  /home/olabini/workspace/SPEAR/tahoe/allmydata-tahoe-1.10.0/support/lib/python2.7/site-packages:
  /usr/lib64/python27.zip:
  /usr/lib64/python2.7:
  /usr/lib64/python2.7/plat-linux2:
  /usr/lib64/python2.7/lib-tk:
  /usr/lib64/python2.7/lib-old:
  /usr/lib64/python2.7/lib-dynload:
  /usr/lib64/python2.7/site-packages:
  /usr/lib64/python2.7/site-packages/gst-0.10:
  /usr/lib64/python2.7/site-packages/gtk-2.0:
  /usr/lib/python2.7/site-packages

The output is large enough that, depending upon the size of your screen, you may wind up with the scary "Warning:... not found by import" lines at the top of the screen, which sounds an awful lot like an ImportError.

Change History (18)

comment:1 Changed at 2015-05-29T14:53:59Z by zooko

On IRC Daira said that she thinks all of the warnings shown in the user-supplied output above have been fixed in trunk. I'll ask the user to try the 10.1a1post9 tarball.

comment:2 Changed at 2015-05-29T15:05:50Z by zooko

https://twitter.com/olabini/status/604300869832597504

"the printing of sys.path REALLY looks like a stack trace btw."

I think a lesson here is never to show output to a user that looks like a stack trace, i.e. has a list of lines where the beginning of each line is a filename/pathname. I've seen this before: if a user sees something that looks like a stack trace, they immediately avert their gaze and assume that the software is malfunctioning.

comment:3 Changed at 2015-05-29T19:11:15Z by warner

What if tahoe --version emitted just the versions and a single line that said "warning: not all dependency versions matched expectations. Run 'tahoe debug versions' for more info." ? And then we move all that other (scary) stuff to the other command?

comment:4 Changed at 2015-06-01T05:34:22Z by warner

  • Milestone changed from 1.10.1 to 1.11.0

Moving this out of 1.10.1, insufficient consensus to make a last-minute change.

comment:5 Changed at 2015-07-17T21:41:02Z by daira

  • Milestone changed from 1.11.0 to 1.10.2

comment:6 Changed at 2015-07-17T21:43:06Z by daira

The issue I have with not displaying a warning is that the printed versions may not be correct. However, I'm okay with printing a short warning on the line that displays each offending version (in the "comment" field), and suppressing the long debugging information in cases where that is the only problem.

Last edited at 2015-07-17T21:43:50Z by daira (previous) (diff)

comment:7 Changed at 2015-07-17T21:49:10Z by daira

So in the example in the description, for instance, the output would be:

allmydata-tahoe: 1.10.0
foolscap: 0.8.0
pycryptopp: 0.6.0.1206569328141510525648634803928199668821045408958
zfec: 1.4.24
Twisted: 13.0.0
Nevow: 0.11.1
zope.interface: unknown
python: 2.7.9
platform: Linux-fedora_22-x86_64-64bit_ELF
pyOpenSSL: 0.14
simplejson: 3.7.2
pycrypto: 2.6.1
pyasn1: 0.1.7
mock: 1.0.1
setuptools: 0.6c16dev4
pycparser: 2.10 [according to pkg_resources]
six: 1.9.0 [according to pkg_resources]
cryptography: 0.8.2 [according to pkg_resources]
cffi: 0.8.6 [according to pkg_resources]
pyasn1-modules: 0.0.5 [according to pkg_resources]
enum34: 1.0 [according to pkg_resources]
characteristic: 14.3.0 [according to pkg_resources]
service-identity: 14.0.0 [according to pkg_resources]

comment:8 Changed at 2015-07-17T21:51:23Z by daira

  • Component changed from code to packaging
  • Keywords error packaging setuptools zookos-opinion-needed warners-opinion-needed added
  • Owner set to warner

comment:9 Changed at 2015-07-17T23:32:32Z by warner

That sounds like a good compromise to me. I think I'll use () instead of [].

comment:10 Changed at 2015-07-18T01:23:32Z by daira

[] is already used for comments; () is used for paths when --version-and-path is given. I want the output to remain consistently parsable.

comment:11 Changed at 2015-07-21T17:57:00Z by daira

  • Keywords review-needed added; zookos-opinion-needed warners-opinion-needed removed

comment:12 Changed at 2015-07-21T17:57:55Z by zooko

  • Owner changed from warner to zooko
  • Status changed from new to assigned

comment:13 Changed at 2015-07-21T17:59:34Z by Daira Hopwood <daira@…>

  • Resolution set to fixed
  • Status changed from assigned to closed

In 431728f8f854e02d9ab2f731675f12ce18cda122/trunk:

Don't show scary diagnostic warnings from --version[-and-path]
if the only problem is that extra packages are found by pkg_resources.
fixes ticket:2436

Signed-off-by: Daira Hopwood <daira@…>

comment:14 Changed at 2015-07-21T19:46:56Z by daira

  • Resolution fixed deleted
  • Status changed from closed to reopened

Oops, I just spotted a bug. get_package_versions_string extends _vers_and_locs_list each time it is called (assuming not hasattr(sys, 'frozen')), but it may be called more than once.

I will fix it.

comment:15 Changed at 2015-07-21T19:47:06Z by daira

  • Owner changed from zooko to daira
  • Status changed from reopened to new

comment:16 Changed at 2015-07-21T19:47:19Z by daira

  • Keywords review-needed removed
  • Status changed from new to assigned

comment:17 Changed at 2015-07-29T00:40:35Z by Daira Hopwood <daira@…>

In 2c99294a4faa0e0f94fdb53ed60954e1e0724955/trunk:

Don't show scary diagnostic warnings from --version[-and-path] (corrected). refs ticket:2436

The previous version would incorrectly add to the output of
get_package_versions_string each time it was called.

Signed-off-by: Daira Hopwood <daira@…>

comment:18 Changed at 2015-07-29T00:41:33Z by warner

  • Resolution set to fixed
  • Status changed from assigned to closed

Landed in 28399b6.

Note: See TracTickets for help on using tickets.