This wiki is in the process of being archived due to lack of usage and the resources necessary to serve it — predominately to bots, crawlers, and LLM companies. Edits are discouraged.
Pages are preserved as they were at the time of archival. For current information, please visit python.org.
If a change to this archive is absolutely needed, requests can be made via the infrastructure@python.org mailing list.

Problem

Distutils requires that you manually specify each package to be included in the distribution. For packages with large and deep sub-package hierarchies it can be a pain to keep this list in sync with the code, particularly as forgetting an entry is not noticable until a user happens to report that an entire sub-package is missing.

Solution

Use an automatic sub-package scanning mechanism to generate the package_dir and packages parameters for setup:

import os

def is_package(path):
 return (
 os.path.isdir(path) and
 os.path.isfile(os.path.join(path, '__init__.py'))
 )

def find_packages(path, base="" ):
 """ Find all packages in path """
 packages = {}
 for item in os.listdir(path):
 dir = os.path.join(path, item)
 if is_package( dir ):
 if base:
 module_name = "%(base)s.%(item)s" % vars()
 else:
 module_name = item
 packages[module_name] = dir
 packages.update(find_packages(dir, module_name))
 return packages

Then call find_packages to get the set of packages to be included (note that this call assumes that the packages are sub-directories of the directory where setup.py resides).

packages = find_packages(".")

Then use packages as the source within your call to setup:

setup (
 name = "pytable",
 package_dir = packages,
#...
 packages = packages.keys(),
 **extra_arguments
 )

You can see a real-world usage example in the PyTable setup script

Discussion

There should be some way to do this with distutils own machinery, I just don't know what it would be.

Idea: Giving "packages=['egg', 'ham']" should be enough for Distutils2 to include the egg and ham packages and their subpackages, using a function similar to Setuptools/Distribute find_package (or the one written here). merwok


CategoryDistutilsCookbook


2026年02月14日 16:07

AltStyle によって変換されたページ (->オリジナル) /