Issue 30337: Vague wording of pkgutil.walk_packages parameter 'prefix' (original) (raw)
Issue30337
Created on 2017-05-10 20:49 by smsilb, last changed 2022-04-11 14:58 by admin. This issue is now closed.
Messages (3) | ||||||||
---|---|---|---|---|---|---|---|---|
msg293453 - (view) | Author: Sam Silberstein (smsilb) | Date: 2017-05-10 20:49 | ||||||
Hi there! This is my first submission to the bug tracker, so I apologize if I'm missing some formatting here. I've found what's either vague documentation for the 'prefix' parameter of `pgkutil.walk_packages` or a bug. The method implies that it will only import submodules of the provided path, but if the prefix parameter is not filled, this method will import a module with the same name from outside the path -- so long as it exists in `sys.modules`. I'm unsure if this is due to the documentation not specifying that prefix should always be used when path is set, or if this is a bug (I can provide a fix if it's a bug). Steps to reproduce: Create a directory with a nested package with the same name as a package outside that directory, e.g.: |_ test1 | _ __init__.py | _ should_not_be_included.py | _ test2 | _ test1 | _ __init__.py | _ test1 | _ __init__.py | _ should_be_included.py `list(pkgutil.walk_packages('test2'))` will contain 'should_not_be_included.py' instead of 'should_be_included.py'. Thank you! Sam Silberstein |
msg293495 - (view) | Author: Sam Silberstein (smsilb) | Date: 2017-05-11 14:35 | ||||||
Hi there! This is my first submission to the bug tracker, so I apologize if I'm missing some formatting here. I've found what's either vague documentation for the 'prefix' parameter of `pgkutil.walk_packages` or a bug. The method implies that it will only import submodules of the provided path, but if the prefix parameter is not filled, this method will import a module with the same name from outside the path -- so long as it exists in `sys.modules`. I'm unsure if this is due to the documentation not specifying that prefix should always be used when path is set, or if this is a bug (I can provide a fix if it's a bug). Steps to reproduce: Create a directory with a nested package with the same name as a package outside that directory, e.g.: ├── test1 │ ├── __init__.py │ └── should_not_be_included.py └── test2 ├── __init__.py └── test1 ├── __init__.py └── should_be_included.py `list(pkgutil.walk_packages(['test2']))` will contain 'should_not_be_included.py' instead of 'should_be_included.py'. Thank you! Sam Silberstein | ||||||||
msg409942 - (view) | Author: Irit Katriel (iritkatriel) * ![]() |
Date: 2022-01-06 23:56 | ||||||
Thank you Sam, pkgutil.walk_packages expected None or a list of strings. In an error message was added for a string input as in your example. |
History | |||
---|---|---|---|
Date | User | Action | Args |
2022-04-11 14:58:46 | admin | set | github: 74522 |
2022-01-06 23:56:53 | iritkatriel | set | status: open -> closedsuperseder: Lack of type checks in pkgutil.walk_packages and friendsnosy: + iritkatrielmessages: + resolution: duplicatestage: resolved |
2019-03-26 23:44:24 | cheryl.sabella | set | versions: + Python 3.7, Python 3.8 |
2017-05-11 14:35:17 | smsilb | set | messages: + |
2017-05-11 14:32:58 | smsilb | set | components: + Library (Lib), - Documentationversions: - Python 2.7 |
2017-05-10 20:49:48 | smsilb | create |