2. setup

setup Distutils setup Distutils setup setup() distuils setup()

: Distutils setup (Distutils Python 1.6 Python 1.5.2 Distutils setup Python 1.5.2 Distutils )

#!/usr/bin/env python

from distutils.core import setup

setup(name='Distutils',
      version='1.0',
      description='Python Distribution Utilities',
      author='Greg Ward',
      author_email='gward@python.net',
      url='https://www.python.org/sigs/distutils-sig/',
      packages=['distutils', 'distutils.command'],
     )

: pure Python Distutils 2 () ;

setup () Unix ('/') Distutils setup Distutils

Distutils glob.glob() os.listdir() Python (path separator) :

glob.glob(os.path.join('mydir', 'subdir', '*.html'))
os.listdir(os.path.join('mydir', 'subdir'))

2.1.

packages packages pure Python () Distutils distutils distutils setup packages = ['foo'] foo/__init__.py Distutils Distutils

: package_dir Distutils Python lib "" () lib foo lib/foo

package_dir = {'': 'lib'}

setup packages = ['foo'] lib/foo/__init__.py Distutils

foo lib foo.bar lib/bar setup

package_dir = {'foo': 'lib'}

package_dir package: dir package foo.bar packages = ['foo', 'foo.bar'] Distutils lib/__init__.py lib/bar/__init__.py (package_dir packages : Distutils __init__.py )

2.2.

"" () ; :

py_modules = ['mod1', 'pkg.mod2']

"" pkg / mod1.py pkg/mod2.py pkg/__init__.py / package_dir

2.3.

pure Python Python Distutils pure Distutils ; () / (include )

1 setup() ext_modules ext_modules Extension 1 foo foo.c 1 /:

Extension('foo', ['foo.c'])

Extension setup() distutils.core import setup :

from distutils.core import setup, Extension
setup(name='foo',
      version='1.0',
      ext_modules=[Extension('foo', ['foo.c'])],
      )

Extension ( Extension build_ext ) Python

2.3.1.

Extension 1

Extension('foo', ['src/foo1.c', 'src/foo2.c'])

Extension('pkg.foo', ['src/foo1.c', 'src/foo2.c'])

pkg ; ( Python )

() ext_package setup()

setup(...,
      ext_package='pkg',
      ext_modules=[Extension('foo', ['foo.c']),
                   Extension('subpkg.bar', ['bar.c'])],
     )

foo.c pkg.foo bar.c pkg.subpkg.bar

2.3.2.

Extension 2 Distutils C C++ Objective-C C/C++/Objective-C (C++ : .cc .cpp Unix Windows )

SWIG (.i) ; build_ext SWIG : build_ext SWIG C/C++

SWIG:

setup(...,
      ext_modules=[Extension('_foo', ['foo.i'],
                             swig_opts=['-modern', '-I../include'])],
      py_modules=['foo'],
     )

:

> python setup.py build_ext --swig-opts="-modern -I../include"

Visual C++ Windows (.mc) (.rc) (.res)

2.3.3.

define/undefine Extension 3 : include_dirs define_macros undef_macros

include include_dirs :

Extension('foo', ['foo.c'], include_dirs=['include'])

; /usr X11R6 Unix

Extension('foo', ['foo.c'], include_dirs=['/usr/include/X11'])

: C

#include <X11/Xlib.h>

Python include Distutils install_header Numerical Python ( Unix ) /usr/local/include/python1.5/Numerical ( Python ) Python include /usr/local/include/python1.5 Python C

#include <Numerical/arrayobject.h>

Numerical Distutils distutils.sysconfig :

from distutils.sysconfig import get_python_inc
incdir = os.path.join(get_python_inc(plat_specific=1), 'Numerical')
setup(...,
      Extension(..., include_dirs=[incdir]),
      )

Python C

define_macros undef_macros (define) (undefine) define_macros (name, value) name () value : value None ( FOO None C #define FOO : FOO 1 ) undef_macros

:

Extension(...,
          define_macros=[('NDEBUG', '1'),
                         ('HAVE_STRFTIME', None)],
          undef_macros=['HAVE_FOO', 'HAVE_BAR'])

C :

#define NDEBUG 1
#define HAVE_STRFTIME
#undef HAVE_FOO
#undef HAVE_BAR

2.3.4.

libraries library_dirs runtime_library_dirs ()

Extension(...,
          libraries=['gdbm', 'readline'])

library_dirs :

Extension(...,
          library_dirs=['/usr/X11R6/lib'],
          libraries=['X11', 'Xt'])

()

2.3.5.

optional

extra_objects

extra_compile_args extra_link_args

export_symbols Windows (export) () : Distutils initmodule

depends (: )

2.4.

3:

distutils.core.setup()

Python setup() requires

'mymodule' 'xml.parsers.expat'

(qualifier):

<    >    ==
<=   >=   !=

(); AND

:

require
==1.0 version 1.0
>1.0, !=1.5.1, <2.0 1.5.1 1.0 2.0

setup() provides Python

:

provide
mypkg mypkg
mypkg (1.1) mypkg version 1.1

obsoletes requires : (parentheses)

2.5.

import pure Python pure Python

Python Distutils #! "python" Distutils --executable ( -e)

scripts PyXML setup :

setup(...,
      scripts=['scripts/xmlproc_parse', 'scripts/xmlproc_val']
      )

3.1 : MANIFEST

2.6.

setup() package_data ( package_dir )

:

setup.py
src/
    mypkg/
        __init__.py
        module.py
        data/
            tables.dat
            spoons.dat
            forks.dat

setup() :

setup(...,
      packages=['mypkg'],
      package_dir={'mypkg': 'src/mypkg'},
      package_data={'mypkg': ['data/*.dat']},
      )

3.1 : package_data MANIFEST

2.7.

data_files :

data_files (directory, files) :

setup(...,
      data_files=[('bitmaps', ['bm/b1.gif', 'bm/b2.gif']),
                  ('config', ['cfg/data.cfg']),
                  ('/etc/init.d', ['init-script'])]
     )

(directory, files) directory (installation prefix pure Python sys.prefix sys.exec_prefix) files setup.py files ;

data_files install

3.1 : data_files MANIFEST

2.8.

setup :

name (1)
version (1)(2)
author (3)
author_email (3)
maintainer (3)
maintainer_email (3)
url URL (1)
description  
long_description (5)
download_url URL (4)
classifiers (4)
platforms  
license (6)

:

  1. major.minor[.patch[.sub]]
  2. distutils PKG-INFO
  3. These fields should not be used if your package is to be compatible with Python versions prior to 2.2.3 or 2.3. The list is available from the PyPI website.
  4. PyPI PyPI long_description
  5. license "License" Trove Classifier licence license
200
ReStructuredText (http://docutils.sourceforge.net/ )

Python major.minor[.patch][sub] (major) 0 (minor) (patch) "a1,a2,,aN" ( API ) "b1,b2,,bN" () "pr1,pr2,,prN" () :

0.1.0
1.0.1a2
1.0 2

classifiers Python :

setup(...,
      classifiers=[
          'Development Status :: 4 - Beta',
          'Environment :: Console',
          'Environment :: Web Environment',
          'Intended Audience :: End Users/Desktop',
          'Intended Audience :: Developers',
          'Intended Audience :: System Administrators',
          'License :: OSI Approved :: Python Software Foundation License',
          'Operating System :: MacOS :: MacOS X',
          'Operating System :: Microsoft :: Windows',
          'Operating System :: POSIX',
          'Programming Language :: Python',
          'Topic :: Communications :: Email',
          'Topic :: Office/Business',
          'Topic :: Software Development :: Bug Tracking',
          ],
      )

2.9. setup

setup

Distutils setup Python Distutils Python

DISTUTILS_DEBUG Distutils (C )