पायथन स्क्रिप्ट हेडर


79

ठेठ हैडर होना चाहिए

#!/usr/bin/env python

लेकिन मैं नीचे पाया गया जैसे स्क्रिप्ट निष्पादित करते समय भी काम करता है $python ./my_script.py

#!/usr/bin/python
#!python

इन 2 हेडर में क्या अंतर है? 2 वें के लिए क्या समस्या हो सकती है? कृपया पाइथन इंटरप्रेटर के लिए मामले पर चर्चा भी पैट में है या नहीं। धन्यवाद।


3
उस हेडर को Shebang en.wikipedia.org/wiki/Shebang_%28Unix%29
systempuntoout

4
FYI करें जब आप किसी स्क्रिप्ट को ढंग से चलाते हैं $ python ./my_script.py( pythonस्पष्ट रूप से निर्दिष्ट करते हुए ), तो शेबबैंग ( #!) लाइन को अनदेखा कर दिया जाता है। इसका केवल तभी प्रभाव होता है जब आप स्क्रिप्ट को एक निष्पादन योग्य, उदाहरण के लिए चलाते हैं $ ./my_script.py
डेविड जेड

@ डेविड ज़स्लावस्की: +1 अच्छा कैच।
मार्क बायर्स

जवाबों:


103

सबसे पहले, किसी भी समय आप स्पष्ट रूप से दुभाषिया का उपयोग करके एक स्क्रिप्ट चलाते हैं, जैसे कि

$ python ./my_script.py
$ ksh ~/bin/redouble.sh
$ lua5.1 /usr/local/bin/osbf3

#!लाइन हमेशा नजरअंदाज कर दिया है। #!रेखा की एक यूनिक्स सुविधा है निष्पादन योग्य केवल स्क्रिप्ट नहीं, और आप उस पर पूर्ण में दस्तावेज देख सकते हैं के लिए आदमी पेजexecve(2) । वहां आप पाएंगे कि निम्नलिखित शब्द #!वैध निष्पादन योग्य का मार्गनाम होना चाहिए। इसलिए

#!/usr/bin/env python

pythonउपयोगकर्ताओं पर जो कुछ भी है उसे निष्पादित करता है $PATH। यह फ़ॉर्म पायथन इंटरप्रेटर के चारों ओर ले जाने के लिए लचीला है, जो इसे कुछ हद तक अधिक पोर्टेबल बनाता है, लेकिन इसका मतलब यह भी है कि उपयोगकर्ता मानक पायथन इंटरप्रिटर को इसके आगे कुछ डालकर ओवरराइड कर सकता है $PATH। आपके लक्ष्यों के आधार पर, यह व्यवहार ठीक हो भी सकता है और नहीं भी।

आगे,

#!/usr/bin/python

उस सामान्य मामले से संबंधित है जिसमें पायथन दुभाषिया स्थापित किया गया है /usr/bin। यदि यह कहीं और स्थापित है, तो आप खो देते हैं। लेकिन यह एक अच्छा तरीका है ताकि आप यह सुनिश्चित कर सकें कि आप जैसा चाहते हैं वैसा ही संस्करण प्राप्त करें या और कुछ नहीं ("असफल-स्टॉप" व्यवहार), जैसे कि

#!/usr/bin/python2.5

आखिरकार,

#!python

pythonस्क्रिप्ट चलने पर वर्तमान निर्देशिका में निष्पादन योग्य होने पर ही काम करता है। सिफारिश नहीं की गई।


28


मैं आपकी स्क्रिप्ट की शुरुआत में 3 चीजें सुझाता हूं:

सबसे पहले, जैसा कि पहले ही कहा जा रहा है कि पर्यावरण का उपयोग करें:

#!/usr/bin/env python

दूसरा, अपना एन्कोडिंग सेट करें:

# -*- coding: utf-8 -*-

तीसरा, कुछ डॉक्टर स्ट्रिंग सेट करें:

"""This is a awesome
    python script!"""

और यकीन है कि मैं " "पहचान के लिए (4 रिक्त स्थान) का उपयोग करेगा ।
अंतिम शीर्ष लेख ऐसा दिखेगा:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""This is a awesome
        python script!"""


शुभकामनाएं और खुश कोडिंग।


बस टैब पर रिक्त स्थान पर प्रतीत होता है कि टिप्पणी का समर्थन करने के लिए: "रिक्त स्थान पसंदीदा इंडेंटेशन विधि है।" ( python.org/dev/peps/pep-0008/#tabs-or-spaces )
डीपेलमेंट

5

अजगर निष्पादन योग्य / usr / bin के अलावा किसी अन्य स्थान पर स्थापित किया जा सकता है, लेकिन envलगभग हमेशा उस स्थान पर मौजूद होता है, इसलिए इसका उपयोग /usr/bin/envअधिक पोर्टेबल होता है।


2

के लिए मैनपेज से env(GNU coreutils 6.10):

env - run a program in a modified environment

सिद्धांत रूप में आप envपर्यावरण को रीसेट करने के लिए उपयोग कर सकते हैं (मौजूदा पर्यावरण चर को हटाकर) या स्क्रिप्ट हेडर में अतिरिक्त पर्यावरण चर जोड़ सकते हैं। व्यावहारिक रूप से, आपके द्वारा उल्लेखित दो संस्करण समान हैं। (हालांकि अन्य लोगों ने एक अच्छी बात का उल्लेख किया है: इसके pythonमाध्यम envसे निर्दिष्ट करने से आप pythonइसका मार्ग जाने बिना ही निर्दिष्ट कर सकते हैं ।)


1

हाँ, वहाँ है - अजगर में नहीं हो सकता है /usr/bin, लेकिन उदाहरण के लिए /usr/local/bin(बीएसडी) में।

Virtualenv का उपयोग करते समय, यह कुछ इस तरह भी हो सकता है ~/projects/env/bin/python


0

/usr/bin/env pythonबहुत उपयोगी हो जाता है जब अपनी स्क्रिप्ट उदाहरण स्क्रिप्ट जो पर भरोसा करते हैं प्रयोग करने के लिए पर्यावरण सेटिंग्स पर निर्भर python virtualenv। प्रत्येक वर्चुअनव्यू का अपना वर्जन पाइथन बाइनरी है जो कि वर्चुअन में स्थापित पैकेज को पाइथन पथ (PYTHONPATH env को छुए बिना) में जोड़ने के लिए आवश्यक है।

जब तक अधिक से अधिक लोगों ने वर्चुअलएनवी का उपयोग करना शुरू कर दिया है तब तक अजगर विकास का उपयोग करना पसंद करते हैं /usr/bin/env pythonजब तक कि आप नहीं चाहते कि लोग अपने कस्टम अजगर बाइनरी का उपयोग करें।

नोट: आपको यह भी समझना चाहिए कि जब आप लोगों को अपने कस्टम वातावरण में अपनी स्क्रिप्ट्स चलाने देते हैं, तो संभावित सुरक्षा समस्याएँ (बहु-स्तरीय वातावरण में) होती हैं। आप यहाँ से कुछ विचार प्राप्त कर सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.