Pip kurulumunda köşeli parantezler ne anlama geliyor?


101

Bunun gibi daha fazla komut görüyorum:

$ pip install "splinter[django]"

Bu köşeli parantezler ne işe yarar?




Not o gerektiğini olmak pip install "splinter[django]", desen yanlışlıkla kabuk genişlemesini önlemek için.
chepner

@Ryan Ok şimdi bunu uygun bir cevap olarak ekleyin ve kabul edeceğim.
Babken Vardanyan

@chepner İyi nokta, yazıyı düzenledim.
Babken Vardanyan

Yanıtlar:


80

Kullandığınız sözdizimi şudur:

pip install "project[extra]"

Sizin durumunuzda, sen eklendi desteği vardır paket . Köşeli parantezler ( ) belirli bir sözdizimi değildir, sadece kuraldır. Gerçekten, adlandırılmış paketi yüklüyorsanız: .installingsplinterdjango[]"splinter[django]"

Şuradan bir açıklama @chetner:

Komut pip install splinter django, splinterve adında iki paket kuracaktır django. splinter[django], Öte yandan, için desteğinisplinter içeren paketin bir varyantını yükler . Paketin kendisiyle hiçbir ilgisi olmadığını , yalnızca etkinleştirilen belirli bir özellik kümesi için paket tarafından tanımlanan bir dize olduğunu unutmayın.djangodjangosplinter


1
Gelecekteki kullanıcıların yararlanabilmesi için cevabınızı genişletmek ister misiniz? Örneğin ne anlama extrageliyor?
Babken Vardanyan

6
@BabkenVardanyan Bu komut splinterve adlı iki paket kuracaktır django. splinter[django], Öte yandan, splinteriçin desteğini içeren paketin bir varyantını yükler django. djangoPaketin kendisiyle hiçbir ilgisi olmadığını , yalnızca splinteretkinleştirilen belirli bir özellik kümesi için paket tarafından tanımlanan bir dize olduğunu unutmayın.
chepner

5
splinterhala paket adıdır; pipkendisi ayrıştırır splinter[django]ve doğru dosyaları kurmasına yardımcı olmak için fazladan bir "argüman" ile bir paket adı olarak tanır. Argümanın nasıl djangoyorumlanacağı tamamen setup.pypaketi tanımlamak için kullanılan dosyaya (veya başka bir yapılandırma dosyasına? Aslında ayrıntıları bilmiyorum) bağlıdır splinter.
chepner

1
[Ekstra] sözdiziminin yaptığı tek şeyin, yüklenecek olan extras_requires'den ek belirtmek olduğuna inanıyorum. Yani, pip install splinterdaha az gereksinim yükleyecektir pip install splinter[django]. Yüklenen ek paketler gerçekten de kıymığın ek özelliklerinin çalışmasını sağlayabilir (ve muhtemelen yapar), ancak kıymık paketinin kendisi hakkında hiçbir şeyi değiştirmez. Sadece pip'e ek bağımlılıklar hakkında bilgi verir.
William Pursell

6
Bu cevabın yanlış olduğunu düşünüyorum. Bu bir "splinter [django]" paketi kurmaz, bunun yerine hem kıymık hem de Django projeleri yükler. Bunlar, @paul ve prosti tarafından verilen yanıtlarda açıklanan kurulum araçları ekstralarıdır
user1523170

19

PIP'deki [optional]köşeli parantezler isteğe bağlı bağımlılıkları belirtir

Başka bir geliştiricinin bu kalıbı kendi Python paketi dağıtımında uygulamak istemesi durumunda, burada brackets []in pip ile ilgili daha fazla açıklama var .

Örneğin: Apache Airflow

Yüklemek için airflowgelen pip bu komutu kullanın:

pip install 'apache-airflow'

Aşağıdakilerle isteğe bağlı hava akışı bileşenlerini kurabilirsiniz :

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

Biz ne zaman arama pypi için apache-airflownot opsiyonel paketler kadar görünmemesi:

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
...

Aracılığıyla uygulama setup.py

Bunun nasıl başarıldığını setup.py komut dosyasında görebilirsiniz
Solda setup.py- extras_requireiçinde tanımlanmıştır.
Sağda, bu isteğe bağlı alt paketler için ilişkili yükleme komutları vardır.

setup.py vs install


12

Bunların kurulum araçları ekstraları olduğundan oldukça eminim:

https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies

Bazen bir projenin, projenin tüm kullanımları için gerekli olmayan "önerilen" bağımlılıkları vardır. Örneğin, bir proje ReportLab kuruluysa isteğe bağlı PDF çıktısı ve docutils kuruluysa reStructuredText desteği sunabilir. Bu isteğe bağlı özelliklere "ekstralar" denir ...


4

Bu tam dan listesidir setup.pyproje için dosyanın soru :

"django": ["Django>=1.7.11;python_version<'3.0'", "Django>=2.0.6;python_version>'3.3'", "lxml>=2.3.6", "cssselect", "six"],
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.