Issue #24285: fix importing extensions from packages

This commit is contained in:
Nick Coghlan 2015-05-26 21:48:17 +10:00
parent 6f68314b2a
commit 55871f04bf
3 changed files with 13 additions and 2 deletions

View File

@ -170,6 +170,13 @@ class MultiPhaseExtensionModuleTests(abc.LoaderTests):
loader.exec_module(module)
return module
def test_load_submodule(self):
'''Test loading a simulated submodule'''
module = self.load_module_by_name('pkg.' + self.name)
self.assertIsInstance(module, types.ModuleType)
self.assertEqual(module.__name__, 'pkg.' + self.name)
self.assertEqual(module.str_const, 'something different')
def test_load_twice(self):
'''Test that 2 loads result in 2 module objects'''
module1 = self.load_module_by_name(self.name)

View File

@ -10,6 +10,9 @@ Release date: 2015-07-05
Core and Builtins
-----------------
- Issue #24285: Fixed regression that prevented importing extension modules
from inside packages. Patch by Petr Viktorin.
Library
-------
@ -24,7 +27,8 @@ Core and Builtins
- Issue #24276: Fixed optimization of property descriptor getter.
- Issue #24268: PEP 489: Multi-phase extension module initialization
- Issue #24268: PEP 489: Multi-phase extension module initialization.
Patch by Petr Viktorin.
- Issue #23955: Add pyvenv.cfg option to suppress registry/environment
lookup for generating sys.path on Windows.

View File

@ -45,7 +45,7 @@ get_encoded_name(PyObject *name, const char **hook_prefix) {
if (lastdot < -1) {
return NULL;
} else if (lastdot >= 0) {
tmp = PyUnicode_Substring(name, lastdot, name_len);
tmp = PyUnicode_Substring(name, lastdot + 1, name_len);
if (tmp == NULL)
return NULL;
name = tmp;