BazelCon 2022 16-17 নভেম্বর নিউ ইয়র্ক এবং অনলাইনে আসছে।
নিবন্ধন আজ!

পাইথন নিয়ম

সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।

নিয়ম

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 হল একটি এক্সিকিউটেবল পাইথন প্রোগ্রাম যাতে .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 এর উপর নির্ভর করে তথ্য বিভাগ। অন্যান্য বাইনারি তারপরে সোর্স ডিরেক্টরির সাথে সম্পর্কিত 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 এ যোগ করার জন্য আমদানি ডিরেক্টরির তালিকা।

"ভেরিয়েবল তৈরি করুন" প্রতিস্থাপনের বিষয়। এই নিয়ম এবং এর উপর নির্ভরশীল সমস্ত নিয়মের জন্য এই আমদানি ডিরেক্টরিগুলি যোগ করা হবে (দ্রষ্টব্য: এই নিয়মের উপর নির্ভর করে এমন নিয়ম নয়। প্রতিটি ডিরেক্টরি এই নিয়মের উপর নির্ভর করে py_binary নিয়ম দ্বারা PYTHONPATH এ যোগ করা হবে।

পরম পাথ (পাথ যেগুলি / দিয়ে শুরু হয়) এবং যে পাথগুলি এক্সিকিউশন রুটের উপরে একটি পাথ উল্লেখ করে সেগুলি অনুমোদিত নয় এবং এর ফলে একটি ত্রুটি হবে৷

legacy_create_init

Integer; optional; default is -1

রানফাইলস ট্রি-তে অন্তর্নিহিতভাবে খালি __init__.py ফাইল তৈরি করা হবে কিনা। এগুলি পাইথন সোর্স কোড বা শেয়ার্ড লাইব্রেরি সমন্বিত প্রতিটি ডিরেক্টরিতে এবং রেপো রুট ডিরেক্টরি বাদ দিয়ে সেই ডিরেক্টরিগুলির প্রতিটি মূল ডিরেক্টরিতে তৈরি করা হয়। ডিফল্ট, স্বয়ংক্রিয়, মানে সত্য যদি না --incompatible_default_to_explicit_init_py ব্যবহার করা হয়। মিথ্যা হলে, ব্যবহারকারী __init__.py ফাইল তৈরি (সম্ভবত খালি) এবং প্রয়োজন অনুযায়ী পাইথন লক্ষ্যগুলির srcs এ যোগ করার জন্য দায়ী।
main

Label ; optional

সোর্স ফাইলের নাম যা অ্যাপ্লিকেশনটির প্রধান এন্ট্রি পয়েন্ট। এই ফাইলটি অবশ্যই srcs এ তালিকাভুক্ত হতে হবে। যদি অনির্দিষ্ট রেখে দেওয়া হয়, তার পরিবর্তে name ব্যবহার করা হয় (উপরে দেখুন)। name srcs এ কোনো ফাইলের নামের সাথে না মিললে, main অবশ্যই উল্লেখ করতে হবে।
python_version

String; optional; nonconfigurable ; default is "_INTERNAL_SENTINEL"

Python 2 বা Python 3-এর জন্য এই টার্গেট (এবং এর ট্রানজিটিভ deps ) তৈরি করা হবে কিনা। বৈধ মান হল "PY2" এবং "PY3" (ডিফল্ট)।

পাইথন সংস্করণ সর্বদা (সম্ভবত ডিফল্টরূপে) এই বৈশিষ্ট্য দ্বারা নির্দিষ্ট করা যাই হোক না কেন সংস্করণে পুনরায় সেট করা হয়, কমান্ড লাইনে নির্দিষ্ট করা সংস্করণ বা এইটির উপর নির্ভরশীল অন্যান্য উচ্চতর লক্ষ্যমাত্রা নির্বিশেষে।

আপনি যদি বর্তমান পাইথন সংস্করণে select() করতে চান তবে আপনি @rules_python//python:python_version এর মান পরীক্ষা করতে পারেন। আরও তথ্যের জন্য এখানে দেখুন.

বাগ সতর্কীকরণ: এই বৈশিষ্ট্যটি সেই সংস্করণটি সেট করে যার জন্য Bazel আপনার টার্গেট তৈরি করে, কিন্তু #4815 এর কারণে, ফলস্বরূপ স্টাব স্ক্রিপ্টটি রানটাইমে ভুল দোভাষী সংস্করণটি চালু করতে পারে। এই সমাধানটি দেখুন, যার মধ্যে একটি py_runtime লক্ষ্য নির্ধারণ করা জড়িত যা প্রয়োজন অনুসারে Python সংস্করণের দিকে নির্দেশ করে এবং --python_top সেট করে এই py_runtime সক্রিয় করা।

srcs_version

String; optional; default is "PY2AND3"

এই বৈশিষ্ট্যটি লক্ষ্যের srcs কে Python 2, Python 3 বা উভয়ের সাথে সামঞ্জস্যপূর্ণ বলে ঘোষণা করে। আসলে পাইথন রানটাইম সংস্করণ সেট করতে, একটি এক্সিকিউটেবল পাইথন নিয়মের python_version বৈশিষ্ট্যটি ব্যবহার করুন ( py_binary বা py_test )।

অনুমোদিত মানগুলি হল: "PY2AND3" , "PY2" , এবং "PY3""PY2ONLY" এবং "PY3ONLY" ঐতিহাসিক কারণে অনুমোদিত, কিন্তু এগুলি মূলত "PY2" এবং "PY3" এর মতই এবং এড়িয়ে যাওয়া উচিত৷

মনে রাখবেন যে শুধুমাত্র এক্সিকিউটেবল নিয়ম ( py_binary এবং py_library ) আসলে এই বৈশিষ্ট্যের মানের বিপরীতে বর্তমান পাইথন সংস্করণটিকে যাচাই করে। (এটি একটি বৈশিষ্ট্য; যেহেতু py_library বর্তমান পাইথন সংস্করণটি পরিবর্তন করে না, যদি এটি বৈধতা দেয়, তবে একই আহ্বানে PY2ONLY এবং PY3ONLY উভয় লাইব্রেরি তৈরি করা অসম্ভব।) উপরন্তু, যদি একটি সংস্করণের অমিল থাকে, তাহলে ত্রুটি শুধুমাত্র মৃত্যুদন্ডের পর্যায়ে রিপোর্ট করা হয়. বিশেষ করে, ত্রুটিটি একটি bazel build --nobuild আহ্বানে প্রদর্শিত হবে না।)

কোন নির্ভরতা সংস্করণের প্রয়োজনীয়তাগুলি প্রবর্তন করে সে সম্পর্কে ডায়াগনস্টিক তথ্য পেতে, আপনি আপনার লক্ষ্যে find_requirements দিকটি চালাতে পারেন:

          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          
এটি একটি ফাইল তৈরি করবে -pyversioninfo.txt প্রত্যয় সহ তথ্য দেবে কেন আপনার লক্ষ্যের একটি পাইথন সংস্করণ বা অন্য একটি সংস্করণ প্রয়োজন। নোট করুন যে প্রদত্ত লক্ষ্য একটি সংস্করণ বিরোধের কারণে তৈরি করতে ব্যর্থ হলেও এটি কাজ করে।
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 এ যোগ করার জন্য আমদানি ডিরেক্টরির তালিকা।

"ভেরিয়েবল তৈরি করুন" প্রতিস্থাপনের বিষয়। এই নিয়ম এবং এর উপর নির্ভরশীল সমস্ত নিয়মের জন্য এই আমদানি ডিরেক্টরিগুলি যোগ করা হবে (দ্রষ্টব্য: এই নিয়মের উপর নির্ভর করে এমন নিয়ম নয়। প্রতিটি ডিরেক্টরি এই নিয়মের উপর নির্ভর করে py_binary নিয়ম দ্বারা PYTHONPATH এ যোগ করা হবে।

পরম পাথ (পাথ যেগুলি / দিয়ে শুরু হয়) এবং যে পাথগুলি এক্সিকিউশন রুটের উপরে একটি পাথ উল্লেখ করে সেগুলি অনুমোদিত নয় এবং এর ফলে একটি ত্রুটি হবে৷

srcs_version

String; optional; default is "PY2AND3"

এই বৈশিষ্ট্যটি লক্ষ্যের srcs কে Python 2, Python 3 বা উভয়ের সাথে সামঞ্জস্যপূর্ণ বলে ঘোষণা করে। আসলে পাইথন রানটাইম সংস্করণ সেট করতে, একটি এক্সিকিউটেবল পাইথন নিয়মের python_version বৈশিষ্ট্যটি ব্যবহার করুন ( py_binary বা py_test )।

অনুমোদিত মানগুলি হল: "PY2AND3" , "PY2" , এবং "PY3""PY2ONLY" এবং "PY3ONLY" ঐতিহাসিক কারণে অনুমোদিত, কিন্তু এগুলি মূলত "PY2" এবং "PY3" এর মতই এবং এড়িয়ে যাওয়া উচিত৷

মনে রাখবেন যে শুধুমাত্র এক্সিকিউটেবল নিয়ম ( py_binary এবং py_library ) আসলে এই বৈশিষ্ট্যের মানের বিপরীতে বর্তমান পাইথন সংস্করণটিকে যাচাই করে। (এটি একটি বৈশিষ্ট্য; যেহেতু py_library বর্তমান পাইথন সংস্করণটি পরিবর্তন করে না, যদি এটি বৈধতা দেয়, তবে একই আহ্বানে PY2ONLY এবং PY3ONLY উভয় লাইব্রেরি তৈরি করা অসম্ভব।) উপরন্তু, যদি একটি সংস্করণের অমিল থাকে, তাহলে ত্রুটি শুধুমাত্র মৃত্যুদন্ডের পর্যায়ে রিপোর্ট করা হয়. বিশেষ করে, ত্রুটিটি একটি bazel build --nobuild আহ্বানে প্রদর্শিত হবে না।)

কোন নির্ভরতা সংস্করণের প্রয়োজনীয়তাগুলি প্রবর্তন করে সে সম্পর্কে ডায়াগনস্টিক তথ্য পেতে, আপনি আপনার লক্ষ্যে find_requirements দিকটি চালাতে পারেন:

          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          
এটি প্রত্যয় -pyversioninfo.txt সহ একটি ফাইল তৈরি করবে যে কেন আপনার লক্ষ্যের একটি পাইথন সংস্করণ বা অন্য একটি সংস্করণ প্রয়োজন সে সম্পর্কে তথ্য দেবে৷ নোট করুন যে প্রদত্ত লক্ষ্য একটি সংস্করণ বিরোধের কারণে তৈরি করতে ব্যর্থ হলেও এটি কাজ করে।

পাই_পরীক্ষা

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 এ যোগ করার জন্য আমদানি ডিরেক্টরির তালিকা।

"ভেরিয়েবল তৈরি করুন" প্রতিস্থাপনের বিষয়। এই নিয়ম এবং এর উপর নির্ভরশীল সমস্ত নিয়মের জন্য এই আমদানি ডিরেক্টরিগুলি যোগ করা হবে (দ্রষ্টব্য: এই নিয়মের উপর নির্ভর করে এমন নিয়ম নয়। প্রতিটি ডিরেক্টরি এই নিয়মের উপর নির্ভর করে py_binary নিয়ম দ্বারা PYTHONPATH এ যোগ করা হবে।

পরম পাথ (পাথ যেগুলি / দিয়ে শুরু হয়) এবং যে পাথগুলি এক্সিকিউশন রুটের উপরে একটি পাথ উল্লেখ করে সেগুলি অনুমোদিত নয় এবং এর ফলে একটি ত্রুটি হবে৷

legacy_create_init

Integer; optional; default is -1

রানফাইলস ট্রি-তে অন্তর্নিহিতভাবে খালি __init__.py ফাইল তৈরি করা হবে কিনা। এগুলি পাইথন সোর্স কোড বা শেয়ার্ড লাইব্রেরি সমন্বিত প্রতিটি ডিরেক্টরিতে এবং রেপো রুট ডিরেক্টরি বাদ দিয়ে সেই ডিরেক্টরিগুলির প্রতিটি মূল ডিরেক্টরিতে তৈরি করা হয়। ডিফল্ট, স্বয়ংক্রিয়, মানে সত্য যদি না --incompatible_default_to_explicit_init_py ব্যবহার করা হয়। মিথ্যা হলে, ব্যবহারকারী __init__.py ফাইল তৈরি (সম্ভবত খালি) এবং প্রয়োজন অনুযায়ী পাইথন লক্ষ্যগুলির srcs এ যোগ করার জন্য দায়ী।
main

Label ; optional

সোর্স ফাইলের নাম যা অ্যাপ্লিকেশনটির প্রধান এন্ট্রি পয়েন্ট। এই ফাইলটি অবশ্যই srcs এ তালিকাভুক্ত হতে হবে। যদি অনির্দিষ্ট রেখে দেওয়া হয়, তার পরিবর্তে name ব্যবহার করা হয় (উপরে দেখুন)। name srcs এ কোনো ফাইলের নামের সাথে না মিললে, main অবশ্যই উল্লেখ করতে হবে।
python_version

String; optional; nonconfigurable ; default is "_INTERNAL_SENTINEL"

Python 2 বা Python 3-এর জন্য এই টার্গেট (এবং এর ট্রানজিটিভ deps ) তৈরি করা হবে কিনা। বৈধ মান হল "PY2" এবং "PY3" (ডিফল্ট)।

পাইথন সংস্করণ সর্বদা (সম্ভবত ডিফল্টরূপে) এই বৈশিষ্ট্য দ্বারা নির্দিষ্ট করা যাই হোক না কেন সংস্করণে পুনরায় সেট করা হয়, কমান্ড লাইনে নির্দিষ্ট করা সংস্করণ বা এইটির উপর নির্ভরশীল অন্যান্য উচ্চতর লক্ষ্যমাত্রা নির্বিশেষে।

আপনি যদি বর্তমান পাইথন সংস্করণে select() করতে চান তবে আপনি @rules_python//python:python_version এর মান পরীক্ষা করতে পারেন। আরও তথ্যের জন্য এখানে দেখুন.

বাগ সতর্কীকরণ: এই বৈশিষ্ট্যটি সেই সংস্করণটি সেট করে যার জন্য Bazel আপনার টার্গেট তৈরি করে, কিন্তু #4815 এর কারণে, ফলস্বরূপ স্টাব স্ক্রিপ্টটি রানটাইমে ভুল দোভাষী সংস্করণটি চালু করতে পারে। এই সমাধানটি দেখুন, যার মধ্যে একটি py_runtime লক্ষ্য নির্ধারণ করা জড়িত যা প্রয়োজন অনুসারে Python সংস্করণের দিকে নির্দেশ করে এবং --python_top সেট করে এই py_runtime সক্রিয় করা।

srcs_version

String; optional; default is "PY2AND3"

এই বৈশিষ্ট্যটি লক্ষ্যের srcs কে Python 2, Python 3 বা উভয়ের সাথে সামঞ্জস্যপূর্ণ বলে ঘোষণা করে। আসলে পাইথন রানটাইম সংস্করণ সেট করতে, একটি এক্সিকিউটেবল পাইথন নিয়মের python_version বৈশিষ্ট্যটি ব্যবহার করুন ( py_binary বা py_test )।

অনুমোদিত মানগুলি হল: "PY2AND3" , "PY2" , এবং "PY3""PY2ONLY" এবং "PY3ONLY" ঐতিহাসিক কারণে অনুমোদিত, কিন্তু এগুলি মূলত "PY2" এবং "PY3" এর মতই এবং এড়িয়ে যাওয়া উচিত৷

মনে রাখবেন যে শুধুমাত্র এক্সিকিউটেবল নিয়ম ( py_binary এবং py_library ) আসলে এই বৈশিষ্ট্যের মানের বিপরীতে বর্তমান পাইথন সংস্করণটিকে যাচাই করে। (এটি একটি বৈশিষ্ট্য; যেহেতু py_library বর্তমান পাইথন সংস্করণটি পরিবর্তন করে না, যদি এটি বৈধতা দেয়, তবে একই আহ্বানে PY2ONLY এবং PY3ONLY উভয় লাইব্রেরি তৈরি করা অসম্ভব।) উপরন্তু, যদি একটি সংস্করণের অমিল থাকে, তাহলে ত্রুটি শুধুমাত্র মৃত্যুদন্ডের পর্যায়ে রিপোর্ট করা হয়. বিশেষ করে, ত্রুটিটি একটি bazel build --nobuild আহ্বানে প্রদর্শিত হবে না।)

কোন নির্ভরতাগুলি সংস্করণের প্রয়োজনীয়তাগুলি প্রবর্তন করে সে সম্পর্কে ডায়াগনস্টিক তথ্য পেতে, আপনি আপনার লক্ষ্যে find_requirements দিকটি চালাতে পারেন:

          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          
এটি একটি ফাইল তৈরি করবে -pyversioninfo.txt প্রত্যয় সহ তথ্য দেবে কেন আপনার লক্ষ্যের একটি পাইথন সংস্করণ বা অন্য একটি সংস্করণ প্রয়োজন। নোট করুন যে প্রদত্ত লক্ষ্য একটি সংস্করণ বিরোধের কারণে তৈরি করতে ব্যর্থ হলেও এটি কাজ করে।
stamp

Integer; optional; default is 0

py_binary() আর্গুমেন্টের বিভাগটি দেখুন, স্ট্যাম্প আর্গুমেন্টটি পরীক্ষার জন্য ডিফল্টরূপে 0 এ সেট করা ব্যতীত।

py_runtime

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

পাইথন কোড চালানোর জন্য ব্যবহৃত একটি পাইথন রানটাইম প্রতিনিধিত্ব করে।

একটি py_runtime টার্গেট একটি প্ল্যাটফর্ম রানটাইম বা একটি ইন-বিল্ড রানটাইম উপস্থাপন করতে পারে। একটি প্ল্যাটফর্ম রানটাইম একটি পরিচিত পথে একটি সিস্টেম-ইনস্টল করা দোভাষী অ্যাক্সেস করে, যেখানে একটি ইন-বিল্ড রানটাইম একটি এক্সিকিউটেবল টার্গেটের দিকে নির্দেশ করে যা দোভাষী হিসাবে কাজ করে। উভয় ক্ষেত্রেই, একটি "দোভাষী" মানে যে কোনো এক্সিকিউটেবল বাইনারি বা র‍্যাপার স্ক্রিপ্ট যা কমান্ড লাইনে পাস করা পাইথন স্ক্রিপ্ট চালাতে সক্ষম, স্ট্যান্ডার্ড 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

এই লক্ষ্যের জন্য একটি অনন্য নাম।

files

List of labels ; optional

একটি ইন-বিল্ড রানটাইমের জন্য, এটি এই রানটাইম সমন্বিত ফাইলগুলির সেট। এই ফাইলগুলি পাইথন বাইনারিগুলির রানফাইলে যোগ করা হবে যা এই রানটাইম ব্যবহার করে। একটি প্ল্যাটফর্ম রানটাইম জন্য এই বৈশিষ্ট্য সেট করা উচিত নয়.
interpreter

Label ; optional

একটি অন্তর্নির্মিত রানটাইমের জন্য, এটি হল দোভাষী হিসাবে ডাকার লক্ষ্য৷ একটি প্ল্যাটফর্ম রানটাইম জন্য এই বৈশিষ্ট্য সেট করা উচিত নয়.
interpreter_path

String; optional

একটি প্ল্যাটফর্ম রানটাইমের জন্য, এটি লক্ষ্য প্ল্যাটফর্মে পাইথন দোভাষীর পরম পথ। একটি ইন-বিল্ড রানটাইমের জন্য এই বৈশিষ্ট্যটি অবশ্যই সেট করা উচিত নয়৷
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 টার্গেট নির্বাহ করার সময় ব্যবহৃত বুটস্ট্র্যাপিং পাইথন স্টাব স্ক্রিপ্টের সাথে যুক্ত।

অনুপ্রেরণার জন্য সংখ্যা 8685 দেখুন।

উইন্ডোজের ক্ষেত্রে প্রযোজ্য নয়।