[New-bugs-announce] [issue19352] unittest loader barfs on symlinks

Antoine Pitrou report at bugs.python.org
Tue Oct 22 16:32:55 CEST 2013

New submission from Antoine Pitrou:

unittest.loader has the following snippet:

                    if realpath.lower() != fullpath_noext.lower():
                        module_dir = os.path.dirname(realpath)
                        mod_name = os.path.splitext(os.path.basename(full_path))[0]
                        expected_dir = os.path.dirname(full_path)
                        msg = ("%r module incorrectly imported from %r. Expected %r. "
                               "Is this module globally installed?")

Unfortunately, this will break with virtualenv on Ubuntu, which creates
a "local" directory full of symlinks. You end with this kind of error message:

ERROR: __main__ (unittest.loader.LoadTestsFailure)
ImportError: 'test_asyncagi' module incorrectly imported from '/home/antoine/obelus/.tox/py27/local/lib/python2.7/site-packages/obelus/test'. Expected '/home/antoine/obelus/.tox/py27/lib/python2.7/site-packages/obelus/test'. Is this module globally installed?

Instead of (rather stupidly) calling lower(), realpath() and normcase()
should be called instead, to make sure the canonical paths are compared.

components: Library (Lib)
messages: 200964
nosy: barry, michael.foord, pitrou
priority: normal
severity: normal
stage: needs patch
status: open
title: unittest loader barfs on symlinks
type: behavior
versions: Python 2.7, Python 3.3, Python 3.4

Python tracker <report at bugs.python.org>

More information about the New-bugs-announce mailing list