Pipfile और Pipfile.lock का उपयोग कैसे किया जाता है?


132

ऐसा लगता है कि Pipfile / Pipfile.lock को Python पैकेजिंग के संदर्भ में आवश्यकताओं के लिए प्रतिस्थापन माना जाता है। हालाँकि, यह वास्तव में कैसे काम करता है, इस पर बहुत अधिक दस्तावेज नहीं है। मुझे यहां पाइथन वेबसाइट के PyPi सेक्शन पर पिपलफाइल का एक विकसित विवरण मिला, लेकिन यह बहुत गड़बड़ है और फाइल के विभिन्न खंडों के शब्दार्थ को स्पष्ट नहीं करता है।

कैसे इन फ़ाइलों को समझने के लिए कोई संकेत?


2
इस का एक सीधा एनालॉग है Gemfileऔर Gemfile.lockरूबी दुनिया से: .lockफ़ाइल प्रत्येक निर्भरता के लिए विशिष्ट संस्करण है; उस एक्सटेंशन के बिना केवल ज्ञात-टू-कंट्रोलिंग-मानव संस्करण हैं। यह कहा गया है, कि अभी भी विकसित हो रहा है और अच्छी तरह से परिभाषित किया जा रहा है, बहुत कम मानकीकृत से एक लंबा रास्ता तय करने के लिए की व्याख्या के लिए, शायद थोड़ा समय से पहले है।
चार्ल्स डफी

(और इसी तरह, के बीच का अंतर Pipfileऔर requirements.txtकाफी हद तक यह है कि पूर्व में रूबी दुनिया से सुविधाओं को अपनाने की कोशिश करता है, यानी कई वातावरणों के लिए निर्भरता सेट को निर्दिष्ट करने में सक्षम होने के साथ / एक ही फाइल के भीतर / विकल्प / आदि)।
चार्ल्स डफी

1
ऐसा लगता है कि यह पहले से ही हेरोकू में तैनात किया गया है "पायथन के साथ शुरू हो रहा है" रेपो ( github.com/heroku/python-getting-started.git ) तो यह पसंद है या नहीं, ऐसा लगता है जैसे यह उत्पादन किया गया है।
स्टीफन

पकड़ लिया। उस ने कहा - डॉक्स मुझे बहुत ठोस लगते हैं। मुझे नहीं पता कि मैं एक उत्तर में क्या लिख ​​सकता हूं जो उन्हें बस बहाल नहीं करेगा।
चार्ल्स डफी

1
यदि आप उस लिंक का उल्लेख कर रहे हैं जो मैंने ओपी में बनाया है, तो कई चीजें छूटी हुई हैं, उदाहरण के लिए किसी स्रोत के अनुभाग में होने के लिए वास्तव में इसका क्या मतलब है।
स्टीफन

जवाबों:


166

इन फ़ाइलों के पीछे की अवधारणा सरल और अन्य पहले से मौजूद उपकरणों के अनुरूप है, यदि आपके पास रूबी के बंडलर या नोड के एनपीएम के साथ कुछ परिचित हैं। Pipenvएक पैकेज और आभासी पर्यावरण प्रबंधन उपकरण है जो इन लक्ष्यों को प्राप्त करने के लिए Pipfile और Pipfile.lock फ़ाइलों का उपयोग करता है।

पिपेनव एक डिफ़ॉल्ट मानक तरीके से आपके लिए आभासी वातावरण को संभालता है (कोई और अधिक सक्रिय और आवश्यक निष्क्रिय नहीं करता है)। नीचे, आपको शुरू करने के लिए कुछ मूल बातें, pipenv वेबसाइट पर अधिक देखें ।

शुरू करना

अपने प्रोजेक्ट फ़ोल्डर प्रकार में pipenv का उपयोग करना आसान है ...

$ pipenv install

... और अगर इसमें पहले से ही एक requirements.txtफ़ाइल है, तो यह Pipfileआवश्यकताओं और एक आभासी पर्यावरण फ़ोल्डर के साथ एक फ़ाइल उत्पन्न करेगा , अन्यथा, यह एक खाली Pipfileफ़ाइल उत्पन्न करेगा । यदि आपने किसी चीज़ के बारे में नापसंद या अपना विचार बदल दिया है, जिसे आपने स्थापित किया है, तो बस ...

$ pipenv uninstall <package>

... और आप जाने के लिए अच्छे हैं। उस आभासी वातावरण को सक्रिय करने के लिए जो पहले से ही जेनरेट किया गया है, साथ चलें ...

$ 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

... और उपकरण वर्तमान में स्थापित संस्करणों के आधार पर, स्वचालित रूप से आपके लिए लॉक फ़ाइल उत्पन्न करने के लिए आपके वर्चुअल पर्यावरण फ़ोल्डर को देखेगा। फ़ाइल सिंटैक्स पिपफ़ाइल के लिए उतना स्पष्ट नहीं है , इसलिए संक्षिप्तता के लिए, इसे यहाँ प्रदर्शित नहीं किया जाएगा।


यह एक दिलचस्प जवाब है, लेकिन मुझे लगता है कि जब मैं पूछ रहा था तो मैं यह समझ नहीं पाया कि वास्तव में इसका मतलब क्या है [[source]], जैसे कि पैकेज के लिए स्रोत जो कि पिपेनव या कुछ और द्वारा डाउनलोड किया जाता है? मुझे लगता है कि बाकी दोनों फाइलें पर्याप्त स्पष्ट हैं।
स्टीफन

1
मैं मानता हूँ, मुझे यह भ्रामक लगा क्योंकि मैं एक ट्यूटोरियल पर काम कर रहा हूँ जहाँ मुझे यह तय करना है कि क्या [पैकेज] / [डेव-पैकेज] अंतर महत्वपूर्ण है, या यदि मुझे बस [पैकेज] में सब कुछ डाल देना चाहिए। (इसके लिए गुगली करना मुझे इस पृष्ठ पर ले गया।) लेकिन [पैकेज] में देव सामान डालते हुए दोनों ने मुझे फेंक दिया। मैं देख सकता था कि अनुरोध [पैकेज] में क्यों होना चाहिए।
अल स्वीगार्ट

1
परिवर्तित, अनुरोध के रूप में, विकास पैकेजों पर भ्रम से बचने के लिए, आप टिप्पणी के लिए धन्यवाद, आशा है कि अब यह कम भ्रामक है :)
danieldeveloper001

1
मुझे लगता है कि यह एक अच्छा विचार है, अगर आप सोर्स कोड इवोल्यूशन के साथ लोगों के पैकेज संस्करणों पर नज़र रखना चाहते हैं, क्योंकि अधिकांश पैकेजों में संस्करण को तारांकित किया जाएगा Pipfile। यदि पैकेज अपग्रेड पर कुछ टूट जाता है, तो एक को पैकेज संस्करण इतिहास की समीक्षा करके इसे ठीक करना चाहिए, और वास्तव में, अनुरोध पुस्तकालय के रचनाकारों में से एक इसे यहां करने की सलाह देता है
danieldeveloper001

1
@ स्टेफेन , यह वास्तव में विपरीत है, जैसा कि पिपेनव इंस्टॉल डॉक्यूमेंटेशन में कहा गया है कि आप --skip-lockझंडे को निर्दिष्ट कर सकते हैं कि वह Pipfile.lockइसे इस्तेमाल करने के लिए मजबूर करने के बजाय फाइल को नजरअंदाज करने के लिए मजबूर कर सकता है;)
danieldeveloper001
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.