Python नियम

नियम

py_binary

py_binary(name, deps, srcs, data, args, compatible_with, deprecation, distribs, env, exec_compatible_with, exec_properties, features, imports, legacy_create_init, licenses, main, output_licenses, python_version, restricted_to, srcs_version, stamp, tags, target_compatible_with, testonly, toolchains, visibility)

py_binary, एक्ज़ीक्यूटेबल Python प्रोग्राम है. इसमें .py सोर्स फ़ाइलों (जो शायद अन्य py_library नियमों से जुड़ी हों) का कलेक्शन, एक *.runfiles डायरेक्ट्री ट्री, जिसमें रन-टाइम के दौरान प्रोग्राम के लिए ज़रूरी सभी कोड और डेटा होता है. साथ ही, एक स्टब स्क्रिप्ट, जो सही एनवायरमेंट और डेटा के साथ प्रोग्राम की शुरुआत करती है.

उदाहरण

py_binary(
    name = "foo",
    srcs = ["foo.py"],
    data = [":transform"],  # a cc_binary which we invoke at run time
    deps = [
        ":foolib",  # a py_library
    ],
)

अगर आपको py_binary को किसी दूसरी बाइनरी या टेस्ट में चलाना है (उदाहरण के लिए, java_test में कुछ मॉक रिसॉर्स सेट अप करने के लिए Python बाइनरी चलाना), तो सही तरीका यह है कि अन्य बाइनरी को इसके डेटा सेक्शन में मौजूद py_binary पर निर्भर करें या टेस्ट करें. इसके बाद, दूसरी बाइनरी, सोर्स डायरेक्ट्री से जुड़े py_binary का पता लगा सकती है.

py_binary(
    name = "test_main",
    srcs = ["test_main.py"],
    deps = [":testlib"],
)

java_library(
    name = "testing",
    srcs = glob(["*.java"]),
    data = [":test_main"]
)

तर्क

एट्रिब्यूट
name

Name; required

इस टारगेट के लिए एक खास नाम.


अगर main की जानकारी नहीं दी गई है, तो एक्सटेंशन को घटाकर, यह सोर्स फ़ाइल के नाम के जैसा ही होना चाहिए, जो ऐप्लिकेशन का मुख्य एंट्री पॉइंट है. उदाहरण के लिए, अगर आपके एंट्री पॉइंट को main.py कहा जाता है, तो आपका नाम main होना चाहिए.
deps

List of labels; optional

बाइनरी टारगेट में लिंक की जाने वाली अन्य लाइब्रेरी की सूची. ज़्यादातर बिल्ड रूल के हिसाब से तय किए गए सामान्य एट्रिब्यूट पर जाकर, deps के बारे में की गई सामान्य टिप्पणियां देखें. आम तौर पर, ये py_library नियम होते हैं.
srcs

List of labels; required

सोर्स (.py) फ़ाइलों की सूची, जिन्हें टारगेट बनाने के लिए प्रोसेस किया जाता है. इसमें आपके चेक-इन किए गए सभी कोड और जनरेट की गई सोर्स फ़ाइलें शामिल हैं. इसके बजाय, लाइब्रेरी के टारगेट deps में हैं, जबकि रनटाइम के दौरान ज़रूरी अन्य बाइनरी फ़ाइलें data में होती हैं.
imports

List of strings; optional

PYTHONPATH में जोड़ी जाने वाली इंपोर्ट डायरेक्ट्री की सूची.

यह विकल्प "वैरिएबल बनाएं" पर निर्भर करता है. इस नियम और इस पर निर्भर सभी नियमों के लिए, ये इंपोर्ट डायरेक्ट्री जोड़ी जाएंगी. ध्यान दें: वे नियम नहीं जोड़े जाएंगे जिन पर यह नियम निर्भर करता है. हर डायरेक्ट्री को PYTHONPATH में py_binary नियमों के हिसाब से जोड़ा जाएगा. ये नियम इस नियम पर निर्भर करते हैं.

ऐब्सलूट पाथ (/ से शुरू होने वाले पाथ) और एक्ज़ीक्यूशन रूट से ऊपर के किसी पाथ का रेफ़रंस देने वाले पाथ की अनुमति नहीं है. इससे गड़बड़ी पैदा होगी.

legacy_create_init

Integer; optional; default is -1

रनफ़ाइल ट्री में, किसी और तरीके से खाली __init__.py फ़ाइलें बनानी है या नहीं. इन्हें Python सोर्स कोड या शेयर की गई लाइब्रेरी वाली हर डायरेक्ट्री में बनाया जाता है. साथ ही, इन्हें उन डायरेक्ट्री की हर पैरंट डायरेक्ट्री में बनाया जाता है. हालांकि, इसमें रेपो रूट डायरेक्ट्री शामिल नहीं होती है. जब तक --incompatible_default_to_explicit_init_py का इस्तेमाल नहीं किया जाता, तब तक डिफ़ॉल्ट ऑटो, 'सही' का मतलब 'सही' है. गलत होने पर, __init__.py फ़ाइलें बनाने और उन्हें ज़रूरत के मुताबिक Python टारगेट के srcs में जोड़ने की ज़िम्मेदारी उपयोगकर्ता की होती है.
main

Label; optional

सोर्स फ़ाइल का नाम, जो ऐप्लिकेशन का मुख्य एंट्री पॉइंट होता है. यह फ़ाइल, srcs की सूची में भी होनी चाहिए. अगर जानकारी को सेट नहीं किया गया है, तो name का इस्तेमाल किया जाता है (ऊपर देखें). अगर name का मिलान srcs में मौजूद किसी भी फ़ाइल नाम से नहीं होता है, तो main बताना ज़रूरी है.
python_version

String; optional; nonconfigurable; default is "_INTERNAL_SENTINEL"

Python 2 या Python के लिए यह टारगेट (और इसके ट्रांज़िटिव deps) बनाना है या नहीं. डिफ़ॉल्ट वैल्यू "PY2" और "PY3" मान्य हैं.

इस एट्रिब्यूट में बताए गए किसी भी वर्शन पर, Python वर्शन हमेशा रीसेट (डिफ़ॉल्ट रूप से) किया जाता है. इस एट्रिब्यूट पर निर्भर करने वाले अन्य बड़े टारगेट या कमांड लाइन पर आधारित वर्शन से कोई फ़र्क़ नहीं पड़ता.

अगर आपको Python के मौजूदा वर्शन पर select() करना है, तो @rules_python//python:python_version की वैल्यू की जांच की जा सकती है. ज़्यादा जानकारी के लिए, यहां जाएं.

गड़बड़ी की चेतावनी: यह एट्रिब्यूट उस वर्शन को सेट करता है जिसके लिए Bazel आपका टारगेट बनाता है. हालांकि, #4815 की वजह से, हो सकता है कि इस वजह से स्टब स्क्रिप्ट, रनटाइम के दौरान गलत अनुवादक वर्शन का इस्तेमाल करे. यह तरीका देखें. इसमें एक ऐसा py_runtime टारगेट तय करना शामिल है जो ज़रूरत के हिसाब से Python वर्शन पर ले जाता हो. साथ ही, इस py_runtime को चालू करने के लिए, --python_top सेट किया जाता है.

srcs_version

String; optional; default is "PY2AND3"

यह एट्रिब्यूट बताता है कि टारगेट के srcs को Python 2, Python 3 या दोनों के साथ इस्तेमाल किया जा सकता है. Python रनटाइम वर्शन को सेट करने के लिए, एक्ज़ीक्यूटेबल Python नियम (py_binary या py_test) के python_version एट्रिब्यूट का इस्तेमाल करें.

इन वैल्यू का इस्तेमाल किया जा सकता है: "PY2AND3", "PY2", और "PY3". "PY2ONLY" और "PY3ONLY" वैल्यू का इस्तेमाल, ऐतिहासिक वजहों से भी किया जाता है. हालांकि, ये वाकई "PY2" और "PY3" जैसे हैं. इसलिए, इनसे बचना चाहिए.

ध्यान दें कि सिर्फ़ एक्ज़ीक्यूटेबल नियम (py_binary और py_library ) ही इस एट्रिब्यूट की वैल्यू के लिए, Python के मौजूदा वर्शन की पुष्टि करते हैं. (यह एक सुविधा है. py_library, Python के मौजूदा वर्शन को नहीं बदलता है. अगर इसकी पुष्टि हो जाती है, तो एक ही बातचीत में PY2ONLY और PY3ONLY लाइब्रेरी बनाना नामुमकिन होगा.) इसके अलावा, अगर वर्शन मेल नहीं खाता है, तो गड़बड़ी को सिर्फ़ लागू करने के चरण में रिपोर्ट किया जाता है. खास तौर पर, गड़बड़ी bazel build --nobuild के शुरू होने पर नहीं दिखेगी.)

यह जानने के लिए कि कौनसी डिपेंडेंसी, वर्शन की ज़रूरी शर्तों को पूरा करती हैं, अपने टारगेट पर find_requirements आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) के साथ एक फ़ाइल बनाई जा सकती है:

          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          
यह सफ़िक्स -pyversioninfo.txt के साथ एक फ़ाइल बनाएगा, जिससे पता चलेगा कि आपके टारगेट के लिए Python वर्शन या इसके दूसरे वर्शन की ज़रूरत क्यों है. ध्यान दें कि यह तब भी काम करता है, जब दिया गया टारगेट किसी वर्शन के मेल न खाने की वजह से नहीं बन पाया हो.

stamp

Integer; optional; default is -1

बिल्ड की जानकारी को बाइनरी में कोड में बदलना है या नहीं. जितने तरह के प्लेसमेंट हो सकते हैं उनकी जानकारी यहां दी गई है:
  • stamp = 1: बिल्ड की जानकारी को हमेशा बाइनरी में लिखें, यहां तक कि --nostamp बिल्ड में भी. इस सेटिंग से बचना चाहिए, क्योंकि यह बाइनरी और उस पर निर्भर सभी डाउनस्ट्रीम कार्रवाइयों के लिए रिमोट कैश मेमोरी को बंद कर सकता है.
  • stamp = 0: बिल्ड की जानकारी को हमेशा स्थिर वैल्यू से बदलें. इससे बिल्ड के नतीजे को कैश मेमोरी में सेव करने की सुविधा मिलती है.
  • stamp = -1: बिल्ड की जानकारी को एम्बेड करने की सुविधा, --[no]stamp फ़्लैग से कंट्रोल होती है.

स्टैंप वाली बाइनरी को तब तक नहीं बनाया जाता, जब तक उनकी डिपेंडेंसी नहीं बदलतीं.

py_library

py_library(name, deps, srcs, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, imports, licenses, restricted_to, srcs_version, tags, target_compatible_with, testonly, visibility)

तर्क

एट्रिब्यूट
name

Name; required

इस टारगेट के लिए एक खास नाम.

deps

List of labels; optional

बाइनरी टारगेट में लिंक की जाने वाली अन्य लाइब्रेरी की सूची. ज़्यादातर बिल्ड रूल के हिसाब से तय किए गए सामान्य एट्रिब्यूट पर जाकर, deps के बारे में की गई सामान्य टिप्पणियां देखें. आम तौर पर, ये py_library नियम होते हैं.
srcs

List of labels; optional

सोर्स (.py) फ़ाइलों की सूची, जिन्हें टारगेट बनाने के लिए प्रोसेस किया जाता है. इसमें आपके चेक-इन किए गए सभी कोड और जनरेट की गई सोर्स फ़ाइलें शामिल हैं.
imports

List of strings; optional

PYTHONPATH में जोड़ी जाने वाली इंपोर्ट डायरेक्ट्री की सूची.

यह विकल्प "वैरिएबल बनाएं" पर निर्भर करता है. इस नियम और इस पर निर्भर सभी नियमों के लिए, ये इंपोर्ट डायरेक्ट्री जोड़ी जाएंगी. ध्यान दें: वे नियम नहीं जोड़े जाएंगे जिन पर यह नियम निर्भर करता है. हर डायरेक्ट्री को PYTHONPATH में py_binary नियमों के हिसाब से जोड़ा जाएगा. ये नियम इस नियम पर निर्भर करते हैं.

ऐब्सलूट पाथ (/ से शुरू होने वाले पाथ) और एक्ज़ीक्यूशन रूट से ऊपर के किसी पाथ का रेफ़रंस देने वाले पाथ की अनुमति नहीं है. इससे गड़बड़ी पैदा होगी.

srcs_version

String; optional; default is "PY2AND3"

यह एट्रिब्यूट बताता है कि टारगेट के srcs को Python 2, Python 3 या दोनों के साथ इस्तेमाल किया जा सकता है. Python रनटाइम वर्शन को सेट करने के लिए, एक्ज़ीक्यूटेबल Python नियम (py_binary या py_test) के python_version एट्रिब्यूट का इस्तेमाल करें.

इन वैल्यू का इस्तेमाल किया जा सकता है: "PY2AND3", "PY2", और "PY3". "PY2ONLY" और "PY3ONLY" वैल्यू का इस्तेमाल, ऐतिहासिक वजहों से भी किया जाता है. हालांकि, ये वाकई "PY2" और "PY3" जैसे हैं. इसलिए, इनसे बचना चाहिए.

ध्यान दें कि सिर्फ़ एक्ज़ीक्यूटेबल नियम (py_binary और py_library ) ही इस एट्रिब्यूट की वैल्यू के लिए, Python के मौजूदा वर्शन की पुष्टि करते हैं. (यह एक सुविधा है. py_library, Python के मौजूदा वर्शन को नहीं बदलता है. अगर इसकी पुष्टि हो जाती है, तो एक ही बातचीत में PY2ONLY और PY3ONLY लाइब्रेरी बनाना नामुमकिन होगा.) इसके अलावा, अगर वर्शन मेल नहीं खाता है, तो गड़बड़ी को सिर्फ़ लागू करने के चरण में रिपोर्ट किया जाता है. खास तौर पर, गड़बड़ी bazel build --nobuild के शुरू होने पर नहीं दिखेगी.)

यह जानने के लिए कि कौनसी डिपेंडेंसी, वर्शन की ज़रूरी शर्तों को पूरा करती हैं, अपने टारगेट पर find_requirements आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) के साथ एक फ़ाइल बनाई जा सकती है:

          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          
यह सफ़िक्स -pyversioninfo.txt के साथ एक फ़ाइल बनाएगा, जिससे पता चलेगा कि आपके टारगेट के लिए Python वर्शन या इसके दूसरे वर्शन की ज़रूरत क्यों है. ध्यान दें कि यह तब भी काम करता है, जब दिया गया टारगेट किसी वर्शन के मेल न खाने की वजह से नहीं बन पाया हो.

py_test

py_test(name, deps, srcs, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, imports, legacy_create_init, licenses, local, main, python_version, restricted_to, shard_count, size, srcs_version, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility)

py_test() नियम, टेस्ट को कंपाइल करता है. टेस्ट, कुछ टेस्ट कोड के आस-पास बाइनरी रैपर होता है.

उदाहरण

py_test(
    name = "runtest_test",
    srcs = ["runtest_test.py"],
    deps = [
        "//path/to/a/py/library",
    ],
)

मुख्य मॉड्यूल की जानकारी भी दी जा सकती है:

py_test(
    name = "runtest_test",
    srcs = [
        "runtest_main.py",
        "runtest_lib.py",
    ],
    main = "runtest_main.py",
)

तर्क

एट्रिब्यूट
name

Name; required

इस टारगेट के लिए एक खास नाम.

deps

List of labels; optional

बाइनरी टारगेट में लिंक की जाने वाली अन्य लाइब्रेरी की सूची. ज़्यादातर बिल्ड रूल के हिसाब से तय किए गए सामान्य एट्रिब्यूट पर जाकर, deps के बारे में की गई सामान्य टिप्पणियां देखें. आम तौर पर, ये py_library नियम होते हैं.
srcs

List of labels; required

सोर्स (.py) फ़ाइलों की सूची, जिन्हें टारगेट बनाने के लिए प्रोसेस किया जाता है. इसमें आपके चेक-इन किए गए सभी कोड और जनरेट की गई सोर्स फ़ाइलें शामिल हैं. इसके बजाय, लाइब्रेरी के टारगेट deps में हैं, जबकि रनटाइम के दौरान ज़रूरी अन्य बाइनरी फ़ाइलें data में होती हैं.
imports

List of strings; optional

PYTHONPATH में जोड़ी जाने वाली इंपोर्ट डायरेक्ट्री की सूची.

यह विकल्प "वैरिएबल बनाएं" पर निर्भर करता है. इस नियम और इस पर निर्भर सभी नियमों के लिए, ये इंपोर्ट डायरेक्ट्री जोड़ी जाएंगी. ध्यान दें: वे नियम नहीं जोड़े जाएंगे जिन पर यह नियम निर्भर करता है. हर डायरेक्ट्री को PYTHONPATH में py_binary नियमों के हिसाब से जोड़ा जाएगा. ये नियम इस नियम पर निर्भर करते हैं.

ऐब्सलूट पाथ (/ से शुरू होने वाले पाथ) और एक्ज़ीक्यूशन रूट से ऊपर के किसी पाथ का रेफ़रंस देने वाले पाथ की अनुमति नहीं है. इससे गड़बड़ी पैदा होगी.

legacy_create_init

Integer; optional; default is -1

रनफ़ाइल ट्री में, किसी और तरीके से खाली __init__.py फ़ाइलें बनानी है या नहीं. इन्हें Python सोर्स कोड या शेयर की गई लाइब्रेरी वाली हर डायरेक्ट्री में बनाया जाता है. साथ ही, इन्हें उन डायरेक्ट्री की हर पैरंट डायरेक्ट्री में बनाया जाता है. हालांकि, इसमें रेपो रूट डायरेक्ट्री शामिल नहीं होती है. जब तक --incompatible_default_to_explicit_init_py का इस्तेमाल नहीं किया जाता, तब तक डिफ़ॉल्ट ऑटो, 'सही' का मतलब 'सही' है. गलत होने पर, __init__.py फ़ाइलें बनाने और उन्हें ज़रूरत के मुताबिक Python टारगेट के srcs में जोड़ने की ज़िम्मेदारी उपयोगकर्ता की होती है.
main

Label; optional

सोर्स फ़ाइल का नाम, जो ऐप्लिकेशन का मुख्य एंट्री पॉइंट होता है. यह फ़ाइल, srcs की सूची में भी होनी चाहिए. अगर जानकारी को सेट नहीं किया गया है, तो name का इस्तेमाल किया जाता है (ऊपर देखें). अगर name का मिलान srcs में मौजूद किसी भी फ़ाइल नाम से नहीं होता है, तो main बताना ज़रूरी है.
python_version

String; optional; nonconfigurable; default is "_INTERNAL_SENTINEL"

Python 2 या Python के लिए यह टारगेट (और इसके ट्रांज़िटिव deps) बनाना है या नहीं. डिफ़ॉल्ट वैल्यू "PY2" और "PY3" मान्य हैं.

इस एट्रिब्यूट में बताए गए किसी भी वर्शन पर, Python वर्शन हमेशा रीसेट (डिफ़ॉल्ट रूप से) किया जाता है. इस एट्रिब्यूट पर निर्भर करने वाले अन्य बड़े टारगेट या कमांड लाइन पर आधारित वर्शन से कोई फ़र्क़ नहीं पड़ता.

अगर आपको Python के मौजूदा वर्शन पर select() करना है, तो @rules_python//python:python_version की वैल्यू की जांच की जा सकती है. ज़्यादा जानकारी के लिए, यहां जाएं.

गड़बड़ी की चेतावनी: यह एट्रिब्यूट उस वर्शन को सेट करता है जिसके लिए Bazel आपका टारगेट बनाता है. हालांकि, #4815 की वजह से, हो सकता है कि इस वजह से स्टब स्क्रिप्ट, रनटाइम के दौरान गलत अनुवादक वर्शन का इस्तेमाल करे. यह तरीका देखें. इसमें एक ऐसा py_runtime टारगेट तय करना शामिल है जो ज़रूरत के हिसाब से Python वर्शन पर ले जाता हो. साथ ही, इस py_runtime को चालू करने के लिए, --python_top सेट किया जाता है.

srcs_version

String; optional; default is "PY2AND3"

यह एट्रिब्यूट बताता है कि टारगेट के srcs को Python 2, Python 3 या दोनों के साथ इस्तेमाल किया जा सकता है. Python रनटाइम वर्शन को सेट करने के लिए, एक्ज़ीक्यूटेबल Python नियम (py_binary या py_test) के python_version एट्रिब्यूट का इस्तेमाल करें.

इन वैल्यू का इस्तेमाल किया जा सकता है: "PY2AND3", "PY2", और "PY3". "PY2ONLY" और "PY3ONLY" वैल्यू का इस्तेमाल, ऐतिहासिक वजहों से भी किया जाता है. हालांकि, ये वाकई "PY2" और "PY3" जैसे हैं. इसलिए, इनसे बचना चाहिए.

ध्यान दें कि सिर्फ़ एक्ज़ीक्यूटेबल नियम (py_binary और py_library ) ही इस एट्रिब्यूट की वैल्यू के लिए, Python के मौजूदा वर्शन की पुष्टि करते हैं. (यह एक सुविधा है. py_library, Python के मौजूदा वर्शन को नहीं बदलता है. अगर इसकी पुष्टि हो जाती है, तो एक ही बातचीत में PY2ONLY और PY3ONLY लाइब्रेरी बनाना नामुमकिन होगा.) इसके अलावा, अगर वर्शन मेल नहीं खाता है, तो गड़बड़ी को सिर्फ़ लागू करने के चरण में रिपोर्ट किया जाता है. खास तौर पर, गड़बड़ी bazel build --nobuild के शुरू होने पर नहीं दिखेगी.)

यह जानने के लिए कि कौनसी डिपेंडेंसी, वर्शन की ज़रूरी शर्तों को पूरा करती हैं, अपने टारगेट पर find_requirements आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) के साथ एक फ़ाइल बनाई जा सकती है:

          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          
यह सफ़िक्स -pyversioninfo.txt के साथ एक फ़ाइल बनाएगा, जिससे पता चलेगा कि आपके टारगेट के लिए Python वर्शन या इसके दूसरे वर्शन की ज़रूरत क्यों है. ध्यान दें कि यह तब भी काम करता है, जब दिया गया टारगेट किसी वर्शन के मेल न खाने की वजह से नहीं बन पाया हो.

stamp

Integer; optional; default is 0

py_binary() आर्ग्युमेंट पर सेक्शन देखें. हालांकि, जांच के लिए स्टैंप आर्ग्युमेंट डिफ़ॉल्ट रूप से 0 पर सेट होता है.

py_runtime

py_runtime(name, compatible_with, coverage_tool, deprecation, distribs, features, files, interpreter, interpreter_path, licenses, python_version, restricted_to, stub_shebang, tags, target_compatible_with, testonly, visibility)

Python कोड को चलाने के लिए इस्तेमाल किए जाने वाले Python रनटाइम के बारे में बताता है.

py_runtime टारगेट, प्लैटफ़ॉर्म का रनटाइम या इन-बिल्ड रनटाइम दिखा सकता है. किसी प्लैटफ़ॉर्म रनटाइम दोनों मामलों में, "अनुवादक" का मतलब ऐसी किसी भी एक्ज़ीक्यूटेबल बाइनरी या रैपर स्क्रिप्ट से है जो कमांड लाइन पर पास की गई Python स्क्रिप्ट को चला सकती है. यह स्क्रिप्ट, स्टैंडर्ड CPython इंटरप्रेटर की तरह ही काम करती है.

प्लैटफ़ॉर्म रनटाइम अपनी प्रकृति के हिसाब से नॉन-हर्मेटिक होता है. यह टारगेट प्लैटफ़ॉर्म पर, किसी खास पाथ पर इंटरप्रेटर की ज़रूरत थोपती है. इन-बिल रनटाइम, हेर्मेटिक हो सकता है और नहीं भी. यह इस बात पर निर्भर करता है कि यह, चेक इन किए गए इंटरप्रेटर को पॉइंट करता है या सिस्टम इंटरप्रेटर को ऐक्सेस करने वाली रैपर स्क्रिप्ट को.

उदाहरण:

py_runtime(
    name = "python-2.7.12",
    files = glob(["python-2.7.12/**"]),
    interpreter = "python-2.7.12/bin/python",
)

py_runtime(
    name = "python-3.6.0",
    interpreter_path = "/opt/pyenv/versions/3.6.0/bin/python",
)

तर्क

एट्रिब्यूट
name

Name; required

इस टारगेट के लिए एक खास नाम.

coverage_tool

Label; optional

इस टारगेट का इस्तेमाल, py_binary और py_test टारगेट से कोड कवरेज की जानकारी इकट्ठा करने के लिए किया जाता है.

अगर सेट किया जाता है, तो टारगेट को एक ही फ़ाइल बनानी चाहिए या वह एक्ज़ीक्यूटेबल टारगेट होना चाहिए. Python कवरेज टूल के लिए एंट्री पॉइंट तय करने के लिए, किसी एक फ़ाइल का पाथ या टारगेट को एक्ज़ीक्यूट करने पर उसका पाथ जिसे एक्ज़ीक्यूट किया जा सकता है. कवरेज चालू होने पर, टारगेट और उसकी रनफ़ाइल को रनफ़ाइल में जोड़ दिया जाएगा.

टूल का एंट्री पॉइंट ऐसा होना चाहिए जिसे Python इंटरप्रेटर की मदद से लोड किया जा सके (उदाहरण के लिए, .py या .pyc फ़ाइल). इसे coverage.py के कमांड लाइन आर्ग्युमेंट स्वीकार करने चाहिए. इनमें कम से कम run और lcov सबकमांड शामिल होने चाहिए.

files

List of labels; optional

इन-बिल रनटाइम के लिए, यह फ़ाइलों का सेट है. इसमें यह रनटाइम शामिल होता है. इन फ़ाइलों को इस रनटाइम का इस्तेमाल करने वाली Python बाइनरी की रन फ़ाइलों में जोड़ दिया जाएगा. प्लैटफ़ॉर्म रनटाइम के लिए, यह एट्रिब्यूट सेट नहीं किया जाना चाहिए.
interpreter

Label; optional

इन-बिल रनटाइम के लिए, यह टारगेट को इंटरप्रेटर के तौर पर शुरू करना है. प्लैटफ़ॉर्म रनटाइम के लिए, यह एट्रिब्यूट सेट नहीं करना चाहिए.
interpreter_path

String; optional

प्लैटफ़ॉर्म रनटाइम के लिए, यह टारगेट प्लैटफ़ॉर्म पर Python इंटरप्रेटर का ऐब्सलूट पाथ है. इन-बिल्ड रनटाइम के लिए, इस एट्रिब्यूट को सेट नहीं किया जाना चाहिए.
python_version

String; optional; default is "_INTERNAL_SENTINEL"

यह रनटाइम, Python मेजर वर्शन 2 के लिए है या 3 के लिए. मान्य वैल्यू "PY2" और "PY3" हैं.

डिफ़ॉल्ट वैल्यू को --incompatible_py3_is_default फ़्लैग से कंट्रोल किया जाता है. हालांकि, आने वाले समय में यह एट्रिब्यूट ज़रूरी होगा और इसकी कोई डिफ़ॉल्ट वैल्यू नहीं होगी.

stub_shebang

String; optional; default is "#!/usr/bin/env python3"

py_binary टारगेट को एक्ज़ीक्यूट करते समय, इस्तेमाल किए जाने वाले बूटस्ट्रैपिंग Python स्टब स्क्रिप्ट से पहले "शीबांग" एक्सप्रेशन जोड़ा जाता है.

प्रेरणा के लिए समस्या 8685 देखें.

Windows पर लागू नहीं होता है.