Kaydet (Commit) 69032c81 authored tarafından Andrew Svetlov's avatar Andrew Svetlov

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

Thanks to Armin Rigo and Alexey Kachayev.
üst 683b46aa
...@@ -216,6 +216,23 @@ class CmdLineTest(unittest.TestCase): ...@@ -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()
......
...@@ -587,6 +587,7 @@ Sijin Joseph ...@@ -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
......
...@@ -10,6 +10,9 @@ What's New in Python 3.4.0 Alpha 1? ...@@ -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.
......
...@@ -699,13 +699,11 @@ calculate_path(void) ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment