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 (
):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) |
|
|
(1) |
Unix (tidak murni) |
|
|
(1) |
Windows |
|
|
(2) |
Catatan:
Kebanyakan distribusi Linux menyertakan Python sebagai bagian standar sistem, jadi
prefix
danexec-prefix
biasanya keduanya/usr
di Linux. Jika Anda membuat Python sendiri di Linux (atau sistem serupa Unix), bawaanprefix
danexec-prefix
adalah/usr/local
.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 . 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 |
|
skrip |
|
data |
|
C header |
|
Dan inilah nilai yang digunakan di Windows:
Tipe file |
Direktori instalasi |
---|---|
modul |
|
skrip |
|
data |
|
C header |
|
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=~
Untuk membuat Python menemukan distribusi yang diinstal dengan skema ini, Anda mungkin harus memodifikasi path pencarian Python atau edit sitecustomize
(lihat site
) untuk memanggil site.addsitedir()
atau 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 |
|
skrip |
|
data |
|
C header |
|
(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 |
|
modul ekstensi |
|
skrip |
|
data |
|
C header |
|
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 |
|
skrip |
|
data |
|
C header |
|
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 |
|
modul ekstensi |
|
semua modul |
|
skrip |
|
data |
|
C header |
|
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/')
Namun, jika Anda menginstal ulang versi utama Python yang sama (mungkin saat meningkatkan dari 2.2 ke 2.2.2, misalnya) site.py
akan ditimpa oleh versi stok. Anda harus ingat bahwa itu telah diubah dan menyimpan salinannya sebelum melakukan instalasi.
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 |
|
(1) |
personal |
|
(2) |
lokal |
|
(3) |
Dan di Windows, file konfigurasinya adalah:
Tipe file |
Lokasi dan nama file |
Catatan |
---|---|---|
system |
|
(4) |
personal |
|
(5) |
lokal |
|
(3) |
On all platforms, the "personal" file can be temporarily disabled by
passing the --no-user-cfg
option.
Catatan:
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.Pada Unix, jika variabel environment
HOME
tidak ditentukan, direktori home pengguna akan ditentukan dengan fungsigetpwuid()
dari modul standarpwd
. Ini dilakukan oleh fungsios.path.expanduser()
yang digunakan oleh Distutils.Yaitu, di direktori saat ini (biasanya lokasi skrip pengaturan).
(Lihat juga catatan (1).) Di bawah Python 1.6 dan yang lebih baru, "prefiks instalasi" default Python adalah
C:\Python
, jadi file konfigurasi sistem biasanyaC:\PythonLib\distutils\distutils.cfg
. Di bawah Python 1.5.2, prefiks defaultnya adalahC:\Program Files\Python
, dan Distutils bukan bagian dari standar pustaka---jadi file konfigurasi sistemnya adalahC:\Program Files\Python\distutils\distutils.cfg
dalam instalasi Python 1.5.2 standar pada Windows.Pada Windows, jika variabel environment
HOME
tidak ditentukan,USERPROFILE
makaHOMEDRIVE
danHOMEPATH
akan dicoba. Ini dilakukan oleh fungsios.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
.