diff -r 9c96c3adbcd1 -r 8b9da1557ad2 Lib/packaging/config.py --- a/Lib/packaging/config.py Sat Jun 18 20:21:09 2011 -0400 +++ b/Lib/packaging/config.py Sun Jun 19 15:43:53 2011 +0100 @@ -134,15 +134,20 @@ if 'setup_hooks' in content['global']: setup_hooks = split_multiline(content['global']['setup_hooks']) - for line in setup_hooks: - try: - hook = resolve_name(line) - except ImportError as e: - logger.warning('cannot find setup hook: %s', e.args[0]) - else: - self.setup_hooks.append(hook) - - self.run_hooks(content) + # Issue #11637: ensure the project folder is in the path + # while resolving hooks. + sys.path.insert(0, cfg_directory) + try: + for line in setup_hooks: + try: + hook = resolve_name(line) + except ImportError as e: + logger.warning('cannot find setup hook: %s', e.args[0]) + else: + self.setup_hooks.append(hook) + self.run_hooks(content) + finally: + sys.path.pop(0) metadata = self.dist.metadata diff -r 9c96c3adbcd1 -r 8b9da1557ad2 Lib/packaging/tests/test_config.py --- a/Lib/packaging/tests/test_config.py Sat Jun 18 20:21:09 2011 -0400 +++ b/Lib/packaging/tests/test_config.py Sun Jun 19 15:43:53 2011 +0100 @@ -126,6 +126,14 @@ """ +LOGGING_HOOK = r''' +import logging + +logger = logging.getLogger('packaging') + +def logging_hook(*args, **kwargs): + logger.warning('logging_hook called: %s, %s, %s', __name__, args, kwargs) +''' class DCompiler: name = 'd' @@ -348,6 +356,16 @@ self.assertEqual(1, len(logs)) self.assertIn('cannot find setup hook', logs[0]) + def test_project_setup_hook_works(self): + self.write_setup({'setup-hooks': 'hooks.logging_hook'}) + self.write_file('README', 'yeah') + self.write_file('hooks.py', LOGGING_HOOK) + dist = self.get_dist() + logs = self.get_logs(logging.WARNING) + self.assertEqual(1, len(logs)) + self.assertIn('logging_hook called: hook', logs[0]) + self.assertIn('hooks', sys.modules) + def test_metadata_requires_description_files_missing(self): self.write_setup({'description-file': 'README README2'}) self.write_file('README', 'yeah')