New submission from Jason R. Coombs:

On Python 2.7 and 3.3, if the package_data glob happens to match a directory, 
it will trigger this error during build:

error: can't copy '<package>/<dirname>': doesn't exist or not a regular file

It seems that package_data is not very smart about filtering out directories, 
and assumes every name matched in the glob is a file. This is particularly 
inconvenient when one has a directory structure of package data. Consider:

        package_data={
                'bug_pkg': (
                        [
                                'html/*.*',
                                'html/something-1.0/*.*',
                        ]
                ),
        },

with a directory structure of:

.
│   setup.py
│
└───bug_pkg
    │   __init__.py
    │
    └───html
        │   index.html
        │
        └───something-1.0
                index.dat

Since 'html/*.*' matches 'something-1.0', distutils assumes something-1.0 is a 
file and tries to copy it and fails with:

error: can't copy 'bug_pkg/html/something-1.0': doesn't exist or not a regular 
file

I believe distutils should be filtering out folders from package_data. In the 
past, users (including myself) have worked around the issue by using '*.*' to 
match only files, but that's a poor heuristic is the above example demonstrates.

This issue was encountered when using sphinx-bootstrap-theme, which adds 
directories to sphinx HTML docs with directories like 'bootstrap-3.0.0', which 
are difficult to not match in a glob.

Is there any reason why globs specified in package_data should not exclude all 
directories?

----------
assignee: eric.araujo
components: Distutils
messages: 200298
nosy: eric.araujo, jason.coombs, tarek
priority: normal
severity: normal
status: open
title: error: can't copy '<dirname>': doesn't exist or not a regular file
versions: Python 2.7, Python 3.3, Python 3.4

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue19286>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to