[Distutils] Packaging of files, which aren't in the package root folder

Lukas Hetzenecker LuHe at gmx.at
Mon Dec 14 12:12:51 CET 2009


Hello,

i just found this solution and is seems to work for my application:

import os
from distutils.core import setup

# Install data files to package directory
from distutils.command.install import INSTALL_SCHEMES
for scheme in INSTALL_SCHEMES.values():
    scheme['data'] = scheme['purelib']

setup(name='series60-remote',
      version='1.0',
      packages=['series60_remote', 'series60_remote.devices', 
'series60_remote.lib', 'series60_remote.ui',
                 'series60_remote.window', 'series60_remote.widget'],
      package_dir={'series60_remote': 'pc'},
      data_files=[('series60_remote', ['Changelog', 'HACKING', 'INSTALL', 
'LICENSE', 'LICENSE.icons-oxygen',
                    'README.icons-oxygen', 'TODO']),
      scripts=['series60-remote'],
      )


Am Montag 14 Dezember 2009 05:40:34 schrieb David Cournapeau:
> On Mon, Dec 14, 2009 at 12:12 AM, Lukas Hetzenecker <LuHe at gmx.at> wrote:
> > Hello,
> >
> > thanks for your reply.
> > I added these files to MANIFEST.in but they are only in the tarball
> > (generated using python setup.py sdist), and not in the installation
> > directory.
> 
> Yes, MANIFEST.in does not handle installed files, and is only
> concerned with sdist (the MANIFEST.in handling is done in the sdist
> command).
> 
> There is no easy solution to your problem AFAIK. Since your data files
> are outside a package, you have to use data_files argument, but
> data_files arguments only install relatively to root or the install
> prefix.
> 
> You need to write your own command for this, at least with straight
> distutils. The easier solution is to put INSTALL and co into a
> package, and use package_data:
> 
> from distutils.core import setup
> 
> if __name__ == '__main__':
>     dist = setup(
>         name='example',
>         packages=['foo'],
>         package_data={'foo': ['INSTALL']},
>         )
> 
> In this case, INSTALL will be installed wherever the package foo is
> installed, but this requires INSTALL to be in the foo package.
> 
> David
> 


More information about the Distutils-SIG mailing list