[Distutils] Exclusionary list of files/dirs in my TG-app's setup.py

Venkat Bommakanti venkatbo at yahoo.com
Sat Mar 31 04:09:08 CEST 2007


Hi folks,

(Please ignore my previous req on the same topic
 Got sent out by mistake... Thanks.)

'am using setup tools to build and package a TG 1.0.1
app. After deployment, I'm seeing a few entries in
SOURCES.txt despite specifying related wildcards in
the exclusion list.

Following are some related snippets:

setup.py:----------------
...
#
#from turbogears.finddata import find_package_data
#
# Disabled above import line, and added
find_package_data
# below to avoid installing TG on the build box...
#
import sys
from fnmatch import fnmatchcase
from distutils.util import convert_path

# Provided as an attribute, so you can append to these
instead
# of replicating them:
standard_exclude = ('*.py', '*.pyc', '*~', '.*',
'*.bak',
                    'checkout.status',
'original.status')
standard_exclude_directories = ('.*', 'CVS', 'CC',
'_darcs', './
build',
                                './dist', 'EGG-INFO',
'*.egg-info',
                                '.CC', 'cache',
'*.egg-info/.CC',
                                '*.egg-info/.CC',
'*.egg-info/.CC/*')

def find_package_data(
    where='.', package='',
    exclude=standard_exclude,
    exclude_directories=standard_exclude_directories,
    only_in_packages=True,
    show_ignored=False):
...

setup(
    name="myapp",
    version=version,
...

--------------------------------------

However, after successful build/deply, I'm seeing the
following entries in the deployed SOURCES.txt file
(myapp/myapp.egg-info/SOURCES.txt):
...
myapp.egg-info/.CC/checkout.status
myapp.egg-info/.CC/original.status
myapp.egg-info/.CC/cache/SOURCES.txt@@/main/1
...

---------------------------------------

It appears the exlusion list applies to all app
folders excpet myapp.egg-info/. Any idea how I can
specify that even in the case of myapp.egg-info/.CC/
it should include any diles or dirs...

Thanks much,
/venkat 

Full find_package_data:
-----------------------


def find_package_data(
    where='.', package='',
    exclude=standard_exclude,
    exclude_directories=standard_exclude_directories,
    only_in_packages=True,
    show_ignored=True):
    """
    Return a dictionary suitable for use in
``package_data``
    in a distutils ``setup.py`` file.

    The dictionary looks like::

        {'package': [files]}

    Where ``files`` is a list of all the files in that
package that
    don't match anything in ``exclude``.

    If ``only_in_packages`` is true, then top-level
directories that
    are not packages won't be included (but
directories under packages
    will).

    Directories matching any pattern in
``exclude_directories`` will
    be ignored; by default directories with leading
``.``, ``CVS``,
    and ``_darcs`` will be ignored.

    If ``show_ignored`` is true, then all the files
that aren't
    included in package data are shown on stderr (for
debugging
    purposes).

    Note patterns use wildcards, or can be exact paths
(including
    leading ``./``), and all searching is
case-insensitive.
    """

    out = {}
    stack = [(convert_path(where), '', package,
only_in_packages)]
    while stack:
        where, prefix, package, only_in_packages =
stack.pop(0)
        for name in os.listdir(where):
            fn = os.path.join(where, name)
            if os.path.isdir(fn):
                bad_name = False
                for pattern in exclude_directories:
                    if (fnmatchcase(name, pattern)
                        or fn.lower() ==
pattern.lower()):
                        bad_name = True
                        if show_ignored:
                            print >> sys.stderr, (
                                "Directory %s ignored
by pattern %s"
                                % (fn, pattern))
                            pass
                        break
                if bad_name:
                    continue
                if os.path.isfile(os.path.join(fn,
'__init__.py')):
                    if not package:
                        new_package = name
                    else:
                        new_package = package + '.' +
name
                    stack.append((fn, '', new_package,
False))
                else:
                    stack.append((fn, prefix + name +
'/', package, only_in_packages))
            elif package or not only_in_packages:
                # is a file
                bad_name = False
                for pattern in exclude:
                    if (fnmatchcase(name, pattern)
                        or fn.lower() ==
pattern.lower()):
                        bad_name = True
                        if show_ignored:
                            print >> sys.stderr, (
                                "File %s ignored by
pattern %s"
                                % (fn, pattern))
                            pass
                        break
                if bad_name:
                    continue
                out.setdefault(package,
[]).append(prefix+name)
    return out








 
____________________________________________________________________________________
Never miss an email again!
Yahoo! Toolbar alerts you the instant new Mail arrives.
http://tools.search.yahoo.com/toolbar/features/mail/


More information about the Distutils-SIG mailing list