[issue34534] importlib.resources does not work with packages that have no __init__.py

2018-08-28 Thread Barry A. Warsaw


Barry A. Warsaw  added the comment:

https://docs.python.org/3/reference/import.html#regular-packages

Regular packages have __init__.py files and namespace packages do not.  
"Implicit non-namespace packages" aren't really A Thing.

This design choice is deliberate; namespace packages themselves have no 
physical location so there's no place to put resources within them.  Is there a 
problem with adding empty __init__.py files to regular packages with resources?

--
resolution:  -> wont fix
stage:  -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue34534] importlib.resources does not work with packages that have no __init__.py

2018-08-28 Thread Girts Folkmanis


Girts Folkmanis  added the comment:

> What's the difference between "namespace packages and implicit non-namespace 
> packages"? 

To me, the semantic difference is that "namespace packages" are what is used 
when you have "foo.bar" and "foo.baz" come from different distributions 
(https://packaging.python.org/guides/packaging-namespace-packages/). They get 
mentioned in "setup(packages=[...])" in distribution package's setup.py.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue34534] importlib.resources does not work with packages that have no __init__.py

2018-08-28 Thread Eric V. Smith


Eric V. Smith  added the comment:

What's the difference between "namespace packages and implicit non-namespace 
packages"? I think those are the same thing, aren't they?

--
nosy: +barry, brett.cannon, eric.smith

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue34534] importlib.resources does not work with packages that have no __init__.py

2018-08-28 Thread Girts Folkmanis


New submission from Girts Folkmanis :

importlib.resources does not seem to work with packages that don't have 
__init__.py present. Since 3.3+ generally there is no need to create empty 
__init__.py, as directories are automatically treated as packages even without 
the file present. So my expectation would be that importlib.resources would 
follow the same suit. 

Repro, where I expect that both "mod1" and "mod2" would return the files when 
contents() is called:

$ find .
.
./mod2
./mod2/data.txt
./test.py
./mod1
./mod1/__init__.py
./mod1/data.txt

$ cat test.py
import importlib.resources

print('mod1:', list(importlib.resources.contents('mod1')))
print('mod2:', list(importlib.resources.contents('mod2')))

$ python3.7 test.py
mod1: ['__init__.py', '__pycache__', 'data.txt']
mod2: []# < here I would expect to see files too


Looking at the source of Lib/importlib/resources.py, there is the following 
code in contents():

[..]
# Is the package a namespace package?  By definition, namespace packages
# cannot have resources.  We could use _check_location() and catch the
# exception, but that's extra work, so just inline the check.
elif package.__spec__.origin is None or not package.__spec__.has_location:
return ()
[..]

This is the branch that is taken - but it's not necessarily a namespace package 
here, at least to my understanding. Is there a way to make the code here 
distinguish between namespace packages and implicit non-namespace packages 
here, and allow contents() (and other functions) to work?

--
components: Library (Lib)
messages: 324275
nosy: girtsf
priority: normal
severity: normal
status: open
title: importlib.resources does not work with packages that have no __init__.py
versions: Python 3.7

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com