Pipfile และ Pipfile.lock มีการใช้งานอย่างไร


132

ดูเหมือนว่า Pipfile / Pipfile.lock มีวัตถุประสงค์เพื่อทดแทนความต้องการ.txtในบริบทของบรรจุภัณฑ์ Python อย่างไรก็ตามมีเอกสารไม่มากเกี่ยวกับวิธีการใช้งานจริงเหล่านี้ ฉันพบคำอธิบายการพัฒนาของ pipfile ในส่วน PyPi ของเว็บไซต์ Python ที่นี่แต่มันค่อนข้างยุ่งและไม่ได้อธิบายความหมายของส่วนต่าง ๆ ของไฟล์

ตัวชี้ใด ๆ เกี่ยวกับวิธีทำความเข้าใจไฟล์เหล่านี้?


2
นี่คืออะนาล็อกโดยตรงของGemfileและGemfile.lockจากโลกรูบี: .lockไฟล์นี้มีเวอร์ชันเฉพาะสำหรับการพึ่งพาแต่ละครั้ง ส่วนที่ไม่มีส่วนขยายนั้นจะมีเฉพาะรุ่นที่รู้จักกันเพื่อการควบคุม ที่กล่าวว่าการขอคำอธิบายเกี่ยวกับบางสิ่งที่ยังคงพัฒนาอยู่และไกลออกไปจากการถูกกำหนดอย่างดีมาตรฐานที่น้อยกว่าอาจจะเป็นบิตก่อนวัยอันควร
ชาร์ลส์ดัฟฟี่

(และในทำนองเดียวกันความแตกต่างระหว่างPipfileและrequirements.txtเป็นส่วนใหญ่ที่ก่อนหน้านี้พยายามที่จะใช้คุณสมบัติจากโลกทับทิมคือความสามารถในการระบุชุดการพึ่งพาสำหรับสภาพแวดล้อมที่หลากหลายและมีเงื่อนไข / ตัวเลือก / ฯลฯ ในไฟล์เดียว)
Charles Duffy

1
ดูเหมือนว่ามีการใช้งานแล้วใน repo ของ Heroku "เริ่มต้นใช้งาน Python" ( github.com/heroku/python-getting-started.git ) ดังนั้นจึงชอบหรือไม่ดูเหมือนว่าจะมีการผลิต
Stephen

Gotcha ที่กล่าวว่า - เอกสารดูแข็งแกร่งสำหรับฉัน ฉันไม่รู้ว่าจะเขียนอะไรในคำตอบที่ไม่เพียง แต่จะทำให้พวกเขากลับมาดี
ชาร์ลส์ดัฟฟี่

1
หากคุณอ้างถึงลิงค์ที่ฉันทำใน OP แล้วมีหลายสิ่งที่ถูกตัดออกไปตัวอย่างเช่นความหมายของบางสิ่งที่อยู่ในส่วนที่เรียกว่าแหล่งที่มา
Stephen

คำตอบ:


166

แนวคิดที่อยู่เบื้องหลังไฟล์เหล่านี้นั้นเรียบง่ายและคล้ายคลึงกับเครื่องมืออื่น ๆ ที่มีอยู่แล้วถ้าคุณมีความคุ้นเคยกับ Ruby Bundler หรือ Npm's Npm Pipenvเป็นทั้งแพคเกจและเครื่องมือการจัดการสภาพแวดล้อมเสมือนจริงที่ใช้ไฟล์ Pipfile และ Pipfile.lock เพื่อให้บรรลุเป้าหมายเหล่านี้

Pipenv จัดการกับสภาพแวดล้อมเสมือนจริงสำหรับคุณด้วยวิธีมาตรฐานเริ่มต้นเดียว (ไม่ต้องเปิดใช้งานและปิดการใช้งานอีกต่อไป) ด้านล่างนี้พื้นฐานบางอย่างให้คุณเริ่มต้นดูเพิ่มเติมได้ที่เว็บไซต์ pipenv

เริ่มต้นใช้งาน

เริ่มใช้ pipenv เป็นเรื่องง่ายในประเภทโฟลเดอร์โครงการของคุณ ...

$ pipenv install

... และหากมีrequirements.txtไฟล์อยู่แล้วไฟล์จะสร้างPipfileไฟล์ที่มีข้อกำหนดและโฟลเดอร์สภาพแวดล้อมเสมือนมิฉะนั้นจะสร้างไฟล์ว่างPipfileไฟล์หากคุณไม่ชอบหรือเปลี่ยนใจเกี่ยวกับสิ่งที่คุณติดตั้งเพียงพิมพ์ ...

$ pipenv uninstall <package>

... และคุณก็พร้อมที่จะไป หากต้องการเปิดใช้งานสภาพแวดล้อมเสมือนจริงที่ pipenv สร้างขึ้นแล้วไปที่ ...

$ pipenv shell

... และสภาพแวดล้อมเสมือนของคุณจะถูกเปิดใช้งาน ออกจากสิ่งแวดล้อม ...

$ exit

... และคุณจะกลับไปที่เซสชันเทอร์มินัลดั้งเดิมของคุณ

Pipfile

Pipfileไฟล์มีวัตถุประสงค์เพื่อระบุข้อกำหนดแพคเกจสำหรับการประยุกต์ใช้งูหลามหรือห้องสมุดของคุณทั้งสองไปสู่การพัฒนาและการดำเนินการ คุณสามารถติดตั้งแพ็คเกจโดยใช้ ...

$ pipenv install flask

... และมันจะถูกเพิ่มเป็นการอ้างอิงสำหรับการปรับใช้และการดำเนินการหรือโดยใช้ ...

$ pipenv install --dev pytest

... และมันจะถูกใช้เป็นตัวแทนสำหรับเวลาในการพัฒนา ไวยากรณ์ของไฟล์ค่อนข้างตรงไปตรงมาดังต่อไปนี้

[[source]] # Here goes your package sources (where you are downloading your packages from).
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages] # Here goes your package requirements for running the application and its versions (which packages you will use when running the application).
requests = "*"
flask = "*"
pandas = "*"

[dev-packages] # Here goes your package requirements for developing the application and its versions (which packaes you will use when developing the application)
pylint = "*"
wheel = "*"

[requires] # Here goes your required Python version.
python_version = "3.6"

Pipfile.lock

Pipfile.lockมีวัตถุประสงค์เพื่อระบุขึ้นอยู่กับแพคเกจที่อยู่ในPipfileซึ่งรุ่นที่เฉพาะเจาะจงของผู้ที่ควรจะใช้ในการหลีกเลี่ยงความเสี่ยงของแพคเกจการอัพเกรดโดยอัตโนมัติว่าขึ้นอยู่กับแต่ละอื่น ๆ และทำลายต้นไม้พึ่งพาโครงการของคุณ

คุณสามารถล็อคแพ็คเกจที่ติดตั้งในปัจจุบันได้โดยใช้ ...

$ pipenv lock

... และเครื่องมือจะค้นหาโฟลเดอร์สภาพแวดล้อมเสมือนของคุณเพื่อสร้างไฟล์ล็อคให้คุณโดยอัตโนมัติตามรุ่นที่ติดตั้งในปัจจุบัน ไวยากรณ์ของไฟล์ไม่ชัดเจนเท่ากับPipfileดังนั้นเพื่อความรัดกุมมันจะไม่แสดงที่นี่


นี่เป็นคำตอบที่น่าสนใจ แต่ฉันคิดว่าเมื่อฉันถามฉันไม่เข้าใจความหมายที่แท้จริงของ[[source]]มันเช่นที่มาของแพ็คเกจที่ดาวน์โหลดโดย pipenv หรืออย่างอื่น? ฉันเดาว่าส่วนที่เหลือของสองไฟล์นั้นชัดเจนเพียงพอ
Stephen

1
ฉันจะยอมรับว่าฉันพบว่ามันสับสนเพราะฉันกำลังทำกวดวิชาที่ฉันต้องตัดสินใจว่า [แพ็คเกจ] / [แพ็คเกจ dev] มีความสำคัญหรือไม่หรือถ้าฉันควรใส่ทุกอย่างไว้ใน [แพ็คเกจ] (Googling สำหรับสิ่งนี้คือสิ่งที่พาฉันไปที่หน้านี้) แต่การมีทั้งสองอย่างในขณะที่ใส่สิ่งที่ dev ในแพ็คเกจ [ชนิด] ทำให้ฉัน ฉันเห็นว่าทำไมคำขอควรอยู่ใน [แพ็คเกจ]
Al Sweigart

1
เปลี่ยนตามที่ร้องขอเพื่อหลีกเลี่ยงความสับสนในแพคเกจการพัฒนาขอขอบคุณสำหรับความคิดเห็นของคุณหวังว่ามันจะสับสนน้อยลงในตอนนี้ :)
danieldeveloper001

1
Pipfileฉันคิดว่ามันเป็นความคิดที่ดีถ้าคุณต้องการที่จะติดตามรุ่นแพคเกจคนพร้อมวิวัฒนาการรหัสที่มาเนื่องจากส่วนใหญ่ของแพคเกจจะเป็นรุ่นมงคล หากสิ่งที่แบ่งในการอัพเกรดแพคเกจหนึ่งแล้วควรจะสามารถที่จะแก้ไขได้โดยการตรวจสอบแพคเกจประวัติรุ่นและแน่นอนหนึ่งในผู้สร้างห้องสมุดของการร้องขอทำแนะนำให้ทำมันนี่
danieldeveloper001

1
@Stephen เป็นสิ่งที่ตรงกันข้ามตามที่ระบุไว้ในเอกสารการติดตั้ง pipenvคุณสามารถระบุการ--skip-lockตั้งค่าสถานะเพื่อบังคับให้ละเว้นPipfile.lockไฟล์ได้มากกว่าการบังคับให้ใช้;)
danieldeveloper001
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.