FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
py36/distutils/setupscript.html at master · python-doc-ja/py36 · GitHub
python-doc-ja
py36
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
py36
/
distutils
/
setupscript.html
Copy path
More file actions
More file actions
Latest commit
History
History
History
640 lines (617 loc) · 75.7 KB
Breadcrumbs
py36
/
distutils
/
setupscript.html
Copy path
File metadata and controls
640 lines (617 loc) · 75.7 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
html
xmlns
="
http://www.w3.org/1999/xhtml
"
lang
="
ja
"
>
<
head
>
<
meta
http-equiv
="
Content-Type
"
content
="
text/html; charset=utf-8
"
/>
<
title
>
2. setup スクリプトを書く — Python 3.6.5 ドキュメント
</
title
>
<
link
rel
="
stylesheet
"
href
="
../_static/pydoctheme.css
"
type
="
text/css
"
/>
<
link
rel
="
stylesheet
"
href
="
../_static/pygments.css
"
type
="
text/css
"
/>
<
script
type
="
text/javascript
"
>
var
DOCUMENTATION_OPTIONS
=
{
URL_ROOT
:
'../'
,
VERSION
:
'3.6.5'
,
COLLAPSE_INDEX
:
false
,
FILE_SUFFIX
:
'.html'
,
HAS_SOURCE
:
true
,
SOURCELINK_SUFFIX
:
'.txt'
}
;
</
script
>
<
script
type
="
text/javascript
"
src
="
../_static/jquery.js
"
>
</
script
>
<
script
type
="
text/javascript
"
src
="
../_static/underscore.js
"
>
</
script
>
<
script
type
="
text/javascript
"
src
="
../_static/doctools.js
"
>
</
script
>
<
script
type
="
text/javascript
"
src
="
../_static/translations.js
"
>
</
script
>
<
script
type
="
text/javascript
"
src
="
../_static/sidebar.js
"
>
</
script
>
<
link
rel
="
search
"
type
="
application/opensearchdescription+xml
"
title
="
Python 3.6.5 ドキュメント 内を検索
"
href
="
../_static/opensearch.xml
"
/>
<
link
rel
="
author
"
title
="
このドキュメントについて
"
href
="
../about.html
"
/>
<
link
rel
="
index
"
title
="
索引
"
href
="
../genindex.html
"
/>
<
link
rel
="
search
"
title
="
検索
"
href
="
../search.html
"
/>
<
link
rel
="
copyright
"
title
="
Copyright
"
href
="
../copyright.html
"
/>
<
link
rel
="
next
"
title
="
3. setup 設定ファイル (setup configuration file) を書く
"
href
="
configfile.html
"
/>
<
link
rel
="
prev
"
title
="
1. Distutilsの紹介
"
href
="
introduction.html
"
/>
<
link
rel
="
shortcut icon
"
type
="
image/png
"
href
="
../_static/py.png
"
/>
<
link
rel
="
canonical
"
href
="
https://docs.python.jp/3/distutils/setupscript.html
"
/>
<
script
type
="
text/javascript
"
>
$
(
document
)
.
ready
(
function
(
)
{
var
base
=
'https://docs.python.org/3.6/distutils/setupscript.html'
;
$
(
'a.headerlink'
)
.
each
(
function
(
)
{
var
html
=
'<a href="'
+
base
+
$
(
this
)
.
attr
(
'href'
)
+
'" title="原文へのリンク"><small>(原文)</small></a>'
;
$
(
this
)
.
after
(
html
)
;
}
)
}
)
;
</
script
>
<
script
type
="
text/javascript
"
src
="
../_static/copybutton.js
"
>
</
script
>
<
script
type
="
text/javascript
"
src
="
../_static/version_switch.js
"
>
</
script
>
</
head
>
<
body
>
<
div
class
="
related
"
role
="
navigation
"
aria-label
="
related navigation
"
>
<
h3
>
ナビゲーション
</
h3
>
<
ul
>
<
li
class
="
right
"
style
="
margin-right: 10px
"
>
<
a
href
="
../genindex.html
"
title
="
総索引
"
accesskey
="
I
"
>
索引
</
a
>
</
li
>
<
li
class
="
right
"
>
<
a
href
="
../py-modindex.html
"
title
="
Pythonモジュール索引
"
>
モジュール
</
a
>
|
</
li
>
<
li
class
="
right
"
>
<
a
href
="
configfile.html
"
title
="
3. setup 設定ファイル (setup configuration file) を書く
"
accesskey
="
N
"
>
次へ
</
a
>
|
</
li
>
<
li
class
="
right
"
>
<
a
href
="
introduction.html
"
title
="
1. Distutilsの紹介
"
accesskey
="
P
"
>
前へ
</
a
>
|
</
li
>
<
li
>
<
img
src
="
../_static/py.png
"
alt
=""
style
="
vertical-align: middle; margin-top: -1px
"
/>
</
li
>
<
li
>
<
a
href
="
https://www.python.org/
"
>
Python
</
a
>
»
</
li
>
<
li
>
<
span
class
="
version_switcher_placeholder
"
>
3.6.5
</
span
>
<
a
href
="
../index.html
"
>
ドキュメント
</
a
>
»
</
li
>
<
li
class
="
nav-item nav-item-1
"
>
<
a
href
="
index.html
"
accesskey
="
U
"
>
Python モジュールの配布 (レガシーバージョン)
</
a
>
»
</
li
>
<
li
class
="
right
"
>
<
div
class
="
inline-search
"
style
="
display: none
"
role
="
search
"
>
<
form
class
="
inline-search
"
action
="
../search.html
"
method
="
get
"
>
<
input
placeholder
="
Quick search
"
type
="
text
"
name
="
q
"
/>
<
input
type
="
submit
"
value
="
Go
"
/>
<
input
type
="
hidden
"
name
="
check_keywords
"
value
="
yes
"
/>
<
input
type
="
hidden
"
name
="
area
"
value
="
default
"
/>
</
form
>
</
div
>
<
script
type
="
text/javascript
"
>
$
(
'.inline-search'
)
.
show
(
0
)
;
</
script
>
|
</
li
>
</
ul
>
</
div
>
<
div
class
="
document
"
>
<
div
class
="
documentwrapper
"
>
<
div
class
="
bodywrapper
"
>
<
div
class
="
body
"
role
="
main
"
>
<
div
class
="
section
"
id
="
writing-the-setup-script
"
>
<
span
id
="
setup-script
"
>
</
span
>
<
h1
>
2. setup スクリプトを書く
<
a
class
="
headerlink
"
href
="
#writing-the-setup-script
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h1
>
<
p
>
setup スクリプトは、Distutils を使ってモジュールをビルドし、配布し、インストールする際の全ての動作の中心になります。 setup スクリプトの主な目的は、モジュール配布物について Distutils に伝え、モジュール配布を操作するための様々なコマンドを正しく動作させることにあります。上の
<
a
class
="
reference internal
"
href
="
introduction.html#distutils-simple-example
"
>
<
span
class
="
std std-ref
"
>
簡単な例
</
span
>
</
a
>
の節で見てきたように、 setup スクリプトは主に
<
code
class
="
xref py py-func docutils literal
"
>
<
span
class
="
pre
"
>
setup()
</
span
>
</
code
>
の呼び出しからなり、開発者が distuils に対して与えるほとんどの情報は
<
code
class
="
xref py py-func docutils literal
"
>
<
span
class
="
pre
"
>
setup()
</
span
>
</
code
>
のキーワード引数として指定されます。
</
p
>
<
p
>
ここではもう少しだけ複雑な例: Distutils 自体の setup スクリプト、を示します。これについては、以降の二つの節でフォローします。 (Distutils が入っているのは Python 1.6 以降であり、 Python 1.5.2 ユーザが他のモジュール配布物をインストールできるようにするための独立したパッケージがあることを思い出してください。ここで示した、Distutils 自身の setup スクリプトは、Python 1.5.2 に Distutils パッケージをインストールする際に使います。)
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
ch
"
>
#!/usr/bin/env python
</
span
>
<
span
class
="
kn
"
>
from
</
span
>
<
span
class
="
nn
"
>
distutils.core
</
span
>
<
span
class
="
k
"
>
import
</
span
>
<
span
class
="
n
"
>
setup
</
span
>
<
span
class
="
n
"
>
setup
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
n
"
>
name
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
s1
"
>
'Distutils'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
version
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
s1
"
>
'1.0'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
description
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
s1
"
>
'Python Distribution Utilities'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
author
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
s1
"
>
'Greg Ward'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
author_email
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
s1
"
>
'gward@python.net'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
url
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
s1
"
>
'https://www.python.org/sigs/distutils-sig/'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
packages
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'distutils'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'distutils.command'
</
span
>
<
span
class
="
p
"
>
],
</
span
>
<
span
class
="
p
"
>
)
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
上の例と、
<
a
class
="
reference internal
"
href
="
introduction.html#distutils-simple-example
"
>
<
span
class
="
std std-ref
"
>
簡単な例
</
span
>
</
a
>
で示したファイル一つからなる小さな配布物とは、違うところは二つしかありません: メタデータの追加と、モジュールではなくパッケージとして pure Python モジュール群を指定しているという点です。この点は重要です。というのも、 Distutils は 2 ダースものモジュールが (今のところ) 二つのパッケージに分かれて入っているからです; 各モジュールについていちいち明示的に記述したリストは、作成するのが面倒だし、維持するのも難しくなるでしょう。その他のメタデータについては、
<
a
class
="
reference internal
"
href
="
#meta-data
"
>
<
span
class
="
std std-ref
"
>
追加のメタデータ
</
span
>
</
a
>
を参照してください。
</
p
>
<
p
>
setup スクリプトに与えるパス名 (ファイルまたはディレクトリ) は、 Unix におけるファイル名規約、つまりスラッシュ ('/') 区切りで書かねばなりません。Distutils はこのプラットフォーム中立の表記を、実際にパス名として使う前に、現在のプラットフォームに適した表記に注意深く変換します。この機能のおかげで、setup スクリプトを異なるオペレーティングシステム間にわたって可搬性があるものにできます。言うまでもなく、これは Distutils の大きな目標の一つです。この精神に従って、このドキュメントでは全てのパス名をスラッシュ区切りにしています。
</
p
>
<
p
>
もちろん、この取り決めは Distutils に渡すパス名だけに適用されます。もし、例えば
<
a
class
="
reference internal
"
href
="
../library/glob.html#glob.glob
"
title
="
glob.glob
"
>
<
code
class
="
xref py py-func docutils literal
"
>
<
span
class
="
pre
"
>
glob.glob()
</
span
>
</
code
>
</
a
>
や
<
a
class
="
reference internal
"
href
="
../library/os.html#os.listdir
"
title
="
os.listdir
"
>
<
code
class
="
xref py py-func docutils literal
"
>
<
span
class
="
pre
"
>
os.listdir()
</
span
>
</
code
>
</
a
>
のような、標準の Python 関数を使ってファイル群を指定するのなら、パス区切り文字 (path separator) をハードコーディングせず、以下のように可搬性のあるコードを書くよう注意すべきです:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
glob
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
glob
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
n
"
>
os
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
path
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
join
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
s1
"
>
'mydir'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'subdir'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'*.html'
</
span
>
<
span
class
="
p
"
>
))
</
span
>
<
span
class
="
n
"
>
os
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
listdir
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
n
"
>
os
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
path
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
join
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
s1
"
>
'mydir'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'subdir'
</
span
>
<
span
class
="
p
"
>
))
</
span
>
</
pre
>
</
div
>
</
div
>
<
div
class
="
section
"
id
="
listing-whole-packages
"
>
<
span
id
="
listing-packages
"
>
</
span
>
<
h2
>
2.1. パッケージを全て列挙する
<
a
class
="
headerlink
"
href
="
#listing-whole-packages
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h2
>
<
p
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
packages
</
span
>
</
code
>
オプションは、
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
packages
</
span
>
</
code
>
リスト中で指定されている各々のパッケージについて、パッケージ内に見つかった全ての pure Python モジュールを処理 (ビルド、配布、インストール、等) するよう Distutils に指示します。このオプションを指定するためには、当然のことながら各パッケージ名はファイルシステム上のディレクトリ名と何らかの対応付けができなければなりません。デフォルトで使われる対応関係はきわめてはっきりしたものです。すなわち、パッケージ
<
a
class
="
reference internal
"
href
="
../library/distutils.html#module-distutils
"
title
="
distutils: Support for building and installing Python modules into an existing Python installation.
"
>
<
code
class
="
xref py py-mod docutils literal
"
>
<
span
class
="
pre
"
>
distutils
</
span
>
</
code
>
</
a
>
が配布物ルートディレクトリからの相対パス
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
distutils
</
span
>
</
code
>
で表されるディレクトリ中にあるというものです。つまり、setup スクリプト中で
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
packages
</
span
>
<
span
class
="
pre
"
>
=
</
span
>
<
span
class
="
pre
"
>
['foo']
</
span
>
</
code
>
と指定したら、スクリプトの置かれたディレクトリからの相対パスで
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
foo/__init__.py
</
span
>
</
code
>
を探し出せると Distutils に確約したことになります。この約束を裏切ると Distutils は警告を出しますが、そのまま壊れたパッケージの処理を継続します。
</
p
>
<
p
>
ソースコードディレクトリの配置について違った規約を使っていても、まったく問題はありません: 単に
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
package_dir
</
span
>
</
code
>
オプションを指定して、 Distutils に自分の規約を教えればよいのです。例えば、全ての Python ソースコードを
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
lib
</
span
>
</
code
>
下に置いて、 "ルートパッケージ" 内のモジュール (つまり、どのパッケージにも入っていないモジュール) を
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
lib
</
span
>
</
code
>
内に入れ、
<
code
class
="
xref py py-mod docutils literal
"
>
<
span
class
="
pre
"
>
foo
</
span
>
</
code
>
パッケージを
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
lib/foo
</
span
>
</
code
>
に入れる、といった具合にしたいのなら
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
package_dir
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
{
</
span
>
<
span
class
="
s1
"
>
''
</
span
>
<
span
class
="
p
"
>
:
</
span
>
<
span
class
="
s1
"
>
'lib'
</
span
>
<
span
class
="
p
"
>
}
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
を setup スクリプト内に入れます。辞書内のキーはパッケージ名で、空のパッケージ名はルートパッケージを表します。キーに対応する値はルートパッケージからの相対ディレクトリ名です、この場合、
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
packages
</
span
>
<
span
class
="
pre
"
>
=
</
span
>
<
span
class
="
pre
"
>
['foo']
</
span
>
</
code
>
を指定すれば、
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
lib/foo/__init__.py
</
span
>
</
code
>
が存在すると Distutils に確約したことになります。
</
p
>
<
p
>
もう一つの規約のあり方は
<
code
class
="
xref py py-mod docutils literal
"
>
<
span
class
="
pre
"
>
foo
</
span
>
</
code
>
パッケージを
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
lib
</
span
>
</
code
>
に置き換え、
<
code
class
="
xref py py-mod docutils literal
"
>
<
span
class
="
pre
"
>
foo.bar
</
span
>
</
code
>
パッケージが
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
lib/bar
</
span
>
</
code
>
にある、などとするものです。このような規約は、 setup スクリプトでは
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
package_dir
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
{
</
span
>
<
span
class
="
s1
"
>
'foo'
</
span
>
<
span
class
="
p
"
>
:
</
span
>
<
span
class
="
s1
"
>
'lib'
</
span
>
<
span
class
="
p
"
>
}
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
のように書きます。
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
package_dir
</
span
>
</
code
>
辞書に
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
package:
</
span
>
<
span
class
="
pre
"
>
dir
</
span
>
</
code
>
のようなエントリがあると、
<
em
>
package
</
em
>
の下にある全てのパッケージに対してこの規則が暗黙のうちに適用され、その結果
<
code
class
="
xref py py-mod docutils literal
"
>
<
span
class
="
pre
"
>
foo.bar
</
span
>
</
code
>
の場合が自動的に処理されます。この例では、
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
packages
</
span
>
<
span
class
="
pre
"
>
=
</
span
>
<
span
class
="
pre
"
>
['foo',
</
span
>
<
span
class
="
pre
"
>
'foo.bar']
</
span
>
</
code
>
は、 Distutils に
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
lib/__init__.py
</
span
>
</
code
>
と
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
lib/bar/__init__.py
</
span
>
</
code
>
を探すように指示します。 (
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
package_dir
</
span
>
</
code
>
は再帰的に適用されますが、この場合
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
packages
</
span
>
</
code
>
の下にある全てのパッケージを明示的に指定しなければならないことを心に留めておいてください: Distutils は
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
__init__.py
</
span
>
</
code
>
を持つディレクトリをソースツリーから再帰的にさがしたりは
<
em
>
しません
</
em
>
。)
</
p
>
</
div
>
<
div
class
="
section
"
id
="
listing-individual-modules
"
>
<
span
id
="
listing-modules
"
>
</
span
>
<
h2
>
2.2. 個々のモジュールを列挙する
<
a
class
="
headerlink
"
href
="
#listing-individual-modules
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h2
>
<
p
>
小さなモジュール配布物の場合、パッケージを列挙するよりも、全てのモジュールを列挙するほうがよいと思うかもしれません — 特に、単一のモジュールが "ルートパッケージ" にインストールされる (すなわち、パッケージは全くない) ような場合がそうです。この最も単純なケースは
<
a
class
="
reference internal
"
href
="
introduction.html#distutils-simple-example
"
>
<
span
class
="
std std-ref
"
>
簡単な例
</
span
>
</
a
>
で示しました; ここではもうちょっと入り組んだ例を示します:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
py_modules
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'mod1'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'pkg.mod2'
</
span
>
<
span
class
="
p
"
>
]
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
ここでは二つのモジュールについて述べていて、一方は "ルート" パッケージに入り、他方は
<
code
class
="
xref py py-mod docutils literal
"
>
<
span
class
="
pre
"
>
pkg
</
span
>
</
code
>
パッケージに入ります。ここでも、デフォルトのパッケージ/ディレクトリのレイアウトは、二つのモジュールが
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
mod1.py
</
span
>
</
code
>
と
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
pkg/mod2.py
</
span
>
</
code
>
にあり、
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
pkg/__init__.py
</
span
>
</
code
>
が存在することを暗示しています。また、パッケージ/ディレクトリの対応関係は
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
package_dir
</
span
>
</
code
>
オプションでも上書きできます。
</
p
>
</
div
>
<
div
class
="
section
"
id
="
describing-extension-modules
"
>
<
span
id
="
describing-extensions
"
>
</
span
>
<
h2
>
2.3. 拡張モジュールについて記述する
<
a
class
="
headerlink
"
href
="
#describing-extension-modules
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h2
>
<
p
>
pure Python モジュールを書くより Python 拡張モジュールを書く方がちょっとだけ複雑なように、 Distutils での拡張モジュールに関する記述もちょっと複雑です。pure モジュールと違い、単にモジュールやパッケージを列挙して、Distutils が正しいファイルを見つけてくれると期待するだけでは十分ではありません; 拡張モジュールの名前、ソースコードファイル (群) 、そして何らかのコンパイル/リンクに関する必要事項 (include ディレクトリ、リンクすべきライブラリ、等) を指定しなければなりません。
</
p
>
<
p
>
それらは全て、もう 1 つの
<
code
class
="
xref py py-func docutils literal
"
>
<
span
class
="
pre
"
>
setup()
</
span
>
</
code
>
のオプション引数、
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
ext_modules
</
span
>
</
code
>
オプションを通じて行われます。
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
ext_modules
</
span
>
</
code
>
は単なる
<
a
class
="
reference internal
"
href
="
apiref.html#distutils.core.Extension
"
title
="
distutils.core.Extension
"
>
<
code
class
="
xref py py-class docutils literal
"
>
<
span
class
="
pre
"
>
Extension
</
span
>
</
code
>
</
a
>
のリストで、それぞれがある 1 つの拡張モジュールを記述しています。配布物に、
<
code
class
="
xref py py-mod docutils literal
"
>
<
span
class
="
pre
"
>
foo
</
span
>
</
code
>
という名前の
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
foo.c
</
span
>
</
code
>
に実装がある拡張モジュールが 1 つ含まれているとします。コンパイラ/リンカへのこれ以上の指示が無い場合は、拡張モジュールの記述は単純です:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
Extension
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
s1
"
>
'foo'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'foo.c'
</
span
>
<
span
class
="
p
"
>
])
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
<
code
class
="
xref py py-class docutils literal
"
>
<
span
class
="
pre
"
>
Extension
</
span
>
</
code
>
クラスは、
<
code
class
="
xref py py-func docutils literal
"
>
<
span
class
="
pre
"
>
setup()
</
span
>
</
code
>
によって、
<
a
class
="
reference internal
"
href
="
apiref.html#module-distutils.core
"
title
="
distutils.core: The core Distutils functionality
"
>
<
code
class
="
xref py py-mod docutils literal
"
>
<
span
class
="
pre
"
>
distutils.core
</
span
>
</
code
>
</
a
>
から import されます。従って、拡張モジュールが一つだけ入っていて、他には何も入っていないモジュール配布物を作成するための setup スクリプトは、以下のようになるでしょう:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
kn
"
>
from
</
span
>
<
span
class
="
nn
"
>
distutils.core
</
span
>
<
span
class
="
k
"
>
import
</
span
>
<
span
class
="
n
"
>
setup
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
Extension
</
span
>
<
span
class
="
n
"
>
setup
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
n
"
>
name
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
s1
"
>
'foo'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
version
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
s1
"
>
'1.0'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
ext_modules
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
n
"
>
Extension
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
s1
"
>
'foo'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'foo.c'
</
span
>
<
span
class
="
p
"
>
])],
</
span
>
<
span
class
="
p
"
>
)
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
<
code
class
="
xref py py-class docutils literal
"
>
<
span
class
="
pre
"
>
Extension
</
span
>
</
code
>
クラス (実質的には、
<
code
class
="
xref py py-class docutils literal
"
>
<
span
class
="
pre
"
>
Extension
</
span
>
</
code
>
クラスの根底にある
<
strong
class
="
command
"
>
build_ext
</
strong
>
コマンドで実装されている、拡張モジュールをビルドする機構) は、Python 拡張モジュールをきわめて柔軟に記述できるようなサポートを提供しています。これについては後の節で説明します。
</
p
>
<
div
class
="
section
"
id
="
extension-names-and-packages
"
>
<
h3
>
2.3.1. 拡張モジュールの名前とパッケージ
<
a
class
="
headerlink
"
href
="
#extension-names-and-packages
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h3
>
<
p
>
<
a
class
="
reference internal
"
href
="
apiref.html#distutils.core.Extension
"
title
="
distutils.core.Extension
"
>
<
code
class
="
xref py py-class docutils literal
"
>
<
span
class
="
pre
"
>
Extension
</
span
>
</
code
>
</
a
>
コンストラクタの第 1 引数は、常に任意のパッケージ名を含む拡張モジュールの名前です。例えば、
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
Extension
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
s1
"
>
'foo'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'src/foo1.c'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'src/foo2.c'
</
span
>
<
span
class
="
p
"
>
])
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
とすると、拡張モジュールをルートパッケージに置くことになります。一方
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
Extension
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
s1
"
>
'pkg.foo'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'src/foo1.c'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'src/foo2.c'
</
span
>
<
span
class
="
p
"
>
])
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
は、同じ拡張モジュールを
<
code
class
="
xref py py-mod docutils literal
"
>
<
span
class
="
pre
"
>
pkg
</
span
>
</
code
>
パッケージの下に置くよう記述しています。ソースコードファイルと、作成されるオブジェクトコードはどちらの場合でも同じです; 作成された拡張モジュールがファイルシステム上のどこに置かれるか (すなわち Python の名前空間上のどこに置かれるか) が違うにすぎません。
</
p
>
<
p
>
同じパッケージ内に (または、同じ基底パッケージ下に) いくつもの拡張モジュールがある場合、
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
ext_package
</
span
>
</
code
>
キーワード引数を
<
code
class
="
xref py py-func docutils literal
"
>
<
span
class
="
pre
"
>
setup()
</
span
>
</
code
>
に指定します。例えば、
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
setup
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
o
"
>
...
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
ext_package
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
s1
"
>
'pkg'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
ext_modules
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
n
"
>
Extension
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
s1
"
>
'foo'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'foo.c'
</
span
>
<
span
class
="
p
"
>
]),
</
span
>
<
span
class
="
n
"
>
Extension
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
s1
"
>
'subpkg.bar'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'bar.c'
</
span
>
<
span
class
="
p
"
>
])],
</
span
>
<
span
class
="
p
"
>
)
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
とすると、
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
foo.c
</
span
>
</
code
>
をコンパイルして
<
code
class
="
xref py py-mod docutils literal
"
>
<
span
class
="
pre
"
>
pkg.foo
</
span
>
</
code
>
にし、
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
bar.c
</
span
>
</
code
>
をコンパイルして
<
code
class
="
xref py py-mod docutils literal
"
>
<
span
class
="
pre
"
>
pkg.subpkg.bar
</
span
>
</
code
>
にします。
</
p
>
</
div
>
<
div
class
="
section
"
id
="
extension-source-files
"
>
<
h3
>
2.3.2. 拡張モジュールのソースファイル
<
a
class
="
headerlink
"
href
="
#extension-source-files
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h3
>
<
p
>
<
a
class
="
reference internal
"
href
="
apiref.html#distutils.core.Extension
"
title
="
distutils.core.Extension
"
>
<
code
class
="
xref py py-class docutils literal
"
>
<
span
class
="
pre
"
>
Extension
</
span
>
</
code
>
</
a
>
コンストラクタの第 2 引数は、ソースファイルのリストです。 Distutils は現在 C 、 C++ 、 Objective-C 拡張モジュールしかサポートしていないため、それらは通常は C/C++/Objective-C ソースファイルです。 (C++ ソースファイルと判別できるように適切な拡張子を使用するようにしてください:
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
.cc
</
span
>
</
code
>
と
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
.cpp
</
span
>
</
code
>
が Unix と Windows のコンパイラの両方が認識できるようです。)
</
p
>
<
p
>
ただし、 SWIG インタフェース (
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
.i
</
span
>
</
code
>
) ファイルはリストに含められます;
<
strong
class
="
command
"
>
build_ext
</
strong
>
コマンドは、 SWIG で書かれた拡張パッケージをどう扱えばよいか心得ています:
<
strong
class
="
command
"
>
build_ext
</
strong
>
は、インタフェースファイルを SWIG にかけ、得られた C/C++ ファイルをコンパイルして拡張モジュールを生成します。
</
p
>
<
p
>
この警告にかかわらず、現在次のようにしてSWIGに対してオプションを渡すことができます:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
setup
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
o
"
>
...
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
ext_modules
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
n
"
>
Extension
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
s1
"
>
'_foo'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'foo.i'
</
span
>
<
span
class
="
p
"
>
],
</
span
>
<
span
class
="
n
"
>
swig_opts
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'-modern'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'-I../include'
</
span
>
<
span
class
="
p
"
>
])],
</
span
>
<
span
class
="
n
"
>
py_modules
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'foo'
</
span
>
<
span
class
="
p
"
>
],
</
span
>
<
span
class
="
p
"
>
)
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
もしくは、次のようにコマンドラインからオプションを渡すこともできます:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
o
"
>
>
</
span
>
<
span
class
="
n
"
>
python
</
span
>
<
span
class
="
n
"
>
setup
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
py
</
span
>
<
span
class
="
n
"
>
build_ext
</
span
>
<
span
class
="
o
"
>
--
</
span
>
<
span
class
="
n
"
>
swig
</
span
>
<
span
class
="
o
"
>
-
</
span
>
<
span
class
="
n
"
>
opts
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
s2
"
>
"-modern -I../include"
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
プラットフォームによっては、コンパイラで処理され、拡張モジュールに取り込まれるような非ソースコードファイルを含められます。非ソースコードファイルとは、現状では Visual C++向けの Windows メッセージテキスト (
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
.mc
</
span
>
</
code
>
) ファイルや、リソース定義 (
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
.rc
</
span
>
</
code
>
) ファイルを指します。これらのファイルはバイナリリソース (
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
.res
</
span
>
</
code
>
) ファイルにコンパイルされ、実行ファイルにリンクされます。
</
p
>
</
div
>
<
div
class
="
section
"
id
="
preprocessor-options
"
>
<
h3
>
2.3.3. プリプロセッサオプション
<
a
class
="
headerlink
"
href
="
#preprocessor-options
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h3
>
<
p
>
検索するインクルードディレクトリやプリプロセッサマクロの define/undefine を指定する必要がある場合、
<
a
class
="
reference internal
"
href
="
apiref.html#distutils.core.Extension
"
title
="
distutils.core.Extension
"
>
<
code
class
="
xref py py-class docutils literal
"
>
<
span
class
="
pre
"
>
Extension
</
span
>
</
code
>
</
a
>
の 3 つのオプション引数が役に立ちます:
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
include_dirs
</
span
>
</
code
>
、
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
define_macros
</
span
>
</
code
>
、
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
undef_macros
</
span
>
</
code
>
です。
</
p
>
<
p
>
例えば、拡張モジュールが配布物ルート下の
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
include
</
span
>
</
code
>
ディレクトリにあるヘッダファイルを必要とするときには、
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
include_dirs
</
span
>
</
code
>
オプションを使います:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
Extension
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
s1
"
>
'foo'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'foo.c'
</
span
>
<
span
class
="
p
"
>
],
</
span
>
<
span
class
="
n
"
>
include_dirs
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'include'
</
span
>
<
span
class
="
p
"
>
])
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
ここには絶対パスも指定できます; 例えば、自分の拡張モジュールが、
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
/usr
</
span
>
</
code
>
の下にX11R6 をインストールした Unix システムだけでビルドされると知っていれば、このように書けます
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
Extension
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
s1
"
>
'foo'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'foo.c'
</
span
>
<
span
class
="
p
"
>
],
</
span
>
<
span
class
="
n
"
>
include_dirs
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'/usr/include/X11'
</
span
>
<
span
class
="
p
"
>
])
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
自分のコードを配布する際には、このような可搬性のない使い方は避けるべきです: おそらく、C のコードを次のように書いたほうがましでしょう
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
c1
"
>
#include <X11/Xlib.h>
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
他の Python 拡張モジュール由来のヘッダを include する必要があるなら、 Distutils の
<
strong
class
="
command
"
>
install_header
</
strong
>
コマンドが一貫した方法でヘッダファイルをインストールするという事実を活用できます。例えば、 Numerical Python のヘッダファイルは、 (標準的な Unix がインストールされた環境では)
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
/usr/local/include/python1.5/Numerical
</
span
>
</
code
>
にインストールされます。 (実際の場所は、プラットフォームやどの Python をインストールしたかで異なります。) Python の include ディレクトリ — 今の例では
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
/usr/local/include/python1.5
</
span
>
</
code
>
— は、 Python 拡張モジュールをビルドする際に常にヘッダファイル検索パスに取り込まれるので、 C コードを書く上でもっともよいアプローチは、以下のようなものとなります
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
c1
"
>
#include <Numerical/arrayobject.h>
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
Numerical
</
span
>
</
code
>
インクルードディレクトリ自体をヘッダ検索パスに置きたいのなら、このディレクトリを Distutils の
<
a
class
="
reference internal
"
href
="
apiref.html#module-distutils.sysconfig
"
title
="
distutils.sysconfig: Low-level access to configuration information of the Python interpreter.
"
>
<
code
class
="
xref py py-mod docutils literal
"
>
<
span
class
="
pre
"
>
distutils.sysconfig
</
span
>
</
code
>
</
a
>
モジュールを使って見つけさせられます:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
kn
"
>
from
</
span
>
<
span
class
="
nn
"
>
distutils.sysconfig
</
span
>
<
span
class
="
k
"
>
import
</
span
>
<
span
class
="
n
"
>
get_python_inc
</
span
>
<
span
class
="
n
"
>
incdir
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
n
"
>
os
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
path
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
join
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
n
"
>
get_python_inc
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
n
"
>
plat_specific
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
mi
"
>
1
</
span
>
<
span
class
="
p
"
>
),
</
span
>
<
span
class
="
s1
"
>
'Numerical'
</
span
>
<
span
class
="
p
"
>
)
</
span
>
<
span
class
="
n
"
>
setup
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
o
"
>
...
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
Extension
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
o
"
>
...
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
include_dirs
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
n
"
>
incdir
</
span
>
<
span
class
="
p
"
>
]),
</
span
>
<
span
class
="
p
"
>
)
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
この書き方も可搬性はあります — プラットフォームに関わらず、どんな Python がインストールされていても動作します — が、単に実践的な書き方で C コードを書く方が簡単でしょう。
</
p
>
<
p
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
define_macros
</
span
>
</
code
>
および
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
undef_macros
</
span
>
</
code
>
オプションを使って、プリプロセッサマクロを定義 (define) したり、定義解除 (undefine) したりもできます。
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
define_macros
</
span
>
</
code
>
はタプル
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
(name,
</
span
>
<
span
class
="
pre
"
>
value)
</
span
>
</
code
>
からなるリストを引数にとります。
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
name
</
span
>
</
code
>
は定義したいマクロの名前 (文字列) で、
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
value
</
span
>
</
code
>
はその値です:
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
value
</
span
>
</
code
>
は文字列か
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
None
</
span
>
</
code
>
になります。(マクロ
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
FOO
</
span
>
</
code
>
を
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
None
</
span
>
</
code
>
にすると、C ソースコード内で
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
#define
</
span
>
<
span
class
="
pre
"
>
FOO
</
span
>
</
code
>
と書いたのと同じになります: こう書くと、ほとんどのコンパイラは
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
FOO
</
span
>
</
code
>
を文字列
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
1
</
span
>
</
code
>
に設定します。)
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
undef_macros
</
span
>
</
code
>
には、定義解除したいマクロ名からなるリストを指定します。
</
p
>
<
p
>
例えば:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
Extension
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
o
"
>
...
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
define_macros
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[(
</
span
>
<
span
class
="
s1
"
>
'NDEBUG'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'1'
</
span
>
<
span
class
="
p
"
>
),
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
s1
"
>
'HAVE_STRFTIME'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
kc
"
>
None
</
span
>
<
span
class
="
p
"
>
)],
</
span
>
<
span
class
="
n
"
>
undef_macros
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'HAVE_FOO'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'HAVE_BAR'
</
span
>
<
span
class
="
p
"
>
])
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
は、全ての C ソースコードファイルの先頭に、以下のマクロがあるのと同じになります:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
c1
"
>
#define NDEBUG 1
</
span
>
<
span
class
="
c1
"
>
#define HAVE_STRFTIME
</
span
>
<
span
class
="
c1
"
>
#undef HAVE_FOO
</
span
>
<
span
class
="
c1
"
>
#undef HAVE_BAR
</
span
>
</
pre
>
</
div
>
</
div
>
</
div
>
<
div
class
="
section
"
id
="
library-options
"
>
<
h3
>
2.3.4. ライブラリオプション
<
a
class
="
headerlink
"
href
="
#library-options
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h3
>
<
p
>
拡張モジュールをビルドする際にリンクするライブラリや、ライブラリを検索するディレクトリも指定できます。
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
libraries
</
span
>
</
code
>
はリンクするライブラリのリストで、
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
library_dirs
</
span
>
</
code
>
はリンク時にライブラリを検索するディレクトリのリストです。また、
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
runtime_library_dirs
</
span
>
</
code
>
は、実行時に共有ライブラリ (動的にロードされるライブラリ) を検索するディレクトリのリストです。
</
p
>
<
p
>
例えば、ビルド対象システムの標準ライブラリ検索パスにあることが分かっているライブラリをリンクする時には、以下のようにします
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
Extension
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
o
"
>
...
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
libraries
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'gdbm'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'readline'
</
span
>
<
span
class
="
p
"
>
])
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
非標準のパス上にあるライブラリをリンクしたいなら、その場所を
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
library_dirs
</
span
>
</
code
>
に入れておかなければなりません:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
Extension
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
o
"
>
...
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
library_dirs
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'/usr/X11R6/lib'
</
span
>
<
span
class
="
p
"
>
],
</
span
>
<
span
class
="
n
"
>
libraries
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'X11'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'Xt'
</
span
>
<
span
class
="
p
"
>
])
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
(繰り返しになりますが、この手の可搬性のない書き方は、コードを配布するのが目的なら避けるべきです。)
</
p
>
</
div
>
<
div
class
="
section
"
id
="
other-options
"
>
<
h3
>
2.3.5. その他のオプション
<
a
class
="
headerlink
"
href
="
#other-options
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h3
>
<
p
>
他にもいくつかオプションがあり、特殊な状況を扱うために使います。
</
p
>
<
p
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
optional
</
span
>
</
code
>
オプションはブール型で、真の場合は拡張モジュールのビルドに失敗したときにビルドプロセス自体を停止せず、単にその拡張モジュールのインストールをしません。
</
p
>
<
p
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
extra_objects
</
span
>
</
code
>
オプションには、リンカに渡すオブジェクトファイルのリストを指定します。ファイル名には拡張子をつけてはならず、コンパイラで使われているデフォルトの拡張子が使われます。
</
p
>
<
p
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
extra_compile_args
</
span
>
</
code
>
および
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
extra_link_args
</
span
>
</
code
>
には、それぞれコンパイラとリンカに渡す追加のコマンドライン引数を指定します。
</
p
>
<
p
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
export_symbols
</
span
>
</
code
>
は Windows でのみ意味があります。このオプションには、公開 (export) する (関数や変数の) シンボルのリストを入れられます。コンパイルして拡張モジュールをビルドする際には、このオプションは不要です: Distutils は公開するシンボルを自動的に
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
initmodule
</
span
>
</
code
>
に渡すからです。
</
p
>
<
p
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
depends
</
span
>
</
code
>
オプションは、拡張モジュールが依存している(例: ヘッダーファイルなどの) ファイルのリストです。このファイルのいずれかが前回のビルドから変更された時、ビルドコマンドはこのソースファイルをコンパイルしてリビルドします。
</
p
>
</
div
>
</
div
>
<
div
class
="
section
"
id
="
relationships-between-distributions-and-packages
"
>
<
h2
>
2.4. パッケージと配布物の関係
<
a
class
="
headerlink
"
href
="
#relationships-between-distributions-and-packages
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h2
>
<
p
>
配布物はパッケージと3種類の方法で関係します:
</
p
>
<
ol
class
="
arabic simple
"
>
<
li
>
パッケージかモジュールを要求する。
</
li
>
<
li
>
パッケージかモジュールを提供する。
</
li
>
<
li
>
パッケージかモジュールを廃止する。
</
li
>
</
ol
>
<
p
>
これらの関係は、
<
a
class
="
reference internal
"
href
="
apiref.html#distutils.core.setup
"
title
="
distutils.core.setup
"
>
<
code
class
="
xref py py-func docutils literal
"
>
<
span
class
="
pre
"
>
distutils.core.setup()
</
span
>
</
code
>
</
a
>
関数のキーワード引数を利用して指定することができます。
</
p
>
<
p
>
他のPythonモジュールやパッケージに対する依存は、
<
code
class
="
xref py py-func docutils literal
"
>
<
span
class
="
pre
"
>
setup()
</
span
>
</
code
>
の
<
em
>
requires
</
em
>
キーワード引数で指定できます。引数の値は文字列のリストでなければなりません。各文字列は、必要とするパッケージと、オプションとしてパッケージのバージョンを指定します。
</
p
>
<
p
>
あるモジュールかパッケージの任意のバージョンが必要な場合、指定する文字列はモジュール名かパッケージ名になります。例えば、
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
'mymodule'
</
span
>
</
code
>
や
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
'xml.parsers.expat'
</
span
>
</
code
>
を含みます。
</
p
>
<
p
>
特定のバージョンが必要な場合、修飾子(qualifier)の列を加えることができます。各修飾子は、比較演算子とバージョン番号からなります。利用できる比較演算子は:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
o
"
>
<
</
span
>
<
span
class
="
o
"
>
>
</
span
>
<
span
class
="
o
"
>
==
</
span
>
<
span
class
="
o
"
>
<=
</
span
>
<
span
class
="
o
"
>
>=
</
span
>
<
span
class
="
o
"
>
!=
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
これらの修飾子はカンマ(空白文字を入れても良いです)で区切って複数並べることができます。その場合、全ての修飾子が適合する必要があります; 評価する時に論理ANDでつなげられます。
</
p
>
<
p
>
いくつかの例を見てみましょう:
</
p
>
<
table
border
="
1
"
class
="
docutils
"
>
<
colgroup
>
<
col
width
="
35%
"
/>
<
col
width
="
65%
"
/>
</
colgroup
>
<
thead
valign
="
bottom
"
>
<
tr
class
="
row-odd
"
>
<
th
class
="
head
"
>
require式
</
th
>
<
th
class
="
head
"
>
説明
</
th
>
</
tr
>
</
thead
>
<
tbody
valign
="
top
"
>
<
tr
class
="
row-even
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
==1.0
</
span
>
</
code
>
</
td
>
<
td
>
version
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
1.0
</
span
>
</
code
>
のみが適合します
</
td
>
</
tr
>
<
tr
class
="
row-odd
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
>1.0,
</
span
>
<
span
class
="
pre
"
>
!=1.5.1,
</
span
>
<
span
class
="
pre
"
>
<2.0
</
span
>
</
code
>
</
td
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
1.5.1
</
span
>
</
code
>
を除いて、
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
1.0
</
span
>
</
code
>
より後ろで
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
2.0
</
span
>
</
code
>
より前の全てのバージョンに適合します。
</
td
>
</
tr
>
</
tbody
>
</
table
>
<
p
>
これで、依存を指定することができました。同じように、この配布物が他の配布物に必要とされる何を提供するのかを指定する必要があります。これは、
<
code
class
="
xref py py-func docutils literal
"
>
<
span
class
="
pre
"
>
setup()
</
span
>
</
code
>
の
<
em
>
provides
</
em
>
キーワード引数によって指定できます。この引数の値は文字列のリストで、各要素はPythonモジュールかパッケージの名前です。バージョンを指定することもできます。もしバージョンが指定されなかった場合、配布物のバージョン番号が利用されます。
</
p
>
<
p
>
いくつかの例です:
</
p
>
<
table
border
="
1
"
class
="
docutils
"
>
<
colgroup
>
<
col
width
="
31%
"
/>
<
col
width
="
69%
"
/>
</
colgroup
>
<
thead
valign
="
bottom
"
>
<
tr
class
="
row-odd
"
>
<
th
class
="
head
"
>
provide 式
</
th
>
<
th
class
="
head
"
>
説明
</
th
>
</
tr
>
</
thead
>
<
tbody
valign
="
top
"
>
<
tr
class
="
row-even
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
mypkg
</
span
>
</
code
>
</
td
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
mypkg
</
span
>
</
code
>
を提供します。バージョンは配布物のものを使います。
</
td
>
</
tr
>
<
tr
class
="
row-odd
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
mypkg
</
span
>
<
span
class
="
pre
"
>
(1.1)
</
span
>
</
code
>
</
td
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
mypkg
</
span
>
</
code
>
version 1.1 を提供します。配布物のバージョン番号は気にしません
</
td
>
</
tr
>
</
tbody
>
</
table
>
<
p
>
パッケージは
<
em
>
obsoletes
</
em
>
キーワードを利用することで、他のパッケージを廃止することを宣言することもできます。この値は
<
em
>
requires
</
em
>
キーワードと似ています: モジュールやパッケージを指定する文字列のリストです。各文字列は、モジュールかパッケージの名前と、オプションとして一つ以上のバージョン指定から構成されています。バージョン指定は、モジュールやパッケージの名前のうしろに、丸括弧(parentheses)でかこわれています。
</
p
>
<
p
>
指定されたバージョンは、その配布物によって廃止されるバージョンを示しています。バージョン指定が存在しない場合は、指定された名前のモジュールまたはパッケージの全てが廃止されたと解釈されます。
</
p
>
</
div
>
<
div
class
="
section
"
id
="
installing-scripts
"
>
<
span
id
="
distutils-installing-scripts
"
>
</
span
>
<
h2
>
2.5. スクリプトをインストールする
<
a
class
="
headerlink
"
href
="
#installing-scripts
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h2
>
<
p
>
ここまでは、スクリプトから import され、それ自体では実行されないような pure Python モジュールおよび非 pure Python モジュールについて扱ってきました。
</
p
>
<
p
>
スクリプトとは、Python ソースコードを含むファイルで、コマンドラインから実行できるよう作られているものです。スクリプトは Distutils に複雑なことを一切させません。唯一の気の利いた機能は、スクリプトの最初の行が
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
#!
</
span
>
</
code
>
で始まっていて、 "python" という単語が入っていた場合、Distutils は最初の行を現在使っているインタプリタを参照するよう置き換えます。デフォルトでは現在使っているインタプリタと置換しますが、オプション
<
code
class
="
xref std std-option docutils literal
"
>
<
span
class
="
pre
"
>
--executable
</
span
>
</
code
>
(または
<
code
class
="
xref std std-option docutils literal
"
>
<
span
class
="
pre
"
>
-e
</
span
>
</
code
>
) を指定することで、明示的にインタプリタのパスを指定して上書きすることができます。
</
p
>
<
p
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
scripts
</
span
>
</
code
>
オプションには、単に上で述べた方法で取り扱うべきファイルのリストを指定するだけです。PyXML の setup スクリプトを例に示します:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
setup
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
o
"
>
...
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
scripts
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'scripts/xmlproc_parse'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'scripts/xmlproc_val'
</
span
>
<
span
class
="
p
"
>
]
</
span
>
<
span
class
="
p
"
>
)
</
span
>
</
pre
>
</
div
>
</
div
>
<
div
class
="
versionchanged
"
>
<
p
>
<
span
class
="
versionmodified
"
>
バージョン 3.1 で変更:
</
span
>
テンプレートが提供されない時、全てのスクリプトが
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
MANIFEST
</
span
>
</
code
>
ファイルに追加されるようになりました。
<
a
class
="
reference internal
"
href
="
sourcedist.html#manifest
"
>
<
span
class
="
std std-ref
"
>
配布するファイルを指定する
</
span
>
</
a
>
を参照してください
</
p
>
</
div
>
</
div
>
<
div
class
="
section
"
id
="
installing-package-data
"
>
<
span
id
="
distutils-installing-package-data
"
>
</
span
>
<
h2
>
2.6. パッケージデータをインストールする
<
a
class
="
headerlink
"
href
="
#installing-package-data
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h2
>
<
p
>
しばしばパッケージに追加のファイルをインストールする必要があります。このファイルは、パッケージの実装に強く関連したデータや、そのパッケージを使うプログラマーが必要とするドキュメントなどです。これらのファイルを
<
em
class
="
dfn
"
>
パッケージデータ
</
em
>
と呼びます。
</
p
>
<
p
>
パッケージデータは関数
<
code
class
="
xref py py-func docutils literal
"
>
<
span
class
="
pre
"
>
setup()
</
span
>
</
code
>
にキーワード引数
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
package_data
</
span
>
</
code
>
を与えることで追加できます。この値はパッケージ名から、パッケージへコピーされる相対パス名リストへのマップである必要があります。それぞれのパスは対応するパッケージが含まれるディレクトリ(もし適切なら
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
package_dir
</
span
>
</
code
>
のマッピングが利用されます)からの相対パスとして扱われます。つまり、ファイルはソースディレクトリ中にパッケージの一部として存在すると仮定されています。この値にはグロブパターンを含むことができます。
</
p
>
<
p
>
パス名にはディレクトリ部分を含むことができます。必要なディレクトリはインストール時に作成されます。
</
p
>
<
p
>
たとえば、パッケージがいくつかのデータファイルを含むサブディレクトリを含んでいる場合、ソースツリーでは以下のように配置できます:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
setup
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
py
</
span
>
<
span
class
="
n
"
>
src
</
span
>
<
span
class
="
o
"
>
/
</
span
>
<
span
class
="
n
"
>
mypkg
</
span
>
<
span
class
="
o
"
>
/
</
span
>
<
span
class
="
fm
"
>
__init__
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
py
</
span
>
<
span
class
="
n
"
>
module
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
py
</
span
>
<
span
class
="
n
"
>
data
</
span
>
<
span
class
="
o
"
>
/
</
span
>
<
span
class
="
n
"
>
tables
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
dat
</
span
>
<
span
class
="
n
"
>
spoons
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
dat
</
span
>
<
span
class
="
n
"
>
forks
</
span
>
<
span
class
="
o
"
>
.
</
span
>
<
span
class
="
n
"
>
dat
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
対応する
<
code
class
="
xref py py-func docutils literal
"
>
<
span
class
="
pre
"
>
setup()
</
span
>
</
code
>
呼び出しは以下のようになります:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
setup
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
o
"
>
...
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
packages
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'mypkg'
</
span
>
<
span
class
="
p
"
>
],
</
span
>
<
span
class
="
n
"
>
package_dir
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
{
</
span
>
<
span
class
="
s1
"
>
'mypkg'
</
span
>
<
span
class
="
p
"
>
:
</
span
>
<
span
class
="
s1
"
>
'src/mypkg'
</
span
>
<
span
class
="
p
"
>
},
</
span
>
<
span
class
="
n
"
>
package_data
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
{
</
span
>
<
span
class
="
s1
"
>
'mypkg'
</
span
>
<
span
class
="
p
"
>
:
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'data/*.dat'
</
span
>
<
span
class
="
p
"
>
]},
</
span
>
<
span
class
="
p
"
>
)
</
span
>
</
pre
>
</
div
>
</
div
>
<
div
class
="
versionchanged
"
>
<
p
>
<
span
class
="
versionmodified
"
>
バージョン 3.1 で変更:
</
span
>
テンプレートが提供されない時、全ての
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
package_data
</
span
>
</
code
>
にマッチするファイルが
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
MANIFEST
</
span
>
</
code
>
ファイルに追加されるようになりました。
<
a
class
="
reference internal
"
href
="
sourcedist.html#manifest
"
>
<
span
class
="
std std-ref
"
>
配布するファイルを指定する
</
span
>
</
a
>
を参照してください
</
p
>
</
div
>
</
div
>
<
div
class
="
section
"
id
="
installing-additional-files
"
>
<
span
id
="
distutils-additional-files
"
>
</
span
>
<
h2
>
2.7. 追加のファイルをインストールする
<
a
class
="
headerlink
"
href
="
#installing-additional-files
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h2
>
<
p
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
data_files
</
span
>
</
code
>
オプションを使うと、モジュール配布物で必要な追加のファイル: 設定ファイル、メッセージカタログ、データファイル、その他これまで述べてきたカテゴリに収まらない全てのファイルを指定できます。
</
p
>
<
p
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
data_files
</
span
>
</
code
>
には、(
<
em
>
directory
</
em
>
,
<
em
>
files
</
em
>
) のペアを以下のように指定します:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
setup
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
o
"
>
...
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
data_files
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[(
</
span
>
<
span
class
="
s1
"
>
'bitmaps'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'bm/b1.gif'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'bm/b2.gif'
</
span
>
<
span
class
="
p
"
>
]),
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
s1
"
>
'config'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'cfg/data.cfg'
</
span
>
<
span
class
="
p
"
>
]),
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
s1
"
>
'/etc/init.d'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'init-script'
</
span
>
<
span
class
="
p
"
>
])]
</
span
>
<
span
class
="
p
"
>
)
</
span
>
</
pre
>
</
div
>
</
div
>
<
p
>
データファイルのインストール先ディレクトリ名は指定できますが、データファイル自体の名前の変更はできないので注意してください。
</
p
>
<
p
>
各々の (
<
em
>
directory
</
em
>
,
<
em
>
files
</
em
>
) ペアには、インストール先のディレクトリ名と、そのディレクトリにインストールしたいファイルを指定します。
<
em
>
directory
</
em
>
が相対パスの場合、インストールプレフィクス (installation prefix、 pure Python パッケージなら
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
sys.prefix
</
span
>
</
code
>
、拡張モジュールの入ったパッケージなら
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
sys.exec_prefix
</
span
>
</
code
>
) からの相対パスと解釈されます。
<
em
>
files
</
em
>
内の各ファイル名は、パッケージソースコード配布物の最上階層の、
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
setup.py
</
span
>
</
code
>
のあるディレクトリからの相対パスと解釈されます。
<
em
>
files
</
em
>
に書かれたディレクトリ情報は、ファイルを最終的にどこにインストールするかを決めるときには使われません; ファイルの名前だけが使われます。
</
p
>
<
p
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
data_files
</
span
>
</
code
>
オプションは、ターゲットディレクトリを指定せずに、単にファイルの列を指定できます。しかし、このやり方は推奨されておらず、指定すると
<
strong
class
="
command
"
>
install
</
strong
>
コマンドが警告を出力します。ターゲットディレクトリにデータファイルを直接インストールしたいなら、ディレクトリ名として空文字列を指定してください。
</
p
>
<
div
class
="
versionchanged
"
>
<
p
>
<
span
class
="
versionmodified
"
>
バージョン 3.1 で変更:
</
span
>
テンプレートが提供されない時、全ての
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
data_files
</
span
>
</
code
>
にマッチするファイルが
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
MANIFEST
</
span
>
</
code
>
ファイルに追加されるようになりました。
<
a
class
="
reference internal
"
href
="
sourcedist.html#manifest
"
>
<
span
class
="
std std-ref
"
>
配布するファイルを指定する
</
span
>
</
a
>
を参照してください
</
p
>
</
div
>
</
div
>
<
div
class
="
section
"
id
="
additional-meta-data
"
>
<
span
id
="
meta-data
"
>
</
span
>
<
h2
>
2.8. 追加のメタデータ
<
a
class
="
headerlink
"
href
="
#additional-meta-data
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h2
>
<
p
>
setup スクリプトには、名前やバージョンにとどまらず、その他のメタデータを含められます。以下のような情報を含められます:
</
p
>
<
table
border
="
1
"
class
="
docutils
"
>
<
colgroup
>
<
col
width
="
30%
"
/>
<
col
width
="
36%
"
/>
<
col
width
="
23%
"
/>
<
col
width
="
11%
"
/>
</
colgroup
>
<
thead
valign
="
bottom
"
>
<
tr
class
="
row-odd
"
>
<
th
class
="
head
"
>
メタデータ
</
th
>
<
th
class
="
head
"
>
説明
</
th
>
<
th
class
="
head
"
>
値
</
th
>
<
th
class
="
head
"
>
注釈
</
th
>
</
tr
>
</
thead
>
<
tbody
valign
="
top
"
>
<
tr
class
="
row-even
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
name
</
span
>
</
code
>
</
td
>
<
td
>
パッケージ名
</
td
>
<
td
>
短い文字列
</
td
>
<
td
>
(1)
</
td
>
</
tr
>
<
tr
class
="
row-odd
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
version
</
span
>
</
code
>
</
td
>
<
td
>
リリースのバージョン
</
td
>
<
td
>
短い文字列
</
td
>
<
td
>
(1)(2)
</
td
>
</
tr
>
<
tr
class
="
row-even
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
author
</
span
>
</
code
>
</
td
>
<
td
>
パッケージ作者名
</
td
>
<
td
>
短い文字列
</
td
>
<
td
>
(3)
</
td
>
</
tr
>
<
tr
class
="
row-odd
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
author_email
</
span
>
</
code
>
</
td
>
<
td
>
パッケージ作者の電子メールアドレス
</
td
>
<
td
>
電子メールアドレス
</
td
>
<
td
>
(3)
</
td
>
</
tr
>
<
tr
class
="
row-even
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
maintainer
</
span
>
</
code
>
</
td
>
<
td
>
パッケージメンテナンス担当者の名前
</
td
>
<
td
>
短い文字列
</
td
>
<
td
>
(3)
</
td
>
</
tr
>
<
tr
class
="
row-odd
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
maintainer_email
</
span
>
</
code
>
</
td
>
<
td
>
パッケージメンテナンス担当者の電子メールアドレス
</
td
>
<
td
>
電子メールアドレス
</
td
>
<
td
>
(3)
</
td
>
</
tr
>
<
tr
class
="
row-even
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
url
</
span
>
</
code
>
</
td
>
<
td
>
パッケージのホームページ
</
td
>
<
td
>
URL
</
td
>
<
td
>
(1)
</
td
>
</
tr
>
<
tr
class
="
row-odd
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
description
</
span
>
</
code
>
</
td
>
<
td
>
パッケージについての簡潔な概要説明
</
td
>
<
td
>
短い文字列
</
td
>
<
td
>
 
</
td
>
</
tr
>
<
tr
class
="
row-even
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
long_description
</
span
>
</
code
>
</
td
>
<
td
>
パッケージについての詳細な説明
</
td
>
<
td
>
長い文字列
</
td
>
<
td
>
(5)
</
td
>
</
tr
>
<
tr
class
="
row-odd
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
download_url
</
span
>
</
code
>
</
td
>
<
td
>
パッケージをダウンロードできる場所
</
td
>
<
td
>
URL
</
td
>
<
td
>
(4)
</
td
>
</
tr
>
<
tr
class
="
row-even
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
classifiers
</
span
>
</
code
>
</
td
>
<
td
>
分類語のリスト
</
td
>
<
td
>
文字列からなるリスト
</
td
>
<
td
>
(4)
</
td
>
</
tr
>
<
tr
class
="
row-odd
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
platforms
</
span
>
</
code
>
</
td
>
<
td
>
プラットフォームのリスト
</
td
>
<
td
>
文字列からなるリスト
</
td
>
<
td
>
 
</
td
>
</
tr
>
<
tr
class
="
row-even
"
>
<
td
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
license
</
span
>
</
code
>
</
td
>
<
td
>
パッケージのライセンス
</
td
>
<
td
>
短い文字列
</
td
>
<
td
>
(6)
</
td
>
</
tr
>
</
tbody
>
</
table
>
<
p
>
注釈:
</
p
>
<
ol
class
="
arabic simple
"
>
<
li
>
必須のフィールドです。
</
li
>
<
li
>
バージョン番号は
<
em
>
major.minor[.patch[.sub]]
</
em
>
の形式をとるよう奨めます。
</
li
>
<
li
>
作者かメンテナのどちらかは必ず区別してください。メンテナが与えられると、distutils は
<
code
class
="
file docutils literal
"
>
<
span
class
="
pre
"
>
PKG-INFO
</
span
>
</
code
>
に作者としてリストします。
</
li
>
<
li
>
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
<
a
class
="
reference external
"
href
="
https://pypi.python.org/pypi
"
>
PyPI website
</
a
>
.
</
li
>
<
li
>
パッケージを PyPI に
<
a
class
="
reference internal
"
href
="
packageindex.html#package-register
"
>
<
span
class
="
std std-ref
"
>
登録
</
span
>
</
a
>
する際、PyPI は
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
long_description
</
span
>
</
code
>
フィールドの値を使って
<
a
class
="
reference internal
"
href
="
packageindex.html#package-display
"
>
<
span
class
="
std std-ref
"
>
パッケージのホームページをビルド
</
span
>
</
a
>
します。
</
li
>
<
li
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
license
</
span
>
</
code
>
フィールドは、ライセンスが "License" Trove 分類から選ばれたのではない場合にパッケージをカバーするライセンスを示すテキストです。
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
Classifier
</
span
>
</
code
>
フィールドを参照してください。お気づきの通り、廃止された
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
licence
</
span
>
</
code
>
というオプションがあり、未だに
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
license
</
span
>
</
code
>
のエイリアスとして働いています。
</
li
>
</
ol
>
<
dl
class
="
docutils
"
>
<
dt
>
「短い文字列」
</
dt
>
<
dd
>
200 文字以内の一行のテキスト。
</
dd
>
<
dt
>
「長い文字列」
</
dt
>
<
dd
>
複数行からなり、ReStructuredText 形式で書かれたプレーンテキスト (
<
a
class
="
reference external
"
href
="
http://docutils.sourceforge.net/
"
>
http://docutils.sourceforge.net/
</
a
>
を参照してください)。
</
dd
>
<
dt
>
「文字列のリスト」
</
dt
>
<
dd
>
下記を参照してください。
</
dd
>
</
dl
>
<
p
>
バージョン情報のコード化は、それ自体が一つのアートです。 Python のパッケージは一般的に、
<
em
>
major.minor[.patch][sub]
</
em
>
というバージョン表記に従います。メジャー (major) 番号は最初は 0 で、これはソフトウェアが実験的リリースにあることを示します。メジャー番号は、パッケージが主要な開発目標を達成したとき、それを示すために加算されてゆきます。マイナー (minor) 番号は、パッケージに重要な新機能が追加されたときに加算されてゆきます。パッチ (patch) 番号は、バグフィクス版のリリースが作成されたときに加算されます。末尾にバージョン情報が追加され、サブリリースを示すこともあります。これは "a1,a2,…,aN" (アルファリリースの場合で、機能や API が変更されているとき)、 "b1,b2,…,bN" (ベータリリースの場合で、バグフィクスのみのとき) 、そして "pr1,pr2,…,prN" (プレリリースの最終段階で、リリーステストのとき) になります。以下に例を示します:
</
p
>
<
dl
class
="
docutils
"
>
<
dt
>
0.1.0
</
dt
>
<
dd
>
パッケージの最初の実験的なリリース
</
dd
>
<
dt
>
1.0.1a2
</
dt
>
<
dd
>
1.0 の最初のパッチバージョンに対する、2 回目のアルファリリース
</
dd
>
</
dl
>
<
p
>
<
code
class
="
docutils literal
"
>
<
span
class
="
pre
"
>
classifiers
</
span
>
</
code
>
は、Python のリスト型で指定します:
</
p
>
<
div
class
="
highlight-python3
"
>
<
div
class
="
highlight
"
>
<
pre
>
<
span
>
</
span
>
<
span
class
="
n
"
>
setup
</
span
>
<
span
class
="
p
"
>
(
</
span
>
<
span
class
="
o
"
>
...
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
n
"
>
classifiers
</
span
>
<
span
class
="
o
"
>
=
</
span
>
<
span
class
="
p
"
>
[
</
span
>
<
span
class
="
s1
"
>
'Development Status :: 4 - Beta'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'Environment :: Console'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'Environment :: Web Environment'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'Intended Audience :: End Users/Desktop'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'Intended Audience :: Developers'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'Intended Audience :: System Administrators'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'License :: OSI Approved :: Python Software Foundation License'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'Operating System :: MacOS :: MacOS X'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'Operating System :: Microsoft :: Windows'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'Operating System :: POSIX'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'Programming Language :: Python'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'Topic :: Communications :: Email'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'Topic :: Office/Business'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
s1
"
>
'Topic :: Software Development :: Bug Tracking'
</
span
>
<
span
class
="
p
"
>
,
</
span
>
<
span
class
="
p
"
>
],
</
span
>
<
span
class
="
p
"
>
)
</
span
>
</
pre
>
</
div
>
</
div
>
</
div
>
<
div
class
="
section
"
id
="
debugging-the-setup-script
"
>
<
span
id
="
debug-setup-script
"
>
</
span
>
<
h2
>
2.9. setup スクリプトをデバッグする
<
a
class
="
headerlink
"
href
="
#debugging-the-setup-script
"
title
="
このヘッドラインへのパーマリンク
"
>
¶
</
a
>
</
h2
>
<
p
>
setup スクリプトのどこかがまずいと、開発者の思い通りに動作してくれません。
</
p
>
<
p
>
Distutils は setup 実行時の全ての例外を捉えて、簡単なエラーメッセージを出力してからスクリプトを終了します。このような仕様にしているのは、 Python にあまり詳しくない管理者がパッケージをインストールする際に混乱しなくてすむようにするためです。もし Distutils のはらわた深くからトレースバックした長大なメッセージを見たら、管理者はきっと Python のインストール自体がおかしくなっているのだと勘違いして、トレースバックを最後まで読み進んで実はファイルパーミッションの問題だったと気づいたりはしないでしょう。
</
p
>
<
p
>
しかし逆に、この仕様は開発者にとってはうまくいかない理由を見つける役には立ちません。そこで、
<
span
class
="
target
"
id
="
index-2
"
>
</
span
>
<
code
class
="
xref std std-envvar docutils literal
"
>
<
span
class
="
pre
"
>
DISTUTILS_DEBUG
</
span
>
</
code
>
環境変数を空文字以外の何らかの値に設定しておけば、 Distutils が何を実行しているか詳しい情報を出力し、例外が発生した場合には完全なトレースバックをダンプし、(C コンパイラのような) 外部プログラムが失敗した時はコマンドライン全体を表示するようにできます。
</
p
>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
<
div
class
="
sphinxsidebar
"
role
="
navigation
"
aria-label
="
main navigation
"
>
<
div
class
="
sphinxsidebarwrapper
"
>
<
h3
>
<
a
href
="
../contents.html
"
>
目次
</
a
>
</
h3
>
<
ul
>
<
li
>
<
a
class
="
reference internal
"
href
="
#
"
>
2. setup スクリプトを書く
</
a
>
<
ul
>
<
li
>
<
a
class
="
reference internal
"
href
="
#listing-whole-packages
"
>
2.1. パッケージを全て列挙する
</
a
>
</
li
>
<
li
>
<
a
class
="
reference internal
"
href
="
#listing-individual-modules
"
>
2.2. 個々のモジュールを列挙する
</
a
>
</
li
>
<
li
>
<
a
class
="
reference internal
"
href
="
#describing-extension-modules
"
>
2.3. 拡張モジュールについて記述する
</
a
>
<
ul
>
<
li
>
<
a
class
="
reference internal
"
href
="
#extension-names-and-packages
"
>
2.3.1. 拡張モジュールの名前とパッケージ
</
a
>
</
li
>
<
li
>
<
a
class
="
reference internal
"
href
="
#extension-source-files
"
>
2.3.2. 拡張モジュールのソースファイル
</
a
>
</
li
>
<
li
>
<
a
class
="
reference internal
"
href
="
#preprocessor-options
"
>
2.3.3. プリプロセッサオプション
</
a
>
</
li
>
<
li
>
<
a
class
="
reference internal
"
href
="
#library-options
"
>
2.3.4. ライブラリオプション
</
a
>
</
li
>
<
li
>
<
a
class
="
reference internal
"
href
="
#other-options
"
>
2.3.5. その他のオプション
</
a
>
</
li
>
</
ul
>
</
li
>
<
li
>
<
a
class
="
reference internal
"
href
="
#relationships-between-distributions-and-packages
"
>
2.4. パッケージと配布物の関係
</
a
>
</
li
>
<
li
>
<
a
class
="
reference internal
"
href
="
#installing-scripts
"
>
2.5. スクリプトをインストールする
</
a
>
</
li
>
<
li
>
<
a
class
="
reference internal
"
href
="
#installing-package-data
"
>
2.6. パッケージデータをインストールする
</
a
>
</
li
>
<
li
>
<
a
class
="
reference internal
"
href
="
#installing-additional-files
"
>
2.7. 追加のファイルをインストールする
</
a
>
</
li
>
<
li
>
<
a
class
="
reference internal
"
href
="
#additional-meta-data
"
>
2.8. 追加のメタデータ
</
a
>
</
li
>
<
li
>
<
a
class
="
reference internal
"
href
="
#debugging-the-setup-script
"
>
2.9. setup スクリプトをデバッグする
</
a
>
</
li
>
</
ul
>
</
li
>
</
ul
>
<
h4
>
前のトピックへ
</
h4
>
<
p
class
="
topless
"
>
<
a
href
="
introduction.html
"
title
="
前の章へ
"
>
1. Distutilsの紹介
</
a
>
</
p
>
<
h4
>
次のトピックへ
</
h4
>
<
p
class
="
topless
"
>
<
a
href
="
configfile.html
"
title
="
次の章へ
"
>
3. setup 設定ファイル (setup configuration file) を書く
</
a
>
</
p
>
<
div
role
="
note
"
aria-label
="
source link
"
>
<
h3
>
このページ
</
h3
>
<
ul
class
="
this-page-menu
"
>
<
li
>
<
a
href
="
../bugs.html
"
>
バグ報告
</
a
>
</
li
>
<
li
>
<
a
href
="
https://github.com/python/cpython/blob/3.6/Doc/distutils/setupscript.rst
"
rel
="
nofollow
"
>
ソースの表示
</
a
>
</
li
>
</
ul
>
</
div
>
</
div
>
</
div
>
<
div
class
="
clearer
"
>
</
div
>
</
div
>
<
div
class
="
related
"
role
="
navigation
"
aria-label
="
related navigation
"
>
<
h3
>
ナビゲーション
</
h3
>
<
ul
>
<
li
class
="
right
"
style
="
margin-right: 10px
"
>
<
a
href
="
../genindex.html
"
title
="
総索引
"
>
索引
</
a
>
</
li
>
<
li
class
="
right
"
>
<
a
href
="
../py-modindex.html
"
title
="
Pythonモジュール索引
"
>
モジュール
</
a
>
|
</
li
>
<
li
class
="
right
"
>
<
a
href
="
configfile.html
"
title
="
3. setup 設定ファイル (setup configuration file) を書く
"
>
次へ
</
a
>
|
</
li
>
<
li
class
="
right
"
>
<
a
href
="
introduction.html
"
title
="
1. Distutilsの紹介
"
>
前へ
</
a
>
|
</
li
>
<
li
>
<
img
src
="
../_static/py.png
"
alt
=""
style
="
vertical-align: middle; margin-top: -1px
"
/>
</
li
>
<
li
>
<
a
href
="
https://www.python.org/
"
>
Python
</
a
>
»
</
li
>
<
li
>
<
span
class
="
version_switcher_placeholder
"
>
3.6.5
</
span
>
<
a
href
="
../index.html
"
>
ドキュメント
</
a
>
»
</
li
>
<
li
class
="
nav-item nav-item-1
"
>
<
a
href
="
index.html
"
>
Python モジュールの配布 (レガシーバージョン)
</
a
>
»
</
li
>
<
li
class
="
right
"
>
<
div
class
="
inline-search
"
style
="
display: none
"
role
="
search
"
>
<
form
class
="
inline-search
"
action
="
../search.html
"
method
="
get
"
>
<
input
placeholder
="
Quick search
"
type
="
text
"
name
="
q
"
/>
<
input
type
="
submit
"
value
="
Go
"
/>
<
input
type
="
hidden
"
name
="
check_keywords
"
value
="
yes
"
/>
<
input
type
="
hidden
"
name
="
area
"
value
="
default
"
/>
</
form
>
</
div
>
<
script
type
="
text/javascript
"
>
$
(
'.inline-search'
)
.
show
(
0
)
;
</
script
>
|
</
li
>
</
ul
>
</
div
>
<
div
class
="
footer
"
>
©
<
a
href
="
../copyright.html
"
>
Copyright
</
a
>
2001-2018, Python Software Foundation.
<
br
/>
Python Software Foundation は非営利団体です。
<
a
href
="
https://www.python.org/psf/donations/
"
>
寄付
</
a
>
<
br
/>
最終更新日時: 7月 29, 2018
<
a
href
="
../bugs.html
"
>
バグを見つけたら
</
a
>
?
<
br
/>
このドキュメントは
<
a
href
="
http://sphinx.pocoo.org/
"
>
Sphinx
</
a
>
1.6.5 を使って作成されました。
</
div
>
</
body
>
</
html
>
Back
|
FazBrowse Home
|
New Git URL