Repository navigation
Unable to load resources for modules #203
Description
Activity
Shouldn't
os.path.abspath(os.path.join(__file__, '..', 'empty.docx'))work there? This is the most used solution, I have done this myself numerous times.Another option would be
__loader__.get_data('empty.docx'), which would work most times.Would it be possible to make
filesaccept aModuleSpec? Making it possible to dofiles(__spec__)to get the resources for the current module.Currently, the best option to plug the current module into to
filesIMO isfiles(sys.modules[__name__]).@jaraco I would like to hear your feedback on this proposal when you have time. Personally, I have mixed feelings, but can't come up with anything better.
Actually, I would really like for Python to add a
__module__global, but that is likely not gonna happen. I will have to keep usingsys.modules[__name__]🙃Today I noticed the comments and they were minimized, though I'm unsure why. I've unhidden the comments as they seem valid and in good faith.
Shouldn't
os.path.abspath(os.path.join(__file__, '..', 'empty.docx'))work there? This is the most used solution, I have done this myself numerous times.Sure, if you wish to assume that all resources are on the file system and if you're willing to force the user to encode the structure of their modules into their implementation, then that's fine. However, it's these use-cases that
importlib resourcesaims to abstract away and thatpkg_resourcesalready provides a simple, elegant solution.Another option would be
__loader__.get_data('empty.docx'), which would work most times.Yes, but again, I'd rather provide a uniform solution for users instead of a set of instructions that boils down to: "use importlib resources when you have resources in packages, but use some other technique when you have resources alongside modules."
Would it be possible to make
filesaccept aModuleSpec? Making it possible to dofiles(__spec__)to get the resources for the current module.Yes, I was thinking something like that. Especially if
files(__spec__)provides a consistent experience whether the module is top-level or a module in a package or is itself a package.Yeah, I marked them as "outdated" as I looked into the issue and realized the proposals did not make much sense.
Reacted by Jason R. Coombs- added 4 commits that reference this issue
on Jul 22, 2022
In #60, I encountered an issue where importlib resources was unable to supply an interface for modules that wish to load neighboring resources. I've encountered another use-case where it's not straightforward to replace the pkg_resources usage with importlib.resources.
Again, in this case, because the test module isn't in a package, importlib resources doesn't support it, but
pkg_resourcesdoes. The current workarounds include:testsdirectory a proper package. However, doing this also causes that package to get discovered as a package.__file__to infer the location of nearby resources.In my opinion, if 'importlib' supports importing non-package modules, 'importlib resources' should support loading resources pertinent to those modules.