नियम
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 |
इस टारगेट के लिए एक खास नाम. अगर 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 ) बनाना है या नहीं. डिफ़ॉल्ट वैल्यू "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 का इस्तेमाल नहीं किया जाता, तब तक डिफ़ॉल्ट ऑटो, 'सही' का मतलब 'सही' है. गलत होने पर,
__init__.py फ़ाइलें बनाने और उन्हें ज़रूरत के मुताबिक Python टारगेट के
srcs में जोड़ने की ज़िम्मेदारी उपयोगकर्ता की होती है.
|
main
|
srcs की सूची में भी होनी चाहिए. अगर जानकारी को सेट नहीं किया गया है, तो
name का इस्तेमाल किया जाता है (ऊपर देखें). अगर name का मिलान srcs में मौजूद किसी भी फ़ाइल नाम से नहीं होता है, तो main बताना ज़रूरी है.
|
python_version
|
deps ) बनाना है या नहीं. डिफ़ॉल्ट वैल्यू "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, 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 |
इस टारगेट के लिए एक खास नाम. |
coverage_tool
|
py_binary
और py_test टारगेट से कोड कवरेज की जानकारी इकट्ठा करने के लिए किया जाता है.
अगर सेट किया जाता है, तो टारगेट को एक ही फ़ाइल बनानी चाहिए या वह एक्ज़ीक्यूटेबल टारगेट होना चाहिए. Python कवरेज टूल के लिए एंट्री पॉइंट तय करने के लिए, किसी एक फ़ाइल का पाथ या टारगेट को एक्ज़ीक्यूट करने पर उसका पाथ जिसे एक्ज़ीक्यूट किया जा सकता है. कवरेज चालू होने पर, टारगेट और उसकी रनफ़ाइल को रनफ़ाइल में जोड़ दिया जाएगा. टूल का एंट्री पॉइंट ऐसा होना चाहिए जिसे Python इंटरप्रेटर की मदद से लोड किया जा सके (उदाहरण के लिए,
|
files
|
|
interpreter
|
|
interpreter_path
|
|
python_version
|
"PY2"
और "PY3" हैं.
डिफ़ॉल्ट वैल्यू को |
stub_shebang
|
py_binary टारगेट को एक्ज़ीक्यूट करते समय,
इस्तेमाल किए जाने वाले बूटस्ट्रैपिंग Python स्टब स्क्रिप्ट से पहले "शीबांग" एक्सप्रेशन जोड़ा जाता है.
प्रेरणा के लिए समस्या 8685 देखें. Windows पर लागू नहीं होता है. |