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/
At 07:09 PM 3/30/2007 -0700, Venkat Bommakanti wrote:
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.
May I suggest that instead of using a custom find_package_data function, that you simply set "include_package_data=True" and add any files you want to include to your version control system (CVS or SVN)? Or, if you aren't using a supported version control system (and don't want to write a plugin for it), use the MANIFEST.in file to select what files to include or exclude. See e.g.: http://python.org/doc/2.3/dist/source-dist.html#SECTION000510000000000000000 When you simply use "include_package_data=True" instead of specifying individual files or wildcards, setuptools begins by using the distutils defaults, plus anything listed in revision control that's inside a package directory and isn't a .py* file. Then, it applies the rules listed in MANIFEST.in, which means that you can use it to add things that aren't under revision control, OR to exclude things that *are* in revision control. Anyway, this will give you fine-grained control over what you want to include in your source and egg distributions, without needing to cram a bunch of extras into your setup script. As far as I know, TG's find_package_data function was created before setuptools supported the include_package_data option. I don't think it's been necessary for quite a while now.
participants (2)
-
Phillip J. Eby
-
Venkat Bommakanti