handling of extra_requires
scikit-image (https://pypi.python.org/pypi/scikit-image) depends on dask[array] (https://pypi.python.org/pypi/dask) (not visible on PyPI but this can be checked by installing in a clean venv). dask[array] itself depends on toolz and numpy.
pipdeptree does not realize this and considers toolz and numpy to not be dependents of anything after a clean install of scikit-image.
Sorry for replying so late, I missed this issue somehow. What do you mean by "not visible on PyPI"? pipdeptree internally calls functions in the pip and pkg_resources modules. Hence it can only identify dependencies that pip can.
PyPI shows the line
Requires matplotlib (>= 1.3.1), numpy (>= 1.7.2), scipy (>= 0.9.0), six (>= 1.7.3), networkx (>= 1.8), pillow (>= 2.1.0), dask (>= 0.5.0)
This dependency is visible at /usr/lib/python3.5/site-packages/scikit_image-0.12.3-py3.5.egg-info/requires.txt (or the equivalent on your OS), which contains the lines
six>=1.7.3
networkx>=1.8
pillow>=2.1.0
dask[array]>=0.5.0
pip does know about the dependency (well, it's able to resolve it...) but I'm not sure pip or pkg_resources expose it though...
Ok. I'll have a look at it. Thanks.
Looks like this is the same as pypa/pipenv#1013 See there for additional detail.
Looks like this is the same as pypa/pipenv#1013 See there for additional detail.
For future reference:
- This pipdeptree issue is not duplicated by that pipenv issue.
- The pipenv issue depends on this pipdeptree issue to solve the pipenv issue since pipenv depends on pipdeptree. (the pipenv issue is closed as "out of scope").
This should be no longer the case.
Hi, unfortunately, this seems to still be a problem.
To replicate this, I created a fresh virtualenv with just pipdeptree and django-import-export 3.2.0
django-import-export==3.2.0 depends on tablib[html,ods,xls,xlsx,yaml]>=3.4.0 in it's install_requires
tablib==3.5.0 depends on the following:
[project.optional-dependencies]
all = [
"markuppy",
"odfpy",
"openpyxl>=2.6.0",
"pandas",
"pyyaml",
"tabulate",
"xlrd",
"xlwt",
]
cli = ["tabulate"]
html = ["markuppy"]
ods = ["odfpy"]
pandas = ["pandas"]
xls = ["xlrd", "xlwt"]
xlsx = ["openpyxl>=2.6.0"]
yaml = ["pyyaml"]
Which can be seen in tablib-3.5.0-py3-none-any.whl/tablib-3.5.0.dist-info/METADATA as the following lines:
Provides-Extra: all
Requires-Dist: markuppy ; extra == 'all'
Requires-Dist: odfpy ; extra == 'all'
Requires-Dist: openpyxl (>=2.6.0) ; extra == 'all'
Requires-Dist: pandas ; extra == 'all'
Requires-Dist: pyyaml ; extra == 'all'
Requires-Dist: tabulate ; extra == 'all'
Requires-Dist: xlrd ; extra == 'all'
Requires-Dist: xlwt ; extra == 'all'
Provides-Extra: cli
Requires-Dist: tabulate ; extra == 'cli'
Provides-Extra: html
Requires-Dist: markuppy ; extra == 'html'
Provides-Extra: ods
Requires-Dist: odfpy ; extra == 'ods'
Provides-Extra: pandas
Requires-Dist: pandas ; extra == 'pandas'
Provides-Extra: xls
Requires-Dist: xlrd ; extra == 'xls'
Requires-Dist: xlwt ; extra == 'xls'
Provides-Extra: xlsx
Requires-Dist: openpyxl (>=2.6.0) ; extra == 'xlsx'
Provides-Extra: yaml
Requires-Dist: pyyaml ; extra == 'yaml'
Unfortunately, pipdeptree appears to be unable to find the dependency between `tablib` and it's optional dependencies
This is my pip freeze output:
(.venv) C:\Users\JayTurner\Desktop> pip freeze
asgiref==3.7.2
defusedxml==0.7.1
diff-match-patch==20230430
Django==4.2.7
django-import-export==3.2.0
et-xmlfile==1.1.0
MarkupPy==1.14
odfpy==1.4.1
openpyxl==3.1.2
pipdeptree==2.13.0
PyYAML==6.0.1
sqlparse==0.4.4
tablib==3.5.0
tzdata==2023.3
xlrd==2.0.1
xlwt==1.3.0
This is my pipdeptree output:
(.venv) C:\Users\JayTurner\Desktop> pipdeptree
django-import-export==3.2.0
├── diff-match-patch [required: Any, installed: 20230430]
├── Django [required: >=3.2, installed: 4.2.7]
│ ├── asgiref [required: >=3.6.0,<4, installed: 3.7.2]
│ ├── sqlparse [required: >=0.3.1, installed: 0.4.4]
│ └── tzdata [required: Any, installed: 2023.3]
└── tablib [required: >=3.4.0, installed: 3.5.0]
MarkupPy==1.14
odfpy==1.4.1
└── defusedxml [required: Any, installed: 0.7.1]
openpyxl==3.1.2
└── et-xmlfile [required: Any, installed: 1.1.0]
pip==23.2.1
pipdeptree==2.13.0
PyYAML==6.0.1
setuptools==65.5.0
xlrd==2.0.1
xlwt==1.3.0
I have also tried on pipdeptree 2.3.0, 2.3.1 and 2.3.2, which were the releases just before, just after and a bit after your comment on September 6th, 2022, none of which seem to work as expected.
Interestingly, pipdeptree[test]'s own dependencies don't show as related to pipdeptree. Perhaps that might be an easy way to test that functionality is working.
I see this might be related to https://github.com/tox-dev/pipdeptree/issues/107 too
I see it's due to lack of resources. I won't bother you no more!
PR welcome 🤗
I'll see what I can do, but no promises ☺️