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