[Distutils] package_data issue (chopping off characters)

Jens Thomas j.m.h.thomas at dl.ac.uk
Thu Jan 18 18:29:33 CET 2007


Hello,

I've just hit the problem that was mentioned in the thread with the 
above title (see: 
http://mail.python.org/pipermail/distutils-sig/2005-April/004453.html).

However, the email trail seemed to have hit a dead end and it wasn't 
clear to me whether this had been flagged as a bug or whether it was a 
problem with the way that setup.py was being used.

I've included a summary of the problem as I've encountered it below, but 
would appreciate any clarification on whether this is a bug and I need 
to wait for patched version, or whether it's a problem with the way I'm 
using setup.py and there is a change/work around I can use.

Many thanks,

Jens

(this is being run on Ubuntu Dapper:Python 2.4.3 (#2, Oct  6 2006, 
07:52:30) [GCC 4.0.3 (Ubuntu 4.0.3-1ubuntu5)] on linux2 )

I have the following directory tree

dir1/
    setup.py
    __init__.py

    dir2/
        __init__.py

    doc/
        test.txt

And the following setup.py:
#!/usr/bin/env python

from distutils.core import setup

setup(
      packages=['dir1','dir1.dir2'],
      package_dir = {'dir1': ''},
      package_data={'dir1': ['doc/*.txt']}
      )

I need this done in this way because of the way that my CVS repository 
has been set up, with the root directory of the source (where the 
setup.py script lives) also being the root directory of the package, and 
I thought that the package_dir line above took care of that.

On running the script, however, I get:

jmht at csevig6:~/dir1$ python setup.py install
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/dir1
copying __init__.py -> build/lib/dir1
creating build/lib/dir1/dir2
copying dir2/__init__.py -> build/lib/dir1/dir2
creating build/lib/dir1/oc
error: can't copy 'oc/test.txt': doesn't exist or not a regular file


This appears to be caused by a bit in the function get_data_files in the 
file:

/usr/lib/python2.4/distutils/command/build_py.py

specifically the line:

 plen = len(src_dir)+1

If len(src_dir) is 0, which it is in my case, the first character of the 
directory gets chopped off.



More information about the Distutils-SIG mailing list