Commit da1c78f3 authored by Benoit Pierre's avatar Benoit Pierre

fix namespace packages handling of wheels

parent b066b290
v38.2.2
-------
* #1214: fix handling of namespace packages when installing
from a wheel.
v38.2.1 v38.2.1
------- -------
......
...@@ -412,6 +412,38 @@ WHEEL_INSTALL_TESTS = ( ...@@ -412,6 +412,38 @@ WHEEL_INSTALL_TESTS = (
), ),
), ),
dict(
id='namespace_package',
file_defs={
'foo': {
'bar': {
'__init__.py': ''
},
},
},
setup_kwargs=dict(
namespace_packages=['foo'],
packages=['foo.bar'],
),
install_tree=DALS(
'''
foo-1.0-py{py_version}.egg/
|-- foo-1.0-py{py_version}-nspkg.pth
|-- EGG-INFO/
| |-- DESCRIPTION.rst
| |-- PKG-INFO
| |-- RECORD
| |-- WHEEL
| |-- metadata.json
| |-- namespace_packages.txt
| |-- top_level.txt
|-- foo/
| |-- __init__.py
| |-- bar/
| | |-- __init__.py
'''),
),
) )
@pytest.mark.parametrize( @pytest.mark.parametrize(
......
...@@ -20,6 +20,13 @@ WHEEL_NAME = re.compile( ...@@ -20,6 +20,13 @@ WHEEL_NAME = re.compile(
)\.whl$""", )\.whl$""",
re.VERBOSE).match re.VERBOSE).match
NAMESPACE_PACKAGE_INIT = '''\
try:
__import__('pkg_resources').declare_namespace(__name__)
except ImportError:
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
'''
class Wheel(object): class Wheel(object):
...@@ -124,3 +131,14 @@ class Wheel(object): ...@@ -124,3 +131,14 @@ class Wheel(object):
os.rmdir(subdir) os.rmdir(subdir)
if os.path.exists(dist_data): if os.path.exists(dist_data):
os.rmdir(dist_data) os.rmdir(dist_data)
# Fix namespace packages.
namespace_packages = os.path.join(egg_info, 'namespace_packages.txt')
if os.path.exists(namespace_packages):
with open(namespace_packages) as fp:
namespace_packages = fp.read().split()
for mod in namespace_packages:
mod_dir = os.path.join(destination_eggdir, *mod.split('.'))
mod_init = os.path.join(mod_dir, '__init__.py')
if os.path.exists(mod_dir) and not os.path.exists(mod_init):
with open(mod_init, 'w') as fp:
fp.write(NAMESPACE_PACKAGE_INIT)
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