Adakah yang bisa menjelaskan apa setup.py
dan bagaimana itu dapat dikonfigurasi atau digunakan?
Adakah yang bisa menjelaskan apa setup.py
dan bagaimana itu dapat dikonfigurasi atau digunakan?
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 install .
pip
akan menggunakan setup.py untuk menginstal modul Anda. Hindari menelepon setup.py
secara langsung.
https://docs.python.org/3/installing/index.html#installing-index
setup.py
file.
Ini membantu untuk menginstal paket python foo
pada mesin Anda (bisa juga di virtualenv
) sehingga Anda dapat mengimpor paket foo
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,
$ git clone https://github.com/user/foo
$ cd foo
$ python setup.py install
Sebagai gantinya, jika Anda tidak ingin menginstalnya tetapi masih ingin menggunakannya. Lalu lakukan,
$ python setup.py develop
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,
foo
├── foo
│ ├── data_struct.py
│ ├── __init__.py
│ └── internals.py
├── README
├── requirements.txt
└── setup.py
Kemudian, Anda melakukan hal berikut dalam setup.py
skrip Anda sehingga dapat diinstal pada beberapa mesin:
from setuptools import setup
setup(
name='foo',
version='1.0',
description='A useful module',
author='Man Foo',
author_email='foomail@foo.com',
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
)
Sebaliknya, jika pohon paket Anda lebih kompleks seperti di bawah ini:
foo
├── foo
│ ├── data_struct.py
│ ├── __init__.py
│ └── internals.py
├── README
├── requirements.txt
├── scripts
│ ├── cool
│ └── skype
└── setup.py
Maka, Anda setup.py
dalam hal ini akan seperti:
from setuptools import setup
setup(
name='foo',
version='1.0',
description='A useful module',
author='Man Foo',
author_email='foomail@foo.com',
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
scripts=[
'scripts/cool',
'scripts/skype',
]
)
Tambahkan lebih banyak barang ke ( setup.py
) & buat layak:
from setuptools import setup
with open("README", 'r') as f:
long_description = f.read()
setup(
name='foo',
version='1.0',
description='A useful module',
license="MIT",
long_description=long_description,
author='Man Foo',
author_email='foomail@foo.com',
url="http://www.foopackage.com/",
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
scripts=[
'scripts/cool',
'scripts/skype',
]
)
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:
$ python setup.py register
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,
$ python setup.py upload
Secara opsional, Anda juga dapat menandatangani paket Anda dengan GPG
,
$ python setup.py --sign upload
Bonus : Lihat contoh setup.py
dari proyek nyata di sini:torchvision-setup.py
requests
) memiliki proyek ini untuk secara eksplisit memberikan contoh yang baik dari setup.py - github.com/kennethreitz/setup.py
setup.py
adalah jawaban Python untuk penginstal dan make
file multi-platform .
Jika Anda terbiasa dengan instalasi baris perintah, maka make && make install
terjemahkan ke python 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
atau cl
) dan modul antarmuka Python (suka swig
atau pyrex
).
python setup.py install
sebenarnya berjalan python setup.py build
terlebih dahulu (jadi Anda tidak perlu menjalankannya secara terpisah kecuali dalam kasus tertentu). Saya percaya make
selalu harus dijalankan secara manual sebelum menjalankan make install
.
make
tidak memerlukan parameter khusus (atau pemesanan): Ini sepenuhnya tergantung pada pembuat Makefile
"target" yang tersedia (dan dalam urutan mana mereka perlu dipanggil). Karena bare Makefile
s (biasanya) tidak terlalu portabel, mereka cenderung dihasilkan menggunakan perintah seperti ./configure
(autotools) atau cmake .
(cmake) dan karenanya hingga program-program ini untuk menentukan apakah Anda perlu menjalankan secara eksplisit make
sebelum make install
atau tidak.
Jika Anda mengunduh paket yang memiliki "setup.py" di folder root, Anda dapat menginstalnya dengan menjalankan
python setup.py install
Jika Anda sedang mengembangkan proyek dan bertanya-tanya untuk apa file ini berguna, periksa dokumentasi Python tentang penulisan Skrip Pengaturan
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 dengan setup.py
.
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
python setup.py build
python setup.py install
python setup.py sdist <distname> upload [-r urltorepo] (to upload package to pypi or local repo)
Ada banyak perintah lain yang dapat digunakan dengan setup.py. untuk bantuan
python setup.py --help-commands
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). Menggunakan cd
dan membantu Anda dengan tombol Tab mengatur jalur ke folder di mana Anda telah mengunduh file dan di mana ada setup.py
:
iMac:~ user $ cd path/pakagefolderwithsetupfile/
Tekan enter, Anda akan melihat sesuatu seperti ini:
iMac:pakagefolderwithsetupfile user$
Kemudian ketik setelah ini python setup.py install
:
iMac:pakagefolderwithsetupfile user$ python setup.py install
Tekan enter
. Selesai!
Untuk menginstal paket Python yang telah Anda unduh, Anda mengekstrak arsip dan menjalankan skrip setup.py di dalam:
python setup.py install
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.
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 menggunakan pip
, versi Python lama tidak termasuk pip
secara default dan mereka perlu diinstal secara terpisah.
Jika Anda ingin menginstal modul tetapi tidak ingin menginstal pip
, satu-satunya alternatif adalah menginstal modul dari setup.py
file. Ini dapat dicapai melalui python setup.py install
. Ini akan menginstal modul Python ke kamus root (tanpa pip
, easy_install
dll).
Metode ini sering digunakan ketika pip
akan gagal. Sebagai contoh jika versi Python yang benar dari paket yang diinginkan tidak tersedia melalui pip
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 :
from distutils.core import setup
from Cython.Build import cythonize
setup(
name = 'Hello world app',
ext_modules = cythonize("hello.pyx"),
)
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 :
import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "guifoo",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("guifoo.py", base=base)])
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.
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.
Dua bagian berikut membahas dua hal yang dimiliki banyak modul setup.py.
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/",]
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 .