नियम
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 = [":testing"], ) java_library( name = "testing", srcs = glob(["*.java"]), data = [":test_main"] )
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. अगर main की वैल्यू तय नहीं की गई है, तो यह उस सोर्स फ़ाइल के नाम के बराबर होनी चाहिए जो ऐप्लिकेशन का मुख्य एंट्री पॉइंट है. हालांकि, इसमें एक्सटेंशन शामिल नहीं होना चाहिए. उदाहरण के लिए, अगर आपके एंट्री पॉइंट का नाम main.py है, तो आपका नाम main होना चाहिए.
|
deps
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू deps के बारे में सामान्य टिप्पणियां देखें. ये टिप्पणियां
ज़्यादातर बिल्ड नियमों के हिसाब से तय किए गए सामान्य एट्रिब्यूट पर की गई हैं.
ये आम तौर पर py_library नियम होते हैं.
|
srcs
|
लेबल की सूची; ज़रूरी है टारगेट बनाने के लिए प्रोसेस की गई सोर्स (.py ) फ़ाइलों की सूची.
इसमें चेक-इन किया गया आपका पूरा कोड और जनरेट की गई सभी सोर्स फ़ाइलें शामिल हैं. लाइब्रेरी टारगेट को deps में रखा जाता है. वहीं, रनटाइम के दौरान ज़रूरी अन्य बाइनरी फ़ाइलों को data में रखा जाता है.
|
imports
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू PYTHONPATH में जोड़ी जाने वाली इंपोर्ट डायरेक्ट्री की सूची.
"बदलाव के हिसाब से" विकल्प के तहत बदलाव किया जा सकता है. इस नियम और इस पर निर्भर सभी नियमों के लिए, ये इंपोर्ट डायरेक्ट्री जोड़ी जाएंगी. ध्यान दें: यह नियम जिन नियमों पर निर्भर है उनके लिए नहीं. हर डायरेक्ट्री को
ऐब्सलूट पाथ ( |
legacy_create_init
|
पूर्णांक; डिफ़ॉल्ट वैल्यू --incompatible_default_to_explicit_init_py का इस्तेमाल करने पर ऐसा नहीं होता. अगर यह वैल्यू false पर सेट है, तो उपयोगकर्ता को __init__.py फ़ाइलें बनानी होंगी. ये फ़ाइलें खाली भी हो सकती हैं. साथ ही, इन्हें Python टारगेट के srcs में जोड़ना होगा.
|
main
|
लेबल; डिफ़ॉल्ट वैल्यू srcs में भी शामिल होनी चाहिए. अगर इसे तय नहीं किया जाता है, तो इसके बजाय name का इस्तेमाल किया जाता है (ऊपर देखें). अगर name , srcs में मौजूद किसी भी फ़ाइल के नाम से मेल नहीं खाता है, तो main को शामिल करना ज़रूरी है.
|
python_version
|
स्ट्रिंग; बदला नहीं जा सकता; डिफ़ॉल्ट वैल्यू deps ) को Python 2 या Python 3 के लिए बनाना है या नहीं. मान्य वैल्यू "PY2" और "PY3" (डिफ़ॉल्ट) हैं.
Python का वर्शन हमेशा इस एट्रिब्यूट में बताए गए वर्शन पर रीसेट हो जाता है. ऐसा डिफ़ॉल्ट रूप से भी हो सकता है. भले ही, कमांड लाइन पर या इस पर निर्भर करने वाले अन्य बड़े टारगेट में कोई और वर्शन बताया गया हो. अगर आपको Python के मौजूदा वर्शन पर बग की चेतावनी: यह एट्रिब्यूट उस वर्शन को सेट करता है जिसके लिए Bazel आपके टारगेट को बनाता है. हालांकि, #4815 की वजह से, नतीजे में मिलने वाली स्टब स्क्रिप्ट अब भी रनटाइम के दौरान गलत इंटरप्रेटर वर्शन को लागू कर सकती है. इस
वैकल्पिक तरीके को देखें. इसमें एक |
srcs_version
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू srcs , Python 2, Python 3 या दोनों के साथ काम करेगा. Python के रनटाइम वर्शन को सेट करने के लिए, Python के एक्ज़ीक्यूटेबल नियम (py_binary या py_test ) के python_version एट्रिब्यूट का इस्तेमाल करें.
इन वैल्यू का इस्तेमाल किया जा सकता है: ध्यान दें कि सिर्फ़ एक्ज़ीक्यूटेबल नियम ( यह पता लगाने के लिए कि किन डिपेंडेंसी के लिए वर्शन की ज़रूरी शर्तें लागू होती हैं, अपने टारगेट पर bazel build <your target> \ --aspects=@rules_python//python:defs.bzl%find_requirements \ --output_groups=pyversioninfo -pyversioninfo.txt सफ़िक्स वाली एक फ़ाइल बनेगी. इसमें यह जानकारी होगी कि आपके टारगेट को Python के एक वर्शन की ज़रूरत क्यों है. ध्यान दें कि यह तब भी काम करता है, जब वर्शन के टकराव की वजह से दिया गया टारगेट नहीं बन पाता.
|
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 |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू deps के बारे में सामान्य टिप्पणियां देखें. ये टिप्पणियां
ज़्यादातर बिल्ड नियमों के हिसाब से तय किए गए सामान्य एट्रिब्यूट पर की गई हैं.
ये आम तौर पर py_library नियम होते हैं.
|
srcs
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू .py ) फ़ाइलों की सूची.
इसमें चेक-इन किया गया आपका पूरा कोड और जनरेट की गई सभी सोर्स फ़ाइलें शामिल हैं.
|
imports
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू PYTHONPATH में जोड़ी जाने वाली इंपोर्ट डायरेक्ट्री की सूची.
"बदलाव के हिसाब से" विकल्प के तहत बदलाव किया जा सकता है. इस नियम और इस पर निर्भर सभी नियमों के लिए, ये इंपोर्ट डायरेक्ट्री जोड़ी जाएंगी. ध्यान दें: यह नियम जिन नियमों पर निर्भर है उनके लिए नहीं. हर डायरेक्ट्री को
ऐब्सलूट पाथ ( |
srcs_version
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू srcs , Python 2, Python 3 या दोनों के साथ काम करेगा. Python के रनटाइम वर्शन को सेट करने के लिए, Python के एक्ज़ीक्यूटेबल नियम (py_binary या py_test ) के python_version एट्रिब्यूट का इस्तेमाल करें.
इन वैल्यू का इस्तेमाल किया जा सकता है: ध्यान दें कि सिर्फ़ एक्ज़ीक्यूटेबल नियम ( यह पता लगाने के लिए कि किन डिपेंडेंसी के लिए वर्शन की ज़रूरी शर्तें लागू होती हैं, अपने टारगेट पर 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 |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू deps के बारे में सामान्य टिप्पणियां देखें. ये टिप्पणियां
ज़्यादातर बिल्ड नियमों के हिसाब से तय किए गए सामान्य एट्रिब्यूट पर की गई हैं.
ये आम तौर पर py_library नियम होते हैं.
|
srcs
|
लेबल की सूची; ज़रूरी है टारगेट बनाने के लिए प्रोसेस की गई सोर्स (.py ) फ़ाइलों की सूची.
इसमें चेक-इन किया गया आपका पूरा कोड और जनरेट की गई सभी सोर्स फ़ाइलें शामिल हैं. लाइब्रेरी टारगेट को deps में रखा जाता है. वहीं, रनटाइम के दौरान ज़रूरी अन्य बाइनरी फ़ाइलों को data में रखा जाता है.
|
imports
|
स्ट्रिंग की सूची; डिफ़ॉल्ट वैल्यू PYTHONPATH में जोड़ी जाने वाली इंपोर्ट डायरेक्ट्री की सूची.
"बदलाव के हिसाब से" विकल्प के तहत बदलाव किया जा सकता है. इस नियम और इस पर निर्भर सभी नियमों के लिए, ये इंपोर्ट डायरेक्ट्री जोड़ी जाएंगी. ध्यान दें: यह नियम जिन नियमों पर निर्भर है उनके लिए नहीं. हर डायरेक्ट्री को
ऐब्सलूट पाथ ( |
legacy_create_init
|
पूर्णांक; डिफ़ॉल्ट वैल्यू --incompatible_default_to_explicit_init_py का इस्तेमाल करने पर ऐसा नहीं होता. अगर यह वैल्यू false पर सेट है, तो उपयोगकर्ता को __init__.py फ़ाइलें बनानी होंगी. ये फ़ाइलें खाली भी हो सकती हैं. साथ ही, इन्हें Python टारगेट के srcs में जोड़ना होगा.
|
main
|
लेबल; डिफ़ॉल्ट वैल्यू srcs में भी शामिल होनी चाहिए. अगर इसे तय नहीं किया जाता है, तो इसके बजाय name का इस्तेमाल किया जाता है (ऊपर देखें). अगर name , srcs में मौजूद किसी भी फ़ाइल के नाम से मेल नहीं खाता है, तो main को शामिल करना ज़रूरी है.
|
python_version
|
स्ट्रिंग; बदला नहीं जा सकता; डिफ़ॉल्ट वैल्यू deps ) को Python 2 या Python 3 के लिए बनाना है या नहीं. मान्य वैल्यू "PY2" और "PY3" (डिफ़ॉल्ट) हैं.
Python का वर्शन हमेशा इस एट्रिब्यूट में बताए गए वर्शन पर रीसेट हो जाता है. ऐसा डिफ़ॉल्ट रूप से भी हो सकता है. भले ही, कमांड लाइन पर या इस पर निर्भर करने वाले अन्य बड़े टारगेट में कोई और वर्शन बताया गया हो. अगर आपको Python के मौजूदा वर्शन पर बग की चेतावनी: यह एट्रिब्यूट उस वर्शन को सेट करता है जिसके लिए Bazel आपके टारगेट को बनाता है. हालांकि, #4815 की वजह से, नतीजे में मिलने वाली स्टब स्क्रिप्ट अब भी रनटाइम के दौरान गलत इंटरप्रेटर वर्शन को लागू कर सकती है. इस
वैकल्पिक तरीके को देखें. इसमें एक |
srcs_version
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू srcs , Python 2, Python 3 या दोनों के साथ काम करेगा. Python के रनटाइम वर्शन को सेट करने के लिए, Python के एक्ज़ीक्यूटेबल नियम (py_binary या py_test ) के python_version एट्रिब्यूट का इस्तेमाल करें.
इन वैल्यू का इस्तेमाल किया जा सकता है: ध्यान दें कि सिर्फ़ एक्ज़ीक्यूटेबल नियम ( यह पता लगाने के लिए कि किन डिपेंडेंसी के लिए वर्शन की ज़रूरी शर्तें लागू होती हैं, अपने टारगेट पर bazel build <your target> \ --aspects=@rules_python//python:defs.bzl%find_requirements \ --output_groups=pyversioninfo -pyversioninfo.txt सफ़िक्स वाली एक फ़ाइल बनेगी. इसमें यह जानकारी होगी कि आपके टारगेट को Python के एक वर्शन की ज़रूरत क्यों है. ध्यान दें कि यह तब भी काम करता है, जब वर्शन के टकराव की वजह से दिया गया टारगेट नहीं बन पाता.
|
stamp
|
पूर्णांक; डिफ़ॉल्ट वैल्यू |
py_runtime
नियम का सोर्स देखेंpy_runtime(name, bootstrap_template, 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 |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
bootstrap_template
|
लेबल; डिफ़ॉल्ट वैल्यू |
coverage_tool
|
लेबल; डिफ़ॉल्ट वैल्यू py_binary और py_test टारगेट से कोड कवरेज की जानकारी इकट्ठा करने के लिए इस्तेमाल किया जाने वाला टारगेट है.
अगर टारगेट सेट किया गया है, तो टारगेट को एक फ़ाइल जनरेट करनी चाहिए या वह एक एक्ज़ीक्यूटेबल टारगेट होना चाहिए. सिंगल फ़ाइल का पाथ या एक्ज़ीक्यूटेबल (अगर टारगेट एक्ज़ीक्यूटेबल है), Python कवरेज टूल के लिए एंट्री पॉइंट तय करता है. कवरेज चालू होने पर, टारगेट और उसकी रनफ़ाइलें, रनफ़ाइलों में जोड़ दी जाएंगी. टूल का एंट्री पॉइंट, Python इंटरप्रेटर से लोड किया जा सकने वाला होना चाहिए. जैसे, |
files
|
लेबल की सूची; डिफ़ॉल्ट वैल्यू |
interpreter
|
लेबल; डिफ़ॉल्ट वैल्यू |
interpreter_path
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू |
python_version
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू "PY2"
और "PY3" हैं.
डिफ़ॉल्ट वैल्यू को |
stub_shebang
|
स्ट्रिंग; डिफ़ॉल्ट वैल्यू py_binary टारगेट को एक्ज़ीक्यूट करते समय इस्तेमाल किया जाता है.
प्रेरणा पाने के लिए, समस्या 8685 देखें. यह सुविधा Windows पर काम नहीं करती. |