วงเล็บเหลี่ยมหมายถึงอะไรในการติดตั้ง pip?


100

ฉันเห็นคำสั่งเช่นนี้มากขึ้นเรื่อย ๆ :

$ pip install "splinter[django]"

วงเล็บเหลี่ยมเหล่านี้ทำหน้าที่อะไร?




หมายเหตุว่ามันควรจะเป็นpip install "splinter[django]"เพื่อหลีกเลี่ยงการขยายตัวของเปลือกใด ๆ โดยไม่ได้ตั้งใจของแบบแผน
chepner

@Ryan Ok ตอนนี้เพิ่มว่าเป็นคำตอบที่เหมาะสมและฉันจะยอมรับมัน
Babken Vardanyan

@chepner จุดดีฉันแก้ไขโพสต์
Babken Vardanyan

คำตอบ:


80

ไวยากรณ์ที่คุณใช้คือ:

pip install "project[extra]"

ในกรณีของคุณคุณจะแพคเกจที่มีการเพิ่มการสนับสนุนสำหรับ วงเล็บเหลี่ยม ( ) ไม่ใช่ไวยากรณ์เฉพาะ แต่เป็นแบบแผน จริงๆคุณกำลังติดตั้งแพ็คเกจชื่อ: .installingsplinterdjango[]"splinter[django]"

คำอธิบายจาก@chetner:

คำสั่งpip install splinter djangoจะติดตั้งสองแพ็คเกจชื่อsplinterและdjango. splinter[django]บนมืออื่น ๆ ที่ติดตั้งแตกต่างจากที่splinterแพคเกจที่มีการสนับสนุนdjangoสำหรับ โปรดทราบว่าไม่มีส่วนเกี่ยวข้องกับdjangoแพ็คเกจ แต่เป็นเพียงสตริงที่กำหนดโดยsplinterแพ็กเกจสำหรับชุดคุณลักษณะเฉพาะที่เปิดใช้งาน


1
ต้องการขยายคำตอบของคุณเพื่อให้ผู้ใช้ในอนาคตได้รับประโยชน์หรือไม่? เช่นextraแปลว่าอะไร?
Babken Vardanyan

6
@BabkenVardanyan คำสั่งนั้นจะติดตั้งสองแพ็คเกจชื่อsplinterและdjango. splinter[django]บนมืออื่น ๆ ที่ติดตั้งแตกต่างจากที่แพคเกจที่มีการสนับสนุนsplinter djangoโปรดทราบว่าไม่มีส่วนเกี่ยวข้องกับdjangoแพ็คเกจ แต่เป็นเพียงสตริงที่กำหนดโดยsplinterแพ็กเกจสำหรับชุดคุณลักษณะเฉพาะที่เปิดใช้งาน
chepner

5
splinterยังคงเป็นชื่อแพ็คเกจ pipแยกวิเคราะห์splinter[django]และรับรู้ว่ามันเป็นชื่อแพ็กเกจโดยมี "อาร์กิวเมนต์" พิเศษเพื่อช่วยในการติดตั้งไฟล์ที่ถูกต้อง วิธีการโต้แย้งdjangoการตีความนี้ขึ้นอยู่กับsetup.pyไฟล์ (หรือบางไฟล์ config อื่น ๆ หรือไม่ฉันไม่จริงรู้รายละเอียด) splinterใช้ในการกำหนดแพคเกจ
chepner

1
ฉันเชื่อว่าสิ่งเดียวที่ไวยากรณ์ [พิเศษ] ทำคือระบุเพิ่มเติมจาก extras_requires ที่จะติดตั้ง นั่นคือจะติดตั้งน้อยกว่าความต้องการpip install splinter pip install splinter[django]แพคเกจเพิ่มเติมที่ติดตั้งอาจ (และอาจทำ) เปิดใช้งานคุณสมบัติเพิ่มเติมของเสี้ยนเพื่อทำงานได้ แต่จะไม่เปลี่ยนแปลงอะไรเกี่ยวกับแพ็คเกจเสี้ยน เพียงแค่บอก pip เกี่ยวกับการอ้างอิงเพิ่มเติม
William Pursell

6
ฉันคิดว่าคำตอบนี้ไม่ถูกต้อง สิ่งนี้ไม่ได้ติดตั้งแพ็คเกจ "เสี้ยน [django]" แต่เป็นทั้งโปรเจ็กต์เสี้ยนและ Django เหล่านี้เป็น setuptools พิเศษตามที่อธิบายไว้ในคำตอบโดย @paul และ prosti
user1523170

19

วงเล็บ[optional]ใน PIP หมายถึงการอ้างอิงที่เป็นทางเลือก

ในกรณีที่นักพัฒนารายอื่นต้องการนำรูปแบบนี้ไปใช้ในการปรับใช้แพ็คเกจ Python ของตนเองนี่คือคำอธิบายเพิ่มเติมเกี่ยวกับbrackets []in pip

ตัวอย่างเช่น Apache Airflow

ในการติดตั้งairflowจากpipเราใช้คำสั่งนี้:

pip install 'apache-airflow'

คุณสามารถติดตั้งส่วนประกอบเสริมของการไหลของอากาศด้วย:

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

เมื่อเราค้นหา pypiเพื่อapache-airflowทราบว่าแพ็คเกจเสริมไม่ปรากฏขึ้น:

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

การใช้งานผ่าน setup.py

คุณสามารถดูว่าสิ่งนี้สำเร็จได้อย่างไรในsetup.py สคริปต์
ทางด้านซ้ายในsetup.py- extras_requireกำหนดไว้
ทางด้านขวาคือคำสั่งการติดตั้งที่สัมพันธ์กันสำหรับแพ็กเกจย่อยที่เป็นทางเลือกเหล่านี้

setup.py เทียบกับติดตั้ง


12

ค่อนข้างแน่ใจว่านี่คือความพิเศษของ setuptools:

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

บางครั้งโครงการมีการอ้างอิง "แนะนำ" ซึ่งไม่จำเป็นสำหรับการใช้งานทั้งหมดของโครงการ ตัวอย่างเช่นโปรเจ็กต์อาจเสนอเอาต์พุต PDF ที่เป็นทางเลือกหากมีการติดตั้ง ReportLab และ reStructuredText รองรับหากติดตั้ง docutils คุณสมบัติเสริมเหล่านี้เรียกว่า“ ความพิเศษ” ...


4

นี่คือรายการจากsetup.pyไฟล์สำหรับโครงการที่เป็นปัญหา :

"django": ["Django>=1.7.11;python_version<'3.0'", "Django>=2.0.6;python_version>'3.3'", "lxml>=2.3.6", "cssselect", "six"],
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.