Issue #16309: Make PYTHONPATH= behavior the same as if PYTHONPATH not set at all.

Thanks to Armin Rigo and Alexey Kachayev.
This commit is contained in:
Andrew Svetlov 2012-11-03 13:52:58 +02:00
parent 683b46aa8d
commit 69032c81aa
4 changed files with 22 additions and 3 deletions

View file

@ -216,6 +216,23 @@ class CmdLineTest(unittest.TestCase):
self.assertIn(path1.encode('ascii'), out) self.assertIn(path1.encode('ascii'), out)
self.assertIn(path2.encode('ascii'), out) self.assertIn(path2.encode('ascii'), out)
def test_empty_PYTHONPATH_issue16309(self):
"""On Posix, it is documented that setting PATH to the
empty string is equivalent to not setting PATH at all,
which is an exception to the rule that in a string like
"/bin::/usr/bin" the empty string in the middle gets
interpreted as '.'"""
code = """if 1:
import sys
path = ":".join(sys.path)
path = path.encode("ascii", "backslashreplace")
sys.stdout.buffer.write(path)"""
rc1, out1, err1 = assert_python_ok('-c', code, PYTHONPATH="")
rc2, out2, err2 = assert_python_ok('-c', code)
# regarding to Posix specification, outputs should be equal
# for empty and unset PYTHONPATH
self.assertEquals(out1, out2)
def test_displayhook_unencodable(self): def test_displayhook_unencodable(self):
for encoding in ('ascii', 'latin-1', 'utf-8'): for encoding in ('ascii', 'latin-1', 'utf-8'):
env = os.environ.copy() env = os.environ.copy()

View file

@ -587,6 +587,7 @@ Sijin Joseph
Andreas Jung Andreas Jung
Tattoo Mabonzo K. Tattoo Mabonzo K.
Bohuslav Kabrda Bohuslav Kabrda
Alexey Kachayev
Bob Kahn Bob Kahn
Kurt B. Kaiser Kurt B. Kaiser
Tamito Kajiyama Tamito Kajiyama

View file

@ -10,6 +10,9 @@ What's New in Python 3.4.0 Alpha 1?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #16309: Make PYTHONPATH="" behavior the same as if PYTHONPATH
not set at all.
- Issue #10189: Improve the error reporting of SyntaxErrors related to global - Issue #10189: Improve the error reporting of SyntaxErrors related to global
and nonlocal statements. and nonlocal statements.

View file

@ -699,13 +699,11 @@ calculate_path(void)
*/ */
bufsz = 0; bufsz = 0;
if (_rtpypath) { if (_rtpypath && _rtpypath[0] != '\0') {
size_t rtpypath_len; size_t rtpypath_len;
rtpypath = _Py_char2wchar(_rtpypath, &rtpypath_len); rtpypath = _Py_char2wchar(_rtpypath, &rtpypath_len);
if (rtpypath != NULL) if (rtpypath != NULL)
bufsz += rtpypath_len + 1; bufsz += rtpypath_len + 1;
else
_rtpypath = NULL;
} }
defpath = _pythonpath; defpath = _pythonpath;