Skip to content

Commit 705d41e

Browse files
Merge pull request #1861 from benoit-pierre/fix_empty_namespace_package_wheel_install
Fix empty namespace package wheel install
2 parents 5af71d2 + 16a3ef9 commit 705d41e

File tree

3 files changed

+44
-6
lines changed

3 files changed

+44
-6
lines changed

changelog.d/1861.change.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix empty namespace package installation from wheel.

setuptools/tests/test_wheel.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,34 @@ def __repr__(self):
450450
}),
451451
),
452452

453+
dict(
454+
id='empty_namespace_package',
455+
file_defs={
456+
'foobar': {
457+
'__init__.py': "__import__('pkg_resources').declare_namespace(__name__)",
458+
},
459+
},
460+
setup_kwargs=dict(
461+
namespace_packages=['foobar'],
462+
packages=['foobar'],
463+
),
464+
install_tree=flatten_tree({
465+
'foo-1.0-py{py_version}.egg': [
466+
'foo-1.0-py{py_version}-nspkg.pth',
467+
{'EGG-INFO': [
468+
'PKG-INFO',
469+
'RECORD',
470+
'WHEEL',
471+
'namespace_packages.txt',
472+
'top_level.txt',
473+
]},
474+
{'foobar': [
475+
'__init__.py',
476+
]},
477+
]
478+
}),
479+
),
480+
453481
dict(
454482
id='data_in_package',
455483
file_defs={

setuptools/wheel.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Wheels support."""
22

33
from distutils.util import get_platform
4+
from distutils import log
45
import email
56
import itertools
67
import os
@@ -162,11 +163,17 @@ def raw_req(req):
162163
extras_require=extras_require,
163164
),
164165
)
165-
write_requirements(
166-
setup_dist.get_command_obj('egg_info'),
167-
None,
168-
os.path.join(egg_info, 'requires.txt'),
169-
)
166+
# Temporarily disable info traces.
167+
log_threshold = log._global_log.threshold
168+
log.set_threshold(log.WARN)
169+
try:
170+
write_requirements(
171+
setup_dist.get_command_obj('egg_info'),
172+
None,
173+
os.path.join(egg_info, 'requires.txt'),
174+
)
175+
finally:
176+
log.set_threshold(log_threshold)
170177

171178
@staticmethod
172179
def _move_data_entries(destination_eggdir, dist_data):
@@ -206,6 +213,8 @@ def _fix_namespace_packages(egg_info, destination_eggdir):
206213
for mod in namespace_packages:
207214
mod_dir = os.path.join(destination_eggdir, *mod.split('.'))
208215
mod_init = os.path.join(mod_dir, '__init__.py')
209-
if os.path.exists(mod_dir) and not os.path.exists(mod_init):
216+
if not os.path.exists(mod_dir):
217+
os.mkdir(mod_dir)
218+
if not os.path.exists(mod_init):
210219
with open(mod_init, 'w') as fp:
211220
fp.write(NAMESPACE_PACKAGE_INIT)

0 commit comments

Comments
 (0)