[New-bugs-announce] [issue23097] unittest can unnecessarily modify sys.path (and with the wrong case)
Chris Jerdonek
report at bugs.python.org
Sun Dec 21 09:42:19 CET 2014
New submission from Chris Jerdonek:
I have observed that when running unit tests using unittest's test discovery, unittest can simultaneously (1) modify sys.path unnecessarily (by adding a path that is already in sys.path with a different case), and (2) modify sys.path by adding a path of the "wrong" case.
This occurs for me on Mac OS X with the default case-insensitive file system.
If the path--
'/Users/chris/Dev/python/my_package'
is already in sys.path, running unittest's test discovery will prepend sys.path with the following:
'/Users/chris/dev/python/my_package'
Aside from causing unnecessary modifications of sys.path, this also causes an issue in coverage, for example:
https://bitbucket.org/ned/coveragepy/issue/348
The relevant code is here in unittest/loader.py (with `top_level_dir` starting out as os.curdir):
top_level_dir = os.path.abspath(top_level_dir)
if not top_level_dir in sys.path:
# all test modules must be importable from the top level directory
# should we *unconditionally* put the start directory in first
# in sys.path to minimise likelihood of conflicts between installed
# modules and development versions?
sys.path.insert(0, top_level_dir)
self._top_level_dir = top_level_dir
(from https://hg.python.org/cpython/file/75ede5bec8db/Lib/unittest/loader.py#l259 )
The issue occurs when os.path.abspath(top_level_dir) is already in sys.path but with a different case. (Note that if os.path.abspath() returned a path with the "right" case, then the unittest code would be okay.)
See also these two threads regarding obtaining the correct case for a path:
1. https://mail.python.org/pipermail/python-dev/2010-September/103823.html
2. https://mail.python.org/pipermail/python-ideas/2010-September/008153.html
----------
components: Library (Lib)
messages: 232993
nosy: chris.jerdonek
priority: normal
severity: normal
status: open
title: unittest can unnecessarily modify sys.path (and with the wrong case)
type: behavior
versions: Python 3.4, Python 3.5
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue23097>
_______________________________________
More information about the New-bugs-announce
mailing list