Adakah yang bisa menjelaskan apa setup.py
dan bagaimana itu dapat dikonfigurasi atau digunakan?
python
python-3.x
setup.py
pypi
python-packaging
Antusiasme Perangkat Lunak
sumber
sumber
Jawaban:
setup.py
adalah file python, yang biasanya memberi tahu Anda bahwa modul / paket yang akan Anda instal telah dikemas dan didistribusikan dengan Distutils, yang merupakan standar untuk mendistribusikan Modul Python.Ini memungkinkan Anda untuk dengan mudah menginstal paket Python. Cukup sering menulis:
pip
akan menggunakan setup.py untuk menginstal modul Anda. Hindari meneleponsetup.py
secara langsung.https://docs.python.org/3/installing/index.html#installing-index
sumber
setup.py
file.Ini membantu untuk menginstal paket python
foo
pada mesin Anda (bisa juga divirtualenv
) sehingga Anda dapat mengimpor paketfoo
dari proyek lain dan juga dari [I] Python meminta.Ia melakukan pekerjaan serupa
pip
,easy_install
dll.,Menggunakan
setup.py
Mari kita mulai dengan beberapa definisi:
Paket - Folder / direktori yang berisi
__init__.py
file.Module - File python yang valid dengan
.py
ekstensi.Distribusi - Bagaimana satu paket berhubungan dengan paket dan modul lainnya .
Katakanlah Anda ingin menginstal paket bernama
foo
. Lalu kamu lakukan,Sebagai gantinya, jika Anda tidak ingin menginstalnya tetapi masih ingin menggunakannya. Lalu lakukan,
Perintah ini akan membuat symlink ke direktori sumber di dalam paket situs alih-alih menyalin sesuatu. Karena itu, ini sangat cepat (terutama untuk paket besar).
Menciptakan
setup.py
Jika Anda memiliki pohon paket seperti,
Kemudian, Anda melakukan hal berikut dalam
setup.py
skrip Anda sehingga dapat diinstal pada beberapa mesin:Sebaliknya, jika pohon paket Anda lebih kompleks seperti di bawah ini:
Maka, Anda
setup.py
dalam hal ini akan seperti:Tambahkan lebih banyak barang ke (
setup.py
) & buat layak:Ini
long_description
digunakan di pypi.org sebagai deskripsi README dari paket Anda.Dan akhirnya, Anda sekarang siap untuk mengunggah paket Anda ke PyPi.org sehingga orang lain dapat menginstal paket Anda menggunakan
pip install yourpackage
.Langkah pertama adalah mengklaim nama paket Anda & ruang di pypi menggunakan:
Setelah nama paket Anda terdaftar, tidak ada yang bisa mengklaim atau menggunakannya. Setelah pendaftaran berhasil, Anda harus mengunggah paket Anda ke sana (ke cloud) dengan,
Secara opsional, Anda juga dapat menandatangani paket Anda dengan
GPG
,Bonus : Lihat contoh
setup.py
dari proyek nyata di sini:torchvision-setup.py
sumber
requests
) memiliki proyek ini untuk secara eksplisit memberikan contoh yang baik dari setup.py - github.com/kennethreitz/setup.pysetup.py
adalah jawaban Python untuk penginstal danmake
file multi-platform .Jika Anda terbiasa dengan instalasi baris perintah, maka
make && make install
terjemahkan kepython setup.py build && python setup.py install
.Beberapa paket adalah Python murni, dan hanya byte yang dikompilasi. Orang lain mungkin berisi kode asli, yang akan memerlukan kompiler asli (suka
gcc
ataucl
) dan modul antarmuka Python (sukaswig
ataupyrex
).sumber
python setup.py install
sebenarnya berjalanpython setup.py build
terlebih dahulu (jadi Anda tidak perlu menjalankannya secara terpisah kecuali dalam kasus tertentu). Saya percayamake
selalu harus dijalankan secara manual sebelum menjalankanmake install
.make
tidak memerlukan parameter khusus (atau pemesanan): Ini sepenuhnya tergantung pada pembuatMakefile
"target" yang tersedia (dan dalam urutan mana mereka perlu dipanggil). Karena bareMakefile
s (biasanya) tidak terlalu portabel, mereka cenderung dihasilkan menggunakan perintah seperti./configure
(autotools) ataucmake .
(cmake) dan karenanya hingga program-program ini untuk menentukan apakah Anda perlu menjalankan secara eksplisitmake
sebelummake install
atau tidak.Jika Anda mengunduh paket yang memiliki "setup.py" di folder root, Anda dapat menginstalnya dengan menjalankan
Jika Anda sedang mengembangkan proyek dan bertanya-tanya untuk apa file ini berguna, periksa dokumentasi Python tentang penulisan Skrip Pengaturan
sumber
setup.py
adalah skrip Python yang biasanya dikirimkan bersama perpustakaan atau program, ditulis dalam bahasa itu. Tujuannya adalah pemasangan perangkat lunak yang benar.Banyak paket menggunakan
distutils
framework dalam hubungannya dengansetup.py
.http://docs.python.org/distutils/
sumber
setup.py dapat digunakan dalam dua skenario, Pertama, Anda ingin menginstal paket Python. Kedua, Anda ingin membuat paket Python Anda sendiri. Biasanya paket standar Python memiliki beberapa file penting seperti setup.py, setup.cfg dan Manifest.in. Saat Anda membuat paket Python, ketiga file ini akan menentukan nama (versi di PKG-INFO di bawah folder info-telur), versi, deskripsi, instalasi lain yang diperlukan (biasanya dalam file .txt) dan beberapa parameter lainnya. setup.cfg dibaca oleh setup.py saat paket dibuat (bisa tar.gz). Manifest.in adalah di mana Anda dapat menentukan apa yang harus dimasukkan dalam paket Anda. Bagaimanapun Anda dapat melakukan banyak hal menggunakan setup.py suka
Ada banyak perintah lain yang dapat digunakan dengan setup.py. untuk bantuan
sumber
python setup.py --help-commands
. Sangat berguna saat menggali ke dalam setup.py.Saat Anda mengunduh paket dengan
setup.py
membuka Terminal (Mac, Linux) atau Command Prompt (Windows). Menggunakancd
dan membantu Anda dengan tombol Tab mengatur jalur ke folder di mana Anda telah mengunduh file dan di mana adasetup.py
:Tekan enter, Anda akan melihat sesuatu seperti ini:
Kemudian ketik setelah ini
python setup.py install
:Tekan
enter
. Selesai!sumber
Untuk menginstal paket Python yang telah Anda unduh, Anda mengekstrak arsip dan menjalankan skrip setup.py di dalam:
Bagi saya, ini selalu terasa aneh. Akan lebih alami untuk menunjuk pengelola paket saat unduhan, seperti yang dilakukan di Ruby dan Nodejs, misalnya.
gem install rails-4.1.1.gem
Pengelola paket juga lebih nyaman, karena akrab dan dapat diandalkan. Di sisi lain, masing
setup.py
- masing novel, karena khusus untuk paket. Ini menuntut kepercayaan pada konvensi "Saya percaya setup ini .py mengambil perintah yang sama seperti yang saya gunakan di masa lalu". Itu pajak yang disesalkan pada kemauan mental.Saya tidak mengatakan alur kerja setup.py kurang aman daripada manajer paket (saya mengerti Pip hanya menjalankan setup.py di dalam), tapi tentu saja saya merasa itu canggung dan menggelegar. Ada keselarasan untuk perintah semua ke aplikasi manajer paket yang sama. Anda bahkan mungkin akan menyukainya.
sumber
setup.py
adalah file Python seperti yang lainnya. Itu dapat mengambil nama apa pun, kecuali dengan konvensi itu namanyasetup.py
sehingga tidak ada prosedur yang berbeda dengan masing-masing skrip.Paling sering
setup.py
digunakan untuk menginstal modul Python tetapi server tujuan lain:Modul:
Mungkin ini adalah penggunaan yang paling terkenal
setup.py
dalam modul. Meskipun mereka dapat diinstal menggunakanpip
, versi Python lama tidak termasukpip
secara default dan mereka perlu diinstal secara terpisah.Jika Anda ingin menginstal modul tetapi tidak ingin menginstal
pip
, satu-satunya alternatif adalah menginstal modul darisetup.py
file. Ini dapat dicapai melaluipython setup.py install
. Ini akan menginstal modul Python ke kamus root (tanpapip
,easy_install
dll).Metode ini sering digunakan ketika
pip
akan gagal. Sebagai contoh jika versi Python yang benar dari paket yang diinginkan tidak tersedia melaluipip
mungkin karena tidak lagi dipertahankan, mengunduh sumber dan menjalankanpython setup.py install
akan melakukan hal yang sama, kecuali dalam kasus biner yang dikompilasi diperlukan, (tetapi akan mengabaikan Versi Python -kecuali kesalahan dikembalikan).Penggunaan lain
setup.py
adalah menginstal paket dari sumber. Jika modul masih dalam pengembangan, file roda tidak akan tersedia dan satu-satunya cara untuk menginstal adalah menginstal dari sumber secara langsung.Membangun ekstensi Python:
Ketika modul telah dibangun, modul tersebut dapat dikonversi menjadi modul yang siap didistribusikan dengan menggunakan skrip pengaturan distutils . Setelah dibangun, ini dapat diinstal menggunakan perintah di atas.
Skrip pengaturan mudah dibuat dan setelah file dikonfigurasikan dengan benar dan dapat dikompilasi dengan menjalankan
python setup.py build
(lihat tautan untuk semua perintah).Sekali lagi ini dinamai
setup.py
untuk kemudahan penggunaan dan dengan konvensi, tetapi dapat mengambil nama apa pun.Cython:
Penggunaan
setup.py
file terkenal lainnya termasuk ekstensi yang dikompilasi. Ini membutuhkan skrip pengaturan dengan nilai yang ditentukan pengguna. Mereka memungkinkan eksekusi cepat (tetapi setelah dikompilasi bergantung pada platform). Berikut adalah contoh sederhana dari dokumentasi :Ini dapat dikompilasi melalui
python setup.py build
Cx_Freeze:
Modul lain yang membutuhkan skrip pengaturan adalah
cx_Freeze
. Ini mengubah skrip Python menjadi executable. Ini memungkinkan banyak perintah seperti deskripsi, nama, ikon, paket untuk dimasukkan, tidak termasuk dll dan sekali dijalankan akan menghasilkan aplikasi yang dapat didistribusikan. Contoh dari dokumentasi :Ini dapat dikompilasi melalui
python setup.py build
.Jadi apa itu
setup.py
file?Sederhananya itu adalah skrip yang membangun atau mengkonfigurasi sesuatu di lingkungan Python.
Sebuah paket ketika didistribusikan harus mengandung hanya satu skrip pengaturan tetapi tidak jarang untuk menggabungkan beberapa skrip pengaturan menjadi satu. Perhatikan ini sering melibatkan
distutils
tetapi tidak selalu (seperti yang saya tunjukkan dalam contoh terakhir saya). Yang perlu diingat itu hanya mengkonfigurasi paket / skrip Python dalam beberapa cara.Dibutuhkan nama sehingga perintah yang sama selalu dapat digunakan saat membangun atau menginstal.
sumber
Untuk membuatnya sederhana, setup.py dijalankan seperti
"__main__"
ketika Anda memanggil fungsi instal jawaban lain yang disebutkan. Di dalam setup.py, Anda harus meletakkan semua yang diperlukan untuk menginstal paket Anda.Fungsi setup.py umum
Dua bagian berikut membahas dua hal yang dimiliki banyak modul setup.py.
setuptools.setup
Fungsi ini memungkinkan Anda untuk menentukan atribut proyek seperti nama proyek, versi .... Yang paling penting, fungsi ini memungkinkan Anda untuk menginstal fungsi lain jika mereka dikemas dengan benar. Lihat halaman web ini untuk contoh setuptools.setup
Atribut setuptools.setup ini memungkinkan menginstal jenis paket ini:
Paket yang diimpor ke proyek Anda dan terdaftar di PyPI menggunakan setuptools.findpackages :
packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])
Paket tidak dalam PyPI , tetapi dapat diunduh dari URL menggunakan dependency_links
dependency_links=["http://peak.telecommunity.com/snapshots/",]
Fungsi kustom
Di dunia yang ideal,
setuptools.setup
akan menangani segalanya untuk Anda. Sayangnya ini tidak selalu terjadi. Kadang-kadang Anda harus melakukan hal-hal tertentu, seperti menginstal dependensi dengan perintah subproses , untuk mendapatkan sistem yang Anda instal dalam keadaan yang tepat untuk paket Anda. Cobalah untuk menghindari ini, fungsi-fungsi ini menjadi membingungkan dan seringkali berbeda antara OS dan pemerataan .sumber