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.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('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.4.
3:
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']
)
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']},
)
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
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) |
:
- major.minor[.patch[.sub]]
- distutils
PKG-INFO - 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.
- PyPI PyPI
long_description license"License" TroveClassifierlicencelicense
- 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',
],
)