# 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/pythonX.Y/site-packages` | `/usr/local/lib/pythonX.Y/site-packages` | (1)
Unix (tidak murni) | `exec-prefix/lib/pythonX.Y/site-packages` | `/usr/local/lib/pythonX.Y/site-packages` | (1)
Windows | `prefix\Lib\site-packages` | `C:\PythonXY\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/pythonX.Y/site-packages`
skrip | `userbase/bin`
data | `userbase`
C header | `userbase/include/pythonX.Yabiflags/distname`

Dan inilah nilai yang digunakan di Windows:

Tipe file | Direktori instalasi
--- | ---
modul | `userbase\PythonXY\site-packages`
skrip | `userbase\PythonXY\Scripts`
data | `userbase`
C header | `userbase\PythonXY\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/pythonX.Y/site-packages`
modul ekstensi | `exec-prefix/lib/pythonX.Y/site-packages`
skrip | `prefix/bin`
data | `prefix`
C header | `prefix/include/pythonX.Yabiflags/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/pythonver/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/Extension/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`.