Apa arti tanda kurung siku dalam pemasangan pip?

100

Saya melihat semakin banyak perintah seperti ini:

$ pip install "splinter[django]"

Apa yang dilakukan tanda kurung siku ini?

Babken Vardanyan
sumber
Perhatikan bahwa seharusnya demikian pip install "splinter[django]", untuk menghindari perluasan pola cangkang yang tidak disengaja.
chepner
@Ryan Ok sekarang tambahkan itu sebagai jawaban yang tepat dan saya akan menerimanya.
Babken Vardanyan
@chepner Poin bagus, saya mengedit postingan.
Babken Vardanyan

Jawaban:

80

Sintaks yang Anda gunakan adalah:

pip install "project[extra]"

Dalam kasus Anda, Anda installingyang splinterpaket yang memiliki dukungan ditambahkan untuk django. Tanda kurung siku ( []) bukanlah sintaks spesifik, hanya konvensi. Benar-benar, Anda menginstal paket bernama: "splinter[django]".

Penjelasan dari @chetner:

Perintah tersebut pip install splinter djangoakan menginstal dua paket bernama splinterdan django. splinter[django], di sisi lain, menginstal varian splinterpaket yang berisi dukungan untuk django. Perhatikan bahwa ini tidak ada hubungannya dengan djangopaket itu sendiri, tetapi hanya string yang ditentukan oleh splinterpaket untuk set fitur tertentu yang diaktifkan.

Joe Iddon
sumber
1
Ingin memperluas jawaban Anda sehingga pengguna di masa mendatang bisa mendapatkan keuntungan? Misalnya apa extraartinya?
Babken Vardanyan
6
@BabkenVardanyan Perintah itu akan menginstal dua paket bernama splinterdan django. splinter[django], di sisi lain, menginstal varian splinterpaket yang berisi dukungan untuk django. Perhatikan bahwa ini tidak ada hubungannya dengan djangopaket itu sendiri, tetapi hanya string yang ditentukan oleh splinterpaket untuk set fitur tertentu yang diaktifkan.
chepner
5
splintermasih merupakan nama paket; pipitu sendiri mem splinter[django]- parsing dan mengenalinya sebagai nama paket dengan "argumen" tambahan untuk membantunya menginstal file yang benar. Bagaimana argumen djangodiinterpretasikan sepenuhnya tergantung pada setup.pyfile (atau file konfigurasi lainnya? Saya tidak benar-benar tahu detailnya) yang digunakan untuk mendefinisikan paket splinter.
chepner
1
Saya yakin satu-satunya hal yang dilakukan sintaks [ekstra] adalah menentukan tambahan dari extras_requires yang akan diinstal. Artinya, pip install splinterakan menginstal lebih sedikit persyaratan dari pip install splinter[django]. Paket tambahan yang diinstal mungkin (dan mungkin memang) memungkinkan fitur tambahan dari splinter untuk bekerja, tetapi itu tidak mengubah apapun tentang paket splinter itu sendiri. Ini hanya memberi tahu pip tentang dependensi tambahan.
William Pursell
6
Saya pikir jawaban ini salah. Ini tidak memasang paket "sempalan [django]", melainkan kedua proyek sempalan dan Django. Ini adalah tambahan setuptools seperti yang dijelaskan dalam jawaban oleh @paul dan prosti
pengguna1523170
19

Tanda kurung [optional]di PIP menandakan dependensi opsional

Untuk berjaga-jaga jika ada pengembang lain yang ingin mengimplementasikan pola ini dalam penerapan paket Python mereka sendiri, berikut penjelasan lebih lanjut tentang brackets []in pip.

Misalnya: Apache Airflow

Untuk menginstal airflowdari pip kami menggunakan perintah ini:

pip install 'apache-airflow'

Anda dapat memasang komponen opsional aliran udara dengan:

pip install 'apache-airflow[aws]'
#      [optional] -----------^

Ketika kami mencari pypi untuk apache-airflowcatatan bahwa paket opsional tidak muncul:

pip search 'apache-airflow'

apache-airflow (1.10.9)                            - Programmatically author, schedule and monitor data pipelines
pylint-airflow (0.1.0a1)                           - A Pylint plugin to lint Apache Airflow code.
swe-airflow-tools (0.0.3)                          - Tools for Apache Airflow Application
airflow (0.6)                                      - Placeholder for the old Airflow package
...

Implementasi melalui setup.py

Anda dapat melihat bagaimana ini dilakukan dalam setup.py skrip
Di sebelah kiri dalam setup.py- extras_requiredidefinisikan.
Di sebelah kanan adalah perintah instalasi terkait untuk sub-paket opsional ini.

setup.py vs install

Ben DeMott
sumber
4

Ini persis dengan daftar dari setup.pyfile untuk proyek yang dimaksud :

"django": ["Django>=1.7.11;python_version<'3.0'", "Django>=2.0.6;python_version>'3.3'", "lxml>=2.3.6", "cssselect", "six"],
prosti
sumber