Menginstal Modul Python (Versi Legacy)
**************************************

Penulis:
   Greg Ward

Catatan:

  The entire "distutils" package has been deprecated and will be
  removed in Python 3.12. This documentation is retained as a
  reference only, and will be removed with the package. See the What's
  New entry for more information.

Lihat juga:

  Memasang Modul-modul Python
     Dokumentasi instalasi modul terbaru. Untuk penggunaan Python
     biasa, Anda hampir pasti menginginkan dokumen itu daripada yang
     satu ini.

Catatan:

  Dokumen ini dipertahankan hanya sampai dokumentasi "setuptools" di
  https://setuptools.readthedocs.io/en/latest/setuptools.html secara
  independen mencakup semua informasi relevan yang saat ini disertakan
  di sini.

Catatan:

  Panduan ini hanya mencakup alat dasar untuk membangun dan
  mendistribusikan ekstensi yang disediakan sebagai bagian dari versi
  Python ini. Alat pihak ketiga menawarkan alternatif yang lebih mudah
  digunakan dan lebih aman. Lihat bagian rekomendasi cepat dalam
  Panduan Pengguna Pengemasan Python untuk informasi lebih lanjut.


Pengenalan
==========

Di Python 2.0, API "distutils" pertama kali ditambahkan ke pustaka
standar. Ini menyediakan pengelola distro Linux dengan cara standar
untuk mengubah proyek Python menjadi paket distro Linux, dan
administrator sistem dengan cara standar untuk menginstalnya langsung
ke sistem target.

Bertahun-tahun sejak Python 2.0 dirilis, menggabungkan sistem build
dan penginstal paket dengan erat ke siklus rilis runtime bahasa
ternyata menjadi masalah, dan sekarang direkomendasikan agar proyek
menggunakan penginstal paket "pip" dan sistem build "setuptools",
daripada menggunakan "distutils" secara langsung.

Lihat Menginstal Modul Python (Versi Legacy) dan Mendistribusikan
Modul Python untuk keterangan lebih lanjut.

Dokumentasi warisan ini dipertahankan hanya sampai kami yakin bahwa
dokumentasi "setuptools" mencakup semua yang diperlukan.


Distribusi sumber berbasis distutils
------------------------------------

If you download a module source distribution, you can tell pretty
quickly if it was packaged and distributed in the standard way, i.e.
using the Distutils. First, the distribution's name and version number
will be featured prominently in the name of the downloaded archive,
e.g. "foo-1.0.tar.gz" or "widget-0.9.7.zip".  Next, the archive will
unpack into a similarly named directory: "foo-1.0" or "widget-0.9.7".
Additionally, the distribution will contain a setup script "setup.py",
and a file named "README.txt" or possibly just "README", which should
explain that building and installing the module distribution is a
simple matter of running one command from a terminal:

   python setup.py install

Untuk Windows, perintah ini harus dijalankan dari jendela prompt
perintah (Start ‣ Accessories):

   setup.py install

Jika semua ini benar, maka Anda telah mengetahui cara membuat dan
menginstal modul yang baru saja Anda unduh: Jalankan perintah di atas.
Kecuali Anda perlu menginstal sesuatu dengan cara non-standar atau
menyesuaikan proses build, Anda tidak benar-benar membutuhkan manual
ini. Atau lebih tepatnya, perintah di atas adalah semua yang Anda
butuhkan untuk keluar dari manual ini.


Bangun dan Install Standar
==========================

Seperti yang dijelaskan di bagian Distribusi sumber berbasis
distutils, membangun dan menginstal distribusi modul menggunakan
Distutils biasanya merupakan satu perintah sederhana untuk dijalankan
dari terminal:

   python setup.py install


Variasi platform
----------------

Anda harus selalu menjalankan perintah penyiapan dari direktori root
distribusi, yaitu subdirektori tingkat atas yang diuraikan oleh
distribusi sumber modul. Misalnya, jika Anda baru saja mengunduh
distribusi sumber modul "foo-1.0.tar.gz" ke sistem Unix, hal yang
normal untuk dilakukan adalah:

   gunzip -c foo-1.0.tar.gz | tar xf -    # unpacks into directory foo-1.0
   cd foo-1.0
   python setup.py install

Di Windows, Anda mungkin mengunduh "foo-1.0.zip". Jika Anda mengunduh
file arsip ke "C:\Temp", maka file akan diurai menjadi
"C:\Temp\foo-1.0"; Anda dapat menggunakan manipulator arsip dengan
antarmuka pengguna grafis (seperti WinZip) atau alat baris perintah
(seperti **unzip** atau **pkunzip**) untuk mengekstrak arsip.
Kemudian, buka jendela prompt perintah dan jalankan:

   cd c:\Temp\foo-1.0
   python setup.py install


Membagi pekerjaan
-----------------

Menjalankan "setup.py install" akan membangun dan menginstal semua
modul dalam satu proses. Jika Anda lebih suka bekerja secara bertahap
---terutama berguna jika Anda ingin menyesuaikan proses build, atau
jika ada yang sesuatu salah---Anda dapat menggunakan skrip penyiapan
untuk melakukan satu hal dalam satu waktu. Ini sangat membantu ketika
build dan install akan dilakukan oleh pengguna yang berbeda---
misalnya, Anda mungkin ingin membangun distribusi modul dan
menyerahkannya ke administrator sistem untuk instalasi (atau lakukan
sendiri, dengan hak istimewa super-user ).

Misalnya, Anda bisa membangun semuanya dalam satu langkah, lalu
menginstal semuanya di langkah kedua, dengan menjalankan skrip
pengaturan dua kali:

   python setup.py build
   python setup.py install

Jika Anda melakukan ini, Anda akan melihat bahwa menjalankan perintah
**install** pertama-tama akan menjalankan perintah **build**, yang---
dalam hal ini---dapat dengan cepat memberi tahu bahwa itu tidak ada
hubungannya, karena semua yang ada di direktori "build" adalah yang
terbaru.

Anda mungkin tidak memerlukan kemampuan ini untuk memecah banyak hal
jika yang Anda lakukan hanyalah menginstal modul yang diunduh dari
'net, tetapi ini sangat berguna untuk tugas-tugas yang lebih lanjut.
Jika Anda mulai mendistribusikan modul dan ekstensi Python Anda
sendiri, Anda akan menjalankan banyak perintah Distutils tersendiri.


Bagaimana pembangunan bekerja
-----------------------------

Seperti yang tersirat di atas, perintah **build** bertanggung jawab
untuk menempatkan file yang akan diinstal ke dalam direktori *build*.
Standarnya, ini adalah "build" di bawah root distribusi; jika Anda
terlalu mengkhawatirkan kecepatan, atau ingin menjaga struktur kode
sumber tetap murni, Anda dapat mengubah direktori build dengan opsi "
--build-base". Sebagai contoh:

   python setup.py build --build-base=/path/to/pybuild/foo-1.0

(Atau Anda dapat melakukan ini secara permanen dengan arahan di sistem
Anda atau file konfigurasi Distutils pribadi; lihat bagian File
Konfigurasi Distutils.) Biasanya, ini tidak perlu.

Tata letak default untuk build tree adalah sebagai berikut:

   --- build/ --- lib/
   or
   --- build/ --- lib.<plat>/
                  temp.<plat>/

di mana "<plat>" berkembang menjadi deskripsi singkat tentang
OS/platform perangkat keras dan versi Python saat ini. Bentuk pertama,
hanya dengan direktori "lib", digunakan untuk "distribusi modul murni"
---yaitu, distribusi modul yang hanya menyertakan modul Python murni.
Jika distribusi modul berisi ekstensi apa pun (modul yang ditulis
dalam C/C++), maka bentuk  kedua, dengan dua direktori "<plat>",
digunakan. Dalam hal ini, direktori "temp.*Plat*" menyimpan file
sementara yang dihasilkan oleh proses kompilasi/tautan yang sebenarnya
tidak terinstal. Dalam kedua kasus tersebut, direktori "lib" (atau
"lib.*Plat*") berisi semua modul Python (Python murni dan ekstensi)
yang akan diinstal.

Di masa mendatang, lebih banyak direktori akan ditambahkan untuk
menangani skrip Python, dokumentasi, biner yang dapat dieksekusi, dan
apa pun yang diperlukan untuk menangani pekerjaan penginstalan modul
dan aplikasi Python.


Bagaimana instalasi bekerja
---------------------------

Setelah perintah **build** dijalankan (apakah Anda menjalankannya
secara eksplisit, atau perintah **install** yang melakukannya untuk
Anda), cara kerja perintah **install** relatif sederhana: semua yang
harus dilakukan adalah menyalin semua yang ada di bawah "build/lib"
(atau "build/lib.*plat*") ke direktori instalasi yang Anda pilih.

If you don't choose an installation directory---i.e., if you just run
"setup.py install"---then the **install** command installs to the
standard location for third-party Python modules.  This location
varies by platform and by how you built/installed Python itself.  On
Unix (and macOS, which is also Unix-based), it also depends on whether
the module distribution being installed is pure Python or contains
extensions ("non-pure"):

+-------------------+-------------------------------------------------------+----------------------------------------------------+---------+
| Platform          | Lokasi installasi standar                             | Nilai bawaan                                       | Catatan |
|===================|=======================================================|====================================================|=========|
| Unix (murni)      | "*prefix*/lib/python*X.Y*/site-packages"              | "/usr/local/lib/python*X.Y*/site-packages"         | (1)     |
+-------------------+-------------------------------------------------------+----------------------------------------------------+---------+
| Unix (tidak       | "*exec-prefix*/lib/python*X.Y*/site-packages"         | "/usr/local/lib/python*X.Y*/site-packages"         | (1)     |
| murni)            |                                                       |                                                    |         |
+-------------------+-------------------------------------------------------+----------------------------------------------------+---------+
| Windows           | "*prefix*\Lib\site-packages"                          | "C:\Python*XY*\Lib\site-packages"                  | (2)     |
+-------------------+-------------------------------------------------------+----------------------------------------------------+---------+

Catatan:

1. Kebanyakan distribusi Linux menyertakan Python sebagai bagian
   standar sistem, jadi "*prefix*" dan "*exec-prefix*" biasanya
   keduanya "/usr" di Linux. Jika Anda membuat Python sendiri di Linux
   (atau sistem serupa Unix), bawaan "*prefix*" dan "*exec-prefix*"
   adalah "/usr/local".

2. Direktori instalasi default pada Windows adalah "C:\Program
   Files\Python" di bawah Python 1.6a1, 1.5.2, dan sebelumnya.

"*prefix*" and "*exec-prefix*" stand for the directories that Python
is installed to, and where it finds its libraries at run-time.  They
are always the same under Windows, and very often the same under Unix
and macOS.  You can find out what your Python installation uses for
"*prefix*" and "*exec-prefix*" by running Python in interactive mode
and typing a few simple commands. Under Unix, just type "python" at
the shell prompt.  Under Windows, choose Start ‣ Programs ‣ Python X.Y
‣ Python (command line).   Once the interpreter is started, you type
Python code at the prompt.  For example, on my Linux system, I type
the three Python statements shown below, and get the output as shown,
to find out my "*prefix*" and "*exec-prefix*":

   Python 2.4 (#26, Aug  7 2004, 17:19:02)
   Type "help", "copyright", "credits" or "license" for more information.
   >>> import sys
   >>> sys.prefix
   '/usr'
   >>> sys.exec_prefix
   '/usr'

Beberapa placeholder lain digunakan dalam dokumen ini: "*X.Y*" adalah
singkatan dari versi Python, misalnya "3.2`; :file:`{abiflags}` akan
diganti dengan nilai :data:`sys.abiflags` atau string kosong untuk
platform yang tidak mendefinisikan penanda ABI; :file:`{distname}`
akan diganti dengan nama distribusi modul yang diinstal. Titik dan
kapitalisasi penting di jalur; misalnya, nilai yang menggunakan
``python3.2" di UNIX biasanya akan menggunakan "Python32" di Windows.

Jika Anda tidak ingin menginstal modul ke lokasi standar, atau jika
Anda tidak memiliki izin untuk menulis di sana, maka Anda perlu
membaca tentang instalasi alternatif di bagian Instalasi Alternatif.
Jika Anda ingin mengubah direktori instalasi Anda lebih berat, lihat
bagian Instalasi kustom pada instalasi kustom.


Instalasi Alternatif
====================

Seringkali, kita perlu atau ingin menginstal modul ke lokasi selain
lokasi standar untuk modul Python pihak ketiga. Misalnya, pada sistem
Unix Anda mungkin tidak memiliki izin untuk menulis ke direktori modul
standar pihak ketiga. Atau Anda mungkin ingin mencoba modul sebelum
menjadikannya sebagai bagian standar dari instalasi Python lokal Anda.
Hal ini terutama berlaku saat memutakhirkan distribusi yang sudah ada:
Anda ingin memastikan basis skrip yang ada masih berfungsi dengan
versi baru sebelum benar-benar memutakhirkan.

Perintah Distutils **install** dirancang untuk membuat distribusi
modul instalasi ke lokasi alternatif sederhana dan tidak menyakitkan.
Ide dasarnya adalah Anda menyediakan direktori dasar untuk instalasi,
dan perintah **install** memilih sekumpulan direktori (disebut *skema
instalasi*) di bawah direktori dasar ini untuk menginstal file.
Detailnya berbeda di setiap platform, jadi bacalah bagian mana pun
berikut ini yang sesuai untuk Anda.

Perhatikan bahwa berbagai skema instalasi alternatif sama-sama
eksklusif: Anda dapat memberikan "--user", atau "--home", atau "--
prefix" dan "--exec-prefix", atau "--install-base" dan "--install-
platbase", tetapi Anda tidak dapat mencampur dari grup ini.


Instalasi alternatif: skema user
--------------------------------

Skema ini dirancang untuk menjadi solusi yang paling nyaman bagi
pengguna yang tidak memiliki izin menulis ke direktori paket situs
global atau tidak ingin menginstalnya. Ini diaktifkan dengan opsi
sederhana:

   python setup.py install --user

Files will be installed into subdirectories of "site.USER_BASE"
(written as "*userbase*" hereafter).  This scheme installs pure Python
modules and extension modules in the same location (also known as
"site.USER_SITE"). Here are the values for UNIX, including macOS:

+-----------------+-------------------------------------------------------------+
| Tipe file       | Direktori instalasi                                         |
|=================|=============================================================|
| modul           | "*userbase*/lib/python*X.Y*/site-packages"                  |
+-----------------+-------------------------------------------------------------+
| skrip           | "*userbase*/bin"                                            |
+-----------------+-------------------------------------------------------------+
| data            | "*userbase*"                                                |
+-----------------+-------------------------------------------------------------+
| C header        | "*userbase*/include/python*X.Y**abiflags*/*distname*"       |
+-----------------+-------------------------------------------------------------+

Dan inilah nilai yang digunakan di Windows:

+-----------------+-------------------------------------------------------------+
| Tipe file       | Direktori instalasi                                         |
|=================|=============================================================|
| modul           | "*userbase*\Python*XY*\site-packages"                       |
+-----------------+-------------------------------------------------------------+
| skrip           | "*userbase*\Python*XY*\Scripts"                             |
+-----------------+-------------------------------------------------------------+
| data            | "*userbase*"                                                |
+-----------------+-------------------------------------------------------------+
| C header        | "*userbase*\Python*XY*\Include{distname}"                   |
+-----------------+-------------------------------------------------------------+

Keuntungan menggunakan skema ini dibandingkan dengan skema lain yang
dijelaskan di bawah ini adalah direktori paket situs pengguna dalam
kondisi normal selalu disertakan dalam "sys.path" (lihat "site" untuk
informasi lebih lanjut), yang mana berarti tidak ada langkah tambahan
yang harus dilakukan setelah menjalankan skrip "setup.py" untuk
menyelesaikan instalasi.

Perintah **build_ext** juga memiliki opsi "--user" untuk menambahkan
"*userbase*/include" ke path pencarian compiler untuk file header dan
"*userbase*/lib" ke path pencarian compiler untuk pustaka serta ke
path pencarian runtime untuk pustaka C bersama (rpath).


Instalasi alternatif: skema home
--------------------------------

Ide di balik "skema home" adalah Anda membangun dan memelihara
simpanan pribadi modul Python. Nama skema ini berasal dari ide
direktori "home" di Unix, karena bukan hal yang aneh bagi pengguna
Unix untuk membuat direktori home mereka memiliki layout yang mirip
dengan "/usr/" atau "/usr/local/". Skema ini dapat digunakan oleh
siapa saja, terlepas dari sistem operasi yang mereka instal.

Menginstal distribusi modul baru semudah

   python setup.py install --home=<dir>

di mana Anda dapat menyediakan direktori apa pun yang Anda suka untuk
opsi " --home". Di Unix, juru ketik yang malas cukup mengetik tilde
("~"); perintah **install** akan memperluas ini ke direktori home
Anda:

   python setup.py install --home=~

To make Python find the distributions installed with this scheme, you
may have to modify Python's search path or edit "sitecustomize" (see
"site") to call "site.addsitedir()" or edit "sys.path".

Opsi "--home" menentukan direktori dasar instalasi. File diinstal ke
direktori berikut di bawah basis penginstalan sebagai berikut:

+-----------------+-------------------------------------------------------------+
| Tipe file       | Direktori instalasi                                         |
|=================|=============================================================|
| modul           | "*home*/lib/python"                                         |
+-----------------+-------------------------------------------------------------+
| skrip           | "*home*/bin"                                                |
+-----------------+-------------------------------------------------------------+
| data            | "*home*"                                                    |
+-----------------+-------------------------------------------------------------+
| C header        | "*home*/include/python/*distname*"                          |
+-----------------+-------------------------------------------------------------+

(Ganti garis miring dengan garis miring terbalik jika Anda menggunakan
Windows.)


Instalasi alternatif: Unix (skema prefiks)
------------------------------------------

"Skema prefiks" berguna ketika Anda ingin menggunakan satu instalasi
Python untuk melakukan build/install (yaitu, untuk menjalankan skrip
pengaturan), tetapi menginstal modul ke direktori modul pihak ketiga
dari instalasi Python yang berbeda (atau sesuatu yang terlihat seperti
instalasi Python yang berbeda). Jika ini terdengar agak tidak biasa,
itulah mengapa skema pengguna dan home datang sebelumnya. Namun,
setidaknya ada dua kasus yang diketahui di mana skema prefiks akan
berguna.

Pertama, pertimbangkan bahwa banyak distribusi Linux meletakkan Python
di "/usr", daripada yang lebih tradisional "/usr/local". Ini
sepenuhnya sesuai, karena dalam kasus tersebut Python adalah bagian
dari "sistem" daripada add-on lokal. Namun, jika Anda menginstal modul
Python dari sumber, Anda mungkin ingin modul tersebut masuk ke
"/usr/local/lib/python2.*X*" daripada "/usr/lib/python2.*X*". Ini
dapat dilakukan dengan:

   /usr/bin/python setup.py install --prefix=/usr/local

Kemungkinan lain adalah sistem file jaringan di mana nama yang
digunakan untuk menulis ke direktori remote berbeda dari nama yang
digunakan untuk membacanya: misalnya, interpreter Python diakses
sebagai "/usr/local/bin/python" mungkin mencari modul dalam
"/usr/local/lib/python2.*X*", tetapi modul tersebut harus dipasang ke,
misalnya, "/mnt/*@server*/export/lib/python2.*X*". Ini bisa dilakukan
dengan

   /usr/local/bin/python setup.py install --prefix=/mnt/@server/export

Dalam kedua kasus tersebut, opsi "--prefix" menentukan basis
instalasi, dan opsi "--exec-prefix" menentukan basis instalasi khusus
platform, yang digunakan untuk file khusus platform. (Saat ini, ini
hanya berarti distribusi modul non-murni, tetapi dapat diperluas ke
pustaka C, biner yang dapat dieksekusi, dll.) Jika "--exec-prefix"
tidak disediakan, defaultnya adalah "--prefix". File diinstal sebagai
berikut:

+-------------------+------------------------------------------------------------+
| Tipe file         | Direktori instalasi                                        |
|===================|============================================================|
| Modul Python      | "*prefix*/lib/python*X.Y*/site-packages"                   |
+-------------------+------------------------------------------------------------+
| modul ekstensi    | "*exec-prefix*/lib/python*X.Y*/site-packages"              |
+-------------------+------------------------------------------------------------+
| skrip             | "*prefix*/bin"                                             |
+-------------------+------------------------------------------------------------+
| data              | "*prefix*"                                                 |
+-------------------+------------------------------------------------------------+
| C header          | "*prefix*/include/python*X.Y**abiflags*/*distname*"        |
+-------------------+------------------------------------------------------------+

Tidak ada persyaratan bahwa "--prefix" atau "--exec-prefix" sebenarnya
mengarah ke instalasi Python alternatif; jika direktori yang tercantum
di atas belum ada, mereka dibuat pada saat instalasi.

Secara kebetulan, alasan sebenarnya mengapa skema prefiks penting
adalah karena instalasi Unix standar menggunakan skema prefiks, tetapi
dengan "--prefix" dan "--exec-prefix" disediakan oleh Python sendiri
sebagai "sys.prefix" dan "sys.exec_prefix". Jadi, Anda mungkin
berpikir Anda tidak akan pernah menggunakan skema prefiks, tetapi
setiap kali Anda menjalankan "python setup.py install" tanpa opsi
lain, Anda menggunakannya.

Perhatikan bahwa menginstal ekstensi ke instalasi Python alternatif
tidak berpengaruh pada bagaimana ekstensi tersebut dibuat: khususnya,
file header Python ("Python.h" dan teman-teman) yang diinstal dengan
interpreter Python yang digunakan untuk menjalankan skrip pengaturan
akan digunakan dalam menyusun ekstensi. Anda bertanggung jawab untuk
memastikan bahwa penafsir yang digunakan untuk menjalankan ekstensi
yang dipasang dengan cara ini kompatibel dengan interpreter yang
digunakan untuk membuatnya. Cara terbaik untuk melakukannya adalah
dengan memastikan bahwa kedua interpreter adalah versi Python yang
sama (kemungkinan build berbeda, atau mungkin salinan build yang
sama). (Tentu saja, jika "--prefix" dan "--exec-prefix"  Anda bahkan
tidak menunjuk ke instalasi Python alternatif, ini tidak penting.)


Instalasi alternatif: Windows (skema prefiks)
---------------------------------------------

Windows tidak memiliki konsep direktori home pengguna, dan karena
instalasi Python standar di bawah Windows lebih sederhana daripada di
bawah Unix, opsi "--prefix" secara tradisional digunakan untuk
menginstal paket tambahan di lokasi terpisah pada Windows.:

   python setup.py install --prefix="\Temp\Python"

untuk menginstal modul ke direktori "\Temp\Python" pada drive saat
ini.

Basis instalasi ditentukan oleh opsi "--prefix"; opsi "--exec-prefix"
tidak didukung pada Windows, yang berarti modul Python murni dan modul
ekstensi diinstal ke lokasi yang sama. File diinstal sebagai berikut:

+-----------------+------------------------------------------------------------+
| Tipe file       | Direktori instalasi                                        |
|=================|============================================================|
| modul           | "*prefix*\Lib\site-packages"                               |
+-----------------+------------------------------------------------------------+
| skrip           | "*prefix*\Scripts"                                         |
+-----------------+------------------------------------------------------------+
| data            | "*prefix*"                                                 |
+-----------------+------------------------------------------------------------+
| C header        | "*prefix*\Include{distname}"                               |
+-----------------+------------------------------------------------------------+


Instalasi kustom
================

Terkadang, skema instalasi alternatif yang dijelaskan di bagian
Instalasi Alternatif tidak melakukan apa yang Anda inginkan. Anda
mungkin ingin mengubah hanya satu atau dua direktori sambil menyimpan
semuanya di bawah direktori dasar yang sama, atau Anda mungkin ingin
sepenuhnya mendefinisikan ulang skema instalasi. Dalam kedua kasus
tersebut, Anda membuat *skema penginstalan kustom*.

Untuk membuat skema penginstalan kustom, Anda mulai dengan salah satu
skema alternatif dan mengganti beberapa direktori penginstalan yang
digunakan untuk berbagai jenis file, menggunakan opsi berikut:

+------------------------+-------------------------+
| Tipe file              | Opsi timpa              |
|========================|=========================|
| Modul Python           | "--install-purelib"     |
+------------------------+-------------------------+
| modul ekstensi         | "--install-platlib"     |
+------------------------+-------------------------+
| semua modul            | "--install-lib"         |
+------------------------+-------------------------+
| skrip                  | "--install-scripts"     |
+------------------------+-------------------------+
| data                   | "--install-data"        |
+------------------------+-------------------------+
| C header               | "--install-headers"     |
+------------------------+-------------------------+

Opsi timpa ini dapat bersifat relatif, absolut, atau secara eksplisit
ditentukan dalam salah satu direktori dasar instalasi. (Ada dua
direktori dasar instalasi, dan biasanya sama---mereka hanya berbeda
ketika Anda menggunakan "skema prefiks" Unix dan memberikan opsi "--
prefix" dan "--exec-prefix" yang berbeda; menggunakan "--install-lib''
akan menimpa nilai yang dihitung atau diberikan untuk ``--install-
purelib" dan "--install-platlib", dan direkomendasikan untuk skema
yang tidak membuat perbedaan antara Python dan modul ekstensi.)

Misalnya, Anda menginstal distribusi modul ke direktori home Anda di
bawah Unix---tetapi Anda ingin skrip masuk ke dalam "~/scripts"
daripada "~/bin". Seperti yang Anda duga, Anda dapat mengganti
direktori ini dengan opsi "--install-scripts"; dalam kasus ini, akan
lebih masuk akal untuk menyediakan jalur relatif, yang akan
ditafsirkan relatif terhadap direktori dasar instalasi (direktori home
Anda, dalam hal ini):

   python setup.py install --home=~ --install-scripts=scripts

Contoh Unix lainnya: misalkan instalasi Python Anda dibangun dan
diinstal dengan prefiks "/usr/local/python", jadi di bawah skrip
instalasi standar akan berakhir di "/usr/local/python/bin". Jika Anda
menginginkannya di "/usr/local/bin", Anda harus menyediakan direktori
absolut ini untuk opsi "--install-scripts":

   python setup.py install --install-scripts=/usr/local/bin

(Ini melakukan instalasi menggunakan "skema prefiks", di mana prefix
adalah apa pun yang telah diinstal interpreter Python Anda dengan---
"/usr/local/python" dalam kasus ini.)

Jika Anda mempertahankan Python di Windows, Anda mungkin ingin modul
pihak ketiga berada di subdirektori "*prefix*", bukan tepat di dalam
"*prefix*" itu sendiri. Ini hampir semudah menyesuaikan direktori
instalasi skrip---Anda hanya perlu ingat bahwa ada dua jenis modul
yang perlu dikhawatirkan, Python dan modul ekstensi, yang dapat
dikontrol dengan mudah oleh satu opsi:

   python setup.py install --install-lib=Site

Direktori instalasi yang ditentukan relatif terhadap "*prefix*". Tentu
saja, Anda juga harus memastikan bahwa direktori ini berada di path
pencarian modul Python, seperti dengan meletakkan file ".pth" di
direktori situs (lihat "site"). Lihat bagian Memodifikasi Path
Pencarian Python untuk mengetahui cara memodifikasi path pencarian
Python.

Jika Anda ingin menentukan seluruh skema instalasi, Anda hanya perlu
menyediakan semua opsi direktori instalasi. Cara yang disarankan untuk
melakukan ini adalah dengan menyediakan path relatif; misalnya, jika
Anda ingin mempertahankan semua file terkait modul Python di bawah
"python" di direktori home Anda, dan Anda ingin direktori terpisah
untuk setiap platform tempat Anda menggunakan direktori home, Anda
dapat menentukan skema instalasi berikut:

   python setup.py install --home=~ \
                           --install-purelib=python/lib \
                           --install-platlib=python/lib.$PLAT \
                           --install-scripts=python/scripts
                           --install-data=python/data

atau, setara,

   python setup.py install --home=~/python \
                           --install-purelib=lib \
                           --install-platlib='lib.$PLAT' \
                           --install-scripts=scripts
                           --install-data=data

"$PLAT" bukanlah (harus) variabel environment---itu akan diperluas
oleh Distutils saat ia mem-parsing opsi baris perintah Anda, seperti
yang dilakukannya saat mem-parsing file konfigurasi Anda.

Jelas, menentukan seluruh skema instalasi setiap kali Anda menginstal
distribusi modul baru akan sangat membosankan. Dengan demikian, Anda
dapat meletakkan opsi ini ke dalam file konfigurasi Distutils Anda
(lihat bagian File Konfigurasi Distutils):

   [install]
   install-base=$HOME
   install-purelib=python/lib
   install-platlib=python/lib.$PLAT
   install-scripts=python/scripts
   install-data=python/data

atau, setara,

   [install]
   install-base=$HOME/python
   install-purelib=lib
   install-platlib=lib.$PLAT
   install-scripts=scripts
   install-data=data

Perhatikan bahwa keduanya *tidak* setara jika Anda menyediakan
direktori dasar penginstalan yang berbeda saat Anda menjalankan skrip
penataan. Sebagai contoh,:

   python setup.py install --install-base=/tmp

akan menginstal modul murni ke "/tmp/python/lib" dalam kasus pertama,
dan ke "/tmp/lib" dalam kasus kedua. (Untuk kasus kedua, Anda mungkin
ingin menyediakan basis instalasi "/tmp/python".)

Anda mungkin memperhatikan penggunaan "$HOME" dan "$PLAT" di sampel
input file konfigurasi. Ini adalah variabel konfigurasi Distutils,
yang memiliki kemiripan yang kuat dengan variabel environment.
Faktanya, Anda dapat menggunakan variabel environment dalam file
konfigurasi pada platform yang memiliki gagasan seperti itu tetapi
Distutils juga menetapkan beberapa variabel tambahan yang mungkin
tidak ada di environment Anda, seperti "$PLAT". (Dan tentu saja, pada
sistem yang tidak memiliki variabel environment, seperti Mac OS 9,
variabel konfigurasi yang disediakan oleh Distutils adalah satu-
satunya yang dapat Anda gunakan.) Lihat bagian File Konfigurasi
Distutils untuk detailnya.

Catatan:

  Ketika a virtual environment diaktifkan, setiap opsi yang mengubah
  path instalasi akan diabaikan dari semua file konfigurasi distutils
  untuk mencegah penginstalan proyek di luar lingkungan virtual secara
  tidak sengaja.


Memodifikasi Path Pencarian Python
----------------------------------

Ketika interpreter Python menjalankan "import", ia mencari kode Python
dan modul ekstensi di sepanjang path pencarian. Nilai default untuk
path dikonfigurasikan ke dalam biner Python saat interpreter dibuat.
Anda dapat menentukan path dengan mengimport modul "sys" dan mencetak
nilai "sys.path".:

   $ python
   Python 2.2 (#11, Oct  3 2002, 13:31:27)
   [GCC 2.96 20000731 (Red Hat Linux 7.3 2.96-112)] on linux2
   Type "help", "copyright", "credits" or "license" for more information.
   >>> import sys
   >>> sys.path
   ['', '/usr/local/lib/python2.3', '/usr/local/lib/python2.3/plat-linux2',
    '/usr/local/lib/python2.3/lib-tk', '/usr/local/lib/python2.3/lib-dynload',
    '/usr/local/lib/python2.3/site-packages']
   >>>

String null dalam "sys.path" mewakili direktori kerja saat ini.

Konvensi yang diharapkan untuk paket yang diinstal secara lokal adalah
dengan meletakkannya di direktori "*...*/site-packages/", tetapi Anda
mungkin ingin menginstal modul Python ke dalam direktori arbitrer.
Misalnya, situs Anda mungkin memiliki konvensi untuk menyimpan semua
perangkat lunak yang terkait dengan server web di bawah "/www". Add-on
modul Python mungkin termasuk dalam "/www/python", dan untuk
mengimpornya, direktori ini harus ditambahkan ke "sys.path". Ada
beberapa cara berbeda untuk menambahkan direktori.

Cara yang paling mudah adalah dengan menambahkan path file konfigurasi
ke direktori yang sudah ada di path Python, biasanya ke direktori
".../site-packages/". File konfigurasi path memiliki ekstensi ".pth",
dan setiap baris harus berisi satu path yang akan ditambahkan ke
"sys.path". (Karena path baru ditambahkan ke "sys.path", modul dalam
direktori yang ditambahkan tidak akan menimpa modul standar. Ini
berarti Anda tidak dapat menggunakan mekanisme ini untuk menginstal
versi tetap dari modul standar.)

Path bisa absolut atau relatif, dalam hal ini mereka relatif terhadap
direktori yang berisi file ".pth". Lihat dokumentasi modul "site"
untuk informasi lebih lanjut.

Cara yang sedikit kurang nyaman adalah dengan mengedit file "site.py"
di pustaka standar Python, dan memodifikasi "sys.path". "site.py"
secara otomatis diimpor saat interpreter Python dijalankan, kecuali
jika opsi "-S" disediakan untuk menahan perilaku ini. Jadi Anda cukup
mengedit "site.py" dan menambahkan dua baris padanya:

   import sys
   sys.path.append('/www/python/')

However, if you reinstall the same minor version of Python (perhaps
when upgrading from 2.2 to 2.2.2, for example) "site.py" will be
overwritten by the stock version.  You'd have to remember that it was
modified and save a copy before doing the installation.

Ada dua variabel environment yang dapat mengubah "sys.path".
"PYTHONHOME" menetapkan nilai alternatif untuk prefiks instalasi
Python. Misalnya, jika "PYTHONHOME" disetel ke "/www/python", path
pencarian akan disetel ke "['', '/www/python/lib/pythonX.Y/',
'/www/python/lib/pythonX.Y/plat-linux2', ...]".

Variabel "PYTHONPATH" dapat disetel ke daftar path yang akan
ditambahkan ke awal "sys.path". Misalnya, jika "PYTHONPATH" disetel ke
"/www/python:/opt/py", pencarian path akan dimulai dengan
"['/www/python', '/opt/py']". (Perhatikan bahwa direktori harus ada
agar dapat ditambahkan ke "sys.path"; modul "site" menghapus path yang
tidak ada.)

Akhirnya, "sys.path" hanyalah daftar Python biasa, jadi aplikasi
Python apa pun dapat memodifikasinya dengan menambahkan atau menghapus
entri.


File Konfigurasi Distutils
==========================

Seperti disebutkan di atas, Anda dapat menggunakan file konfigurasi
Distutils untuk merekam preferensi pribadi atau situs untuk setiap
opsi Distutils. Artinya, opsi apa pun untuk perintah apa pun dapat
disimpan di salah satu dari dua atau tiga file konfigurasi (bergantung
pada platform Anda), yang akan dikonsultasikan sebelum baris perintah
diurai. Ini berarti bahwa file konfigurasi akan menimpa nilai default,
dan baris perintah pada gilirannya akan menimpa file konfigurasi.
Selain itu, jika beberapa file konfigurasi diterapkan, nilai dari file
"sebelumnya" akan ditimpa oleh file "nantinya".


Lokasi dan nama file konfigurasi
--------------------------------

The names and locations of the configuration files vary slightly
across platforms.  On Unix and macOS, the three configuration files
(in the order they are processed) are:

+----------------+------------------------------------------------------------+---------+
| Tipe file      | Lokasi dan nama file                                       | Catatan |
|================|============================================================|=========|
| system         | "*prefix*/lib/python*ver*/distutils/distutils.cfg"         | (1)     |
+----------------+------------------------------------------------------------+---------+
| personal       | "$HOME/.pydistutils.cfg"                                   | (2)     |
+----------------+------------------------------------------------------------+---------+
| lokal          | "setup.cfg"                                                | (3)     |
+----------------+------------------------------------------------------------+---------+

Dan di Windows, file konfigurasinya adalah:

+----------------+---------------------------------------------------+---------+
| Tipe file      | Lokasi dan nama file                              | Catatan |
|================|===================================================|=========|
| system         | "*prefix*\Lib\distutils\distutils.cfg"            | (4)     |
+----------------+---------------------------------------------------+---------+
| personal       | "%HOME%\pydistutils.cfg"                          | (5)     |
+----------------+---------------------------------------------------+---------+
| lokal          | "setup.cfg"                                       | (3)     |
+----------------+---------------------------------------------------+---------+

On all platforms, the "personal" file can be temporarily disabled by
passing the "--no-user-cfg" option.

Catatan:

1. Sebenarnya, file konfigurasi seluruh sistem berada di direktori
   tempat Distutils diinstal; di bawah Python 1.6 dan yang lebih baru
   di Unix, ini seperti yang ditunjukkan. Untuk Python 1.5.2,
   Distutils biasanya akan diinstal ke
   "*prefix*/lib/python1.5/site-/distutils", jadi file konfigurasi
   sistem harus diletakkan di sana dengan Python 1.5.2.

2. On Unix, if the "HOME" environment variable is not defined, the
   user's home directory will be determined with the "getpwuid()"
   function from the standard "pwd" module. This is done by the
   "os.path.expanduser()" function used by Distutils.

3. Yaitu, di direktori saat ini (biasanya lokasi skrip pengaturan).

4. (Lihat juga catatan (1).) Di bawah Python 1.6 dan yang lebih baru,
   "prefiks instalasi" default Python adalah "C:\Python", jadi file
   konfigurasi sistem biasanya "C:\PythonLib\distutils\distutils.cfg".
   Di bawah Python 1.5.2, prefiks defaultnya adalah "C:\Program
   Files\Python", dan Distutils bukan bagian dari standar pustaka---
   jadi file konfigurasi sistemnya adalah "C:\Program
   Files\Python\distutils\distutils.cfg" dalam instalasi Python 1.5.2
   standar pada Windows.

5. Pada Windows, jika variabel environment "HOME" tidak ditentukan,
   "USERPROFILE" maka "HOMEDRIVE" dan "HOMEPATH" akan dicoba. Ini
   dilakukan oleh fungsi "os.path.expanduser()" yang digunakan oleh
   Distutils.


Sintaks file konfigurasi
------------------------

Semua file konfigurasi Distutils memiliki sintaks yang sama. File
konfigurasi dikelompokkan menjadi beberapa bagian. Ada satu bagian
untuk setiap perintah Distutils, ditambah bagian "global" untuk opsi
global yang memengaruhi setiap perintah. Setiap bagian terdiri dari
satu opsi per baris, ditentukan sebagai "option=value".

Misalnya, berikut ini adalah file konfigurasi lengkap yang memaksa
semua perintah untuk berjalan diam-diam secara default:

   [global]
   verbose=0

Jika ini dipasang sebagai file konfigurasi sistem, ini akan
memengaruhi semua pemrosesan distribusi modul Python oleh pengguna
mana pun di sistem saat ini. Jika diinstal sebagai file konfigurasi
pribadi Anda (pada sistem yang mendukungnya), ini hanya akan
memengaruhi distribusi modul yang diproses oleh Anda. Dan jika
digunakan sebagai "setup.cfg" untuk distribusi modul tertentu, ini
hanya mempengaruhi distribusi tersebut.

Anda dapat menimpa direktori "build base" default dan membuat perintah
**build*** selalu secara paksa membangun kembali semua file dengan
yang berikut ini:

   [build]
   build-base=blib
   force=1

yang sesuai dengan argumen baris perintah

   python setup.py build --build-base=blib --force

kecuali itu menyertakan perintah **build** pada baris perintah berarti
bahwa perintah akan dijalankan. Memasukkan perintah tertentu dalam
file konfigurasi tidak memiliki implikasi seperti itu; ini hanya
berarti bahwa jika perintah dijalankan, opsi di file konfigurasi akan
diterapkan. (Atau jika perintah lain yang memperoleh nilai darinya
dijalankan, perintah tersebut akan menggunakan nilai di file
konfigurasi.)

Anda dapat menemukan daftar lengkap opsi untuk setiap perintah
menggunakan opsi "--help", misalnya:

   python setup.py build --help

dan Anda dapat mengetahui daftar lengkap opsi global dengan
menggunakan "--help" tanpa perintah:

   python setup.py --help

Lihat juga bagian "Referensi" dari manual "Mendistribusikan Modul
Python".


Membangun Ekstensi: Tip dan Trik
================================

Jika memungkinkan, Distutils mencoba menggunakan informasi konfigurasi
yang disediakan oleh interpreter Python yang digunakan untuk
menjalankan skrip "setup.py". Misalnya, penanda compiler dan linker
yang sama yang digunakan untuk mengompilasi Python juga akan digunakan
untuk mengompilasi ekstensi. Biasanya ini akan bekerja dengan baik,
tetapi dalam situasi yang rumit ini mungkin tidak tepat. Bagian ini
membahas cara mengganti perilaku Distutils yang biasa.


Menyesuaikan penanda compiler/linker
------------------------------------

Mengompilasi ekstensi Python yang ditulis dalam C atau C ++ kadang-
kadang akan memerlukan spesifikasi penanda khusus untuk compiler dan
linker untuk menggunakan library tertentu atau menghasilkan jenis kode
objek khusus. Ini terutama benar jika ekstensi belum diuji pada
platform Anda, atau jika Anda mencoba mengkompilasi silang Python.

Dalam kasus yang paling umum, pembuat ekstensi mungkin telah
memperkirakan bahwa kompilasi ekstensi akan menjadi rumit, dan
menyediakan file "Setup" file untuk Anda edit. Ini kemungkinan besar
hanya akan dilakukan jika distribusi modul berisi banyak modul
ekstensi terpisah, atau jika mereka sering membutuhkan kumpulan tanda
compiler yang rumit agar dapat berfungsi.

File "Setup", jika ada, diurai untuk mendapatkan daftar ekstensi yang
akan dibuat. Setiap baris dalam "Setup" menjelaskan modul tunggal.
Garis memiliki struktur berikut:

   module ... [sourcefile ...] [cpparg ...] [library ...]

Mari kita periksa masing-masing bidang secara bergantian.

* *module* adalah nama modul ekstensi yang akan dibuat, dan harus
  merupakan Python identifier yang valid. Anda tidak bisa begitu saja
  mengubah ini untuk mengganti nama modul (pengeditan ke kode sumber
  juga akan diperlukan), jadi ini harus dibiarkan saja.

* *sourcefile* adalah segala sesuatu yang cenderung menjadi file kode
  sumber, setidaknya dilihat dari nama filenya. Nama file yang
  diakhiri dengan ".c" diasumsikan ditulis dalam C, nama file yang
  diakhiri dengan ".C", ".cc", dan ".c++" diasumsikan sebagai C++, dan
  nama file yang diakhiri dengan ".m" atau ".mm" diasumsikan berada
  dalam Objective C.

* *cpparg* adalah argumen untuk preprocessor C, dan apa pun yang
  dimulai dengan "-I", "-D", "-U" atau :option:>>`<<!-C >>`<<.

* *library* adalah apapun yang diakhiri dengan ".a" atau dimulai
  dengan "-l" atau "-L".

Jika platform tertentu memerlukan pustaka khusus pada platform Anda,
Anda dapat menambahkannya dengan mengedit file "Setup" dan menjalankan
"python setup.py build". Misalnya, jika modul ditentukan oleh baris:

   foo foomodule.c

harus ditautkan dengan pustaka math "libm.a" pada platform Anda, cukup
tambahkan "-lm" ke baris:

   foo foomodule.c -lm

Sakelar arbitrer yang ditujukan untuk compiler atau linker dapat
diberikan dengan opsi "-Xcompiler" *arg* dan opsi "-Xlinker" *arg*:

   foo foomodule.c -Xcompiler -o32 -Xlinker -shared -lm

Opsi berikutnya setelah "-Xcompiler" dan "-Xlinker" akan ditambahkan
ke baris perintah yang tepat, jadi pada contoh di atas kompilator akan
diberikan opsi "-o32", dan penaut akan diberikan "-shared". Jika opsi
kompilator membutuhkan sebuah argumen, Anda harus menyediakan beberapa
opsi "-Xcompiler"; misalnya, untuk meneruskan "-x c++" file "Setup"
harus berisi "-Xcompiler -x -Xcompiler c++".

Penanda compiler juga bisa diberikan melalui pengaturan variabel
environment "CFLAGS". Jika disetel, konten "CFLAGS" akan ditambahkan
ke penanda kompilator yang ditentukan dalam file "Setup".


Menggunakan kompiler non-Microsoft di Windows
---------------------------------------------


Borland/CodeGear C ++
~~~~~~~~~~~~~~~~~~~~~

This subsection describes the necessary steps to use Distutils with
the Borland C++ compiler version 5.5.  First you have to know that
Borland's object file format (OMF) is different from the format used
by the Python version you can download from the Python or ActiveState
web site.  (Python is built with Microsoft Visual C++, which uses COFF
as the object file format.) For this reason you have to convert
Python's library "python25.lib" into the Borland format.  You can do
this as follows:

   coff2omf python25.lib python25_bcpp.lib

Program "coff2omf" dilengkapi dengan compiler Borland. File
"python25.lib" ada di direktori "Libs" dari instalasi Python Anda.
Jika ekstensi Anda menggunakan pustaka lain (zlib, ...) Anda juga
harus mengonversinya.

File yang dikonversi harus berada di direktori yang sama dengan
pustaka normal.

Bagaimana Distutils mengelola untuk menggunakan pustaka ini dengan
nama yang berubah? Jika ekstensi memerlukan pustaka (mis. "foo")
Distutils memeriksa terlebih dahulu apakah ia menemukan pustaka dengan
sufiks "_bcpp" (mis. "foo_bcpp.lib") dan kemudian menggunakan pustaka
ini. Dalam kasus ia tidak menemukan pustaka khusus ia menggunakan nama
default ("foo.lib".) [#] _

Untuk mengizinkan Distutils mengkompilasi ekstensi Anda dengan Borland
C++, Anda harus mengetik:

   python setup.py build --compiler=bcpp

Jika Anda ingin menggunakan kompiler Borland C++ sebagai default, Anda
dapat menentukannya di file konfigurasi pribadi atau sistem untuk
Distutils (lihat bagian File Konfigurasi Distutils.)

Lihat juga:

  C++ Builder Compiler
     Informasi tentang compiler C++ gratis dari Borland, termasuk link
     ke halaman download.

  *Membuat Ekstensi Python Menggunakan Kompiler Borland Gratis
  <http://www.cyberus.ca/~g_will/pyExtenDL.shtml>* _
     Dokumen yang menjelaskan cara menggunakan compiler C++ baris
     perintah gratis dari Borland untuk membuat Python.


GNU C / Cygwin / MinGW
~~~~~~~~~~~~~~~~~~~~~~

Bagian ini menjelaskan langkah-langkah yang diperlukan untuk
menggunakan Distutils dengan kompiler GNU C/C++ di distribusi Cygwin
dan MinGW mereka. [2] Untuk interpreter Python yang dibangun dengan
Cygwin, semuanya harus bekerja tanpa langkah-langkah berikut ini.

Tidak semua ekstensi dapat dibuat dengan MinGW atau Cygwin, tetapi
banyak yang bisa. Ekstensi yang paling mungkin tidak berfungsi adalah
ekstensi yang menggunakan C++ atau bergantung pada ekstensi Microsoft
Visual C.

Untuk mengizinkan Distutils mengkompilasi ekstensi Anda dengan Cygwin,
Anda harus mengetik:

   python setup.py build --compiler=cygwin

dan untuk Cygwin dalam mode no-cygwin [3] atau untuk tipe MinGW:

   python setup.py build --compiler=mingw32

Jika Anda ingin menggunakan salah satu opsi/kompiler ini sebagai
default, Anda harus mempertimbangkan untuk menulisnya di file
konfigurasi pribadi atau seluruh sistem Anda untuk Distutils (lihat
bagian File Konfigurasi Distutils.)


Versi Lama Python dan MinGW
"""""""""""""""""""""""""""

Petunjuk berikut hanya berlaku jika Anda menggunakan versi Python yang
lebih rendah dari 2.4.1 dengan MinGW yang lebih rendah dari 3.0.0
(dengan binutils-2.13.90-20030111-1).

Kompiler ini membutuhkan beberapa pustaka khusus. Tugas ini lebih
kompleks daripada C++ Borland, karena tidak ada program untuk
mengonversi pustaka. Pertama, Anda harus membuat daftar simbol yang
diekspor Python DLL. (Anda dapat menemukan program yang bagus untuk
tugas ini di https://sourceforge.net/projects/mingw/files/MinGW/Exten
sion/pexports/).

   pexports python25.dll >python25.def

Lokasi dari file yang diinstal "python25.dll" akan tergantung pada
opsi instalasi dan versi serta bahasa Windows. Dalam instalasi "hanya
untuk saya", ini akan muncul di root direktori instalasi. Dalam
instalasi bersama, itu akan ditempatkan di direktori sistem.

Kemudian Anda dapat membuat dari informasi ini pustaka impor untuk
gcc.

   /cygwin/bin/dlltool --dllname python25.dll --def python25.def --output-lib libpython25.a

Pustaka yang dihasilkan harus ditempatkan di direktori yang sama
dengan "python25.lib". (Seharusnya direktori "libs" di bawah direktori
instalasi Python Anda.)

Jika ekstensi Anda menggunakan pustaka lain (zlib, ...) Anda mungkin
harus mengonversinya juga. File yang dikonversi harus berada di
direktori yang sama seperti pustaka normal.

Lihat juga:

  Building Python modules on MS Windows platform with MinGW
     Informasi tentang membangun pustaka yang diperlukan untuk
     environment MinGW.

-[ Catatan kaki ]-

[1] Ini juga berarti Anda dapat mengganti semua pustaka COFF yang ada
    dengan pustaka OMF dengan nama yang sama.

[2] Cek https://www.sourceware.org/cygwin/ untuk info lebih lanjut

[3] Maka Anda tidak memiliki emulasi POSIX yang tersedia, tetapi Anda
    juga tidak memerlukan "cygwin1.dll".
