Skip to content

Configuration.add_subpackage fails on Python 3.4 #8147

@jjhelmus

Description

@jjhelmus

Using numpy 1.11.2 and Python 3.4, trying to run a setupy.py script which uses subpackage using numpy.distutil fails when importlib.machinery cannot be found in the npy_load_module function.

For example using the following setup.py and foo/setup.py scripts:

# setup.py
from numpy.distutils.misc_util import Configuration
from numpy.distutils.core import setup

def configuration():
    config = Configuration(None, '', None)
    config.add_subpackage('foo')
    return config

setup(configuration=configuration)
# foo/setup.py
def configuration(parent_package='', top_path=None):
    from numpy.distutils.misc_util import Configuration
    config = Configuration('foo', parent_package, top_path)
    return config

Attempting to build the package:

$ python setup.py build_ext -i
Traceback (most recent call last):
  File "setup.py", line 10, in <module>
    setup(configuration=configuration)
  File "/Users/jhelmus/anaconda/envs/py34/lib/python3.4/site-packages/numpy/distutils/core.py", line 135, in setup
    config = configuration()
  File "setup.py", line 7, in configuration
    config.add_subpackage('foo')
  File "/Users/jhelmus/anaconda/envs/py34/lib/python3.4/site-packages/numpy/distutils/misc_util.py", line 1000, in add_subpackage
    caller_level = 2)
  File "/Users/jhelmus/anaconda/envs/py34/lib/python3.4/site-packages/numpy/distutils/misc_util.py", line 969, in get_subpackage
    caller_level = caller_level + 1)
  File "/Users/jhelmus/anaconda/envs/py34/lib/python3.4/site-packages/numpy/distutils/misc_util.py", line 882, in _get_configuration_from_setup_py
    ('.py', 'U', 1))
  File "/Users/jhelmus/anaconda/envs/py34/lib/python3.4/site-packages/numpy/compat/py3k.py", line 112, in npy_load_module
    return importlib.machinery.SourceFileLoader(name, fn).load_module()
AttributeError: 'module' object has no attribute 'machinery'

This works in Python 3.5 and 2.7 and with earlier versions of NumPy prior to the addition of npy_load_module.

This bug can likely be fixed by adding import importlib to the npy_load_module. I will submit a PR shortly.

A workaround is to import importlib.machinery somewhere in the root setup.py file.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions