नियम
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
चलाना है, तो सही तरीका यह है कि आप दूसरी बाइनरी या
टेस्ट को अपने डेटा सेक्शन में py_binary
पर निर्भर करें. उदाहरण के लिए, किसी java_test में कुछ मॉक रिसॉर्स सेट अप करने के लिए, python बाइनरी चलाना. इसके बाद, दूसरा बिनेरी, सोर्स डायरेक्ट्री के हिसाब से 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 का इस्तेमाल न किया गया हो. गलत होने पर,
__init__.py फ़ाइलें बनाने और ज़रूरत के हिसाब से उन्हें
Python टारगेट के srcs में जोड़ने की ज़िम्मेदारी उपयोगकर्ता की होती है. हो सकता है कि यह खाली न हो.
|
main
|
लेबल; डिफ़ॉल्ट srcs में भी शामिल करना ज़रूरी है. अगर इसकी वैल्यू नहीं दी जाती है, तो इसके बजाय name का इस्तेमाल किया जाता है (ऊपर देखें). अगर name , srcs में मौजूद किसी भी फ़ाइल के नाम से मैच नहीं करता है, तो main की जानकारी देना ज़रूरी है.
|
python_version
|
स्ट्रिंग; कॉन्फ़िगर नहीं की जा सकती; डिफ़ॉल्ट रूप से deps ) बनाना है या Python
3. मान्य वैल्यू, "PY2" और "PY3" (डिफ़ॉल्ट) हैं.
Python वर्शन हमेशा इस एट्रिब्यूट में दिए गए वर्शन पर रीसेट (डिफ़ॉल्ट रूप से) हो जाता है. भले ही, इस एट्रिब्यूट के लिए तय किया गया कोई भी वर्शन हो. इस बात से कोई फ़र्क़ नहीं पड़ता कि कमांड लाइन में दिया गया वर्शन कौनसा है या इस एट्रिब्यूट पर आधारित किसी और वर्शन के लिए कितना ज़रूरी है. अगर आपको Python के मौजूदा वर्शन पर गड़बड़ी की चेतावनी: यह एट्रिब्यूट वह वर्शन सेट करता है जिसके लिए बेज़ल आपका टारगेट बनाता है.
हालांकि, #4815 की वजह से, रनटाइम के दौरान हो सकता है कि स्टब स्क्रिप्ट गलत अनुवादक वर्शन शुरू कर दे. यह तरीका आज़माएं. इसमें, ज़रूरत के हिसाब से, Python के किसी एक वर्शन पर ले जाने वाला |
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_version एट्रिब्यूट का इस्तेमाल करें. यह एट्रिब्यूट, py_binary या py_test जैसे Python के ऐसे नियम के लिए होता है जिसे चलाया जा सकता है.
इन वैल्यू का इस्तेमाल किया जा सकता है: ध्यान दें कि सिर्फ़ एक्ज़ीक्यूटेबल नियम ( किन डिपेंडेंसी के लिए वर्शन की ज़रूरी शर्तें लागू होती हैं, इस बारे में गड़बड़ी की जानकारी पाने के लिए, अपने टारगेट पर 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 का इस्तेमाल नहीं किया जाता, तब तक डिफ़ॉल्ट के तौर पर अपने-आप मैसेज का मतलब 'सही' होता है. अगर यह फ़ील्ड 'गलत' पर सेट है, तो उपयोगकर्ता को
__init__.py फ़ाइलें बनानी होंगी. ये फ़ाइलें शायद खाली हों. साथ ही, उन्हें ज़रूरत के हिसाब से, Python टारगेट के srcs में जोड़ना होगा.
|
main
|
लेबल; डिफ़ॉल्ट srcs में भी शामिल करना ज़रूरी है. अगर इसकी वैल्यू नहीं दी जाती है, तो इसके बजाय name का इस्तेमाल किया जाता है (ऊपर देखें). अगर name , srcs में मौजूद किसी भी फ़ाइल के नाम से मैच नहीं करता है, तो main की जानकारी देना ज़रूरी है.
|
python_version
|
स्ट्रिंग; कॉन्फ़िगर नहीं की जा सकती; डिफ़ॉल्ट रूप से deps ) बनाना है या Python
3. मान्य वैल्यू, "PY2" और "PY3" (डिफ़ॉल्ट) हैं.
Python वर्शन हमेशा इस एट्रिब्यूट में दिए गए वर्शन पर रीसेट (डिफ़ॉल्ट रूप से) हो जाता है. भले ही, इस एट्रिब्यूट के लिए तय किया गया कोई भी वर्शन हो. इस बात से कोई फ़र्क़ नहीं पड़ता कि कमांड लाइन में दिया गया वर्शन कौनसा है या इस एट्रिब्यूट पर आधारित किसी और वर्शन के लिए कितना ज़रूरी है. अगर आपको Python के मौजूदा वर्शन पर बग से जुड़ी चेतावनी: इस एट्रिब्यूट से वह वर्शन सेट होता है जिसके लिए Bazel आपके टारगेट को बनाता है. हालांकि, #4815 की वजह से, बनने वाली स्टब स्क्रिप्ट अब भी रनटाइम के दौरान, इंटरप्रिटर के गलत वर्शन को ट्रिगर कर सकती है. यह तरीका आज़माएं. इसमें, ज़रूरत के हिसाब से, Python के किसी एक वर्शन पर ले जाने वाला |
srcs_version
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर srcs , Python 2, Python 3 या दोनों के साथ काम करता है. Python के रनटाइम वर्शन को सेट करने के लिए, python_version एट्रिब्यूट का इस्तेमाल करें. यह एट्रिब्यूट, py_binary या py_test जैसे Python के ऐसे नियम के लिए होता है जिसे चलाया जा सकता है.
इन वैल्यू का इस्तेमाल किया जा सकता है: ध्यान दें कि सिर्फ़ एक्ज़ीक्यूटेबल नियम ( किन डिपेंडेंसी के लिए वर्शन की ज़रूरी शर्तें लागू होती हैं, इस बारे में गड़बड़ी की जानकारी पाने के लिए, अपने टारगेट पर 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 टारगेट लागू करते समय इस्तेमाल की जाने वाली बूटस्ट्रैपिंग Python स्क्रिप्ट
से पहले जोड़ा गया.
ऐसा करने का बढ़ावा देने के बारे में जानने के लिए, समस्या 8685 देखें. Windows पर लागू नहीं होता है. |