Closed
Description
In the common case where your path entries are directories, pkg_resources
will find installed metadata from either .dist-info
or .egg-info
dirs. When zipimport is used, it only finds .dist-info
. I have a simple PR incoming, but here's info on the repro.
Start with an unpacked sdist:
[thatch@laptop ~]$ cd $(mktemp -d)
[thatch@laptop tmp.w7h4GsxPI5]$ wget https://files.pythonhosted.org/packages/bc/ef/d6c26f40a7636f43a52c9719f9d8228f08e01187081e5891702ea0754060/parameterized-0.7.4.tar.gz
[thatch@laptop tmp.w7h4GsxPI5]$ tar -xvzf parameterized-0.7.4.tar.gz
parameterized-0.7.4/
parameterized-0.7.4/PKG-INFO
parameterized-0.7.4/parameterized.egg-info/
parameterized-0.7.4/parameterized.egg-info/PKG-INFO
parameterized-0.7.4/parameterized.egg-info/SOURCES.txt
parameterized-0.7.4/parameterized.egg-info/pbr.json
parameterized-0.7.4/parameterized.egg-info/requires.txt
parameterized-0.7.4/parameterized.egg-info/top_level.txt
parameterized-0.7.4/parameterized.egg-info/dependency_links.txt
parameterized-0.7.4/parameterized/
parameterized-0.7.4/parameterized/__init__.py
parameterized-0.7.4/parameterized/test.py
parameterized-0.7.4/parameterized/parameterized.py
parameterized-0.7.4/.hgignore
parameterized-0.7.4/setup.py
parameterized-0.7.4/.gitignore
parameterized-0.7.4/tox.ini
parameterized-0.7.4/CHANGELOG.txt
parameterized-0.7.4/setup.cfg
parameterized-0.7.4/README.rst
parameterized-0.7.4/LICENSE.txt
parameterized-0.7.4/.travis.yml
parameterized-0.7.4/misspelling-helper/
parameterized-0.7.4/misspelling-helper/nose-parametrized/
parameterized-0.7.4/misspelling-helper/nose-parametrized/MANIFEST
parameterized-0.7.4/misspelling-helper/nose-parametrized/setup.py
If you add such a dir to the path, it works as-is:
[thatch@laptop tmp.w7h4GsxPI5]$ PYTHONPATH=parameterized-0.7.4 python -c 'import parameterized, pkg_resources; print(parameterized.__file__); print(pkg_resources.get_distribution("parameterized"))'
/tmp/tmp.w7h4GsxPI5/parameterized-0.7.4/parameterized/__init__.py
parameterized 0.7.4
But if we construct a zip and put that on the path:
[thatch@laptop tmp.w7h4GsxPI5]$ (cd parameterized-0.7.4; zip -r ../parameterized.zip *)
adding: CHANGELOG.txt (deflated 64%)
adding: LICENSE.txt (deflated 47%)
adding: misspelling-helper/ (stored 0%)
adding: misspelling-helper/nose-parametrized/ (stored 0%)
adding: misspelling-helper/nose-parametrized/setup.py (deflated 48%)
adding: misspelling-helper/nose-parametrized/MANIFEST (stored 0%)
adding: parameterized/ (stored 0%)
adding: parameterized/__pycache__/ (stored 0%)
adding: parameterized/__pycache__/parameterized.cpython-38.pyc (deflated 56%)
adding: parameterized/__pycache__/__init__.cpython-38.pyc (deflated 31%)
adding: parameterized/parameterized.py (deflated 70%)
adding: parameterized/test.py (deflated 80%)
adding: parameterized/__init__.py (deflated 38%)
adding: parameterized.egg-info/ (stored 0%)
adding: parameterized.egg-info/dependency_links.txt (stored 0%)
adding: parameterized.egg-info/top_level.txt (stored 0%)
adding: parameterized.egg-info/requires.txt (stored 0%)
adding: parameterized.egg-info/pbr.json (stored 0%)
adding: parameterized.egg-info/SOURCES.txt (deflated 56%)
adding: parameterized.egg-info/PKG-INFO (deflated 79%)
adding: PKG-INFO (deflated 79%)
adding: README.rst (deflated 74%)
adding: setup.cfg (deflated 7%)
adding: setup.py (deflated 49%)
adding: tox.ini (deflated 61%)
[thatch@laptop tmp.w7h4GsxPI5]$ PYTHONPATH=parameterized.zip python -c 'import parameterized, pkg_resources; print(parameterized.__file__); print(pkg_resources.get_distribution("parameterized"))'
/tmp/tmp.w7h4GsxPI5/parameterized.zip/parameterized/__init__.py
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 481, in get_distribution
dist = get_provider(dist)
File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 357, in get_provider
return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 900, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 786, in resolve
raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'parameterized' distribution was not found and is required by the application
Now a try with the upcoming PR:
[thatch@laptop tmp.w7h4GsxPI5]$ . ~/code/setuptools/.venv/bin/activate
(.venv) [thatch@laptop tmp.w7h4GsxPI5]$ PYTHONPATH=parameterized.zip python -c 'import parameterized, pkg_resources; print(parameterized.__file__); print(pkg_resources.get_distribution("parameterized"))'
/tmp/tmp.w7h4GsxPI5/parameterized.zip/parameterized/__init__.py
parameterized 0.7.4
Metadata
Metadata
Assignees
Labels
No labels