[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