diff --git a/locales/ar/LC_MESSAGES/messages.po b/locales/ar/LC_MESSAGES/messages.po index c45a4a294..fd763fb16 100644 --- a/locales/ar/LC_MESSAGES/messages.po +++ b/locales/ar/LC_MESSAGES/messages.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2025-12-15 04:00+0000\n" "Last-Translator: HAMDI KHALID \n" "Language-Team: Arabic `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4325,7 +4325,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4492,8 +4492,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8567,13 +8567,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8581,23 +8588,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8608,21 +8615,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8630,7 +8637,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8638,37 +8645,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8676,7 +8683,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8685,7 +8692,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13510,7 +13517,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16403,19 +16410,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16427,29 +16434,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16458,26 +16465,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16485,13 +16492,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16504,30 +16511,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26042,35 +26056,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26078,22 +26104,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/ars/LC_MESSAGES/messages.po b/locales/ars/LC_MESSAGES/messages.po index 51f25a758..f5c5fbb7e 100644 --- a/locales/ars/LC_MESSAGES/messages.po +++ b/locales/ars/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -2482,7 +2482,7 @@ msgid "" msgstr "" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4318,7 +4318,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4485,8 +4485,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8560,13 +8560,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8574,23 +8581,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8601,21 +8608,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8623,7 +8630,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8631,37 +8638,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8669,7 +8676,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8678,7 +8685,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13503,7 +13510,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16396,19 +16403,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16420,29 +16427,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16451,26 +16458,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16478,13 +16485,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16497,30 +16504,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26035,35 +26049,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26071,22 +26097,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/cs/LC_MESSAGES/messages.po b/locales/cs/LC_MESSAGES/messages.po index 625528c6e..e2ee4f2b5 100644 --- a/locales/cs/LC_MESSAGES/messages.po +++ b/locales/cs/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2025-10-16 23:52+0000\n" "Last-Translator: Karolína Wallenfelsová \n" "Language-Team: Czech `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4329,7 +4329,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4496,8 +4496,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8571,13 +8571,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8585,23 +8592,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8612,21 +8619,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8634,7 +8641,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8642,37 +8649,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8680,7 +8687,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8689,7 +8696,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13514,7 +13521,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16407,19 +16414,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16431,29 +16438,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16462,26 +16469,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16489,13 +16496,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16508,30 +16515,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26046,35 +26060,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26082,22 +26108,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/da/LC_MESSAGES/messages.po b/locales/da/LC_MESSAGES/messages.po index a032f8b6c..96553b039 100644 --- a/locales/da/LC_MESSAGES/messages.po +++ b/locales/da/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2025-10-09 04:07+0000\n" "Last-Translator: Philip Mallegol-Hansen \n" "Language-Team: Danish `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4323,7 +4323,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4490,8 +4490,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8565,13 +8565,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8579,23 +8586,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8606,21 +8613,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8628,7 +8635,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8636,37 +8643,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8674,7 +8681,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8683,7 +8690,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13508,7 +13515,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16401,19 +16408,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16425,29 +16432,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16456,26 +16463,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16483,13 +16490,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16502,30 +16509,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26040,35 +26054,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26076,22 +26102,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/de/LC_MESSAGES/messages.po b/locales/de/LC_MESSAGES/messages.po index a8b014c12..b31726143 100644 --- a/locales/de/LC_MESSAGES/messages.po +++ b/locales/de/LC_MESSAGES/messages.po @@ -19,7 +19,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2026-07-22 20:54+0000\n" "Last-Translator: VfBFan \n" "Language-Team: German `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4901,7 +4901,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -5068,8 +5068,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -9143,13 +9143,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -9157,23 +9164,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -9184,21 +9191,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -9206,7 +9213,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -9214,37 +9221,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -9252,7 +9259,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -9261,7 +9268,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -14086,7 +14093,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16981,19 +16988,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -17005,29 +17012,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -17036,26 +17043,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -17063,13 +17070,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -17082,30 +17089,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26621,35 +26635,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26657,22 +26683,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/eo/LC_MESSAGES/messages.po b/locales/eo/LC_MESSAGES/messages.po index e4fbb88e3..1ad6dfed7 100644 --- a/locales/eo/LC_MESSAGES/messages.po +++ b/locales/eo/LC_MESSAGES/messages.po @@ -1,15 +1,15 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) 2013–2020, PyPA # This file is distributed under the same license as the Python Packaging User Guide package. -# phlostically , 2021, 2024, 2025. +# phlostically , 2021, 2024, 2025, 2026. # meowmeowmeowcat , 2021. # Emilia Meza , 2025. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" -"PO-Revision-Date: 2025-06-29 12:03+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" +"PO-Revision-Date: 2026-10-02 03:32+0000\n" "Last-Translator: phlostically \n" "Language-Team: Esperanto \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.13-dev\n" +"X-Generator: Weblate 2026.10\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -1884,8 +1884,8 @@ msgid "" "correctly. When the project is installed by :ref:`pip`, this is the " "specification that is used to install its dependencies." msgstr "" -"``install_requires`` estas ŝlosilvorto de :ref:`setuptools` " -"en :file:`setup.py` kiu specifas la *minimumon* necesan por rulado de " +"``install_requires`` estas ŝlosilvorto de :ref:`setuptools` en " +":file:`setup.py` kiu specifas la **minimumon** necesan por rulado de " "projekto. Kiam la projekto estas instalata de :ref:`pip`, ĝi estas la " "specifo uzatan por instali la dependaĵojn." @@ -2439,16 +2439,6 @@ msgstr "" "Index (PyPI)>` uzante postulo-specifilojn kaj aŭtomate instali dependaĵojn." #: ../source/discussions/pip-vs-easy-install.rst:14 -#, fuzzy -#| msgid "" -#| ":ref:`pip` came later in 2008, as alternative to :ref:`easy_install " -#| "`, although still largely built on top of :ref:`setuptools` " -#| "components. It was notable at the time for *not* installing packages " -#| "as :term:`Eggs ` or from :term:`Eggs ` (but rather simply as " -#| "'flat' packages from :term:`sdists `), and introducing the idea of :ref:`Requirements Files " -#| "`, which gave users the power to easily replicate " -#| "environments." msgid "" ":ref:`pip` came later in 2008, as an alternative to :ref:`easy_install " "`, although still largely built on top of :ref:`setuptools` " @@ -2459,10 +2449,10 @@ msgid "" "Files>`, which gave users the power to easily replicate environments." msgstr "" ":ref:`pip` venis poste en 2008, kiel alternativo al :ref:`easy_install " -"`, kvankam ĝi plejparte baziĝis sur la komponantoj " -"del :ref:`setuptools`. Tiutempe, ĝi notinde *ne* instalis pakon " -"kiel :term:`Egg ` aŭ de :term:`Egg ` (sed simple kiel «platan» " -"pakon de :term:`fonta distribuo `), kaj " +"`, kvankam ĝi plejparte baziĝis sur la komponantoj del " +":ref:`setuptools`. Tiutempe, ĝi notinde *ne* instalis pakon kiel :term:`Egg " +"` aŭ de :term:`Egg ` (sed simple kiel «platan» pakon de " +":term:`fonta distribuo `), kaj " "enkondukis :ref:`Postulo-Dosierojn `, ebligante " "uzanton facile reprodukti mediojn." @@ -3162,8 +3152,8 @@ msgstr "" "pyproject_config.html#dynamic-metadata>`_" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" -msgstr "`setuptools_scm `_" +msgid "`setuptools_scm `_" +msgstr "`setuptools_scm `_" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 msgid "src layout vs flat layout" @@ -3375,10 +3365,8 @@ msgid "A simple version with just one component: ``42``" msgstr "Simpla versio kun nur unu komponanto: ``42``" #: ../source/discussions/versioning.rst:30 -#, fuzzy -#| msgid "A version with an epoch: ``1!1.0``" msgid "A version with an epoch (discouraged): ``1!1.0``" -msgstr "Versio kun epoko: ``1!1.0``" +msgstr "Versio kun epoko (malrekomendata): ``1!1.0``" #: ../source/discussions/versioning.rst:32 msgid "" @@ -3477,13 +3465,6 @@ msgstr "" "skemo." #: ../source/discussions/versioning.rst:75 -#, fuzzy -#| msgid "" -#| "There are known exceptions for selecting the next version number. The " -#| "maintainers may consciously choose to break the assumption that the last " -#| "version segment only contains backwards-compatible changes. One such case " -#| "is when security vulnerability needs to be addressed. Security releases " -#| "often come in patch versions but contain breaking changes inevitably." msgid "" "There are known exceptions for selecting the next version number. The " "maintainers may consciously choose to break the assumption that the last " @@ -3594,12 +3575,6 @@ msgid "Calendar versioning" msgstr "Kalendara versiado" #: ../source/discussions/versioning.rst:127 -#, fuzzy -#| msgid "" -#| "Semantic versioning is not a suitable choice for all projects, such as " -#| "those with a regular time based release cadence and a deprecation process " -#| "that provides warnings for a number of releases prior to removal of a " -#| "feature." msgid "" "Semantic versioning is not a suitable choice for all projects, such as those " "with a regular time-based release cadence and a deprecation process that " @@ -3654,13 +3629,6 @@ msgstr "" "de la API." #: ../source/discussions/versioning.rst:151 -#, fuzzy -#| msgid "" -#| "Combinations of the above schemes are possible. For example, a project " -#| "may combine date based versioning with serial versioning to create a " -#| "*year.serial* numbering scheme that readily conveys the approximate age " -#| "of a release, but doesn't otherwise commit to a particular release " -#| "cadence within the year." msgid "" "Combinations of the above schemes are possible. For example, a project may " "combine date-based versioning with serial versioning to create a " @@ -4169,13 +4137,6 @@ msgid "Build Backend" msgstr "Konstrua Malfasado" #: ../source/glossary.rst:17 -#, fuzzy -#| msgid "" -#| "A library that takes a source tree and builds a :term:`source " -#| "distribution ` or :term:`built " -#| "distribution ` from it. The build is delegated to the " -#| "backend by a :term:`frontend `. All backends offer a " -#| "standardized interface." msgid "" "A library that takes a :term:`source tree ` and builds " "a :term:`source distribution ` " @@ -4183,10 +4144,11 @@ msgid "" "delegated to the backend by a :term:`frontend `. All " "backends offer a standardized interface." msgstr "" -"Biblioteko prenanta fontarbon kaj konstruanta :term:`fontan distribuon " -"` or :term:`konstritan distribuon `. La :term:`fasado ` delegas la konstruadon al " -"la malfasado. Ĉia malfasado provizas normigitan interfacon." +"Biblioteko prenanta :term:`fontarbon ` kaj konstruanta " +":term:`fontan distribuon ` or " +":term:`konstritan distribuon `. La :term:`fasado ` delegas la konstruadon al la malfasado. Ĉia malfasado provizas " +"normigitan interfacon." #: ../source/glossary.rst:24 msgid "" @@ -5559,7 +5521,7 @@ msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 msgid "``ClickPy``" -msgstr "" +msgstr "``ClickPy``" #: ../source/guides/analyzing-pypi-package-downloads.rst:339 msgid "" @@ -5569,7 +5531,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "Referencoj" @@ -5789,10 +5751,15 @@ msgstr "" "` ." #: ../source/guides/creating-and-discovering-plugins.rst:167 +#, fuzzy +#| msgid "" +#| "Since this specification is part of the :doc:`standard library " +#| "`, most packaging tools other than " +#| "setuptools provide support for defining entry points." msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" "Ĉar ĉi tiu specifo estas parto de la :doc:`norma biblioteko `, multaj iloj krom setuptools subtenas difinadon de " @@ -9610,10 +9577,8 @@ msgstr ":ref:`pyproject-build-system-table`" #: ../source/guides/modernize-setup-py-project.rst:70 #: ../source/guides/modernize-setup-py-project.rst:131 #: ../source/guides/modernize-setup-py-project.rst:247 -#, fuzzy -#| msgid ":doc:`pip:reference/build-system/pyproject-toml`" msgid ":doc:`pip:reference/build-system`" -msgstr ":doc:`pip:reference/build-system/pyproject-toml`" +msgstr ":doc:`pip:reference/build-system`" #: ../source/guides/modernize-setup-py-project.rst:74 msgid "How to handle additional build-time dependencies?" @@ -10937,10 +10902,8 @@ msgstr "" "por :ref:`cibuildwheel`." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:25 -#, fuzzy -#| msgid "Configuring trusted publishing" msgid "Configuring Trusted Publishing" -msgstr "Starigi fidatan eldonadon" +msgstr "Starigi Fidatan Eldonadon" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:27 msgid "" @@ -11016,12 +10979,6 @@ msgstr "" "kiel konto ĉe ordinara PyPI." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:78 -#, fuzzy -#| msgid "" -#| "For security reasons, you must require `manual approval `_ on each " -#| "run for the ``pypi`` environment." msgid "" "For security reasons, you must require `manual approval `_ on each run for the ``pypi`` environment." msgstr "" "Pro sekureco, vi devas postuli `malaŭtomatan aprobon `_ je ĉiu rulo por " -"la medio ``pypi``." +"docs.github.com/en/actions/how-tos/managing-workflow-runs-and-deployments/" +"managing-deployments/managing-environments-for-deployment#creating-an-" +"environment>`_ je ĉiu rulo por la medio ``pypi``." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:85 msgid "Creating a workflow definition" @@ -11071,7 +11028,14 @@ msgstr "" "Ni difinus du taskojn por eldoni al PyPI kaj Prova PyPI respektive kaj " "ekstran taskon por konstrui la distribuajn pakojn." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" @@ -11079,7 +11043,7 @@ msgstr "" "Unue, ni difinas la taskon por konstrui la distribuajn pakojn de via " "projekto kaj konservi ilin por posta uzo:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -11087,7 +11051,7 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." @@ -11095,7 +11059,7 @@ msgstr "" "Tio elŝutos vian deponejon al la kontinuintegrilo kaj instalos kaj aktivigos " "la plej novan eldonon de Python 3." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" @@ -11104,11 +11068,11 @@ msgstr "" "ekzemplo, ni uzos la pakon ``build``. Do aldonu la jenon al la listo de " "paŝoj:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "Difini laborfluan taskan medion" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 #, fuzzy #| msgid "" #| "Now, let's add initial setup for our job that will publish to PyPI. It's " @@ -11135,7 +11099,7 @@ msgstr "" "OpenID Connect, kiun la ago ``pypi-publish`` bezonas por sensekreta fidata " "eldonado al PyPI." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." @@ -11143,15 +11107,15 @@ msgstr "" "Tio ankaŭ certigas, ke la PyPI-eldona laborfluo nur ekos, se la aktuala " "enmeto havas etikedon." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "Eldoni la distribuon al PyPI" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "Fine, postmetu la jenajn paŝojn:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -11162,7 +11126,7 @@ msgstr "" "la distribua pako per la ago `download-artifact`_, ĝi alŝutas la enhavon de " "la dosierujo ``dist/`` al PyPI senkondiĉe." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -11170,11 +11134,11 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "Aparta laborfluo por eldoni al TestPyPI" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" @@ -11182,7 +11146,7 @@ msgstr "" "Nun ripetu tiujn paŝojn, kreante alian taskon por eldonado al la pakindekso " "Prova PyPI sub la sekcio ``jobs``:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " @@ -11192,20 +11156,20 @@ msgstr "" "necesas, ĉar ĝi laŭfasone ruliĝas post ĉiu enmeto en la ĉefbranĉon kaj ofte " "indikas sanan eldonadan ĉenstablon." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "La plena laborfluo por kontinuaj integrado kaj disponigo" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "Jen alineo pri la plena laborfluo laŭ la ĉi-supra gvidilo." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "Jen fino!" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -11213,7 +11177,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -11222,7 +11186,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -12873,8 +12837,6 @@ msgid "``license`` and ``license-files``" msgstr "``license`` kaj ``license-files``" #: ../source/guides/writing-pyproject-toml.rst:326 -#, fuzzy -#| msgid "As per :pep:`639` licenses should be declared with two fields:" msgid "As per :pep:`639`, licenses should be declared with two fields:" msgstr "Laŭ :pep:`639`, oni deklaru licencon per du kampoj:" @@ -12926,10 +12888,8 @@ msgid "poetry-core" msgstr "poetry-core" #: ../source/guides/writing-pyproject-toml.rst:344 -#, fuzzy -#| msgid "build" msgid "uv-build" -msgstr "build" +msgstr "uv-build" #: ../source/guides/writing-pyproject-toml.rst:345 msgid "1.27.0" @@ -12949,11 +12909,11 @@ msgstr "2.4.0" #: ../source/guides/writing-pyproject-toml.rst:349 msgid "2.2.0" -msgstr "" +msgstr "2.2.0" #: ../source/guides/writing-pyproject-toml.rst:350 msgid "0.7.19" -msgstr "" +msgstr "0.7.19" #: ../source/guides/writing-pyproject-toml.rst:356 #: ../source/specifications/pyproject-toml.rst:151 @@ -14780,19 +14740,15 @@ msgstr "" #: ../source/key_projects.rst:833 msgid "uv" -msgstr "" +msgstr "uv" #: ../source/key_projects.rst:835 -#, fuzzy -#| msgid "" -#| "`Docs `__ | `GitHub `__ | `PyPI `__" msgid "" "`Docs `__ | `GitHub `__ | `PyPI `__" msgstr "" -"`Dokumentaro `__ | `GitHub `__ | `PyPI `__" +"`Dokumentaro `__ | `GitHub `__ | `PyPI `__" #: ../source/key_projects.rst:839 msgid "" @@ -16156,14 +16112,12 @@ msgstr "" "subtenas arbitrajn mastrumasistemo-nivelajn pakojn:" #: ../source/overview.rst:282 -#, fuzzy -#| msgid "" -#| "`ActiveState ActivePython `_" msgid "" "`ActiveState ActivePython `_" msgstr "" -"`ActiveState ActivePython `_" +"`ActiveState ActivePython `_" #: ../source/overview.rst:283 msgid "`WinPython `_" @@ -16334,11 +16288,11 @@ msgstr "" #: ../source/overview.rst:351 msgid "KVM on Linux" -msgstr "" +msgstr "KVM ĉe Linux" #: ../source/overview.rst:352 msgid "Hyper-V on Windows" -msgstr "" +msgstr "Hyper-V ĉe Windows" #: ../source/overview.rst:353 msgid "" @@ -16351,16 +16305,12 @@ msgstr "" "`" #: ../source/overview.rst:356 -#, fuzzy -#| msgid "" -#| "`OpenStack `_ - A cloud " -#| "management system in Python, with extensive VM support" msgid "" "`OpenStack `_ - A cloud " "management system written in Python, with extensive VM support" msgstr "" "`OpenStack `_ – Nubadministra " -"sistemo en Python, kun multa subteno de virtuala maŝino" +"sistemo verkita en Python, kun multa subteno de virtuala maŝino" #: ../source/overview.rst:360 msgid "Bringing your own hardware" @@ -17363,7 +17313,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -18177,7 +18127,7 @@ msgstr "Kernaj metadatenaj specifoj" #: ../source/specifications/core-metadata.rst:9 msgid "This page describes version 2.6, approved in May 2026." -msgstr "" +msgstr "Ĉi tiu paĝo priskribas version 2.6, aprobitan en la Majo de 2026." #: ../source/specifications/core-metadata.rst:11 msgid "" @@ -18967,11 +18917,11 @@ msgid "" msgstr "Versispecifilo devas observi la regulojn en :doc:`version-specifiers`." #: ../source/specifications/core-metadata.rst:591 -#, fuzzy -#| msgid "See :pep:`508` for full details of the allowed format." msgid "" "See :ref:`dependency-specifiers` for full details of the allowed format." -msgstr "Vidu :pep:`508` por plenaj detaloj pri la permesataj formoj." +msgstr "" +"Vidu :ref:`dependency-specifiers` por plenaj detaloj pri la permesataj " +"formoj." #: ../source/specifications/core-metadata.rst:604 msgid "Requires-Python" @@ -19152,10 +19102,8 @@ msgid "" msgstr "" #: ../source/specifications/core-metadata.rst:738 -#, fuzzy -#| msgid "Supported-Platform (multiple use)" msgid "Import-Name (multiple use)" -msgstr "Supported-Platform (plurfoje uzebla)" +msgstr "Import-Name (plurfoje uzebla)" #: ../source/specifications/core-metadata.rst:742 msgid "" @@ -19223,10 +19171,8 @@ msgid "" msgstr "" #: ../source/specifications/core-metadata.rst:794 -#, fuzzy -#| msgid "Supported-Platform (multiple use)" msgid "Import-Namespace (multiple use)" -msgstr "Supported-Platform (plurfoje uzebla)" +msgstr "Import-Namespace (plurfoje uzebla)" #: ../source/specifications/core-metadata.rst:798 msgid "" @@ -19507,10 +19453,8 @@ msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "Marto 2001: Kernaj metadatenoj 1.0 estis aprobitaj per :pep:`241`." #: ../source/specifications/core-metadata.rst:1047 -#, fuzzy -#| msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." -msgstr "Aprilo 2003: Kernaj metadatenoj 1.1 estis aprobitaj per :pep:`314`:" +msgstr "Aprilo 2003: Kernaj metadatenoj 1.1 estis aprobitaj per :pep:`314`." #: ../source/specifications/core-metadata.rst:1049 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." @@ -19567,22 +19511,16 @@ msgid "" msgstr "" #: ../source/specifications/core-metadata.rst:1074 -#, fuzzy -#| msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." -msgstr "Oktobro 2020: Kernaj metadatenoj 2.2 estis aprobitaj per :pep:`643`." +msgstr "Septembro 2025: Kernaj metadatenoj 2.5 estis aprobitaj per :pep:`794`." #: ../source/specifications/core-metadata.rst:1076 -#, fuzzy -#| msgid "Added the ``Dynamic`` field." msgid "Added the ``Import-Name`` field." -msgstr "Aldonis la kampon ``Dynamic``." +msgstr "Aldonis la kampon ``Import-Name``." #: ../source/specifications/core-metadata.rst:1077 -#, fuzzy -#| msgid "Added the ``Dynamic`` field." msgid "Added the ``Import-Namespace`` field." -msgstr "Aldonis la kampon ``Dynamic``." +msgstr "Aldonis la kampon ``Import-Namespace``." #: ../source/specifications/core-metadata.rst:1079 msgid "" @@ -19598,10 +19536,8 @@ msgid "" msgstr "" #: ../source/specifications/core-metadata.rst:1085 -#, fuzzy -#| msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgid "May 2026: Core metadata 2.6 was approved through :pep:`808`." -msgstr "Marto 2022: Kernaj metadatenoj 2.3 estis aprobitaj per :pep:`685`." +msgstr "Majo 2026: Kernaj metadatenoj 2.6 estis aprobitaj per :pep:`808`." #: ../source/specifications/core-metadata.rst:1087 msgid "" @@ -19667,18 +19603,15 @@ msgstr "" "``requirements.txt`` (specifa al ``pip``)." #: ../source/specifications/dependency-groups.rst:25 -#, fuzzy -#| msgid "This is a simple table which shows a ``test`` group::" msgid "This is a simple table which shows ``docs`` and ``test`` groups::" -msgstr "Jen simpla tabelo montranta grupon ``test``::" +msgstr "Jen simpla tabelo montranta grupojn ``docs` kaj ``test``::" #: ../source/specifications/dependency-groups.rst:31 -#, fuzzy -#| msgid "and a similar table which defines ``test`` and ``coverage`` groups::" msgid "" "and a similar table which defines ``docs``, ``test``, and ``coverage`` " "groups::" -msgstr "kaj simila tabelo difinanta la grupojn ``test`` kaj ``coverage``::" +msgstr "" +"kaj simila tabelo difinanta la grupojn ``docs``, ``test``, kaj ``coverage``::" #: ../source/specifications/dependency-groups.rst:39 msgid "The ``[dependency-groups]`` Table" @@ -20281,45 +20214,47 @@ msgstr "La kompara operatoro determinas la specon de versia kondiĉo:" #: ../source/specifications/dependency-specifiers.rst:238 msgid "``==`` (for example, ``sys_platform == \"win32\"``)" -msgstr "" +msgstr "``==`` (ekzemple, ``sys_platform == \"win32\"``)" #: ../source/specifications/dependency-specifiers.rst:239 msgid "``!=`` (for example, ``sys_platform != \"win32\"``)" -msgstr "" +msgstr "``!=`` (ekzemple, ``sys_platform != \"win32\"``)" #: ../source/specifications/dependency-specifiers.rst:240 msgid "``>`` (for example, ``python_version > \"3.10\"``)" -msgstr "" +msgstr "``>`` (ekzemple, ``python_version > \"3.10\"``)" #: ../source/specifications/dependency-specifiers.rst:241 msgid "``>=`` (for example, ``python_version >= \"3.10\"``)" -msgstr "" +msgstr "``>=`` (ekzemple, ``python_version >= \"3.10\"``)" #: ../source/specifications/dependency-specifiers.rst:242 msgid "``<`` (for example, ``python_version < \"3.10\"``)" -msgstr "" +msgstr "``<`` (ekzemple, ``python_version < \"3.10\"``)" #: ../source/specifications/dependency-specifiers.rst:243 msgid "``<=`` (for example, ``python_version <= \"3.10\"``)" -msgstr "" +msgstr "``<=`` (ekzemple, ``python_version <= \"3.10\"``)" #: ../source/specifications/dependency-specifiers.rst:244 msgid "``~=`` (for example, ``python_version ~= \"3\"``)" -msgstr "" +msgstr "``~=`` (ekzemple, ``python_version ~= \"3\"``)" #: ../source/specifications/dependency-specifiers.rst:245 msgid "" "``===`` (for example, ``implementation_version === \"not.a.valid.version\"``)" msgstr "" +"``===`` (ekzemple, ``implementation_version === \"not.a.valid.version\"``)" #: ../source/specifications/dependency-specifiers.rst:246 msgid "" "``in`` (for example, ``\"gui\" in extras``, ``\"SMP\" in platform_version``)" msgstr "" +"``in`` (ekzemple, ``\"gui\" in extras``, ``\"SMP\" in platform_version``)" #: ../source/specifications/dependency-specifiers.rst:247 msgid "``not in`` (for example, ``\"dev\" not in dependency_groups``)" -msgstr "" +msgstr "``not in`` (ekzemple, ``\"dev\" not in dependency_groups``)" #: ../source/specifications/dependency-specifiers.rst:249 msgid "" @@ -20500,10 +20435,8 @@ msgid "Type" msgstr "Tipo" #: ../source/specifications/dependency-specifiers.rst:366 -#, fuzzy -#| msgid "Sample values" msgid "Sample values & notes" -msgstr "Ekzemplaj valoroj" +msgstr "Ekzemplaj valoroj & notoj" #: ../source/specifications/dependency-specifiers.rst:367 msgid "``os_name``" @@ -20573,10 +20506,8 @@ msgid ":py:func:`platform.python_implementation()`" msgstr ":py:func:`platform.python_implementation()`" #: ../source/specifications/dependency-specifiers.rst:386 -#, fuzzy -#| msgid "``CPython``, ``Jython``" msgid "``CPython``, ``PyPy``" -msgstr "``CPython``, ``Jython``" +msgstr "``CPython``, ``PyPy``" #: ../source/specifications/dependency-specifiers.rst:387 msgid "``platform_release``" @@ -20648,16 +20579,12 @@ msgstr "``'.'.join(platform.python_version_tuple()[:2])``" #: ../source/specifications/dependency-specifiers.rst:406 #: ../source/specifications/dependency-specifiers.rst:410 #: ../source/specifications/dependency-specifiers.rst:418 -#, fuzzy -#| msgid "Version specifiers" msgid ":ref:`Version `" -msgstr "Versispecifiloj" +msgstr ":ref:`Versio `" #: ../source/specifications/dependency-specifiers.rst:407 -#, fuzzy -#| msgid "``3.4``, ``2.7``" msgid "``3.9``, ``3.15``" -msgstr "``3.4``, ``2.7``" +msgstr "``3.9``, ``3.15``" #: ../source/specifications/dependency-specifiers.rst:408 msgid "``python_full_version``" @@ -20668,10 +20595,8 @@ msgid ":py:func:`platform.python_version()`" msgstr ":py:func:`platform.python_version()`" #: ../source/specifications/dependency-specifiers.rst:411 -#, fuzzy -#| msgid "``3.4.0``, ``3.5.0b1``" msgid "``3.10.12``, ``3.15.0a1``" -msgstr "``3.4.0``, ``3.5.0b1``" +msgstr "``3.10.12``, ``3.15.0a1``" #: ../source/specifications/dependency-specifiers.rst:412 msgid "``implementation_name``" @@ -20682,10 +20607,8 @@ msgid ":py:data:`sys.implementation.name `" msgstr ":py:data:`sys.implementation.name `" #: ../source/specifications/dependency-specifiers.rst:415 -#, fuzzy -#| msgid "``CPython``, ``Jython``" msgid "``cpython``, ``pypy``" -msgstr "``CPython``, ``Jython``" +msgstr "``cpython``, ``pypy``" #: ../source/specifications/dependency-specifiers.rst:416 msgid "``implementation_version``" @@ -20740,7 +20663,7 @@ msgstr "Eraro, se ne ekzistas kunteksto interpretanta la specifon." #: ../source/specifications/dependency-specifiers.rst:431 #: ../source/specifications/dependency-specifiers.rst:439 msgid "Set of strings" -msgstr "" +msgstr "Aro de signoĉenoj" #: ../source/specifications/dependency-specifiers.rst:432 msgid "" @@ -20790,19 +20713,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -20814,7 +20737,7 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" @@ -20822,23 +20745,23 @@ msgstr "" "La marka variablo ``implementation_version`` devenas " "de :py:data:`sys.implementation.version `:" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "Kompleta Gramatiko" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "La kompleta gramatiko por parseley::" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "Testa programo – se la gramatiko estas en signoĉeno ``grammar``:" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "Novembro 2015: Ĉi tiu specifo estis aprobita per :pep:`508`." -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -20852,13 +20775,13 @@ msgstr "" "Python kun du-ciferaj maĵoraj kaj minoraj versioj (ekz. 3.10). " "[#future_versions]_" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " @@ -20867,13 +20790,13 @@ msgstr "" "Junio 2024: La difino de ``version_many`` estis ŝanĝita por permesi lastan " "komon, konforme al la Python-realigo uzata ekde malfrua 2022." -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -20881,13 +20804,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -20900,13 +20823,20 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" @@ -20914,12 +20844,12 @@ msgstr "" "pip, la rekomendata instalilo por Python-pakoj (http://pip.readthedocs.org/" "en/stable/)" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" "La sintaksanaliza biblioteko parsley. (https://pypi.python.org/pypi/parsley/)" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -20928,7 +20858,7 @@ msgstr "" "Estontaj versioj de Python povas esti problemaj pri la difino de la Media " "Marka Variablo ``python_version`` (https://github.com/python/peps/issues/560)" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -22629,10 +22559,8 @@ msgid "File Yanking" msgstr "" #: ../source/specifications/file-yanking.rst:9 -#, fuzzy -#| msgid "This specification was originally defined in :pep:`753`." msgid "This specification was originally defined in :pep:`592`." -msgstr "Ĉi tiu specifo estis originale difinita en :pep:`753`." +msgstr "Ĉi tiu specifo estis originale difinita en :pep:`592`." #: ../source/specifications/file-yanking.rst:14 #, fuzzy @@ -22928,7 +22856,7 @@ msgstr "Jen simpla referenca realigo:" #: ../source/specifications/glob-patterns.rst:120 msgid "January 2025: Initial version" -msgstr "" +msgstr "Januaro de 2025: Unua versio" #: ../source/specifications/glob-patterns.rst:121 msgid "March 2026: Treat spaces as a verbatim character" @@ -24806,10 +24734,8 @@ msgid "Project Status Markers" msgstr "Projektaj Resumoj" #: ../source/specifications/project-status-markers.rst:9 -#, fuzzy -#| msgid "This specification was originally defined in :pep:`740`." msgid "This specification was originally defined in :pep:`792`." -msgstr "Ĉi tiu specifo estis originale difinita en :pep:`740`." +msgstr "Ĉi tiu specifo estis originale difinita en :pep:`792`." #: ../source/specifications/project-status-markers.rst:14 #, fuzzy @@ -24848,7 +24774,7 @@ msgstr "" #: ../source/specifications/project-status-markers.rst:32 msgid "``active``" -msgstr "" +msgstr "``active``" #: ../source/specifications/project-status-markers.rst:34 msgid "" @@ -24860,7 +24786,7 @@ msgstr "" #: ../source/specifications/project-status-markers.rst:65 #: ../source/specifications/project-status-markers.rst:83 msgid "Index semantics:" -msgstr "" +msgstr "Semantiko de indekso:" #: ../source/specifications/project-status-markers.rst:38 msgid "" @@ -24875,16 +24801,12 @@ msgid "" msgstr "" #: ../source/specifications/project-status-markers.rst:42 -#, fuzzy -#| msgid "Installation" msgid "Installer semantics: none." -msgstr "Instalado" +msgstr "Semantiko de instalilo: nenio." #: ../source/specifications/project-status-markers.rst:45 -#, fuzzy -#| msgid "``arch``" msgid "``archived``" -msgstr "``arch``" +msgstr "``archived``" #: ../source/specifications/project-status-markers.rst:47 msgid "Description: The project does not expect to be updated in the future." @@ -24900,10 +24822,8 @@ msgstr "" #: ../source/specifications/project-status-markers.rst:55 #: ../source/specifications/project-status-markers.rst:71 #: ../source/specifications/project-status-markers.rst:87 -#, fuzzy -#| msgid "Installers" msgid "Installer semantics:" -msgstr "Instaliloj" +msgstr "Semantiko de instalilo:" #: ../source/specifications/project-status-markers.rst:57 msgid "Installers **MAY** produce warnings about a project's archival." @@ -24911,7 +24831,7 @@ msgstr "" #: ../source/specifications/project-status-markers.rst:60 msgid "``quarantined``" -msgstr "" +msgstr "``quarantined``" #: ../source/specifications/project-status-markers.rst:62 msgid "" @@ -24932,10 +24852,8 @@ msgid "" msgstr "" #: ../source/specifications/project-status-markers.rst:78 -#, fuzzy -#| msgid "Deprecated" msgid "``deprecated``" -msgstr "Evitindaj" +msgstr "``deprecated``" #: ../source/specifications/project-status-markers.rst:80 msgid "" @@ -24962,10 +24880,8 @@ msgid "" msgstr "" #: ../source/specifications/pylock-toml.rst:11 -#, fuzzy -#| msgid "This specification was originally defined in :pep:`753`." msgid "This specification was originally defined in :pep:`751`." -msgstr "Ĉi tiu specifo estis originale difinita en :pep:`753`." +msgstr "Ĉi tiu specifo estis originale difinita en :pep:`751`." #: ../source/specifications/pylock-toml.rst:16 msgid "File Name" @@ -25055,7 +24971,7 @@ msgstr "**Postulata?**: jes" #: ../source/specifications/pylock-toml.rst:69 msgid "**Inspiration**: :ref:`core-metadata-metadata-version`" -msgstr "" +msgstr "**Inspiro**: :ref:`core-metadata-metadata-version`" #: ../source/specifications/pylock-toml.rst:70 msgid "Record the file format version that the file adheres to." @@ -25085,10 +25001,8 @@ msgstr "``environments``" #: ../source/specifications/pylock-toml.rst:110 #: ../source/specifications/pylock-toml.rst:132 #: ../source/specifications/pylock-toml.rst:154 -#, fuzzy -#| msgid "TOML_ type: array of strings" msgid "**Type**: Array of strings" -msgstr "Tipo de TOML_: listo de signoĉenoj" +msgstr "**Tipo**: Listo de signoĉenoj" #: ../source/specifications/pylock-toml.rst:84 #: ../source/specifications/pylock-toml.rst:98 @@ -25112,7 +25026,7 @@ msgstr "**Postulata?**: ne" #: ../source/specifications/pylock-toml.rst:531 #: ../source/specifications/pylock-toml.rst:549 msgid "**Inspiration**: uv_" -msgstr "" +msgstr "**Inspiro**: uv_" #: ../source/specifications/pylock-toml.rst:86 msgid "" @@ -25144,10 +25058,8 @@ msgstr "" #: ../source/specifications/pylock-toml.rst:562 #: ../source/specifications/pylock-toml.rst:633 #: ../source/specifications/pylock-toml.rst:703 -#, fuzzy -#| msgid "TOML_ type: string" msgid "**Type**: string" -msgstr "Tipo de TOML_: signoĉeno" +msgstr "**Tipo**: signoĉeno" #: ../source/specifications/pylock-toml.rst:99 #: ../source/specifications/pylock-toml.rst:190 @@ -25156,7 +25068,7 @@ msgstr "Tipo de TOML_: signoĉeno" #: ../source/specifications/pylock-toml.rst:621 #: ../source/specifications/pylock-toml.rst:637 msgid "**Inspiration**: PDM_, Poetry_, uv_" -msgstr "" +msgstr "**Inspiro**: PDM_, Poetry_, uv_" #: ../source/specifications/pylock-toml.rst:100 msgid "" @@ -25173,7 +25085,7 @@ msgstr "**Postulata?** ne, apriore ``[]``" #: ../source/specifications/pylock-toml.rst:112 msgid "**Inspiration**: :ref:`core-metadata-provides-extra`" -msgstr "" +msgstr "**Inspiro**: :ref:`core-metadata-provides-extra`" #: ../source/specifications/pylock-toml.rst:113 msgid "" @@ -25210,10 +25122,8 @@ msgstr "``dependency-groups``" #: ../source/specifications/pylock-toml.rst:134 #: ../source/specifications/pylock-toml.rst:716 #: ../source/specifications/pylock-toml.rst:731 -#, fuzzy -#| msgid ":ref:`pyproject-toml-spec`" msgid "**Inspiration**: :ref:`pyproject-tool-table`" -msgstr ":ref:`pyproject-toml-spec`" +msgstr "**Inspiro**: :ref:`pyproject-tool-table`" #: ../source/specifications/pylock-toml.rst:135 msgid "" @@ -25241,7 +25151,7 @@ msgstr "``default-groups``" #: ../source/specifications/pylock-toml.rst:156 msgid "**Inspiration**: Poetry_, PDM_" -msgstr "" +msgstr "**Inspiro**: Poetry_, PDM_" #: ../source/specifications/pylock-toml.rst:157 msgid "" @@ -25299,10 +25209,8 @@ msgstr "``[[packages]]``" #: ../source/specifications/pylock-toml.rst:254 #: ../source/specifications/pylock-toml.rst:618 #: ../source/specifications/pylock-toml.rst:688 -#, fuzzy -#| msgid "TOML_ type: array of strings" msgid "**Type**: array of tables" -msgstr "Tipo de TOML_: listo de signoĉenoj" +msgstr "**Tipo**: listo de tabeloj" #: ../source/specifications/pylock-toml.rst:191 msgid "An array containing all packages that *may* be installed." @@ -25320,7 +25228,7 @@ msgstr "``packages.name``" #: ../source/specifications/pylock-toml.rst:203 msgid "**Inspiration**: :ref:`core-metadata-name`" -msgstr "" +msgstr "**Inspiro**: :ref:`core-metadata-name`" #: ../source/specifications/pylock-toml.rst:204 #, fuzzy @@ -25338,7 +25246,7 @@ msgstr "``packages.version``" #: ../source/specifications/pylock-toml.rst:214 msgid "**Inspiration**: :ref:`core-metadata-version`" -msgstr "" +msgstr "**Inspiro**: :ref:`core-metadata-version`" #: ../source/specifications/pylock-toml.rst:215 msgid "The version of the package." @@ -25372,7 +25280,7 @@ msgstr "``packages.marker``" #: ../source/specifications/pylock-toml.rst:231 msgid "**Inspiration**: PDM_" -msgstr "" +msgstr "**Inspiro**: PDM_" #: ../source/specifications/pylock-toml.rst:232 msgid "" @@ -25386,7 +25294,7 @@ msgstr "``packages.requires-python``" #: ../source/specifications/pylock-toml.rst:244 msgid "**Inspiration**: :ref:`core-metadata-requires-python`" -msgstr "" +msgstr "**Inspiro**: :ref:`core-metadata-requires-python`" #: ../source/specifications/pylock-toml.rst:245 msgid "" @@ -25430,10 +25338,8 @@ msgstr "``[packages.vcs]``" #: ../source/specifications/pylock-toml.rst:546 #: ../source/specifications/pylock-toml.rst:714 #: ../source/specifications/pylock-toml.rst:729 -#, fuzzy -#| msgid "TOML_ type: table" msgid "**Type**: table" -msgstr "Tipo de TOML_: tabelo" +msgstr "**Tipo**: tabelo" #: ../source/specifications/pylock-toml.rst:275 msgid "" @@ -25444,7 +25350,7 @@ msgstr "" #: ../source/specifications/pylock-toml.rst:278 msgid "**Inspiration**: :ref:`direct-url-data-structure`" -msgstr "" +msgstr "**Inspiro**: :ref:`direct-url-data-structure`" #: ../source/specifications/pylock-toml.rst:279 msgid "" @@ -25490,7 +25396,7 @@ msgstr "" #: ../source/specifications/pylock-toml.rst:335 #: ../source/specifications/pylock-toml.rst:349 msgid "**Inspiration**: :ref:`direct-url-data-structure-vcs`" -msgstr "" +msgstr "**Inspiro**: :ref:`direct-url-data-structure-vcs`" #: ../source/specifications/pylock-toml.rst:300 #, fuzzy @@ -25585,7 +25491,7 @@ msgstr "``packages.vcs.subdirectory``" #: ../source/specifications/pylock-toml.rst:363 msgid "**Inspiration**: :ref:`direct-url-data-structure-subdirectories`" -msgstr "" +msgstr "**Inspiro**: :ref:`direct-url-data-structure-subdirectories`" #: ../source/specifications/pylock-toml.rst:364 msgid "" @@ -25613,7 +25519,7 @@ msgstr "" #: ../source/specifications/pylock-toml.rst:398 #: ../source/specifications/pylock-toml.rst:412 msgid "**Inspiration**: :ref:`direct-url-data-structure-local-directory`" -msgstr "" +msgstr "**Inspiro**: :ref:`direct-url-data-structure-local-directory`" #: ../source/specifications/pylock-toml.rst:381 msgid "" @@ -25663,10 +25569,8 @@ msgid "``packages.directory.editable``" msgstr "``packages.directory.editable``" #: ../source/specifications/pylock-toml.rst:410 -#, fuzzy -#| msgid "*boolean*" msgid "**Type**: boolean" -msgstr "*boolean*" +msgstr "**Tipo**: bulea" #: ../source/specifications/pylock-toml.rst:411 msgid "**Required?**: no; defaults to ``false``" @@ -25693,7 +25597,7 @@ msgstr "``packages.directory.subdirectory``" #: ../source/specifications/pylock-toml.rst:426 #: ../source/specifications/pylock-toml.rst:521 msgid "See :ref:`pylock-packages-vcs-subdirectory`." -msgstr "" +msgstr "Vidu :ref:`pylock-packages-vcs-subdirectory`." #: ../source/specifications/pylock-toml.rst:432 msgid "``[packages.archive]``" @@ -25703,7 +25607,7 @@ msgstr "``[packages.archive]``" #: ../source/specifications/pylock-toml.rst:454 #: ../source/specifications/pylock-toml.rst:465 msgid "**Inspiration**: :ref:`direct-url-data-structure-archive`" -msgstr "" +msgstr "**Inspiro**: :ref:`direct-url-data-structure-archive`" #: ../source/specifications/pylock-toml.rst:437 msgid "" @@ -25773,11 +25677,11 @@ msgstr "``packages.archive.size``" #: ../source/specifications/pylock-toml.rst:479 msgid "**Type**: integer" -msgstr "" +msgstr "**Tipo**: entjero" #: ../source/specifications/pylock-toml.rst:481 msgid "**Inspiration**: uv_, :ref:`simple-repository-api`" -msgstr "" +msgstr "**Inspiro**: uv_, :ref:`simple-repository-api`" #: ../source/specifications/pylock-toml.rst:482 #, fuzzy @@ -25797,11 +25701,11 @@ msgstr "``packages.archive.upload-time``" #: ../source/specifications/pylock-toml.rst:492 msgid "**Type**: datetime" -msgstr "" +msgstr "**Tipo**: datotempo" #: ../source/specifications/pylock-toml.rst:494 msgid "**Inspiration**: :ref:`simple-repository-api`" -msgstr "" +msgstr "**Inspiro**: :ref:`simple-repository-api`" #: ../source/specifications/pylock-toml.rst:495 #, fuzzy @@ -25818,14 +25722,12 @@ msgid "``[packages.archive.hashes]``" msgstr "``[packages.archive.hashes]``" #: ../source/specifications/pylock-toml.rst:504 -#, fuzzy -#| msgid "TOML_ type: array of strings" msgid "**Type**: Table of strings" -msgstr "Tipo de TOML_: listo de signoĉenoj" +msgstr "**Tipo**: Tabelo de signoĉenoj" #: ../source/specifications/pylock-toml.rst:506 msgid "**Inspiration**: PDM_, Poetry_, uv_, :ref:`simple-repository-api`" -msgstr "" +msgstr "**Inspiro**: PDM_, Poetry_, uv_, :ref:`simple-repository-api`" #: ../source/specifications/pylock-toml.rst:507 msgid "" @@ -26029,10 +25931,8 @@ msgstr "``[[packages.attestation-identities]]``" #: ../source/specifications/pylock-toml.rst:690 #: ../source/specifications/pylock-toml.rst:705 -#, fuzzy -#| msgid ":ref:`pyproject-toml-spec`" msgid "**Inspiration**: :ref:`provenance-object`" -msgstr ":ref:`pyproject-toml-spec`" +msgstr "**Inspiro**: :ref:`provenance-object`" #: ../source/specifications/pylock-toml.rst:691 msgid "" @@ -26183,10 +26083,8 @@ msgstr "" #: ../source/specifications/pylock-toml.rst:801 #: ../source/specifications/pylock-toml.rst:821 #: ../source/specifications/pylock-toml.rst:836 -#, fuzzy -#| msgid "Binary distribution format" msgid ":ref:`Install `." -msgstr "Duuma distribua formo" +msgstr ":ref:`Instali `." #: ../source/specifications/pylock-toml.rst:788 msgid "Else if :ref:`pylock-packages-directory` is set:" @@ -26205,7 +26103,7 @@ msgstr "" #: ../source/specifications/pylock-toml.rst:796 #: ../source/specifications/pylock-toml.rst:826 msgid "Get the file." -msgstr "" +msgstr "Akiru la dosieron." #: ../source/specifications/pylock-toml.rst:797 msgid "" @@ -26232,7 +26130,7 @@ msgstr "" #: ../source/specifications/pylock-toml.rst:809 msgid "Get the file:" -msgstr "" +msgstr "Akiri la dosieron:" #: ../source/specifications/pylock-toml.rst:811 msgid "If :ref:`pylock-packages-wheels-path` is set, use it." @@ -26306,10 +26204,8 @@ msgstr "" "aŭ :ref:`flit`." #: ../source/specifications/pypirc.rst:13 -#, fuzzy -#| msgid "The :file:`.pypirc` file" msgid "The :file:`.pypirc` file **SHOULD** be UTF-8 encoded." -msgstr "La dosiero :file:`.pypirc`" +msgstr "La dosiero :file:`.pypirc` **ESTU** kodita laŭ UTF-8." #: ../source/specifications/pypirc.rst:15 msgid "" @@ -26639,16 +26535,14 @@ msgstr "``gui-scripts``" #: ../source/specifications/pyproject-toml.rst:148 #: ../source/specifications/pyproject-toml.rst:517 #: ../source/specifications/pyproject-toml.rst:655 -#, fuzzy -#| msgid "``name``" msgid "``import-names``" -msgstr "``name``" +msgstr "``import-names``" #: ../source/specifications/pyproject-toml.rst:149 #: ../source/specifications/pyproject-toml.rst:568 #: ../source/specifications/pyproject-toml.rst:656 msgid "``import-namespaces``" -msgstr "" +msgstr "``import-namespaces``" #: ../source/specifications/pyproject-toml.rst:153 #: ../source/specifications/pyproject-toml.rst:659 @@ -27184,16 +27078,12 @@ msgid "" msgstr "" #: ../source/specifications/pyproject-toml.rst:463 -#, fuzzy -#| msgid "" -#| "Corresponding :ref:`core metadata ` field: :ref:`Requires-" -#| "Python `" msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist `" msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`Requires-" -"Python `" +"Dist `" #: ../source/specifications/pyproject-toml.rst:466 msgid "" @@ -27300,16 +27190,12 @@ msgid "" msgstr "" #: ../source/specifications/pyproject-toml.rst:520 -#, fuzzy -#| msgid "" -#| "Corresponding :ref:`core metadata ` field: :ref:`Name " -#| "`" msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Import-Name " "`" msgstr "" -"Respondanta :ref:`kerna metadatena ` kampo: :ref:`Name `" +"Respondanta :ref:`kerna metadatena ` kampo: :ref:`Import-Name " +"`" #: ../source/specifications/pyproject-toml.rst:523 msgid "" @@ -27357,21 +27243,16 @@ msgid "" msgstr "" #: ../source/specifications/pyproject-toml.rst:550 -#, fuzzy msgid "Examples:" -msgstr "Ekzemploj" +msgstr "Ekzemploj:" #: ../source/specifications/pyproject-toml.rst:571 -#, fuzzy -#| msgid "" -#| "Corresponding :ref:`core metadata ` field: :ref:`Name " -#| "`" msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Import-" "Namespace `" msgstr "" -"Respondanta :ref:`kerna metadatena ` kampo: :ref:`Name `" +"Respondanta :ref:`kerna metadatena ` kampo: :ref:`Import-" +"Namespace `" #: ../source/specifications/pyproject-toml.rst:574 msgid "" @@ -27400,10 +27281,8 @@ msgid "" msgstr "" #: ../source/specifications/pyproject-toml.rst:595 -#, fuzzy -#| msgid "Example::" msgid "Example:" -msgstr "Ekzemple::" +msgstr "Ekzemple:" #: ../source/specifications/pyproject-toml.rst:611 msgid "TOML_ type: array of string" @@ -28103,24 +27982,20 @@ msgstr "" "Septembro 2020: Diversaj amendoj kaj klarigoj estis aprobitaj per :pep:`627`." #: ../source/specifications/schemas/index.rst:4 -#, fuzzy -#| msgid "Data schema" msgid "PyPA schemas" -msgstr "Datena skemo" +msgstr "PyPA-skemoj" #: ../source/specifications/schemas/index.rst:6 -#, fuzzy -#| msgid "``direct_url.json``: see :ref:`direct-url` for details" msgid "`direct_url.json `_" -msgstr "``direct_url.json``: vidu :ref:`direct-url` por detaloj" +msgstr "`direct_url.json `_" #: ../source/specifications/schemas/index.rst:7 msgid "`build-details.json `_" -msgstr "" +msgstr "`build-details.json `_" #: ../source/specifications/schemas/index.rst:8 msgid "`pylock.toml `_" -msgstr "" +msgstr "`pylock.toml `_" #: ../source/specifications/section-distribution-formats.rst:3 msgid "Package Distribution File Formats" @@ -28178,10 +28053,8 @@ msgstr "" "pakojn el indeksa servilo havas du formojn: HTML kaj JSON." #: ../source/specifications/simple-repository-api.rst:21 -#, fuzzy -#| msgid "Base HTML API" msgid "Base API" -msgstr "Baza HTML API" +msgstr "Baza API" #: ../source/specifications/simple-repository-api.rst:23 #, fuzzy @@ -28387,10 +28260,8 @@ msgstr "" "funkciojn uzatajn de iu deponejo." #: ../source/specifications/simple-repository-api.rst:121 -#, fuzzy -#| msgid "JSON Serialization" msgid "HTML Serialization" -msgstr "JSON-igo" +msgstr "HTML-igo" #: ../source/specifications/simple-repository-api.rst:127 msgid "" @@ -28406,15 +28277,11 @@ msgid "" msgstr "" #: ../source/specifications/simple-repository-api.rst:134 -#, fuzzy -#| msgid "" -#| "The following constraints apply to all JSON serialized responses " -#| "described in this spec:" msgid "" "The following constraints apply to all HTML serialized responses described " "in this spec:" msgstr "" -"La sekvaj limigoj validas por ĉiuj JSON-seriigitaj respondoj priskribitaj en " +"La sekvaj limigoj validas por ĉiuj HTML-seriigitaj respondoj priskribitaj en " "ĉi tiu specifo:" #: ../source/specifications/simple-repository-api.rst:137 @@ -28452,23 +28319,14 @@ msgstr "" "ligi al la retadreso de tiu projekto. Ekzemple:" #: ../source/specifications/simple-repository-api.rst:148 -#, fuzzy -#| msgid "" -#| "Within a repository, the root URL (``/`` for this spec which represents " -#| "the base URL) **MUST** be a valid HTML5 page with a single anchor element " -#| "per project in the repository. The text of the anchor tag **MUST** be the " -#| "name of the project and the href attribute **MUST** link to the URL for " -#| "that particular project. As an example:" msgid "" "The text of each anchor tag **MUST** be the name of the project and the " "``href`` attribute **MUST** link to the URL for that particular project. As " "an example:" msgstr "" -"En deponejo, la radika retadreso (``/`` por ĉi tiu specifo, reprezentanta la " -"bazan retadreson) **DEVAS** esti valida HTML5-paĝo kun ankraj elementoj po " -"unu por ĉiu projekto en la deponejo. La teksto de la ankra elemento " -"**DEVAS** esti la nomo de la projekto, kaj la atributo ``href`` **DEVAS** " -"ligi al la retadreso de tiu projekto. Ekzemple:" +"La teksto de ĉiu ankra elemento **DEVAS** esti la nomo de la projekto, kaj " +"la atributo ``href`` **DEVAS** ligi al la retadreso de tiu projekto. " +"Ekzemple:" #: ../source/specifications/simple-repository-api.rst:165 #: ../source/specifications/simple-repository-api.rst:482 @@ -28946,19 +28804,14 @@ msgid "JSON Serialization" msgstr "JSON-igo" #: ../source/specifications/simple-repository-api.rst:401 -#, fuzzy -#| msgid "" -#| "The URL structure from :ref:`the base HTML API specification ` still applies, as this spec only adds an additional " -#| "serialization format for the already existing API." msgid "" "The URL structure from :ref:`the base HTML API specification ` still applies, as this spec only adds an " "additional serialization format for the already existing API." msgstr "" "La retadresa strukturo de la :ref:`specifo de la baza HTML API ` ankoraŭ validas, ĉar ĉi tiu specifo nur provizas plian " -"seriigan formon de jam ekzistanta API." +"repository-html-serialization>` ankoraŭ validas, ĉar ĉi tiu specifo nur " +"provizas plian seriigan formon de jam ekzistanta API." #: ../source/specifications/simple-repository-api.rst:405 msgid "" @@ -29122,10 +28975,8 @@ msgid "``status``: If present, this **MUST** be a valid project status marker." msgstr "" #: ../source/specifications/simple-repository-api.rst:503 -#, fuzzy -#| msgid "The ``versions`` key was added with API version 1.1." msgid "The ``status`` key was added with API version 1.4." -msgstr "La ŝlosilo ``versions`` estis aldonita por versio 1.1 de la API." +msgstr "La ŝlosilo ``status`` estis aldonita por versio 1.4 de la API." #: ../source/specifications/simple-repository-api.rst:505 msgid "" @@ -29134,16 +28985,12 @@ msgid "" msgstr "" #: ../source/specifications/simple-repository-api.rst:510 -#, fuzzy -#| msgid "The ``versions`` key was added with API version 1.1." msgid "The ``reason`` key was added with API version 1.4." -msgstr "La ŝlosilo ``versions`` estis aldonita por versio 1.1 de la API." +msgstr "La ŝlosilo ``reason`` estis aldonita por versio 1.4 de la API." #: ../source/specifications/simple-repository-api.rst:514 -#, fuzzy -#| msgid "The ``versions`` key was added with API version 1.1." msgid "The ``project-status`` key was added with API version 1.4." -msgstr "La ŝlosilo ``versions`` estis aldonita por versio 1.1 de la API." +msgstr "La ŝlosilo ``project-status`` estis aldonita por versio 1.4 de la API." #: ../source/specifications/simple-repository-api.rst:516 msgid "" @@ -32811,7 +32658,19 @@ msgstr "Informoj pri Financado" msgid "``sponsor``, ``donate``, ``donation``" msgstr "``sponsor``, ``donate``, ``donation``" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "``securitypolicy``" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." @@ -32819,11 +32678,11 @@ msgstr "" "Uzanto de pakaj metadatenoj povas montri sinonimajn etikedojn same kiel la " "«gepatran» bone konatan etikedon aŭ pli speciale." -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "Ekzempla konduto" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" @@ -32831,19 +32690,19 @@ msgstr "" "Jen la fluo de projekta retadresa metadateno el ``pyproject.toml`` al kerna " "metadateno al ebla indeksa prezento:" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "Ekzemplaj projektaj retadresoj por ordinara agordado" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "Prezento de kernaj metadatenoj" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "Ebla montrado" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -32855,11 +32714,11 @@ msgstr "" "metadatenoj normigas kaj identigas taŭgajn home legeblajn ekvivalentaĵojn " "laŭ la normigitaj formoj:" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "``Home page`` fariĝas ``homepage``, kiu montriĝas kiel ``Homepage``" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" @@ -32867,13 +32726,13 @@ msgstr "" "``DOCUMENTATION`` fariĝas ``documentation``, kiu montriĝas kiel " "``Documentation``" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" "``Repository`` fariĝas ``repository``, kiu montriĝas kiel ``Source Code``" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" @@ -33116,10 +32975,8 @@ msgid "" msgstr "" #: ../source/tutorials/installing-packages.rst:154 -#, fuzzy -#| msgid "Ensure pip, setuptools, and wheel are up to date" msgid "Ensure pip is up to date" -msgstr "Certigu, ke pip, setuptools kaj wheel estas ĝisdataj" +msgstr "Certigu, ke pip estas ĝisdata" #: ../source/tutorials/installing-packages.rst:156 msgid "" diff --git a/locales/es/LC_MESSAGES/messages.po b/locales/es/LC_MESSAGES/messages.po index 67a0a6894..73459cd34 100644 --- a/locales/es/LC_MESSAGES/messages.po +++ b/locales/es/LC_MESSAGES/messages.po @@ -13,13 +13,14 @@ # "Edgar R. M." , 2024. # Joseph Hale , 2025. # Jonathan-den , 2025. +# azxc1 , 2026. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" -"PO-Revision-Date: 2025-12-12 01:00+0000\n" -"Last-Translator: Joseph Hale \n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" +"PO-Revision-Date: 2026-09-27 03:51+0000\n" +"Last-Translator: azxc1 \n" "Language-Team: Spanish \n" "Language: es\n" @@ -27,7 +28,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.15-dev\n" +"X-Generator: Weblate 2026.10.dev0\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -58,10 +59,8 @@ msgid "Writing new content" msgstr "Escribir contenido nuevo" #: ../source/contribute.rst:14 -#, fuzzy -#| msgid "Translate the guide" msgid "Translating the guide" -msgstr "Traducir la guía" +msgstr "Traduciendo la guía" #: ../source/contribute.rst:16 msgid "" @@ -1257,6 +1256,15 @@ msgid "" "files) should also be included, to help downstreams determine the needed " "dependencies, and check for changes in them." msgstr "" +"Este punto se aplica únicamente a los archivos que pertenecen al propio " +"paquete. El proceso de empaquetado posterior, al igual que los " +"administradores de paquetes de Python, se encargará de proporcionar las " +"dependencias de Python, las herramientas del sistema y las bibliotecas " +"externas necesarias para el paquete y sus scripts de compilación.\n" +"Sin embargo, también deben incluirse los archivos que enumeran estas " +"dependencias, como los archivos \"requirements*.txt\". Esto ayuda a los " +"encargados del empaquetado posterior a determinar qué dependencias se " +"necesitan y a comprobar si estas han cambiado." #: ../source/discussions/downstream-packaging.rst:115 msgid "" @@ -1270,6 +1278,17 @@ msgid "" "Alternatively, large files, such as test data, can be split into separate " "archives." msgstr "" +"Algunos proyectos tienen preocupaciones relacionadas con el uso que hacen " +"los administradores de paquetes de Python de las distribuciones de código " +"fuente de PyPI. No quieren aumentar su tamaño con archivos que estas " +"herramientas no utilizan, o simplemente no quieren publicar distribuciones " +"de código fuente, ya que estas permiten recurrir a una alternativa " +"problemática o incluso que no funcione para compilar el proyecto en cuestión " +"desde el código fuente. En estos casos, un buen punto intermedio puede ser " +"publicar un archivo independiente con el código fuente para que otros " +"proyectos puedan utilizarlo, por ejemplo, adjuntándolo a una versión " +"publicada en GitHub. Como alternativa, los archivos grandes, como los datos " +"de prueba, pueden dividirse en archivos independientes." #: ../source/discussions/downstream-packaging.rst:124 msgid "" @@ -1281,6 +1300,14 @@ msgid "" "was taken by the cryptography_ project, with the large test vectors being " "split to cryptography-vectors_ package." msgstr "" +"Por otro lado, algunos proyectos (NumPy_, por ejemplo) deciden incluir las " +"pruebas en los paquetes que instalan. Esto tiene la ventaja adicional de " +"permitir que los usuarios ejecuten las pruebas después de instalarlos, por " +"ejemplo, para comprobar si aparecen regresiones después de actualizar una " +"dependencia. Otro enfoque consiste en dividir las pruebas o los datos de " +"prueba en un paquete de Python separado. El proyecto cryptography_ adoptó " +"este enfoque, separando los grandes vectores de prueba en el paquete " +"cryptography-vectors_." #: ../source/discussions/downstream-packaging.rst:132 msgid "" @@ -1290,6 +1317,12 @@ msgid "" "source distribution actually works, and that it won't accidentally install " "fewer files than the official wheels." msgstr "" +"Una buena idea es utilizar tu distribución de código fuente durante el " +"proceso de publicación. Por ejemplo, la herramienta :ref:\"build\" hace " +"exactamente eso: primero crea una distribución de código fuente y luego la " +"utiliza para crear un wheel. Esto garantiza que la distribución de código " +"fuente realmente funcione y que no termine instalando accidentalmente menos " +"archivos que los wheels oficiales." #: ../source/discussions/downstream-packaging.rst:138 msgid "" @@ -1298,10 +1331,16 @@ msgid "" "actually included. Understandably, this requires more effort, so it's fine " "not do that — downstream packagers will report any missing files promptly." msgstr "" +"Lo ideal es utilizar también la distribución de código fuente para ejecutar " +"las pruebas, generar la documentación, etc., o añadir pruebas específicas " +"que verifiquen que todos los archivos necesarios se hayan incluido " +"correctamente. Es comprensible que esto requiera un poco más de trabajo, así " +"que no pasa nada si decides no hacerlo. Los encargados del empaquetado " +"posterior informarán rápidamente si falta algún archivo." #: ../source/discussions/downstream-packaging.rst:147 msgid "Do not use the Internet during the build process" -msgstr "" +msgstr "No uses Internet durante el proceso de compilación" #: ../source/discussions/downstream-packaging.rst:152 msgid "" @@ -1309,6 +1348,9 @@ msgid "" "access the Internet. The package sources are unpacked into this environment, " "and all the necessary dependencies are installed." msgstr "" +"Las compilaciones posteriores suelen realizarse en entornos aislados que no " +"tienen acceso a Internet. El código fuente del paquete se descomprime en " +"este entorno y se instalan todas las dependencias necesarias." #: ../source/discussions/downstream-packaging.rst:156 msgid "" @@ -1316,12 +1358,18 @@ msgid "" "properly authenticate downloads, using the Internet is discouraged for a " "number of reasons:" msgstr "" +"Incluso si este no fuera el caso, y suponiendo que hayas tomado las medidas " +"necesarias para autenticar correctamente las descargas, se desaconseja " +"utilizar Internet por varias razones:" #: ../source/discussions/downstream-packaging.rst:160 msgid "" "The Internet connection may be unstable (e.g. due to poor reception) or " "suffer from temporary problems that could cause the process to fail or hang." msgstr "" +"La conexión a Internet puede ser inestable (por ejemplo, debido a una mala " +"señal) o presentar problemas temporales que podrían hacer que el proceso " +"falle o se quede bloqueado." #: ../source/discussions/downstream-packaging.rst:164 msgid "" @@ -1329,16 +1377,25 @@ msgid "" "making the build no longer possible. This is especially problematic when " "someone needs to build an old package version." msgstr "" +"Los recursos externos pueden dejar de estar disponibles temporal o " +"permanentemente, haciendo que el paquete ya no pueda compilarse. Esto es " +"especialmente problemático al intentar compilar una versión antigua del " +"paquete." #: ../source/discussions/downstream-packaging.rst:168 msgid "The remote resources may change, making the build not reproducible." msgstr "" +"Los recursos externos pueden cambiar, haciendo que la compilación no sea " +"reproducible." #: ../source/discussions/downstream-packaging.rst:170 msgid "" "Accessing remote servers poses a privacy issue and a potential security " "issue, as it exposes information about the system building the package." msgstr "" +"Acceder a servidores externos puede suponer un riesgo para la privacidad y " +"la seguridad, ya que puede revelar información sobre el sistema que está " +"compilando el paquete." #: ../source/discussions/downstream-packaging.rst:174 msgid "" @@ -1346,6 +1403,9 @@ msgid "" "uncontrolled Internet access may result in additional charges or other " "inconveniences." msgstr "" +"El usuario puede tener un plan de datos limitado, por lo que el acceso no " +"controlado a Internet podría generar cargos adicionales u otros " +"inconvenientes." #: ../source/discussions/downstream-packaging.rst:181 msgid "" @@ -1355,6 +1415,12 @@ msgid "" "all of these files or allow provisioning them externally, and the Internet " "must not be used if the files are already present." msgstr "" +"Si el paquete utiliza acciones personalizadas de *backend* que acceden a " +"Internet durante la compilación, por ejemplo, para descargar automáticamente " +"dependencias incluidas o obtener submódulos de Git, la distribución de " +"código fuente debe incluir todos esos archivos o permitir que se " +"proporcionen externamente. Además, no debe utilizarse Internet si los " +"archivos ya están disponibles." #: ../source/discussions/downstream-packaging.rst:187 msgid "" @@ -2819,7 +2885,7 @@ msgid "" msgstr "" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4676,7 +4742,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4843,8 +4909,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8964,13 +9030,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8978,23 +9051,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -9005,21 +9078,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -9027,7 +9100,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -9035,37 +9108,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -9073,7 +9146,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -9082,7 +9155,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13941,7 +14014,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16868,19 +16941,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16892,29 +16965,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16923,26 +16996,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16950,13 +17023,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16969,30 +17042,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26614,36 +26694,48 @@ msgstr "Configuraciones habituales" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 #, fuzzy msgid "Example behavior" msgstr "Ejemplos" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26651,22 +26743,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/fa/LC_MESSAGES/messages.po b/locales/fa/LC_MESSAGES/messages.po index 7e52fee40..04536cc45 100644 --- a/locales/fa/LC_MESSAGES/messages.po +++ b/locales/fa/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2026-07-30 20:47+0000\n" "Last-Translator: Kamrani \n" "Language-Team: Persian `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4364,7 +4364,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4531,8 +4531,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8615,13 +8615,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8629,23 +8636,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8656,21 +8663,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8678,7 +8685,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8686,37 +8693,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8724,7 +8731,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8733,7 +8740,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13564,7 +13571,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16466,19 +16473,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16490,29 +16497,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16521,26 +16528,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16548,13 +16555,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16567,30 +16574,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26132,35 +26146,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26168,22 +26194,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/fil/LC_MESSAGES/messages.po b/locales/fil/LC_MESSAGES/messages.po index eeef52514..07363c4d1 100644 --- a/locales/fil/LC_MESSAGES/messages.po +++ b/locales/fil/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2022-11-19 08:28+0000\n" "Last-Translator: RedFurrFox \n" "Language-Team: Filipino `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4324,7 +4324,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4491,8 +4491,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8566,13 +8566,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8580,23 +8587,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8607,21 +8614,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8629,7 +8636,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8637,37 +8644,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8675,7 +8682,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8684,7 +8691,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13509,7 +13516,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16402,19 +16409,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16426,29 +16433,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16457,26 +16464,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16484,13 +16491,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16503,30 +16510,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26041,35 +26055,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26077,22 +26103,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/fr/LC_MESSAGES/messages.po b/locales/fr/LC_MESSAGES/messages.po index e77658e81..9fadc3a02 100644 --- a/locales/fr/LC_MESSAGES/messages.po +++ b/locales/fr/LC_MESSAGES/messages.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2026-01-20 00:01+0000\n" "Last-Translator: Nathan \n" "Language-Team: French `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4523,7 +4523,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "Références" @@ -4690,8 +4690,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8804,13 +8804,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8818,23 +8825,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8845,21 +8852,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8867,7 +8874,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8875,37 +8882,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8913,7 +8920,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8922,7 +8929,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13907,7 +13914,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16880,19 +16887,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16904,29 +16911,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16935,26 +16942,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16962,13 +16969,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16981,30 +16988,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26737,36 +26751,48 @@ msgstr "Outils supplémentaires" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 #, fuzzy msgid "Example behavior" msgstr "Exemples" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26774,22 +26800,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/frc/LC_MESSAGES/messages.po b/locales/frc/LC_MESSAGES/messages.po index dca4a6078..99668b127 100644 --- a/locales/frc/LC_MESSAGES/messages.po +++ b/locales/frc/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -2482,7 +2482,7 @@ msgid "" msgstr "" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4318,7 +4318,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4485,8 +4485,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8560,13 +8560,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8574,23 +8581,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8601,21 +8608,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8623,7 +8630,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8631,37 +8638,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8669,7 +8676,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8678,7 +8685,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13503,7 +13510,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16396,19 +16403,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16420,29 +16427,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16451,26 +16458,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16478,13 +16485,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16497,30 +16504,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26035,35 +26049,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26071,22 +26097,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/gl/LC_MESSAGES/messages.po b/locales/gl/LC_MESSAGES/messages.po index 9d7543116..da783a2fe 100644 --- a/locales/gl/LC_MESSAGES/messages.po +++ b/locales/gl/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -2482,7 +2482,7 @@ msgid "" msgstr "" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4318,7 +4318,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4485,8 +4485,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8560,13 +8560,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8574,23 +8581,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8601,21 +8608,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8623,7 +8630,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8631,37 +8638,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8669,7 +8676,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8678,7 +8685,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13503,7 +13510,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16396,19 +16403,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16420,29 +16427,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16451,26 +16458,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16478,13 +16485,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16497,30 +16504,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26035,35 +26049,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26071,22 +26097,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/gmh/LC_MESSAGES/messages.po b/locales/gmh/LC_MESSAGES/messages.po index a753f6b58..ce78a6f75 100644 --- a/locales/gmh/LC_MESSAGES/messages.po +++ b/locales/gmh/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -2482,7 +2482,7 @@ msgid "" msgstr "" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4318,7 +4318,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4485,8 +4485,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8560,13 +8560,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8574,23 +8581,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8601,21 +8608,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8623,7 +8630,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8631,37 +8638,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8669,7 +8676,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8678,7 +8685,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13503,7 +13510,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16396,19 +16403,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16420,29 +16427,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16451,26 +16458,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16478,13 +16485,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16497,30 +16504,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26035,35 +26049,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26071,22 +26097,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/hi/LC_MESSAGES/messages.po b/locales/hi/LC_MESSAGES/messages.po index b79fdcaa3..eda02ba9e 100644 --- a/locales/hi/LC_MESSAGES/messages.po +++ b/locales/hi/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2024-09-16 10:09+0000\n" "Last-Translator: kumar Shivam \n" "Language-Team: Hindi `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4346,7 +4346,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4513,8 +4513,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8616,13 +8616,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8630,23 +8637,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8657,21 +8664,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8679,7 +8686,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8687,37 +8694,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8725,7 +8732,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8734,7 +8741,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13563,7 +13570,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16462,19 +16469,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16486,29 +16493,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16517,26 +16524,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16544,13 +16551,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16563,30 +16570,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26125,35 +26139,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26161,22 +26187,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/id/LC_MESSAGES/messages.po b/locales/id/LC_MESSAGES/messages.po index fbcbfbd0a..0664000b0 100644 --- a/locales/id/LC_MESSAGES/messages.po +++ b/locales/id/LC_MESSAGES/messages.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2024-10-17 21:16+0000\n" "Last-Translator: oon arfiandwi \n" "Language-Team: Indonesian `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4367,7 +4367,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4534,8 +4534,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8618,13 +8618,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8632,23 +8639,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8659,21 +8666,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8681,7 +8688,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8689,37 +8696,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8727,7 +8734,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8736,7 +8743,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13567,7 +13574,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16469,19 +16476,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16493,29 +16500,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16524,26 +16531,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16551,13 +16558,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16570,30 +16577,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26139,35 +26153,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26175,22 +26201,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/ja/LC_MESSAGES/messages.po b/locales/ja/LC_MESSAGES/messages.po index 4e636dcfd..2b9938bb7 100644 --- a/locales/ja/LC_MESSAGES/messages.po +++ b/locales/ja/LC_MESSAGES/messages.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" -"PO-Revision-Date: 2026-08-10 20:01+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" +"PO-Revision-Date: 2026-09-24 02:51+0000\n" "Last-Translator: moto kawasaki \n" "Language-Team: Japanese \n" @@ -22,7 +22,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2026.9.dev0\n" +"X-Generator: Weblate 2026.10.dev0\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -3378,8 +3378,8 @@ msgstr "" "pyproject_config.html#dynamic-metadata>`_" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" -msgstr "`setuptools_scm `_" +msgid "`setuptools_scm `_" +msgstr "`setuptools_scm `_" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 msgid "src layout vs flat layout" @@ -5822,7 +5822,7 @@ msgstr "" "ド統計をビジュアライズする公開のアプリケーションを提供します。" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "参考文献" @@ -6059,12 +6059,12 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" "この仕様は :doc:`標準ライブラリ ` の一部な" -"ので、setuptools以外のほとんどのパッケージングツールでもエントリポイントを定" -"義できる機能を提供しています。" +"ので、setuptools を含むパッケージングツールはエントリポイントを定義できる機能" +"を提供しています。" #: ../source/guides/creating-command-line-tools.rst:5 msgid "Creating and packaging command-line tools" @@ -11632,7 +11632,18 @@ msgstr "" "ければならず、また、配布物のパッケージ群をビルドするための追加のジョブも定義" "しなければなりません。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" +"ビルドのジョブは、公開のためのジョブとは別にしておきましょう。公開するための" +"ジョブの中で配布物をビルドすることはサポートされていません; 公開するための" +"ジョブは、すでにビルドされた人工物をダウンロードしたりアップロードしたりする" +"だけに留めるべきです。" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" @@ -11640,7 +11651,7 @@ msgstr "" "最初に、あなたのプロジェクトの dist パッケージをビルドして、その後の使用のた" "めに保存するジョブを定義しましょう:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -11653,7 +11664,7 @@ msgstr "" "GitHub Actions examples`_ がもっと完全な wheel マトリクスレイアウトをお見せし" "ます。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." @@ -11661,7 +11672,7 @@ msgstr "" "これによって、あなたのリポジトリを CI ランナーにダウンロードして、利用可能な" "最新の Python 3 リリースをインストールしアクティベートすることになります。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" @@ -11670,11 +11681,11 @@ msgstr "" "できます。この例では、パッケージを ``build`` することになります。ですから、こ" "れをステップリストに加えましょう:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "ワークフローのジョブ環境を定義する" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -11693,7 +11704,7 @@ msgstr "" "トなしの PyPI への信頼ある公開を実装するために必要となる OpenID Connect の" "トークンを取得することを可能にするものでもあります。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." @@ -11701,15 +11712,15 @@ msgstr "" "これは、当該コミットがタグ付きである時にだけ PyPI 公開 ワークフ" "ローが起動されることをも保証するものです。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "PyPI へ配布物を公開する " -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "最後に、次の手続きを末尾に追加しましょう:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -11721,7 +11732,7 @@ msgstr "" "Action: を使って、 ``dist/`` フォルダの内容物を無条件に PyPI へアップロードし" "ます。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -11733,11 +11744,11 @@ msgstr "" "に対する :pep:`740` 互換の証明書を生成しアップロードするようになりました。手" "動の署名手順はもはや必要ありません。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "TestPyPI へ公開 するもうひとつのワークフロー" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" @@ -11745,7 +11756,7 @@ msgstr "" "さて、これらのステップを繰り返して、 ``jobs`` セクションに TestPyPI パッケー" "ジインデックスに公開 するようなもうひとつのジョブを作成しましょう:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " @@ -11756,22 +11767,22 @@ msgstr "" "いて、使われるとすればリリースの公開 パイプラインが健全であることを" "示すためであることが多いのです。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "CI/CD ワークフローの全体像" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" "この段落には、上述のガイド文書に従った場合のワークフローの全体像を披露しま" "す。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "これでできましたよ、皆さん!" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -11784,7 +11795,7 @@ msgstr "" "にテストビルドを提供するためにも、あなたのリリースパイプラインが健全な状態に" "保たれていることを確認するためにも役に立ちます!" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -11799,7 +11810,7 @@ msgstr "" "で :ref:`pypiserver` のような PyPI と互換のあるサーバを使うように構成すること" "かもしれません。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13360,6 +13371,10 @@ msgid "" "optional features (such as an ``all`` extra hosting dependencies from both " "``gui`` and ``cli``):" msgstr "" +"他の追加物を持つような現在のプロジェクトへ参照し返すような追加物を定義するこ" +"ともできます。 (``gui`` と ``cli`` の両方からの依存関係をホストする ``all`` " +"追加物のような) いくつかのオプションの機能を一体化した便利な追加物向けに有用" +"です。" #: ../source/guides/writing-pyproject-toml.rst:189 msgid "" @@ -13367,6 +13382,9 @@ msgid "" "referenced extra's dependencies, which can otherwise fall out of sync after " "a few years of maintenance and bug fixes:" msgstr "" +"一体化された追加物は、参照された先の追加物のそれぞれの依存関係のコピーを手動" +"で維持管理する必要はなく、その代わりに数年後のメンテナンスやバグ修正の時に同" +"期から外れて行くでしょう:" #: ../source/guides/writing-pyproject-toml.rst:203 msgid "" @@ -13374,6 +13392,9 @@ msgid "" "including :ref:`pip`, :ref:`uv`, :ref:`poetry`, :ref:`hatch`, :ref:`pdm` " "and :ref:`pipenv`." msgstr "" +":ref:`pip` ・ :ref:`uv` ・ :ref:`poetry` ・ :ref:`hatch` ・ :ref:`pdm` " +"や :ref:`pipenv` を含む、ほとんどのパッケージ管理機構は、今や、このような種類" +"の追加物をサポートしています。" #: ../source/guides/writing-pyproject-toml.rst:210 #: ../source/specifications/pylock-toml.rst:95 @@ -18219,7 +18240,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -21894,31 +21915,31 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" "集合のような動作を期待するけれども、定義済みのマーカフィールドタイプとしての " "``Set of strings`` の追加よりも先行しているので、 ``extra`` フィールドもまた" -"特別です。したがって、依存関係の宣言の中の ``extra != \"name\"`` が " -"``\"name\" not in extras`` に似ている一方で、 ``extra == \"name\"`` は、 " -"``\"name\" in extras`` と似ています。依存関係マーカの評価のためには、これらの" -"比較に用いられた extra な名称の集合は、トップレベルの依存関係宣言の中で直接に" -"要求されたものであれ、間接的に依存関係を通過してきたものであれ、 *その特定の" -"パッケージ* のために要求された extras の全ての集合です。 ``extra`` に対する他" -"の比較操作は定義されておらず、公開ツールはエラーを発出するべきであり、イン" -"デックスサーバはそのような環境マーカを含むアップロードを許さなくても構いませ" -"んが、ロッキングとインストールツール類はそれらを False として評価するべきで" -"す。" - -#: ../source/specifications/dependency-specifiers.rst:470 +"特別です。それは、 ``\"name\" in extras`` と似ているところの ``extra == " +"\"name\"`` という一つの操作だけをサポートします。 ``extra != \"name\"`` は、" +"もはや使用されるべきではなく、拒絶されたり偽であると評価されたりしても構いま" +"せん。依存関係マーカの評価のためには、これらの比較に用いられた extra な名称の" +"集合は、トップレベルの依存関係宣言の中で直接に要求されたものであれ、間接的に" +"依存関係を通過してきたものであれ、 *その特定のパッケージ* のために要求された " +"extras の全ての集合です。 ``extra`` に対する他の比較操作は定義されておらず、" +"公開ツールはエラーを発出するべきであり、インデックスサーバはそのような環境" +"マーカを含むアップロードを許さなくても構いませんが、ロッキングと" +"インストールツール類はそれらを False として評価するべきです。" + +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -21937,7 +21958,7 @@ msgstr "" "ルの ``packages.marker`` フィールドでは許されませんし、インストールツールはそ" "のような比較を含むロックファイルを正当でないものとして拒否するべきです。" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" @@ -21946,23 +21967,23 @@ msgstr "" "は、 :py:data:`sys.implementation.version ` から派生した" "ものです :" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "完全な文法" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "完全な parsley 文法::" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "テストプログラム - もし ``grammar`` 文字列内に文法があれば:" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "2015年11月: :pep:`508` を通じてこの仕様が承認されました。" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -21976,7 +21997,7 @@ msgstr "" "``'.'.join(platform.python_version_tuple()[:2])`` へ `変更されました `_ 。 [#future_versions]_" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" @@ -21984,7 +22005,7 @@ msgstr "" "2022年3月: :pep:`685` を通じて、 (コアとなるメタデータ 2.3 およびそれ以降の) " "公開時点での余分 な名称の標準化を規格化しました。" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " @@ -21993,7 +22014,7 @@ msgstr "" "2024年6月: 2022年遅くから使われるようになった Python 実装の動作に合致するよう" "に、末尾のカンマを許容する形に ``version_many`` の定義が変更された。" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." @@ -22001,7 +22022,7 @@ msgstr "" "2025年4月: :ref:`lock-file-spec` に ``extras`` と ``dependency_groups`` の" "マーカフィールドを追加することが :pep:`751` を通じて承認された。" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -22012,7 +22033,7 @@ msgstr "" "規表現が決定された (以前は ``\\Z`` の代わりに ``$`` で終端していたので、誤っ" "て後続する行末コード を許容していた)" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." @@ -22021,7 +22042,7 @@ msgstr "" "ことを許すために、 ``==`` より前に ``===`` を (評価することを) 文法上で確実に" "しました。" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -22042,7 +22063,7 @@ msgstr "" "れによって、名ばかりだった仕様にツール類が実際に動作する方法を伴った行をもた" "らしました。 [#marker_comparison_logic]_" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" @@ -22050,7 +22071,17 @@ msgstr "" "2026年1月: :pep:`508` から不注意に残されていた、他の文書への古くて役に立たな" "くなった参照を修正しました。" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" +"2026年1月: ``extra != \"name\"`` が (適切には) サポートされていないことを説" +"明 (https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" @@ -22058,11 +22089,11 @@ msgstr "" "Python のパッケージをインストールする際に推奨されるツールである pip (http://" "pip.readthedocs.org/en/stable/)" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "parsley PEG ライブラリ。 (https://pypi.python.org/pypi/parsley/)" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -22071,7 +22102,7 @@ msgstr "" "Python の将来のバージョンでは、環境マーカ変数の ``python_version`` の定義が問" "題をはらむかもしれません。 (https://github.com/python/peps/issues/560)" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -28945,6 +28976,12 @@ msgid "" "including :ref:`pip`, :ref:`uv`, :ref:`poetry`, :ref:`hatch`, :ref:`pdm` " "and :ref:`pipenv`." msgstr "" +"追加物の中の依存関係指定子は、 (例えば、 ``all = [\"your-project-name[gui, " +"cli]\"]`` のような) 現在のプロジェクトから他の追加物へ自己参照をしても構いま" +"せん。例を見たければ、 :ref:`自己参照用追加物 ` を見" +"て下さい。 :ref:`pip` ・ :ref:`uv` ・ :ref:`poetry` ・ :ref:`hatch` " +"・ :ref:`pdm` や :ref:`pipenv` を含む、ほとんどのパッケージ管理機構は、今や、" +"この種の追加物をサポートしています。" #: ../source/specifications/pyproject-toml.rst:520 msgid "" @@ -29154,9 +29191,10 @@ msgid "" "statically as well as being listed in ``dynamic``, *unless* the key " "represents a list or arbitrary table that can be extended, listed below." msgstr "" -"以下に列挙するように、そのキーが展開可能な知るとないし任意のテーブルでない限" -"り、メタデータ内のあるキーが静的に指定されていて、かつ、 ``dynamic`` にも挙げ" -"てある場合には、ビルド用バックエンドはエラーを発生させなければなりません。" +"以下に列挙するように、そのキーが展開可能な知るとないし任意のテーブル *でない" +"限り* 、メタデータ内のあるキーが静的に指定されていて、かつ、 ``dynamic`` にも" +"挙げてある場合には、ビルド用バックエンドはエラーを発生させなければなりませ" +"ん。" #: ../source/specifications/pyproject-toml.rst:637 msgid "" @@ -29203,12 +29241,20 @@ msgid "" "new keys and MAY append to the values of existing keys (in the case of a " "list), but MUST NOT change or remove the entries given statically." msgstr "" +"ビルド用バックエンドは、その値に *追加* だけを行うことができます; 静的に指定" +"されたエントリについて削除・順序変更や修正を行ってはなりません。 (``optional-" +"dependencies`` や ``entry-points`` のような) テーブルについては、これは、バッ" +"クエンドは新しいキーを追加することや (リストの場合は) 既存のキーにその値を追" +"加することは許されるが、静的に与えられたエントリを修正したり削除したりするこ" +"とは許されないということです。" #: ../source/specifications/pyproject-toml.rst:673 msgid "" "A build back-end SHOULD raise an error if a key is listed in ``dynamic`` and " "it does not support extending that key." msgstr "" +"あるキーが ``dynamic`` に列挙されていて、しかも、そのキーを拡張することをサ" +"ポートしていないなら、ビルド用バックエンドはエラーを発生させるべきです。" #: ../source/specifications/pyproject-toml.rst:680 msgid "Arbitrary tool configuration: the ``[tool]`` table" @@ -29288,12 +29334,17 @@ msgid "" "listed in ``dynamic``, with build back-ends only able to append entries, " "through :pep:`808`." msgstr "" +"2026年5月: ビルド用バックエンドがエントリを追加することしかできないという形" +"で、リストやテーブルのキーが静的に与えられると同時に ``dynamic`` に列挙される" +"ことを :pep:`808` を通じて許可した。" #: ../source/specifications/pyproject-toml.rst:722 msgid "" "August 2026: Document self-referential extra as a supported feature by many " "modern package managers of Python." msgstr "" +"2026年8月: 自己参照型追加物が多くの近代的な Python のパッケージ管理機構によっ" +"てサポートされた機能であることを文書化しました。" #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" @@ -34900,7 +34951,19 @@ msgstr "財政支援のための情報" msgid "``sponsor``, ``donate``, ``donation``" msgstr "``sponsor``, ``donate``, ``donation``" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "``security`` (セキュリティポリシー)" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "プロジェクトのセキュリティポリシーまたは脆弱性報告ページ" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "``securitypolicy``" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." @@ -34909,11 +34972,11 @@ msgstr "" "よく知られたラベルと同様に展開することや、または、それらをさらに詳しく指定す" "ることを選択しても構いません。" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "振る舞いの例" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" @@ -34921,19 +34984,19 @@ msgstr "" "以下では、 ``pyproject.toml`` からのプロジェクト URL メタデータを コアとなる" "メタデータへ、さらに潜在的なインデックスへと表現する流れを示します:" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "標準設定でのプロジェクト URL の例" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "コアとなるメタデータの表現" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "潜在的な展開" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -34945,11 +35008,11 @@ msgstr "" "タの *コンシューマ* が正規化し、正規化すみフォームに基づいて適切な人間の読め" "る形の同等物を特定する:" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "``Home page`` は ``homepage`` となり、それは ``Homepage`` に展開される" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" @@ -34957,13 +35020,13 @@ msgstr "" "``DOCUMENTATION`` は ``documentation`` となり、それは ``Documentation`` に展" "開される" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" "``Repository`` は ``repository`` となり、 ``Source Code`` として展開されます" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/kab/LC_MESSAGES/messages.po b/locales/kab/LC_MESSAGES/messages.po index 8d46a8aa7..0303506d5 100644 --- a/locales/kab/LC_MESSAGES/messages.po +++ b/locales/kab/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2026-06-24 22:01+0000\n" "Last-Translator: ButterflyOfFire \n" "Language-Team: Kabyle `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4336,7 +4336,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4503,8 +4503,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8578,13 +8578,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8592,23 +8599,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8619,21 +8626,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8641,7 +8648,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8649,37 +8656,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8687,7 +8694,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8696,7 +8703,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13521,7 +13528,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16414,19 +16421,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16438,29 +16445,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16469,26 +16476,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16496,13 +16503,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16515,30 +16522,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26063,35 +26077,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26099,22 +26125,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/ko/LC_MESSAGES/messages.po b/locales/ko/LC_MESSAGES/messages.po index fbcd4c0ad..5844a01f6 100644 --- a/locales/ko/LC_MESSAGES/messages.po +++ b/locales/ko/LC_MESSAGES/messages.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2026-02-05 03:01+0000\n" "Last-Translator: 스이미 \n" "Language-Team: Korean `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4518,7 +4518,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4685,8 +4685,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8775,13 +8775,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8789,23 +8796,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8816,21 +8823,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8838,7 +8845,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8846,37 +8853,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8884,7 +8891,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8893,7 +8900,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13726,7 +13733,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16633,19 +16640,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16657,29 +16664,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16688,26 +16695,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16715,13 +16722,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16734,30 +16741,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26313,35 +26327,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26349,22 +26375,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/lo/LC_MESSAGES/messages.po b/locales/lo/LC_MESSAGES/messages.po new file mode 100644 index 000000000..17c4cdeed --- /dev/null +++ b/locales/lo/LC_MESSAGES/messages.po @@ -0,0 +1,32926 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2013–2020, PyPA +# This file is distributed under the same license as the Python Packaging User Guide package. +# Bone NI , 2026. +msgid "" +msgstr "" +"Project-Id-Version: Python Packaging User Guide\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" +"PO-Revision-Date: 2026-09-03 07:20+0000\n" +"Last-Translator: Bone NI \n" +"Language-Team: Lao \n" +"Language: lo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 2026.9.dev0\n" + +#: ../source/contribute.rst:5 +msgid "Contribute to this guide" +msgstr "ປະກອບສ່ວນໃນຄູ່ມືນີ້" + +#: ../source/contribute.rst:7 +msgid "" +"The |PyPUG| welcomes contributors! There are lots of ways to help out, " +"including:" +msgstr "|PyPUG| ຍິນດີຕ້ອນຮັບຜູ້ປະກອບສ່ວນ! ມີຫຼາຍວິທີທີ່ຈະຊ່ວຍເຫຼືອໄດ້, ລວມທັງ:" + +#: ../source/contribute.rst:10 +msgid "Reading the guide and giving feedback" +msgstr "ອ່ານຄູ່ມື ແລະ ໃຫ້ຄຳຄິດເຫັນ" + +#: ../source/contribute.rst:11 +msgid "Reviewing new contributions" +msgstr "ກວດສອບການປະກອບສ່ວນໃໝ່" + +#: ../source/contribute.rst:12 +msgid "Revising existing content" +msgstr "ປັບປຸງເນື້ອຫາທີ່ມີຢູ່" + +#: ../source/contribute.rst:13 +msgid "Writing new content" +msgstr "ຂຽນເນື້ອຫາໃໝ່" + +#: ../source/contribute.rst:14 +msgid "Translating the guide" +msgstr "ແປຄູ່ມື" + +#: ../source/contribute.rst:16 +msgid "" +"Most of the work on the |PyPUG| takes place on the `project's GitHub " +"repository`__. To get started, check out the list of `open issues`__ and " +"`pull requests`__. If you're planning to write or edit the guide, please " +"read the :ref:`style guide `." +msgstr "" +"ວຽກງານສ່ວນໃຫຍ່ຂອງ |PyPUG| ແມ່ນດຳເນີນຢູ່ໃນ `project's GitHub repository`__. " +"ເພື່ອເລີ່ມຕົ້ນ, ໃຫ້ກວດເບິ່ງລາຍການຂອງ `open issues`__ ແລະ `pull requests`__. " +"ຖ້າທ່ານວາງແຜນທີ່ຈະຂຽນ ຫຼື ແກ້ໄຂຄູ່ມື, ກະລຸນາອ່ານ :ref:`style guide " +"`." + +#: ../source/contribute.rst:25 +msgid "" +"By contributing to the |PyPUG|, you're expected to follow the PSF's `Code of " +"Conduct`__." +msgstr "" +"ໃນການປະກອບສ່ວນໃຫ້ກັບ |PyPUG|, ທ່ານຖືກຄາດຫວັງໃຫ້ປະຕິບັດຕາມ `Code of Conduct`__ ຂອງ PSF." + +#: ../source/contribute.rst:32 +msgid "Documentation types" +msgstr "ປະເພດຂອງເອກະສານ" + +#: ../source/contribute.rst:34 +msgid "" +"This project consists of four distinct documentation types with specific " +"purposes. The project aspires to follow the `Diátaxis process`_ for creating " +"quality documentation. When proposing new additions to the project please " +"pick the appropriate documentation type." +msgstr "" +"ໂຄງການນີ້ປະກອບດ້ວຍເອກະສານສີ່ປະເພດທີ່ແຕກຕ່າງກັນ ໂດຍມີຈຸດປະສົງສະເພາະ. " +"ໂຄງການນີ້ມີຄວາມຕັ້ງໃຈທີ່ຈະປະຕິບັດຕາມ `Diátaxis process`_ ເພື່ອສ້າງເອກະສານທີ່ມີຄຸນນະພາບ. " +"ເມື່ອສະເໜີການເພີ່ມເຕີມໃໝ່ເຂົ້າໃນໂຄງການ, ກະລຸນາເລືອກປະເພດເອກະສານທີ່ເໝາະສົມ." + +#: ../source/contribute.rst:42 ../source/index.rst:55 +#: ../source/tutorials/index.rst:2 +msgid "Tutorials" +msgstr "ບົດຮຽນແນະນຳ" + +#: ../source/contribute.rst:44 +msgid "" +"Tutorials are focused on teaching the reader new concepts by accomplishing a " +"goal. They are opinionated step-by-step guides. They do not include " +"extraneous warnings or information. `example tutorial-style document`_." +msgstr "" +"ບົດຮຽນການນຳໃຊ້ (Tutorials) " +"ແມ່ນເນັ້ນໃສ່ການສອນແນວຄວາມຄິດໃໝ່ໃຫ້ກັບຜູ້ອ່ານໂດຍການບັນລຸເປົ້າໝາຍໃດໜຶ່ງ. " +"ພວກມັນແມ່ນຄູ່ມືແບບເປັນຂັ້ນເປັນຕອນ. ພວກມັນຈະບໍ່ລວມເອົາຄຳເຕືອນ ຫຼື ຂໍ້ມູນທີ່ບໍ່ກ່ຽວຂ້ອງເກີນຄວາມຈຳເປັນ. " +"`example tutorial-style document`_." + +#: ../source/contribute.rst:51 ../source/guides/index.rst:2 +#: ../source/index.rst:69 +msgid "Guides" +msgstr "ຄູ່ມືແນະນຳ" + +#: ../source/contribute.rst:53 +msgid "" +"Guides are focused on accomplishing a specific task and can assume some " +"level of pre-requisite knowledge. These are similar to tutorials, but have a " +"narrow and clear focus and can provide lots of caveats and additional " +"information as needed. They may also discuss multiple approaches to " +"accomplishing the task. :doc:`example guide-style document `." +msgstr "" +"ຄູ່ມືແນະນຳ (Guides) ແມ່ນເນັ້ນໃສ່ການເຮັດວຽກສະເພາະໃດໜຶ່ງໃຫ້ສຳເລັດ ແລະ " +"ອາດຈະຄາດການວ່າຜູ້ອ່ານມີຄວາມຮູ້ພື້ນຖານມາແລ້ວບາງສ່ວນ. ເຫຼົ່ານີ້ແມ່ນຄ້າຍຄືກັບບົດຮຽນການນຳໃຊ້, " +"ແຕ່ມີຈຸດເນັ້ນທີ່ແຄບ ແລະ ຊັດເຈນກວ່າ, ແລະ ສາມາດໃຫ້ຄຳເຕືອນ ຫຼື ຂໍ້ມູນເພີ່ມເຕີມໄດ້ຕາມຄວາມຈຳເປັນ. " +"ພວກມັນອາດຈະມີການປຶກສາຫາລືກ່ຽວກັບຫຼາຍວິທີໃນການເຮັດວຽກນັ້ນໃຫ້ສຳເລັດ. :doc:`example guide-" +"style document `." + +#: ../source/contribute.rst:60 ../source/discussions/index.rst:2 +msgid "Discussions" +msgstr "ການສົນທະນາ ແລະ ອະທິບາຍ" + +#: ../source/contribute.rst:62 +msgid "" +"Discussions are focused on understanding and information. These explore a " +"specific topic without a specific goal in mind. :doc:`example discussion-" +"style document `." +msgstr "" +"ການສົນທະນາ ແລະ ອະທິບາຍ (Discussions) ແມ່ນເນັ້ນໃສ່ຄວາມເຂົ້າໃຈ ແລະ ຂໍ້ມູນ. " +"ເຫຼົ່ານີ້ແມ່ນການສຳຫຼວດຫົວຂໍ້ສະເພາະໃດໜຶ່ງ " +"ໂດຍບໍ່ໄດ້ມີເປົ້າໝາຍໃນການເຮັດວຽກໃຫ້ສຳເລັດເປັນຫຼັກ. :doc:`example discussion-style " +"document `." + +#: ../source/contribute.rst:67 +msgid "Specifications" +msgstr "ຂໍ້ກຳນົດທາງເຕັກນິກ" + +#: ../source/contribute.rst:69 +msgid "" +"Specifications are reference documentation focused on comprehensively " +"documenting an agreed-upon interface for interoperability between packaging " +"tools. :doc:`example specification-style document `." +msgstr "" +"ຂໍ້ກຳນົດທາງເຕັກນິກ (Specifications) " +"ແມ່ນເອກະສານອ້າງອີງທີ່ເນັ້ນໃສ່ການບັນທຶກຂໍ້ມູນຢ່າງຄົບຖ້ວນກ່ຽວກັບອິນເຕີເຟສ (interface) ທີ່ໄດ້ຕົກລົງກັນ " +"ເພື່ອໃຫ້ເຄື່ອງມືການຈັດການແພັກເກດສາມາດເຮັດວຽກຮ່ວມກັນໄດ້. :doc:`example specification-" +"style document `." + +#: ../source/contribute.rst:75 +msgid "Translations" +msgstr "ການແປພາສາ" + +#: ../source/contribute.rst:77 +msgid "" +"We use `Weblate`_ to manage translations of this project. Please visit the " +"`packaging.python.org`_ project on Weblate to contribute." +msgstr "" +"ພວກເຮົາໃຊ້ `Weblate`_ ເພື່ອຈັດການການແປພາສາຂອງໂຄງການນີ້. ກະລຸນາເຂົ້າໄປທີ່ໂຄງການ " +"`packaging.python.org`_ ໃນ Weblate ເພື່ອປະກອບສ່ວນ." + +#: ../source/contribute.rst:80 +msgid "" +"If you are experiencing issues while you are working on translations, please " +"open an issue on `GitHub`_." +msgstr "ຖ້າທ່ານພົບຂໍ້ຜິດພາດໃນຂະນະທີ່ກຳລັງແປພາສາ, ກະລຸນາເປີດ issue ໃນ `GitHub`_." + +#: ../source/contribute.rst:85 +msgid "" +"Any translations of this project should follow `reStructuredText syntax`_." +msgstr "ການແປພາສາໃດໆ ຂອງໂຄງການນີ້ຄວນປະຕິບັດຕາມ `reStructuredText syntax`_." + +#: ../source/contribute.rst:93 +msgid "Adding a language" +msgstr "ການເພີ່ມພາສາ" + +#: ../source/contribute.rst:95 +msgid "" +"If your language is not listed on `packaging.python.org`_, click the " +"button :guilabel:`Start new translation` at the bottom of the language list " +"and add the language you want to translate." +msgstr "" +"ຖ້າພາສາຂອງທ່ານບໍ່ມີຢູ່ໃນລາຍຊື່ຂອງ `packaging.python.org`_, ໃຫ້ຄລິກທີ່ປຸ່ມ :guilabel:`Start " +"new translation` ຢູ່ທາງລຸ່ມຂອງລາຍຊື່ພາສາ ແລະ ເພີ່ມພາສາທີ່ທ່ານຕ້ອງການແປ." + +#: ../source/contribute.rst:100 +msgid "Following reStructuredText syntax" +msgstr "ການປະຕິບັດຕາມ syntax ຂອງ reStructuredText" + +#: ../source/contribute.rst:102 +msgid "" +"If you are not familiar with reStructuredText (RST) syntax, please read " +"`this guide`_ before translating on Weblate." +msgstr "" +"ຖ້າທ່ານບໍ່ຄຸ້ນເຄີຍກັບ syntax ຂອງ reStructuredText (RST), ກະລຸນາອ່ານ `ຄູ່ມືນີ້`_ " +"ກ່ອນທີ່ຈະເລີ່ມແປໃນ Weblate." + +#: ../source/contribute.rst:118 +msgid "**Do not translate the text in reference directly**" +msgstr "**ຫ້າມແປຂໍ້ຄວາມໃນການອ້າງອີງໂດຍກົງ**" + +#: ../source/contribute.rst:106 +msgid "" +"When translating the text in reference, please do not translate them " +"directly." +msgstr "ເມື່ອແປຂໍ້ຄວາມທີ່ມີການອ້າງອີງ, ກະລຸນາຢ່າແປພວກມັນໂດຍກົງ." + +#: ../source/contribute.rst:0 +msgid "Wrong: Translate the following text directly:" +msgstr "ຜິດ: ແປຂໍ້ຄວາມຕໍ່ໄປນີ້ໂດຍກົງ:" + +#: ../source/contribute.rst:0 +msgid "" +"Right: Translate the following text with your own language and add the " +"original reference:" +msgstr "ຖືກ: ແປຂໍ້ຄວາມຕໍ່ໄປນີ້ເປັນພາສາຂອງທ່ານເອງ ແລະ ໃສ່ບ່ອນອ້າງອີງເດີມໄວ້:" + +#: ../source/contribute.rst:123 +msgid "Building the guide locally" +msgstr "ການສ້າງ (Build) ຄູ່ມືໃນເຄື່ອງຂອງທ່ານເອງ" + +#: ../source/contribute.rst:125 +msgid "" +"Though not required to contribute, it may be useful to build this guide " +"locally in order to test your changes. In order to build this guide locally, " +"you'll need:" +msgstr "" +"ເຖິງວ່າຈະບໍ່ຈຳເປັນໃນການປະກອບສ່ວນ, ແຕ່ມັນອາດຈະມີປະໂຫຍດໃນການ build " +"ຄູ່ມືນີ້ຢູ່ໃນເຄື່ອງຂອງທ່ານເອງເພື່ອທົດສອບການປ່ຽນແປງ. ເພື່ອ build ຄູ່ມືນີ້, ທ່ານຈະຕ້ອງມີ:" + +#: ../source/contribute.rst:129 +msgid ":doc:`Nox `. You can install or upgrade nox using ``pip``:" +msgstr ":doc:`Nox `. ທ່ານສາມາດຕິດຕັ້ງ ຫຼື ອັບເກຣດ nox ໄດ້ໂດຍໃຊ້ ``pip``:" + +#: ../source/contribute.rst:136 +msgid "" +"Python 3.11. Our build scripts are usually tested with Python 3.11 only. See " +"the :doc:`Hitchhiker's Guide to Python installation instructions ` to install Python 3.11 on your operating " +"system." +msgstr "" +"Python 3.11. ສະຄຣິບສຳລັບ build ຂອງພວກເຮົາປົກກະຕິແລ້ວແມ່ນໄດ້ຮັບການທົດສອບກັບ Python 3.11 " +"ເທົ່ານັ້ນ. ເບິ່ງ :doc:`Hitchhiker's Guide to Python installation instructions " +"` ເພື່ອຕິດຕັ້ງ Python 3.11 " +"ໃນລະບົບປະຕິບັດການຂອງທ່ານ." + +#: ../source/contribute.rst:140 +msgid "" +"To build the guide, run the following shell command in the project's root " +"folder:" +msgstr "ເພື່ອ build ຄູ່ມື, ໃຫ້ລັນຄຳສັ່ງ shell ຕໍ່ໄປນີ້ໃນໂຟນເດີຫຼັກ (root) ຂອງໂຄງການ:" + +#: ../source/contribute.rst:146 +msgid "" +"After the process has completed you can find the HTML output in the ``./" +"build/html`` directory. You can open the ``index.html`` file to view the " +"guide in web browser, but it's recommended to serve the guide using an HTTP " +"server." +msgstr "" +"ຫຼັງຈາກຂະບວນການສຳເລັດແລ້ວ, ທ່ານສາມາດຊອກຫາໄຟລ໌ HTML ໄດ້ໃນໄດເຣັກທໍຣີ ``./build/html``. " +"ທ່ານສາມາດເປີດໄຟລ໌ ``index.html`` ເພື່ອເບິ່ງຄູ່ມືໃນເວັບບຣາວເຊີ, ແຕ່ແນະນຳໃຫ້ເປີດຄູ່ມືຜ່ານ HTTP " +"server." + +#: ../source/contribute.rst:151 +msgid "" +"You can build the guide and serve it via an HTTP server using the following " +"command:" +msgstr "ທ່ານສາມາດ build ຄູ່ມື ແລະ ເປີດໃຊ້ມັນຜ່ານ HTTP server ໄດ້ໂດຍໃຊ້ຄຳສັ່ງຕໍ່ໄປນີ້:" + +#: ../source/contribute.rst:158 +msgid "The guide will be browsable via http://localhost:8000." +msgstr "ຄູ່ມືຈະສາມາດເຂົ້າເບິ່ງໄດ້ຜ່ານ http://localhost:8000." + +#: ../source/contribute.rst:162 +msgid "Where the guide is deployed" +msgstr "ບ່ອນທີ່ຄູ່ມືຖືກນຳໄປໃຊ້ (Deploy)" + +#: ../source/contribute.rst:164 +msgid "" +"The guide is deployed via ReadTheDocs and the configuration lives at https://" +"readthedocs.org/projects/python-packaging-user-guide/. It's served from a " +"custom domain and fronted by Fast.ly." +msgstr "" +"ຄູ່ມືນີ້ຖືກ deploy ຜ່ານ ReadTheDocs ແລະ ການຕັ້ງຄ່າແມ່ນຢູ່ທີ່ https://readthedocs.org/" +"projects/python-packaging-user-guide/. ມັນຖືກເປີດໃຊ້ຜ່ານໂດເມນທີ່ກຳນົດເອງ ແລະ ມີ " +"Fast.ly ຢູ່ທາງໜ້າ." + +#: ../source/contribute.rst:170 +msgid "Style guide" +msgstr "ຄູ່ມືຮູບແບບການຂຽນ" + +#: ../source/contribute.rst:172 +msgid "" +"This style guide has recommendations for how you should write the |PyPUG|. " +"Before you start writing, please review it. By following the style guide, " +"your contributions will help add to a cohesive whole and make it easier for " +"your contributions to be accepted into the project." +msgstr "" +"ຄູ່ມືຮູບແບບນີ້ມີຄຳແນະນຳກ່ຽວກັບວິທີທີ່ທ່ານຄວນຂຽນໃຫ້ກັບ |PyPUG|. ກ່ອນທີ່ທ່ານຈະເລີ່ມຂຽນ, " +"ກະລຸນາກວດສອບເບິ່ງກ່ອນ. ໂດຍການປະຕິບັດຕາມຄູ່ມືຮູບແບບນີ້, " +"ການປະກອບສ່ວນຂອງທ່ານຈະຊ່ວຍໃຫ້ເນື້ອຫາເປັນອັນໜຶ່ງອັນດຽວກັນ ແລະ " +"ເຮັດໃຫ້ການປະກອບສ່ວນຂອງທ່ານຖືກຍອມຮັບເຂົ້າໃນໂຄງການໄດ້ງ່າຍຂຶ້ນ." + +#: ../source/contribute.rst:179 +msgid "Purpose" +msgstr "ຈຸດປະສົງ" + +#: ../source/contribute.rst:181 +msgid "" +"The purpose of the |PyPUG| is to be the authoritative resource on how to " +"package, publish, and install Python projects using current tools." +msgstr "" +"ຈຸດປະສົງຂອງ |PyPUG| ແມ່ນເພື່ອເປັນແຫຼ່ງຂໍ້ມູນທີ່ເຊື່ອຖືໄດ້ກ່ຽວກັບວິທີການເຮັດແພັກເກດ, ການເຜີຍແຜ່, ແລະ " +"ການຕິດຕັ້ງໂຄງການ Python ໂດຍໃຊ້ເຄື່ອງມືໃນປັດຈຸບັນ." + +#: ../source/contribute.rst:186 +msgid "Scope" +msgstr "ຂອບເຂດ" + +#: ../source/contribute.rst:188 +msgid "" +"The guide is meant to answer questions and solve problems with accurate and " +"focused recommendations." +msgstr "ຄູ່ມືນີ້ມີໄວ້ເພື່ອຕອບຄຳຖາມ ແລະ ແກ້ໄຂບັນຫາດ້ວຍຄຳແນະນຳທີ່ຖືກຕ້ອງ ແລະ ກົງປະເດັນ." + +#: ../source/contribute.rst:191 +msgid "" +"The guide isn't meant to be comprehensive and it's not meant to replace " +"individual projects' documentation. For example, pip has dozens of commands, " +"options, and settings. The pip documentation describes each of them in " +"detail, while this guide describes only the parts of pip that are needed to " +"complete the specific tasks described in this guide." +msgstr "" +"ຄູ່ມືນີ້ບໍ່ໄດ້ມີຈຸດປະສົງເພື່ອໃຫ້ກວມເອົາທຸກຢ່າງ ແລະ ບໍ່ໄດ້ມີໄວ້ເພື່ອແທນທີ່ເອກະສານຂອງແຕ່ລະໂຄງການ. ຕົວຢ່າງ: " +"pip ມີຄຳສັ່ງ, ຕົວເລືອກ, ແລະ ການຕັ້ງຄ່າຫຼາຍສິບຢ່າງ. ເອກະສານຂອງ pip " +"ຈະອະທິບາຍແຕ່ລະຢ່າງໂດຍລະອຽດ, ໃນຂະນະທີ່ຄູ່ມືນີ້ຈະອະທິບາຍສະເພາະພາກສ່ວນຂອງ pip " +"ທີ່ຈຳເປັນໃນການເຮັດວຽກສະເພາະທີ່ລະບຸໄວ້ໃນຄູ່ມືນີ້ເທົ່ານັ້ນ." + +#: ../source/contribute.rst:199 +msgid "Audience" +msgstr "ກຸ່ມຜູ້ອ່ານ" + +#: ../source/contribute.rst:201 +msgid "The audience of this guide is anyone who uses Python with packages." +msgstr "ກຸ່ມຜູ້ອ່ານຄູ່ມືນີ້ແມ່ນໃຜກໍຕາມທີ່ໃຊ້ Python ຮ່ວມກັບແພັກເກດຕ່າງໆ." + +#: ../source/contribute.rst:203 +msgid "" +"Don't forget that the Python community is big and welcoming. Readers may not " +"share your age, gender, education, culture, and more, but they deserve to " +"learn about packaging just as much as you do." +msgstr "" +"ຢ່າລືມວ່າຊຸມຊົນ Python ນັ້ນໃຫຍ່ ແລະ ຍິນດີຕ້ອນຮັບທຸກຄົນ. ຜູ້ອ່ານອາດຈະມີອາຍຸ, ເພດ, ການສຶກສາ, " +"ວັດທະນະທຳ ແລະ ອື່ນໆ ທີ່ແຕກຕ່າງຈາກທ່ານ, " +"ແຕ່ພວກເຂົາສົມຄວນທີ່ຈະໄດ້ຮຽນຮູ້ກ່ຽວກັບການຈັດການແພັກເກດຄືກັນກັບທ່ານ." + +#: ../source/contribute.rst:207 +msgid "" +"In particular, keep in mind that not all people who use Python see " +"themselves as programmers. The audience of this guide includes astronomers " +"or painters or students as well as professional software developers." +msgstr "" +"ໂດຍສະເພາະ, ໃຫ້ຈື່ໄວ້ວ່າບໍ່ແມ່ນທຸກຄົນທີ່ໃຊ້ Python ຈະເຫັນວ່າຕົນເອງເປັນນັກຂຽນໂປຣແກຣມ. " +"ຜູ້ອ່ານຄູ່ມືນີ້ລວມມີທັງນັກດາລາສາດ ຫຼື ຈິດຕະກອນ ຫຼື ນັກຮຽນ ນັກສຶກສາ ຕະຫຼອດຮອດນັກພັດທະນາຊອບແວມືອາຊີບ." + +#: ../source/contribute.rst:213 +msgid "Voice and tone" +msgstr "ນ້ຳສຽງ ແລະ ທ່າທາງ" + +#: ../source/contribute.rst:215 +msgid "" +"When writing this guide, strive to write with a voice that's approachable " +"and humble, even if you have all the answers." +msgstr "" +"ເມື່ອຂຽນຄູ່ມືນີ້, ຈົ່ງພະຍາຍາມຂຽນດ້ວຍນ້ຳສຽງທີ່ເຂົ້າເຖິງງ່າຍ ແລະ ອ່ອນນ້ອມ, " +"ເຖິງແມ່ນວ່າທ່ານຈະຮູ້ຄຳຕອບທຸກຢ່າງແລ້ວກໍຕາມ." + +#: ../source/contribute.rst:218 +msgid "" +"Imagine you're working on a Python project with someone you know to be smart " +"and skilled. You like working with them and they like working with you. That " +"person has asked you a question and you know the answer. How do you respond? " +"*That* is how you should write this guide." +msgstr "" +"ລອງນຶກພາບວ່າທ່ານກຳລັງເຮັດວຽກໃນໂຄງການ Python ກັບໃຜບາງຄົນທີ່ທ່ານຮູ້ວ່າມີຄວາມສະຫຼາດ ແລະ ເກັ່ງ. " +"ທ່ານມັກເຮັດວຽກກັບພວກເຂົາ ແລະ ພວກເຂົາກໍມັກເຮັດວຽກກັບທ່ານ. ຄົນນັ້ນໄດ້ຖາມຄຳຖາມທ່ານ ແລະ " +"ທ່ານຮູ້ຄຳຕອບ. ທ່ານຈະຕອບແນວໃດ? *ນັ້ນ* ຄືວິທີທີ່ທ່ານຄວນຂຽນຄູ່ມືນີ້." + +#: ../source/contribute.rst:223 +msgid "" +"Here's a quick check: try reading aloud to get a sense for your writing's " +"voice and tone. Does it sound like something you would say or does it sound " +"like you're acting out a part or giving a speech? Feel free to use " +"contractions and don't worry about sticking to fussy grammar rules. You are " +"hereby granted permission to end a sentence in a preposition, if that's what " +"you want to end it with." +msgstr "" +"ນີ້ແມ່ນວິທີກວດສອບແບບໄວໆ: ລອງອ່ານອອກສຽງເພື່ອໃຫ້ຮູ້ສຶກເຖິງນ້ຳສຽງ ແລະ ທ່າທາງຂອງການຂຽນຂອງທ່ານ. " +"ມັນຟັງຄືກັບສິ່ງທີ່ທ່ານຈະເວົ້າແທ້ໆ ບໍ ຫຼື ມັນຟັງຄືກັບວ່າທ່ານກຳລັງສະແດງລະຄອນ ຫຼື ກຳລັງກ່າວສຸນທອນພົດ? " +"ສາມາດໃຊ້ຄຳຫຍໍ້ໄດ້ຕາມສະບາຍ ແລະ ຢ່າກັງວົນກັບກົດໄວຍາກອນທີ່ຈຸກຈິກເກີນໄປ. " +"ທ່ານໄດ້ຮັບອະນຸຍາດໃຫ້ຈົບປະໂຫຍກດ້ວຍຄຳບຸບພະບົດ (preposition) ໄດ້ ຖ້ານັ້ນຄືສິ່ງທີ່ທ່ານຕ້ອງການ." + +#: ../source/contribute.rst:230 +msgid "" +"When writing the guide, adjust your tone for the seriousness and difficulty " +"of the topic. If you're writing an introductory tutorial, it's OK to make a " +"joke, but if you're covering a sensitive security recommendation, you might " +"want to avoid jokes altogether." +msgstr "" +"ເມື່ອຂຽນຄູ່ມື, ໃຫ້ປັບທ່າທາງຂອງທ່ານຕາມຄວາມຈິງຈັງ ແລະ ຄວາມຍາກຂອງຫົວຂໍ້. " +"ຖ້າທ່ານກຳລັງຂຽນບົດຮຽນການນຳໃຊ້ເບື້ອງຕົ້ນ, ມັນກໍໂອເຄທີ່ຈະມີການເວົ້າຍົວະເຍາະຫຼິ້ນ, " +"ແຕ່ຖ້າທ່ານກຳລັງເວົ້າເຖິງຄຳແນະນຳກ່ຽວກັບຄວາມປອດໄພທີ່ລະອຽດອ່ອນ, ທ່ານຄວນຫຼີກເວັ້ນການເວົ້າຫຼິ້ນທັງໝົດ." + +#: ../source/contribute.rst:237 +msgid "Conventions and mechanics" +msgstr "ຂໍ້ກຳນົດ ແລະ ຫຼັກການຂຽນ" + +#: ../source/contribute.rst:245 +msgid "**Write to the reader**" +msgstr "**ຂຽນຫາຜູ້ອ່ານໂດຍກົງ**" + +#: ../source/contribute.rst:240 +msgid "" +"When giving recommendations or steps to take, address the reader as *you* or " +"use the imperative mood." +msgstr "ເມື່ອໃຫ້ຄຳແນະນຳ ຫຼື ຂັ້ນຕອນທີ່ຕ້ອງເຮັດ, ໃຫ້ເອີ້ນຜູ້ອ່ານວ່າ *ທ່ານ* ຫຼື ໃຊ້ຮູບແບບປະໂຫຍກຄຳສັ່ງ." + +#: ../source/contribute.rst:0 +msgid "Wrong: To install it, the user runs…" +msgstr "ຜິດ: ເພື່ອຕິດຕັ້ງມັນ, ຜູ້ໃຊ້ຈະລັນ…" + +#: ../source/contribute.rst:0 +msgid "Right: You can install it by running…" +msgstr "ຖືກ: ທ່ານສາມາດຕິດຕັ້ງມັນໄດ້ໂດຍການລັນ…" + +#: ../source/contribute.rst:0 +msgid "Right: To install it, run…" +msgstr "ຖືກ: ເພື່ອຕິດຕັ້ງມັນ, ໃຫ້ລັນ…" + +#: ../source/contribute.rst:251 +msgid "**State assumptions**" +msgstr "**ລະບຸຂໍ້ສົມມຸດຖານ**" + +#: ../source/contribute.rst:248 +msgid "" +"Avoid making unstated assumptions. Reading on the web means that any page of " +"the guide may be the first page of the guide that the reader ever sees. If " +"you're going to make assumptions, then say what assumptions that you're " +"going to make." +msgstr "" +"ຫຼີກເວັ້ນການສ້າງຂໍ້ສົມມຸດຖານໂດຍບໍ່ໄດ້ລະບຸ. ການອ່ານໃນເວັບໝາຍຄວາມວ່າ " +"ໜ້າໃດໜຶ່ງຂອງຄູ່ມືອາດຈະເປັນໜ້າທຳອິດທີ່ຜູ້ອ່ານເຄີຍເຫັນ. ຖ້າທ່ານຈະຕັ້ງຂໍ້ສົມມຸດຖານໃດໜຶ່ງ, " +"ກະລຸນາບອກໃຫ້ຊັດເຈນວ່າຂໍ້ສົມມຸດຖານນັ້ນແມ່ນຫຍັງ." + +#: ../source/contribute.rst:256 +msgid "**Cross-reference generously**" +msgstr "**ໃສ່ການອ້າງອີງຂ້າມ (Cross-reference) ໃຫ້ຫຼາຍຂຶ້ນ**" + +#: ../source/contribute.rst:254 +msgid "" +"The first time you mention a tool or practice, link to the part of the guide " +"that covers it, or link to a relevant document elsewhere. Save the reader a " +"search." +msgstr "" +"ຄັ້ງທຳອິດທີ່ທ່ານກ່າວເຖິງເຄື່ອງມື ຫຼື ວິທີການປະຕິບັດ, ໃຫ້ເຊື່ອມຕໍ່ (link) ໄປຫາພາກສ່ວນຂອງຄູ່ມືທີ່ກ່ຽວຂ້ອງ, ຫຼື " +"ເຊື່ອມຕໍ່ໄປຫາເອກະສານອື່ນໆ ທີ່ກ່ຽວຂ້ອງ. ເພື່ອຊ່ວຍໃຫ້ຜູ້ອ່ານບໍ່ຕ້ອງເສຍເວລາຄົ້ນຫາເອງ." + +#: ../source/contribute.rst:266 +msgid "**Respect naming practices**" +msgstr "**ເຄົາລົບວິທີການຕັ້ງຊື່**" + +#: ../source/contribute.rst:259 +msgid "" +"When naming tools, sites, people, and other proper nouns, use their " +"preferred capitalization." +msgstr "" +"ເມື່ອຕັ້ງຊື່ເຄື່ອງມື, ເວັບໄຊ, ບຸກຄົນ, ແລະ ຄຳນາມສະເພາະອື່ນໆ, ໃຫ້ໃຊ້ຕົວອັກສອນໃຫຍ່-ນ້ອຍ " +"ຕາມທີ່ພວກເຂົາກຳນົດ." + +#: ../source/contribute.rst:0 +msgid "Wrong: Pip uses…" +msgstr "ຜິດ: Pip ໃຊ້…" + +#: ../source/contribute.rst:0 +msgid "Right: pip uses…" +msgstr "ຖືກ: pip ໃຊ້…" + +#: ../source/contribute.rst:0 +msgid "Wrong: …hosted on github." +msgstr "ຜິດ: …ຢູ່ເທິງ github." + +#: ../source/contribute.rst:0 +msgid "Right: …hosted on GitHub." +msgstr "ຖືກ: …ຢູ່ເທິງ GitHub." + +#: ../source/contribute.rst:275 +msgid "**Use a gender-neutral style**" +msgstr "**ໃຊ້ຮູບແບບທີ່ບໍ່ລະບຸເພດ**" + +#: ../source/contribute.rst:269 +msgid "" +"Often, you'll address the reader directly with *you*, *your* and *yours*. " +"Otherwise, use gender-neutral pronouns *they*, *their*, and *theirs* or " +"avoid pronouns entirely." +msgstr "" +"ສ່ວນຫຼາຍແລ້ວ, ທ່ານຈະເວົ້າກັບຜູ້ອ່ານໂດຍກົງດ້ວຍຄຳວ່າ *ທ່ານ*. ຖ້າບໍ່ດັ່ງນັ້ນ, ໃຫ້ໃຊ້ຄຳແທນນາມທີ່ບໍ່ລະບຸເພດ ຫຼື " +"ຫຼີກເວັ້ນການໃຊ້ຄຳແທນນາມໄປເລີຍ." + +#: ../source/contribute.rst:0 +msgid "Wrong: A maintainer uploads the file. Then he…" +msgstr "ຜິດ: ຜູ້ເບິ່ງແຍງລະບົບອັບໂຫຼດໄຟລ໌. ຈາກນັ້ນລາວ (ລາວຜູ້ຊາຍ)…" + +#: ../source/contribute.rst:0 +msgid "Right: A maintainer uploads the file. Then they…" +msgstr "ຖືກ: ຜູ້ເບິ່ງແຍງລະບົບອັບໂຫຼດໄຟລ໌. ຈາກນັ້ນພວກເຂົາ (ໃຊ້ເປັນກາງ)…" + +#: ../source/contribute.rst:0 +msgid "Right: A maintainer uploads the file. Then the maintainer…" +msgstr "ຖືກ: ຜູ້ເບິ່ງແຍງລະບົບອັບໂຫຼດໄຟລ໌. ຈາກນັ້ນຜູ້ເບິ່ງແຍງລະບົບ…" + +#: ../source/contribute.rst:287 +msgid "**Headings**" +msgstr "**ຫົວຂໍ້**" + +#: ../source/contribute.rst:278 +msgid "" +"Write headings that use words the reader is searching for. A good way to do " +"this is to have your heading complete an implied question. For example, a " +"reader might want to know *How do I install MyLibrary?* so a good heading " +"might be *Install MyLibrary*." +msgstr "" +"ຂຽນຫົວຂໍ້ໂດຍໃຊ້ຄຳສັບທີ່ຜູ້ອ່ານມັກຈະຄົ້ນຫາ. ວິທີທີ່ດີແມ່ນການເຮັດໃຫ້ຫົວຂໍ້ຂອງທ່ານຕອບຄຳຖາມທີ່ຢູ່ໃນໃຈ. ຕົວຢ່າງ: " +"ຜູ້ອ່ານອາດຈະຢາກຮູ້ວ່າ *ຂ້ອຍຈະຕິດຕັ້ງ MyLibrary ແນວໃດ?* ດັ່ງນັ້ນ ຫົວຂໍ້ທີ່ດີອາດຈະແມ່ນ *ຕິດຕັ້ງ " +"MyLibrary*." + +#: ../source/contribute.rst:283 +msgid "" +"In section headings, use sentence case. In other words, write headings as " +"you would write a typical sentence." +msgstr "" +"ໃນຫົວຂໍ້ຂອງແຕ່ລະພາກສ່ວນ, ໃຫ້ໃຊ້ຕົວອັກສອນແບບປະໂຫຍກທົ່ວໄປ (sentence case). ເວົ້າອີກຢ່າງໜຶ່ງແມ່ນ " +"ຂຽນຫົວຂໍ້ຄືກັບທີ່ທ່ານຂຽນປະໂຫຍກປົກກະຕິ." + +#: ../source/contribute.rst:0 +msgid "Wrong: Things You Should Know About Python" +msgstr "ຜິດ: Things You Should Know About Python (ຂຶ້ນຕົ້ນດ້ວຍຕົວໃຫຍ່ທຸກຄຳ)" + +#: ../source/contribute.rst:0 +msgid "Right: Things you should know about Python" +msgstr "" +"ຖືກ: Things you should know about Python (ຂຶ້ນຕົ້ນດ້ວຍຕົວໃຫຍ່ສະເພາະຄຳທຳອິດ ແລະ " +"ຄຳນາມສະເພາະ)" + +#: ../source/contribute.rst:290 +msgid "**Numbers**" +msgstr "**ຕົວເລກ**" + +#: ../source/contribute.rst:290 +msgid "" +"In body text, write numbers one through nine as words. For other numbers or " +"numbers in tables, use numerals." +msgstr "" +"ໃນເນື້ອຫາ, ໃຫ້ຂຽນຕົວເລກ 1 ຫາ 9 ເປັນຕົວໜັງສື. ສຳລັບຕົວເລກອື່ນໆ ຫຼື ຕົວເລກໃນຕາຕະລາງ, " +"ໃຫ້ໃຊ້ເປັນຕົວເລກ." + +#: ../source/discussions/deploying-python-applications.rst:4 +msgid "Deploying Python applications" +msgstr "ການນຳໃຊ້ (Deploy) ແອັບພລິເຄຊັນ Python" + +#: ../source/discussions/deploying-python-applications.rst:0 +#: ../source/discussions/downstream-packaging.rst:0 +#: ../source/discussions/single-source-version.rst:0 +#: ../source/guides/distributing-packages-using-setuptools.rst:0 +#: ../source/guides/index-mirrors-and-caches.rst:0 +#: ../source/guides/installing-using-linux-tools.rst:0 +#: ../source/guides/migrating-to-pypi-org.rst:0 +#: ../source/guides/multi-version-installs.rst:0 +#: ../source/guides/packaging-binary-extensions.rst:0 +#: ../source/guides/supporting-multiple-python-versions.rst:0 +#: ../source/guides/supporting-windows-using-appveyor.rst:0 +msgid "Page Status" +msgstr "ສະຖານະຂອງໜ້າ" + +#: ../source/discussions/deploying-python-applications.rst:6 +#: ../source/guides/index-mirrors-and-caches.rst:7 +#: ../source/guides/installing-using-linux-tools.rst:7 +#: ../source/guides/packaging-binary-extensions.rst:7 +msgid "Incomplete" +msgstr "ບໍ່ສົມບູນ" + +#: ../source/discussions/deploying-python-applications.rst:0 +#: ../source/discussions/downstream-packaging.rst:0 +#: ../source/discussions/single-source-version.rst:0 +#: ../source/guides/distributing-packages-using-setuptools.rst:0 +#: ../source/guides/index-mirrors-and-caches.rst:0 +#: ../source/guides/installing-using-linux-tools.rst:0 +#: ../source/guides/packaging-binary-extensions.rst:0 +#: ../source/guides/supporting-multiple-python-versions.rst:0 +#: ../source/guides/supporting-windows-using-appveyor.rst:0 +msgid "Last Reviewed" +msgstr "ກວດສອບຄັ້ງລ້າສຸດ" + +#: ../source/discussions/deploying-python-applications.rst:7 +msgid "2021-8-24" +msgstr "2021-8-24" + +#: ../source/discussions/deploying-python-applications.rst:11 +#: ../source/specifications/externally-managed-environments.rst:130 +#: ../source/specifications/platform-compatibility-tags.rst:14 +msgid "Overview" +msgstr "ພາບລວມ" + +#: ../source/discussions/deploying-python-applications.rst:15 +msgid "Supporting multiple hardware platforms" +msgstr "ການສະໜັບສະໜູນຫຼາຍແພລັດຟອມຮາດແວ" + +#: ../source/discussions/deploying-python-applications.rst:37 +msgid "OS packaging & installers" +msgstr "ການເຮັດແພັກເກດຂອງ OS ແລະ ເຄື່ອງມືຕິດຕັ້ງ" + +#: ../source/discussions/deploying-python-applications.rst:49 +#: ../source/discussions/deploying-python-applications.rst:86 +msgid "Windows" +msgstr "" + +#: ../source/discussions/deploying-python-applications.rst:58 +msgid "Pynsist" +msgstr "" + +#: ../source/discussions/deploying-python-applications.rst:60 +msgid "" +"`Pynsist `__ is a tool that bundles Python " +"programs together with the Python-interpreter into a single installer based " +"on NSIS. In most cases, packaging only requires the user to choose a version " +"of the Python-interpreter and declare the dependencies of the program. The " +"tool downloads the specified Python-interpreter for Windows and packages it " +"with all the dependencies in a single Windows-executable installer." +msgstr "" +"`Pynsist `__ ແມ່ນເຄື່ອງມືທີ່ລວມໂປຣແກຣມ Python " +"ເຂົ້າກັບ Python-interpreter ໃຫ້ເປັນຕົວຕິດຕັ້ງດຽວໂດຍອີງໃສ່ NSIS. ໃນກໍລະນີສ່ວນໃຫຍ່, " +"ການເຮັດແພັກເກດພຽງແຕ່ຕ້ອງການໃຫ້ຜູ້ໃຊ້ເລືອກເວີຊັນຂອງ Python-interpreter ແລະ ລະບຸ " +"dependencies ຂອງໂປຣແກຣມ. ເຄື່ອງມືນີ້ຈະດາວໂຫຼດ Python-interpreter ທີ່ລະບຸໄວ້ສຳລັບ " +"Windows ແລະ ແພັກມັນລວມກັບ dependencies ທັງໝົດເຂົ້າໃນຕົວຕິດຕັ້ງ Windows-executable ອັນດຽວ." + +#: ../source/discussions/deploying-python-applications.rst:67 +msgid "" +"The installed program can be started from a shortcut that the installer adds " +"to the start-menu. It uses a Python interpreter installed within its " +"application directory, independent of any other Python installation on the " +"computer." +msgstr "" +"ໂປຣແກຣມທີ່ຕິດຕັ້ງແລ້ວສາມາດເລີ່ມເຮັດວຽກໄດ້ຈາກ shortcut ທີ່ຕົວຕິດຕັ້ງເພີ່ມເຂົ້າໃນ start-menu. ມັນໃຊ້ " +"Python interpreter ທີ່ຕິດຕັ້ງໄວ້ພາຍໃນໄດເຣັກທໍຣີຂອງແອັບພລິເຄຊັນເອງ, " +"ເຊິ່ງເປັນເອກະລາດຈາກການຕິດຕັ້ງ Python ອື່ນໆ ໃນຄອມພິວເຕີ." + +#: ../source/discussions/deploying-python-applications.rst:71 +msgid "" +"A big advantage of Pynsist is that the Windows packages can be built on " +"Linux. There are several examples for different kinds of programs (console, " +"GUI) in the :any:`documentation `. The tool is released under " +"the MIT-licence." +msgstr "" +"ຂໍ້ດີທີ່ສຳຄັນຂອງ Pynsist ແມ່ນແພັກເກດ Windows ສາມາດ build ໄດ້ໃນ Linux. " +"ມີຕົວຢ່າງຫຼາຍຢ່າງສຳລັບໂປຣແກຣມປະເພດຕ່າງໆ (console, GUI) ໃນ :any:`documentation " +"`. ເຄື່ອງມືນີ້ຖືກເຜີຍແຜ່ພາຍໃຕ້ໃບອະນຸຍາດ MIT." + +#: ../source/discussions/deploying-python-applications.rst:77 +msgid "Application bundles" +msgstr "ການລວມແອັບພລິເຄຊັນ (Application bundles)" + +#: ../source/discussions/deploying-python-applications.rst:89 +msgid "py2exe" +msgstr "" + +#: ../source/discussions/deploying-python-applications.rst:91 +msgid "" +"`py2exe `__ is a distutils extension which " +"allows to build standalone Windows executable programs (32-bit and 64-bit) " +"from Python scripts. Python versions included in the official development " +"cycle are supported (refers to `Status of Python branches`__). py2exe can " +"build console executables and windows (GUI) executables. Building windows " +"services, and DLL/EXE COM servers might work but it is not actively " +"supported. The distutils extension is released under the MIT-licence and " +"Mozilla Public License 2.0." +msgstr "" +"`py2exe `__ ແມ່ນສ່ວນເສີມຂອງ distutils ທີ່ຊ່ວຍໃຫ້ " +"build ໂປຣແກຣມ Windows executable ທີ່ເຮັດວຽກໄດ້ດ້ວຍຕົນເອງ (32-bit ແລະ 64-bit) " +"ຈາກສະຄຣິບ Python. ຮອງຮັບເວີຊັນຂອງ Python ທີ່ຢູ່ໃນຮອບວຽນການພັດທະນາຢ່າງເປັນທາງການ " +"(ອ້າງອີງເຖິງ `Status of Python branches`__). py2exe ສາມາດ build ທັງ console " +"executables ແລະ windows (GUI) executables. ການ build windows services, ແລະ " +"DLL/EXE COM servers ອາດຈະເຮັດວຽກໄດ້ແຕ່ບໍ່ໄດ້ຮັບການສະໜັບສະໜູນຢ່າງເປັນທາງການ. ສ່ວນເສີມ " +"distutils ນີ້ຖືກເຜີຍແຜ່ພາຍໃຕ້ໃບອະນຸຍາດ MIT ແລະ Mozilla Public License 2.0." + +#: ../source/discussions/deploying-python-applications.rst:103 +#: ../source/specifications/platform-compatibility-tags.rst:200 +msgid "macOS" +msgstr "" + +#: ../source/discussions/deploying-python-applications.rst:106 +msgid "py2app" +msgstr "" + +#: ../source/discussions/deploying-python-applications.rst:108 +msgid "" +"`py2app `__ is a Python setuptools command " +"which will allow you to make standalone macOS application bundles and " +"plugins from Python scripts. Note that py2app MUST be used on macOS to build " +"applications, it cannot create Mac applications on other platforms. py2app " +"is released under the MIT-license." +msgstr "" +"`py2app `__ ແມ່ນຄຳສັ່ງຂອງ Python setuptools " +"ທີ່ຈະຊ່ວຍໃຫ້ທ່ານສ້າງ macOS application bundles ແລະ plugins " +"ທີ່ເຮັດວຽກໄດ້ດ້ວຍຕົນເອງຈາກສະຄຣິບ Python. ໝາຍເຫດ: ທ່ານຕ້ອງໃຊ້ py2app ເທິງ macOS ເພື່ອ " +"build ແອັບພລິເຄຊັນ, ມັນບໍ່ສາມາດສ້າງແອັບພລິເຄຊັນ Mac ເທິງແພລັດຟອມອື່ນໄດ້. py2app " +"ຖືກເຜີຍແຜ່ພາຍໃຕ້ໃບອະນຸຍາດ MIT." + +#: ../source/discussions/deploying-python-applications.rst:115 +msgid "Unix (including Linux and macOS)" +msgstr "Unix (ລວມທັງ Linux ແລະ macOS)" + +#: ../source/discussions/deploying-python-applications.rst:118 +#: ../source/key_projects.rst:576 +msgid "pex" +msgstr "pex" + +#: ../source/discussions/deploying-python-applications.rst:120 +msgid "" +"`pex `__ is a library for generating .pex " +"(Python EXecutable) files which are executable Python environments in the " +"spirit of virtualenvs. pex is an expansion upon the ideas outlined " +"in :pep:`441` and makes the deployment of Python applications as simple as " +"cp. pex files may even include multiple platform-specific Python " +"distributions, meaning that a single pex file can be portable across Linux " +"and macOS. pex is released under the Apache License 2.0." +msgstr "" +"`pex `__ ແມ່ນໄລບຣາຣີສຳລັບສ້າງໄຟລ໌ .pex (Python " +"EXecutable) ເຊິ່ງເປັນສະພາບແວດລ້ອມ Python ທີ່ສາມາດລັນໄດ້ໃນຮູບແບບຂອງ virtualenvs. pex " +"ແມ່ນການຂະຫຍາຍແນວຄວາມຄິດທີ່ລະບຸໄວ້ໃນ :pep:`441` ແລະ ເຮັດໃຫ້ການ deploy ແອັບພລິເຄຊັນ " +"Python ງ່າຍຄືກັບການໃຊ້ຄຳສັ່ງ cp. ໄຟລ໌ pex ອາດຈະລວມເອົາ Python distributions " +"ຂອງຫຼາຍແພລັດຟອມໄວ້ນຳກັນ, ເຮັດໃຫ້ໄຟລ໌ pex ດຽວສາມາດພົກພາໄປໃຊ້ໄດ້ທັງໃນ Linux ແລະ macOS. " +"pex ຖືກເຜີຍແຜ່ພາຍໃຕ້ໃບອະນຸຍາດ Apache License 2.0." + +#: ../source/discussions/deploying-python-applications.rst:129 +msgid "Configuration management" +msgstr "ການຈັດການການຕັ້ງຄ່າ" + +#: ../source/discussions/distribution-package-vs-import-package.rst:5 +msgid "Distribution package vs. import package" +msgstr "" +"ແພັກເກດການແຈກຢາຍ (Distribution package) ທຽບກັບ ແພັກເກດການນຳເຂົ້າ (import package)" + +#: ../source/discussions/distribution-package-vs-import-package.rst:7 +msgid "" +"A number of different concepts are commonly referred to by the word " +"\"package\". This page clarifies the differences between two distinct but " +"related meanings in Python packaging, \"distribution package\" and \"import " +"package\"." +msgstr "" +"ມີຫຼາຍແນວຄວາມຄິດທີ່ແຕກຕ່າງກັນເຊິ່ງມັກຈະຖືກເອີ້ນລວມໆ ວ່າ \"package\". " +"ໜ້ານີ້ຈະອະທິບາຍໃຫ້ຊັດເຈນກ່ຽວກັບຄວາມແຕກຕ່າງລະຫວ່າງສອງຄວາມໝາຍທີ່ຕ່າງກັນແຕ່ກ່ຽວຂ້ອງກັນໃນ Python " +"packaging, ນັ້ນຄື \"distribution package\" ແລະ \"import package\"." + +#: ../source/discussions/distribution-package-vs-import-package.rst:13 +msgid "What's a distribution package?" +msgstr "Distribution package ແມ່ນຫຍັງ?" + +#: ../source/discussions/distribution-package-vs-import-package.rst:15 +msgid "" +"A distribution package is a piece of software that you can install. Most of " +"the time, this is synonymous with \"project\". When you type ``pip install " +"pkg``, or when you write ``dependencies = [\"pkg\"]`` in your " +"``pyproject.toml``, ``pkg`` is the name of a distribution package. When you " +"search or browse the PyPI_, the most widely known centralized source for " +"installing Python libraries and tools, what you see is a list of " +"distribution packages. Alternatively, the term \"distribution package\" can " +"be used to refer to a specific file that contains a certain version of a " +"project." +msgstr "" +"Distribution package ແມ່ນຊອບແວສ່ວນໜຶ່ງທີ່ທ່ານສາມາດຕິດຕັ້ງໄດ້. ສ່ວນຫຼາຍແລ້ວ, " +"ມັນມີຄວາມໝາຍດຽວກັນກັບ \"ໂຄງການ (project)\". ເມື່ອທ່ານພິມ ``pip install pkg``, ຫຼື " +"ເມື່ອທ່ານຂຽນ ``dependencies = [\"pkg\"]`` ໃນໄຟລ໌ ``pyproject.toml``, ``pkg`` " +"ກໍຄືຊື່ຂອງ distribution package. ເມື່ອທ່ານຄົ້ນຫາໃນ PyPI_, " +"ເຊິ່ງເປັນແຫຼ່ງລວມສູນທີ່ຮູ້ຈັກກັນດີທີ່ສຸດສຳລັບການຕິດຕັ້ງໄລບຣາຣີ ແລະ ເຄື່ອງມື Python, " +"ສິ່ງທີ່ທ່ານເຫັນກໍຄືລາຍຊື່ຂອງ distribution packages. ນອກຈາກນັ້ນ, ຄຳວ່າ \"distribution " +"package\" ຍັງສາມາດໃຊ້ເພື່ອອ້າງເຖິງໄຟລ໌ສະເພາະທີ່ບັນຈຸເວີຊັນໃດໜຶ່ງຂອງໂຄງການ." + +#: ../source/discussions/distribution-package-vs-import-package.rst:24 +msgid "" +"Note that in the Linux world, a \"distribution package\", most commonly " +"abbreviated as \"distro package\" or just \"package\", is something provided " +"by the system package manager of the `Linux distribution `_, which " +"is a different meaning." +msgstr "" +"ໝາຍເຫດ: ໃນໂລກຂອງ Linux, \"distribution package\" (ມັກຈະຫຍໍ້ເປັນ \"distro " +"package\" ຫຼື ແຄ່ \"package\") ແມ່ນສິ່ງທີ່ສະໜອງໃຫ້ໂດຍຕົວຈັດການແພັກເກດຂອງລະບົບ `Linux " +"distribution `_, ເຊິ່ງມີຄວາມໝາຍທີ່ແຕກຕ່າງກັນ." + +#: ../source/discussions/distribution-package-vs-import-package.rst:31 +msgid "What's an import package?" +msgstr "Import package ແມ່ນຫຍັງ?" + +#: ../source/discussions/distribution-package-vs-import-package.rst:33 +msgid "" +"An import package is a Python module. Thus, when you write ``import pkg`` or " +"``from pkg import func`` in your Python code, ``pkg`` is the name of an " +"import package. More precisely, import packages are special Python modules " +"that can contain submodules. For example, the ``numpy`` package contains " +"modules like ``numpy.linalg`` and ``numpy.fft``. Usually, an import package " +"is a directory on the file system, containing modules as ``.py`` files and " +"subpackages as subdirectories." +msgstr "" +"Import package ແມ່ນໂມດູນ (module) ຂອງ Python. ດັ່ງນັ້ນ, ເມື່ອທ່ານຂຽນ ``import pkg`` ຫຼື " +"``from pkg import func`` ໃນໂຄ້ດ Python ຂອງທ່ານ, ``pkg`` ກໍຄືຊື່ຂອງ import package. " +"ເວົ້າໃຫ້ຊັດເຈນກວ່າແມ່ນ, import packages ແມ່ນໂມດູນ Python ພິເສດທີ່ສາມາດບັນຈຸໂມດູນຍ່ອຍ " +"(submodules) ໄດ້. ຕົວຢ່າງ: ແພັກເກດ ``numpy`` ປະກອບດ້ວຍໂມດູນຕ່າງໆ ເຊັ່ນ " +"``numpy.linalg`` ແລະ ``numpy.fft``. ໂດຍປົກກະຕິແລ້ວ, import package " +"ຈະເປັນໄດເຣັກທໍຣີໃນລະບົບໄຟລ໌ ທີ່ບັນຈຸໂມດູນເປັນໄຟລ໌ ``.py`` ແລະ ແພັກເກດຍ່ອຍ (subpackages) " +"ເປັນໄດເຣັກທໍຣີຍ່ອຍ." + +#: ../source/discussions/distribution-package-vs-import-package.rst:42 +msgid "" +"You can use an import package as soon as you have installed a distribution " +"package that provides it." +msgstr "" +"ທ່ານສາມາດໃຊ້ import package ໄດ້ທັນທີທີ່ທ່ານໄດ້ຕິດຕັ້ງ distribution package ທີ່ສະໜອງມັນໃຫ້." + +#: ../source/discussions/distribution-package-vs-import-package.rst:47 +msgid "What are the links between distribution packages and import packages?" +msgstr "ຄວາມກ່ຽວພັນລະຫວ່າງ distribution packages ແລະ import packages ແມ່ນຫຍັງ?" + +#: ../source/discussions/distribution-package-vs-import-package.rst:49 +msgid "" +"Most of the time, a distribution package provides one single import package " +"(or non-package module), with a matching name. For example, ``pip install " +"numpy`` lets you ``import numpy``." +msgstr "" +"ສ່ວນຫຼາຍແລ້ວ, distribution package ຈະສະໜອງ import package ພຽງອັນດຽວ (ຫຼື " +"ໂມດູນທີ່ບໍ່ແມ່ນແພັກເກດ), ໂດຍມີຊື່ທີ່ກົງກັນ. ຕົວຢ່າງ: ``pip install numpy`` ຈະຊ່ວຍໃຫ້ທ່ານສາມາດ " +"``import numpy`` ໄດ້." + +#: ../source/discussions/distribution-package-vs-import-package.rst:53 +msgid "" +"However, this is only a convention. PyPI and other package indices *do not " +"enforce any relationship* between the name of a distribution package and the " +"import packages it provides. (A consequence of this is that you cannot " +"blindly install the PyPI package ``foo`` if you see ``import foo``; this may " +"install an unintended, and potentially even malicious package.)" +msgstr "" +"ຢ່າງໃດກໍຕາມ, ນີ້ເປັນພຽງຂໍ້ຕົກລົງຮ່ວມກັນເທົ່ານັ້ນ. PyPI ແລະ ດັດຊະນີແພັກເກດອື່ນໆ " +"*ບໍ່ໄດ້ບັງຄັບຄວາມກ່ຽວພັນໃດໆ* ລະຫວ່າງຊື່ຂອງ distribution package ແລະ import packages " +"ທີ່ມັນສະໜອງໃຫ້. (ຜົນທີ່ຕາມມາຄື ທ່ານບໍ່ຄວນຕິດຕັ້ງແພັກເກດ ``foo`` ຈາກ PyPI " +"ໂດຍບໍ່ກວດສອບພຽງເພາະທ່ານເຫັນຄຳສັ່ງ ``import foo``; ເພາະມັນອາດຈະຕິດຕັ້ງແພັກເກດທີ່ທ່ານບໍ່ໄດ້ຕັ້ງໃຈ " +"ຫຼື ອາດຈະເປັນແພັກເກດທີ່ເປັນອັນຕະລາຍກໍໄດ້.)" + +#: ../source/discussions/distribution-package-vs-import-package.rst:59 +msgid "" +"A distribution package could provide an import package with a different " +"name. An example of this is the popular Pillow_ library for image " +"processing. Its distribution package name is ``Pillow``, but it provides the " +"import package ``PIL``. This is for historical reasons: Pillow started as a " +"fork of the PIL library, thus it kept the import name ``PIL`` so that " +"existing PIL users could switch to Pillow with little effort. More " +"generally, a fork of an existing library is a common reason for differing " +"names between the distribution package and the import package." +msgstr "" +"Distribution package ສາມາດສະໜອງ import package ທີ່ມີຊື່ແຕກຕ່າງກັນໄດ້. ຕົວຢ່າງຄືໄລບຣາຣີ " +"Pillow_ ທີ່ໄດ້ຮັບຄວາມນິຍົມສຳລັບການຈັດການຮູບພາບ. ຊື່ distribution package ຂອງມັນແມ່ນ " +"``Pillow``, ແຕ່ມັນສະໜອງ import package ທີ່ມີຊື່ວ່າ ``PIL``. ນີ້ແມ່ນຍ້ອນເຫດຜົນທາງປະຫວັດສາດ: " +"Pillow ເລີ່ມຕົ້ນຈາກການ fork ໄລບຣາຣີ PIL, ດັ່ງນັ້ນມັນຈຶ່ງຮັກສາຊື່ import ວ່າ ``PIL`` ໄວ້ " +"ເພື່ອໃຫ້ຜູ້ໃຊ້ PIL ເດີມສາມາດປ່ຽນມາໃຊ້ Pillow ໄດ້ໂດຍບໍ່ຕ້ອງແກ້ໄຂຫຍັງຫຼາຍ. ໂດຍທົ່ວໄປແລ້ວ, ການ " +"fork ໄລບຣາຣີທີ່ມີຢູ່ແລ້ວແມ່ນເຫດຜົນຫຼັກທີ່ເຮັດໃຫ້ຊື່ຂອງ distribution package ແລະ import " +"package ແຕກຕ່າງກັນ." + +#: ../source/discussions/distribution-package-vs-import-package.rst:69 +msgid "" +"On a given package index (like PyPI), distribution package names must be " +"unique. On the other hand, import packages have no such requirement. Import " +"packages with the same name can be provided by several distribution " +"packages. Again, forks are a common reason for this." +msgstr "" +"ໃນດັດຊະນີແພັກເກດໃດໜຶ່ງ (ເຊັ່ນ PyPI), ຊື່ຂອງ distribution package ຕ້ອງບໍ່ຊ້ຳກັນ. " +"ໃນທາງກົງກັນຂ້າມ, import packages ບໍ່ມີຂໍ້ກຳນົດດັ່ງກ່າວ. Import packages " +"ທີ່ມີຊື່ຄືກັນສາມາດຖືກສະໜອງໂດຍ distribution packages ຫຼາຍອັນໄດ້. ເຊິ່ງການ fork " +"ກໍເປັນເຫດຜົນທົ່ວໄປຂອງກໍລະນີນີ້ນຳ." + +#: ../source/discussions/distribution-package-vs-import-package.rst:74 +msgid "" +"Conversely, a distribution package can provide several import packages, " +"although this is less common. An example is the attrs_ distribution package, " +"which provides both an ``attrs`` import package with a newer API, and an " +"``attr`` import package with an older but supported API." +msgstr "" +"ໃນທາງກົງກັນຂ້າມ, distribution package ອັນດຽວກໍສາມາດສະໜອງ import packages ຫຼາຍອັນໄດ້, " +"ເຖິງວ່າມັນຈະບໍ່ຄ່ອຍພົບເຫັນຫຼາຍປານໃດ. ຕົວຢ່າງຄື distribution package ຂອງ attrs_, " +"ເຊິ່ງສະໜອງທັງ import package ``attrs`` ທີ່ມີ API ລຸ້ນໃໝ່ ແລະ import package ``attr`` " +"ທີ່ມີ API ລຸ້ນເກົ່າແຕ່ຍັງຮອງຮັບຢູ່." + +#: ../source/discussions/distribution-package-vs-import-package.rst:81 +msgid "How do distribution package names and import package names compare?" +msgstr "ຊື່ distribution package ແລະ import package ແຕກຕ່າງກັນແນວໃດ?" + +#: ../source/discussions/distribution-package-vs-import-package.rst:83 +msgid "" +"Import packages should have valid Python identifiers as their name " +"(the :ref:`exact rules ` are found in the Python " +"documentation) [#non-identifier-mod-name]_. In particular, they use " +"underscores ``_`` as word separator and they are case-sensitive." +msgstr "" +"Import packages ຄວນມີຊື່ທີ່ເປັນ Python identifiers ທີ່ຖືກຕ້ອງ " +"(ສາມາດເບິ່ງ :ref:`ກົດເກນທີ່ລະອຽດ ` ໄດ້ໃນເອກະສານຂອງ Python). " +"ໂດຍສະເພາະແມ່ນ ພວກມັນໃຊ້ underscores ``_`` ເພື່ອແຍກຄຳ ແລະ ໃຫ້ຄວາມສຳຄັນກັບຕົວອັກສອນໃຫຍ່-" +"ນ້ອຍ (case-sensitive)." + +#: ../source/discussions/distribution-package-vs-import-package.rst:88 +msgid "" +"On the other hand, distribution packages can use hyphens ``-`` or " +"underscores ``_``. They can also contain dots ``.``, which is sometimes used " +"for packaging a subpackage of a :ref:`namespace package `. For most purposes, they are insensitive to case and to ``-`` " +"vs. ``_`` differences, e.g., ``pip install Awesome_Package`` is the same as " +"``pip install awesome-package`` (the precise rules are given in " +"the :ref:`name normalization specification `)." +msgstr "" +"ໃນທາງກົງກັນຂ້າມ, distribution packages ສາມາດໃຊ້ hyphens ``-`` ຫຼື underscores " +"``_``. ພວກມັນຍັງສາມາດມີຈຸດ ``.`` " +"ເຊິ່ງບາງຄັ້ງຖືກໃຊ້ສຳລັບການເຮັດແພັກເກດຍ່ອຍຂອງ :ref:`namespace package `. ສ່ວນຫຼາຍແລ້ວ, ພວກມັນຈະບໍ່ແຍກຄວາມແຕກຕ່າງລະຫວ່າງຕົວໃຫຍ່-ນ້ອຍ ແລະ " +"ລະຫວ່າງ ``-`` ກັບ ``_``, ເຊັ່ນ: ``pip install Awesome_Package`` ຈະມີຄ່າເທົ່າກັບ ``pip " +"install awesome-package``." + +#: ../source/discussions/distribution-package-vs-import-package.rst:101 +msgid "" +"Although it is technically possible to import packages/modules that do not " +"have a valid Python identifier as their name, using :doc:`importlib " +"`, this is vanishingly rare and strongly " +"discouraged." +msgstr "" +"ເຖິງວ່າໃນທາງເຕັກນິກຈະສາມາດ import ແພັກເກດ/ໂມດູນ ທີ່ບໍ່ມີຊື່ເປັນ Python identifier ທີ່ຖືກຕ້ອງໄດ້ " +"ໂດຍການໃຊ້ :doc:`importlib `, ແຕ່ມັນເປັນເລື່ອງທີ່ພົບໄດ້ໜ້ອຍທີ່ສຸດ " +"ແລະ ບໍ່ແນະນຳຢ່າງເດັດຂາດ." + +#: ../source/discussions/downstream-packaging.rst:5 +msgid "Supporting downstream packaging" +msgstr "ການສະໜັບສະໜູນການເຮັດແພັກເກດປາຍນ້ຳ (Downstream Packaging)" + +#: ../source/discussions/downstream-packaging.rst:7 +msgid "Draft" +msgstr "ສະບັບຮ່າງ" + +#: ../source/discussions/downstream-packaging.rst:8 +msgid "2025-?" +msgstr "2025-?" + +#: ../source/discussions/downstream-packaging.rst:10 +msgid "" +"While PyPI and the Python packaging tools such as :ref:`pip` are the primary " +"means of distributing Python packages, they are also often made available as " +"part of other packaging ecosystems. These repackaging efforts are " +"collectively called *downstream* packaging (your own efforts are called " +"*upstream* packaging), and include such projects as Linux distributions, " +"Conda, Homebrew and MacPorts. They generally aim to provide improved support " +"for use cases that cannot be handled via Python packaging tools alone, such " +"as native integration with a specific operating system, or assured " +"compatibility with specific versions of non-Python software." +msgstr "" +"ໃນຂະນະທີ່ PyPI ແລະ ເຄື່ອງມືການຈັດການແພັກເກດ Python ເຊັ່ນ :ref:`pip` " +"ແມ່ນຊ່ອງທາງຫຼັກໃນການແຈກຢາຍແພັກເກດ Python, " +"ພວກມັນມັກຈະຖືກເຮັດໃຫ້ພ້ອມໃຊ້ງານໃນລະບົບນິເວດການຈັດການແພັກເກດອື່ນໆ ນຳ. " +"ຄວາມພະຍາຍາມໃນການເຮັດແພັກເກດໃໝ່ເຫຼົ່ານີ້ຖືກເອີ້ນລວມກັນວ່າ *downstream* packaging " +"(ສ່ວນຄວາມພະຍາຍາມຂອງທ່ານເອງເອີ້ນວ່າ *upstream* packaging), ເຊິ່ງລວມມີໂຄງການຕ່າງໆ ເຊັ່ນ " +"Linux distributions, Conda, Homebrew ແລະ MacPorts. ໂດຍທົ່ວໄປແລ້ວ " +"ພວກເຂົາມີເປົ້າໝາຍເພື່ອໃຫ້ການສະໜັບສະໜູນທີ່ດີຂຶ້ນສຳລັບກໍລະນີການນຳໃຊ້ທີ່ເຄື່ອງມື Python " +"ພຽງຢ່າງດຽວບໍ່ສາມາດຈັດການໄດ້, ເຊັ່ນການເຊື່ອມໂຍງກັບລະບົບປະຕິບັດການສະເພາະ, ຫຼື " +"ການຮັບປະກັນຄວາມເຂົ້າກັນໄດ້ກັບຊອບແວອື່ນທີ່ບໍ່ແມ່ນ Python." + +#: ../source/discussions/downstream-packaging.rst:19 +msgid "" +"This discussion attempts to explain how downstream packaging is usually " +"done, and what additional challenges downstream packagers typically face. It " +"aims to provide some optional guidelines that project maintainers may choose " +"to follow which help make downstream packaging *significantly* easier " +"(without imposing any major maintenance hassles on the upstream project). " +"Note that this is not an all-or-nothing proposal — anything that upstream " +"maintainers can do is useful, even if it's only a small part. Downstream " +"maintainers are also willing to prepare patches to resolve these issues. " +"Having these patches merged can be very helpful, since it removes the need " +"for different downstreams to carry and keep rebasing the same patches, and " +"the risk of applying inconsistent solutions to the same problem." +msgstr "" +"ການສົນທະນານີ້ພະຍາຍາມອະທິບາຍວ່າການເຮັດແພັກເກດປາຍນ້ຳ (downstream packaging) " +"ປົກກະຕິແລ້ວເຮັດແນວໃດ, ແລະ ສິ່ງທ້າທາຍເພີ່ມເຕີມທີ່ພວກເຂົາມັກຈະພົບແມ່ນຫຍັງ. " +"ມັນມີຈຸດປະສົງເພື່ອໃຫ້ແນວທາງບາງຢ່າງທີ່ຜູ້ເບິ່ງແຍງໂຄງການສາມາດເລືອກປະຕິບັດຕາມ " +"ເພື່ອຊ່ວຍໃຫ້ການເຮັດແພັກເກດປາຍນ້ຳງ່າຍຂຶ້ນ *ຢ່າງຫຼວງຫຼາຍ*. ໝາຍເຫດ: ນີ້ບໍ່ແມ່ນຂໍ້ສະເໜີທີ່ຕ້ອງເຮັດທັງໝົດ — " +"ສິ່ງໃດກໍຕາມທີ່ຜູ້ເບິ່ງແຍງຕົ້ນນ້ຳ (upstream) ສາມາດເຮັດໄດ້ແມ່ນມີປະໂຫຍດທັງໝົດ. " +"ຜູ້ເບິ່ງແຍງປາຍນ້ຳຍັງຍິນດີທີ່ຈະກຽມ patch ເພື່ອແກ້ໄຂບັນຫາເຫຼົ່ານີ້. ການມີ patch " +"ເຫຼົ່ານີ້ລວມເຂົ້າໃນຕົ້ນນ້ຳຈະມີປະໂຫຍດຫຼາຍ ເພາະມັນຈະຊ່ວຍຫຼຸດຜ່ອນຄວາມຈຳເປັນທີ່ແຕ່ລະປາຍນ້ຳຕ້ອງມາຈັດການ " +"patch ດຽວກັນຊ້ຳໆ." + +#: ../source/discussions/downstream-packaging.rst:31 +msgid "" +"Establishing a good relationship between software maintainers and downstream " +"packagers can bring mutual benefits. Downstreams are often willing to share " +"their experience, time and hardware to improve your package. They are " +"sometimes in a better position to see how your package is used in practice, " +"and to provide information about its relationships with other packages that " +"would otherwise require significant effort to obtain. Packagers can often " +"find bugs before your users hit them in production, provide bug reports of " +"good quality, and supply patches whenever they can. For example, they are " +"regularly active in ensuring the packages they redistribute are updated for " +"any compatibility issues that arise when a new Python version is released." +msgstr "" +"ການສ້າງຄວາມສຳພັນທີ່ດີລະຫວ່າງຜູ້ເບິ່ງແຍງຊອບແວ ແລະ ຜູ້ເຮັດແພັກເກດປາຍນ້ຳ " +"ສາມາດນຳມາເຊິ່ງຜົນປະໂຫຍດຮ່ວມກັນ. ປາຍນ້ຳມັກຈະຍິນດີທີ່ຈະແບ່ງປັນປະສົບການ, ເວລາ ແລະ " +"ຮາດແວເພື່ອປັບປຸງແພັກເກດຂອງທ່ານ. " +"ບາງຄັ້ງພວກເຂົາຢູ່ໃນຈຸດທີ່ເຫັນໄດ້ດີກວ່າວ່າແພັກເກດຂອງທ່ານຖືກນຳໃຊ້ແທ້ແນວໃດ. ຜູ້ເຮັດແພັກເກດມັກຈະພົບ bug " +"ກ່ອນທີ່ຜູ້ໃຊ້ຂອງທ່ານຈະພົບໃນລະບົບຈິງ, ສາມາດໃຫ້ລາຍງານ bug ທີ່ມີຄຸນນະພາບ ແລະ ສົ່ງ patch " +"ໃຫ້ເມື່ອເປັນໄປໄດ້." + +#: ../source/discussions/downstream-packaging.rst:43 +msgid "" +"Please note that downstream builds include not only binary redistribution, " +"but also source builds done on user systems (in source-first distributions " +"such as Gentoo Linux, for example)." +msgstr "" +"ກະລຸນາໝາຍເຫດວ່າ ການ build ຂອງປາຍນ້ຳບໍ່ໄດ້ລວມເອົາພຽງແຕ່ການແຈກຢາຍແບບ binary ເທົ່ານັ້ນ, " +"ແຕ່ຍັງລວມເຖິງການ build ຈາກ source ໃນລະບົບຂອງຜູ້ໃຊ້ (ເຊັ່ນໃນ Gentoo Linux ເປັນຕົ້ນ)." + +#: ../source/discussions/downstream-packaging.rst:51 +msgid "Provide complete source distributions" +msgstr "ສະໜອງ source distributions ທີ່ຄົບຖ້ວນ" + +#: ../source/discussions/downstream-packaging.rst:54 +#: ../source/discussions/downstream-packaging.rst:150 +#: ../source/discussions/downstream-packaging.rst:213 +#: ../source/discussions/downstream-packaging.rst:303 +#: ../source/discussions/downstream-packaging.rst:412 +msgid "Why?" +msgstr "ເປັນຫຍັງ?" + +#: ../source/discussions/downstream-packaging.rst:56 +msgid "" +"The vast majority of downstream packagers prefer to build packages from " +"source, rather than use the upstream-provided binary packages. In some " +"cases, using sources is actually required for the package to be included in " +"the distribution. This is also true of pure Python packages that provide " +"universal wheels. The reasons for using source distributions may include:" +msgstr "" +"ຜູ້ເຮັດແພັກເກດປາຍນ້ຳສ່ວນໃຫຍ່ມັກ build ແພັກເກດຈາກ source ຫຼາຍກວ່າການໃຊ້ binary ທີ່ຕົ້ນນ້ຳຈັດໃຫ້. " +"ໃນບາງກໍລະນີ, ການໃຊ້ source ແມ່ນຂໍ້ກຳນົດເພື່ອໃຫ້ແພັກເກດຖືກລວມເຂົ້າໃນ distro ນັ້ນໆ. " +"ເຫດຜົນໃນການໃຊ້ source distribution ອາດຈະລວມມີ:" + +#: ../source/discussions/downstream-packaging.rst:62 +msgid "Being able to audit the source code of all packages." +msgstr "ສາມາດກວດສອບ (audit) source code ຂອງທຸກແພັກເກດໄດ້." + +#: ../source/discussions/downstream-packaging.rst:64 +msgid "Being able to run the test suite and build documentation." +msgstr "ສາມາດລັນຊຸດການທົດສອບ (test suite) ແລະ build ເອກະສານໄດ້." + +#: ../source/discussions/downstream-packaging.rst:66 +msgid "" +"Being able to easily apply patches, including backporting commits from the " +"project's repository and sending patches back to the project." +msgstr "" +"ສາມາດໃຊ້ patch ໄດ້ງ່າຍ, ລວມທັງການ backport commits ຈາກ repository ຂອງໂຄງການ ແລະ " +"ການສົ່ງ patch ກັບຄືນໄປຫາໂຄງການ." + +#: ../source/discussions/downstream-packaging.rst:69 +msgid "" +"Being able to build on a specific platform that is not covered by upstream " +"builds." +msgstr "ສາມາດ build ໃນແພລັດຟອມສະເພາະທີ່ຕົ້ນນ້ຳບໍ່ໄດ້ຮອງຮັບ." + +#: ../source/discussions/downstream-packaging.rst:72 +msgid "Being able to build against specific versions of system libraries." +msgstr "ສາມາດ build ຮ່ວມກັບເວີຊັນສະເພາະຂອງ system libraries ໄດ້." + +#: ../source/discussions/downstream-packaging.rst:74 +msgid "Having a consistent build process across all Python packages." +msgstr "ເພື່ອໃຫ້ມີຂະບວນການ build ທີ່ສອດຄ່ອງກັນໃນທຸກແພັກເກດ Python." + +#: ../source/discussions/downstream-packaging.rst:76 +msgid "" +"While it is usually possible to build packages from a Git repository, there " +"are a few important reasons to provide a static archive file instead:" +msgstr "" +"ເຖິງວ່າປົກກະຕິແລ້ວຈະສາມາດ build ແພັກເກດຈາກ Git repository ໄດ້, " +"ແຕ່ມີເຫດຜົນສຳຄັນບາງຢ່າງທີ່ຄວນສະໜອງໄຟລ໌ static archive ແທນ:" + +#: ../source/discussions/downstream-packaging.rst:79 +msgid "" +"Fetching a single file is often more efficient, more reliable and better " +"supported than e.g. using a Git clone. This can help users with poor " +"Internet connectivity." +msgstr "" +"ການດຶງໄຟລ໌ດຽວມັກຈະມີປະສິດທິພາບກວ່າ, ເຊື່ອຖືໄດ້ກວ່າ ແລະ ໄດ້ຮັບການຮອງຮັບດີກວ່າການໃຊ້ Git clone. " +"ນີ້ສາມາດຊ່ວຍຜູ້ໃຊ້ທີ່ມີການເຊື່ອມຕໍ່ອິນເຕີເນັດບໍ່ດີໄດ້." + +#: ../source/discussions/downstream-packaging.rst:83 +msgid "" +"Downstreams often use hashes to verify the authenticity of source files on " +"subsequent builds, which require that they remain bitwise identical over " +"time. For example, automatically generated Git archives do not guarantee " +"this, as the compressed data may change if gzip is upgraded on the server." +msgstr "" +"ປາຍນ້ຳມັກຈະໃຊ້ hash ເພື່ອຢືນຢັນຄວາມຖືກຕ້ອງຂອງໄຟລ໌ source, ເຊິ່ງຕ້ອງການໃຫ້ໄຟລ໌ຄືກັນທຸກບິດ " +"(bitwise identical). ຕົວຢ່າງ: Git archives ທີ່ສ້າງໂດຍອັດຕະໂນມັດບໍ່ສາມາດຮັບປະກັນເລື່ອງນີ້ໄດ້ " +"ເພາະຂໍ້ມູນທີ່ຖືກບີບອັດອາດຈະປ່ຽນແປງຖ້າ gzip ໃນ server ຖືກອັບເກຣດ." + +#: ../source/discussions/downstream-packaging.rst:88 +msgid "" +"Archive files can be mirrored, reducing both upstream and downstream " +"bandwidth use. The actual builds can afterwards be performed in firewalled " +"or offline environments, that can only access source files provided by the " +"local mirror or redistributed earlier." +msgstr "" +"ໄຟລ໌ Archive ສາມາດເຮັດ mirror ໄດ້, ເຊິ່ງຊ່ວຍຫຼຸດຜ່ອນການໃຊ້ bandwidth ທັງຕົ້ນນ້ຳ ແລະ ປາຍນ້ຳ. " +"ຈາກນັ້ນການ build ແທ້ໆ ສາມາດເຮັດໄດ້ໃນສະພາບແວດລ້ອມທີ່ມີ firewall ຫຼື offline " +"ທີ່ເຂົ້າເຖິງໄດ້ສະເພາະໄຟລ໌ຈາກ local mirror ເທົ່ານັ້ນ." + +#: ../source/discussions/downstream-packaging.rst:93 +msgid "" +"Explicitly publishing archive files can ensure that any dependencies on " +"version control system metadata are resolved when creating the source " +"archive. For example, automatically generated Git archives omit all of the " +"commit tag information, potentially resulting in incorrect version details " +"in the resulting builds." +msgstr "" +"ການເຜີຍແຜ່ໄຟລ໌ archive ຢ່າງຊັດເຈນຊ່ວຍໃຫ້ແນ່ໃຈວ່າ ຂໍ້ມູນກຳກັບ (metadata) " +"ຂອງລະບົບຄວບຄຸມເວີຊັນຖືກຈັດການຢ່າງຖືກຕ້ອງ." + +#: ../source/discussions/downstream-packaging.rst:99 +#: ../source/discussions/downstream-packaging.rst:179 +#: ../source/discussions/downstream-packaging.rst:277 +#: ../source/discussions/downstream-packaging.rst:337 +#: ../source/discussions/downstream-packaging.rst:441 +msgid "How?" +msgstr "ເຮັດແນວໃດ?" + +#: ../source/discussions/downstream-packaging.rst:101 +msgid "" +"Ideally, **a source distribution archive published on PyPI should include " +"all the files from the package's Git repository** that are necessary to " +"build the package itself, run its test suite, build and install its " +"documentation, and any other files that may be useful to end users, such as " +"shell completions, editor support files, and so on." +msgstr "" +"ຕາມທີ່ຄວນຈະເປັນ, **source distribution archive ທີ່ເຜີຍແຜ່ໃນ PyPI ຄວນລວມເອົາທຸກໄຟລ໌ຈາກ " +"Git repository ຂອງແພັກເກດ** ທີ່ຈຳເປັນໃນການ build ແພັກເກດ, ລັນຊຸດການທົດສອບ, build ແລະ " +"ຕິດຕັ້ງເອກະສານ, ແລະ ໄຟລ໌ອື່ນໆ ທີ່ມີປະໂຫຍດຕໍ່ຜູ້ໃຊ້." + +#: ../source/discussions/downstream-packaging.rst:107 +msgid "" +"This point applies only to the files belonging to the package itself. The " +"downstream packaging process, much like Python package managers, will " +"provision the necessary Python dependencies, system tools and external " +"libraries that are needed by your package and its build scripts. However, " +"the files listing these dependencies (for example, ``requirements*.txt`` " +"files) should also be included, to help downstreams determine the needed " +"dependencies, and check for changes in them." +msgstr "" +"ຈຸດນີ້ໝາຍເຖິງສະເພາະໄຟລ໌ທີ່ເປັນຂອງແພັກເກດເອງເທົ່ານັ້ນ. ຂະບວນການຂອງປາຍນ້ຳຈະຈັດການ " +"dependencies ຂອງ Python ແລະ ເຄື່ອງມືຕ່າງໆ ເອງ. ແຕ່ຢ່າງໃດກໍຕາມ, ໄຟລ໌ທີ່ລະບຸ dependencies " +"ເຫຼົ່ານີ້ (ຕົວຢ່າງ: ``requirements*.txt``) ກໍຄວນລວມເຂົ້ານຳ." + +#: ../source/discussions/downstream-packaging.rst:115 +msgid "" +"Some projects have concerns related to Python package managers using source " +"distributions from PyPI. They do not wish to increase their size with files " +"that are not used by these tools, or they do not wish to publish source " +"distributions at all, as they enable a problematic or outright nonfunctional " +"fallback to building the particular project from source. In these cases, a " +"good compromise may be to publish a separate source archive for downstream " +"use elsewhere, for example by attaching it to a GitHub release. " +"Alternatively, large files, such as test data, can be split into separate " +"archives." +msgstr "" +"ບາງໂຄງການອາດຈະກັງວົນເລື່ອງຂະໜາດຂອງໄຟລ໌ໃນ PyPI. ໃນກໍລະນີນີ້, ການແກ້ໄຂທີ່ດີຄືການເຜີຍແຜ່ source " +"archive ແຍກໄວ້ບ່ອນອື່ນ ເຊັ່ນໃນ GitHub release." + +#: ../source/discussions/downstream-packaging.rst:124 +msgid "" +"On the other hand, some projects (NumPy_, for instance) decide to include " +"tests in their installed packages. This has the added advantage of " +"permitting users to run tests after installing them, for example to check " +"for regressions after upgrading a dependency. Yet another approach is to " +"split tests or test data into a separate Python package. Such an approach " +"was taken by the cryptography_ project, with the large test vectors being " +"split to cryptography-vectors_ package." +msgstr "" +"ໃນທາງກົງກັນຂ້າມ, ບາງໂຄງການ (ເຊັ່ນ NumPy_) " +"ຕັດສິນໃຈລວມເອົາການທົດສອບເຂົ້າໃນແພັກເກດທີ່ຕິດຕັ້ງແລ້ວເລີຍ. " +"ນີ້ມີຂໍ້ດີຄືຊ່ວຍໃຫ້ຜູ້ໃຊ້ສາມາດລັນການທົດສອບຫຼັງຈາກຕິດຕັ້ງໄດ້." + +#: ../source/discussions/downstream-packaging.rst:132 +msgid "" +"A good idea is to use your source distribution in the release workflow. For " +"example, the :ref:`build` tool does exactly that — it first builds a source " +"distribution, and then uses it to build a wheel. This ensures that the " +"source distribution actually works, and that it won't accidentally install " +"fewer files than the official wheels." +msgstr "" +"ແນວຄິດທີ່ດີຄືການໃຊ້ source distribution ຂອງທ່ານໃນຂະບວນການ release (workflow). " +"ຕົວຢ່າງ: ເຄື່ອງມື :ref:`build` ຈະ build source distribution ກ່ອນ, ແລ້ວຈຶ່ງໃຊ້ມັນເພື່ອ " +"build wheel. ນີ້ຈະຮັບປະກັນວ່າ source distribution ເຮັດວຽກໄດ້ແທ້." + +#: ../source/discussions/downstream-packaging.rst:138 +msgid "" +"Ideally, also use the source distribution to run tests, build documentation, " +"and so on, or add specific tests to make sure that all necessary files were " +"actually included. Understandably, this requires more effort, so it's fine " +"not do that — downstream packagers will report any missing files promptly." +msgstr "" +"ຖ້າເປັນໄປໄດ້, ໃຫ້ໃຊ້ source distribution ເພື່ອລັນການທົດສອບ ແລະ build ເອກະສານ " +"ເພື່ອໃຫ້ແນ່ໃຈວ່າທຸກໄຟລ໌ທີ່ຈຳເປັນຖືກລວມເຂົ້າແລ້ວ." + +#: ../source/discussions/downstream-packaging.rst:147 +msgid "Do not use the Internet during the build process" +msgstr "ຫ້າມໃຊ້ອິນເຕີເນັດໃນລະຫວ່າງຂະບວນການ build" + +#: ../source/discussions/downstream-packaging.rst:152 +msgid "" +"Downstream builds are frequently done in sandboxed environments that cannot " +"access the Internet. The package sources are unpacked into this environment, " +"and all the necessary dependencies are installed." +msgstr "" +"ການ build ຂອງປາຍນ້ຳມັກຈະເຮັດໃນສະພາບແວດລ້ອມທີ່ຖືກແຍກສ່ວນ (sandboxed) " +"ເຊິ່ງບໍ່ສາມາດເຂົ້າເຖິງອິນເຕີເນັດໄດ້." + +#: ../source/discussions/downstream-packaging.rst:156 +msgid "" +"Even if this is not the case, and assuming that you took sufficient care to " +"properly authenticate downloads, using the Internet is discouraged for a " +"number of reasons:" +msgstr "" +"ເຖິງແມ່ນວ່າຈະເຂົ້າເຖິງອິນເຕີເນັດໄດ້, ແຕ່ການໃຊ້ອິນເຕີເນັດກໍບໍ່ໄດ້ຮັບການແນະນຳຍ້ອນເຫດຜົນຫຼາຍປະການ:" + +#: ../source/discussions/downstream-packaging.rst:160 +msgid "" +"The Internet connection may be unstable (e.g. due to poor reception) or " +"suffer from temporary problems that could cause the process to fail or hang." +msgstr "" +"ການເຊື່ອມຕໍ່ອິນເຕີເນັດອາດຈະບໍ່ສະຖຽນ ຫຼື ມີບັນຫາຊົ່ວຄາວ ເຊິ່ງອາດຈະເຮັດໃຫ້ການ build ຫຼົ້ມເຫຼວ ຫຼື ຄ້າງ." + +#: ../source/discussions/downstream-packaging.rst:164 +msgid "" +"The remote resources may become temporarily or even permanently unavailable, " +"making the build no longer possible. This is especially problematic when " +"someone needs to build an old package version." +msgstr "" +"ຊັບພະຍາກອນຈາກໄລຍະໄກອາດຈະບໍ່ພ້ອມໃຊ້ງານຊົ່ວຄາວ ຫຼື ຖາວອນ, ເຮັດໃຫ້ບໍ່ສາມາດ build ໄດ້ອີກຕໍ່ໄປ. " +"ນີ້ຈະເປັນບັນຫາຫຼາຍເມື່ອຕ້ອງການ build ແພັກເກດເວີຊັນເກົ່າ." + +#: ../source/discussions/downstream-packaging.rst:168 +msgid "The remote resources may change, making the build not reproducible." +msgstr "" +"ຊັບພະຍາກອນຈາກໄລຍະໄກອາດຈະປ່ຽນແປງ, ເຮັດໃຫ້ການ build ບໍ່ໄດ້ຜົນລັບຄືເກົ່າ (not reproducible)." + +#: ../source/discussions/downstream-packaging.rst:170 +msgid "" +"Accessing remote servers poses a privacy issue and a potential security " +"issue, as it exposes information about the system building the package." +msgstr "ການເຂົ້າເຖິງ server ຈາກໄລຍະໄກອາດຈະມີບັນຫາເລື່ອງຄວາມເປັນສ່ວນຕົວ ແລະ ຄວາມປອດໄພ." + +#: ../source/discussions/downstream-packaging.rst:174 +msgid "" +"The user may be using a service with a limited data plan, in which " +"uncontrolled Internet access may result in additional charges or other " +"inconveniences." +msgstr "" +"ຜູ້ໃຊ້ອາດຈະໃຊ້ອິນເຕີເນັດທີ່ມີການຈຳກັດຂໍ້ມູນ, " +"ການເຂົ້າເຖິງອິນເຕີເນັດໂດຍບໍ່ຄວບຄຸມອາດຈະເຮັດໃຫ້ມີຄ່າໃຊ້ຈ່າຍເພີ່ມເຕີມ." + +#: ../source/discussions/downstream-packaging.rst:181 +msgid "" +"If the package is implementing any custom build *backend* actions that use " +"the Internet, for example by automatically downloading vendored dependencies " +"or fetching Git submodules, its source distribution should either include " +"all of these files or allow provisioning them externally, and the Internet " +"must not be used if the files are already present." +msgstr "" +"ຖ້າແພັກເກດມີການ build *backend* ທີ່ຕ້ອງໃຊ້ອິນເຕີເນັດ, source distribution " +"ຄວນລວມເອົາໄຟລ໌ເຫຼົ່ານັ້ນໄວ້ນຳເລີຍ ຫຼື ອະນຸຍາດໃຫ້ຈັດຫາຈາກພາຍນອກໄດ້." + +#: ../source/discussions/downstream-packaging.rst:187 +msgid "" +"Note that this point does not apply to Python dependencies that are " +"specified in the package metadata, and are fetched during the build and " +"installation process by *frontends* (such as :ref:`build` or :ref:`pip`). " +"Downstreams use frontends that use local provisioning for Python " +"dependencies." +msgstr "" +"ໝາຍເຫດ: ຈຸດນີ້ບໍ່ໄດ້ໃຊ້ກັບ Python dependencies ທີ່ລະບຸໄວ້ໃນ metadata ເຊິ່ງຈະຖືກດຶງໂດຍ " +"*frontends* (ເຊັ່ນ :ref:`build` ຫຼື :ref:`pip`)." + +#: ../source/discussions/downstream-packaging.rst:192 +msgid "" +"Ideally, custom build scripts should not even attempt to access the Internet " +"at all, unless explicitly requested to. If any resources are missing and " +"need to be fetched, they should ask the user for permission first. If that " +"is not feasible, the next best thing is to provide an opt-out switch to " +"disable all Internet access. This could be done e.g. by checking whether a " +"``NO_NETWORK`` environment variable is set to a non-empty value." +msgstr "" +"ຕາມທີ່ຄວນຈະເປັນ, build scripts ທີ່ກຳນົດເອງບໍ່ຄວນພະຍາຍາມເຂົ້າເຖິງອິນເຕີເນັດເລີຍ " +"ຍົກເວັ້ນແຕ່ມີການຮ້ອງຂໍຢ່າງຊັດເຈນ. ທາງເລືອກທີ່ດີຄືການມີປຸ່ມປິດ (switch) " +"ເພື່ອປິດການເຂົ້າເຖິງອິນເຕີເນັດທັງໝົດ." + +#: ../source/discussions/downstream-packaging.rst:199 +msgid "" +"Since downstreams frequently also run tests and build documentation, the " +"above should ideally extend to these processes as well." +msgstr "" +"ເນື່ອງຈາກປາຍນ້ຳມັກຈະລັນການທົດສອບ ແລະ build ເອກະສານນຳ, " +"ສິ່ງທີ່ກ່າວມາຂ້າງເທິງນັ້ນກໍຄວນໃຊ້ກັບຂະບວນການເຫຼົ່ານີ້ຄືກັນ." + +#: ../source/discussions/downstream-packaging.rst:202 +msgid "" +"Please also remember that if you are fetching remote resources, you " +"absolutely must *verify their authenticity* (usually against a hash), to " +"protect against the file being substituted by a malicious party." +msgstr "" +"ກະລຸນາຈື່ໄວ້ວ່າ ຖ້າທ່ານມີການດຶງຊັບພະຍາກອນຈາກໄລຍະໄກ, ທ່ານຕ້ອງ *ກວດສອບຄວາມຖືກຕ້ອງ* " +"(ປົກກະຕິແລ້ວແມ່ນໃຊ້ hash) ເພື່ອປ້ອງກັນການຖືກປ່ຽນແທນດ້ວຍໄຟລ໌ທີ່ເປັນອັນຕະລາຍ." + +#: ../source/discussions/downstream-packaging.rst:210 +msgid "Support building against system dependencies" +msgstr "ສະໜັບສະໜູນການ build ໂດຍໃຊ້ dependencies ຂອງລະບົບ" + +#: ../source/discussions/downstream-packaging.rst:215 +msgid "" +"Some Python projects have non-Python dependencies, such as libraries written " +"in C or C++. Trying to use the system versions of these dependencies in " +"upstream packaging may cause a number of problems for end users:" +msgstr "" +"ບາງໂຄງການ Python ມີ dependencies ທີ່ບໍ່ແມ່ນ Python ເຊັ່ນ libraries ທີ່ຂຽນດ້ວຍ C ຫຼື C++. " +"ການພະຍາຍາມໃຊ້ເວີຊັນຂອງລະບົບໃນຕົ້ນນ້ຳອາດຈະເຮັດໃຫ້ເກີດບັນຫາຫຼາຍຢ່າງສຳລັບຜູ້ໃຊ້:" + +#: ../source/discussions/downstream-packaging.rst:219 +msgid "" +"The published wheels require a binary-compatible version of the used library " +"to be present on the user's system. If the library is missing or an " +"incompatible version is installed, the Python package may fail with errors " +"that are not clear to inexperienced users, or even misbehave at runtime." +msgstr "" +"Wheels ທີ່ເຜີຍແຜ່ຕ້ອງການ library ທີ່ເຂົ້າກັນໄດ້ໃນລະບົບຂອງຜູ້ໃຊ້. ຖ້າບໍ່ມີ ຫຼື ເວີຊັນບໍ່ເຂົ້າກັນ, ແພັກເກດ " +"Python ອາດຈະຫຼົ້ມເຫຼວ." + +#: ../source/discussions/downstream-packaging.rst:224 +msgid "" +"Building from a source distribution requires a source-compatible version of " +"the dependency to be present, along with its development headers and other " +"auxiliary files that some systems package separately from the library itself." +msgstr "" +"ການ build ຈາກ source distribution ຕ້ອງການເວີຊັນທີ່ເຂົ້າກັນໄດ້ ພ້ອມທັງ development " +"headers ແລະ ໄຟລ໌ເສີມອື່ນໆ." + +#: ../source/discussions/downstream-packaging.rst:229 +msgid "" +"Even for an experienced user, installing a compatible dependency version may " +"be very hard. For example, the used Linux distribution may not provide the " +"required version, or some other package may require an incompatible version." +msgstr "ເຖິງແມ່ນວ່າຈະເປັນຜູ້ໃຊ້ທີ່ມີປະສົບການ, ການຕິດຕັ້ງ dependency ໃຫ້ເຂົ້າກັນໄດ້ກໍອາດຈະຍາກຫຼາຍ." + +#: ../source/discussions/downstream-packaging.rst:234 +msgid "" +"The linkage between the Python package and its system dependency is not " +"recorded by the packaging system. The next system update may upgrade the " +"library to a newer version that breaks binary compatibility with the Python " +"package, and requires user intervention to fix." +msgstr "" +"ຄວາມກ່ຽວພັນລະຫວ່າງແພັກເກດ Python ແລະ system dependency " +"ບໍ່ໄດ້ຖືກບັນທຶກໄວ້ໂດຍລະບົບການຈັດການແພັກເກດ." + +#: ../source/discussions/downstream-packaging.rst:239 +msgid "" +"For these reasons, you may reasonably decide to either statically link your " +"dependencies, or to provide local copies in the installed package. You may " +"also vendor the dependency in your source distribution. Sometimes these " +"dependencies are also repackaged on PyPI, and can be declared as project " +"dependencies like any other Python package." +msgstr "" +"ດ້ວຍເຫດຜົນເຫຼົ່ານີ້, ທ່ານອາດຈະຕັດສິນໃຈໃຊ້ການ link ແບບ static ຫຼື ລວມ library " +"ໄວ້ໃນແພັກເກດເລີຍ (vendor)." + +#: ../source/discussions/downstream-packaging.rst:245 +msgid "" +"However, none of these issues apply to downstream packaging, and downstreams " +"have good reasons to prefer dynamically linking to system dependencies. In " +"particular:" +msgstr "" +"ແນວໃດກໍຕາມ, ບັນຫາເຫຼົ່ານີ້ບໍ່ໄດ້ເກີດຂຶ້ນກັບການເຮັດແພັກເກດປາຍນ້ຳ, ແລະ " +"ປາຍນ້ຳມີເຫດຜົນທີ່ດີກວ່າໃນການເລືອກ link ແບບ dynamic ກັບ dependencies ຂອງລະບົບ:" + +#: ../source/discussions/downstream-packaging.rst:249 +msgid "" +"In many cases, reliably sharing dynamic dependencies between components is a " +"large part of the *purpose* of a downstream packaging ecosystem. Helping to " +"support that makes it easier for users of those systems to access upstream " +"projects in their preferred format." +msgstr "" +"ໃນຫຼາຍກໍລະນີ, ການແບ່ງປັນ dependencies ແບບ dynamic ແມ່ນສ່ວນໜຶ່ງຂອງ *ຈຸດປະສົງ* " +"ຂອງລະບົບນິເວດປາຍນ້ຳ." + +#: ../source/discussions/downstream-packaging.rst:253 +msgid "" +"Static linking and vendoring obscures the use of external dependencies, " +"making source auditing harder." +msgstr "" +"ການ link ແບບ static ແລະ ການເຮັດ vendor ເຮັດໃຫ້ການກວດສອບ (audit) source code " +"ຍາກຂຶ້ນ." + +#: ../source/discussions/downstream-packaging.rst:256 +msgid "" +"Dynamic linking makes it possible to quickly and systematically replace the " +"used libraries across an entire downstream packaging ecosystem, which can be " +"particularly important when they turn out to contain a security " +"vulnerability or critical bug." +msgstr "" +"ການ link ແບບ dynamic ຊ່ວຍໃຫ້ສາມາດປ່ຽນແທນ library ໄດ້ຢ່າງໄວວາໃນທົ່ວລະບົບ " +"ເມື່ອພົບຊ່ອງໂຫວ່ດ້ານຄວາມປອດໄພ." + +#: ../source/discussions/downstream-packaging.rst:260 +msgid "" +"Using system dependencies makes the package benefit from downstream " +"customization that can improve the user experience on a particular platform, " +"without the downstream maintainers having to consistently patch the " +"dependencies vendored in different packages. This can include compatibility " +"improvements and security hardening." +msgstr "ການໃຊ້ dependencies ຂອງລະບົບຊ່ວຍໃຫ້ແພັກເກດໄດ້ຮັບຜົນປະໂຫຍດຈາກການປັບແຕ່ງຂອງປາຍນ້ຳ." + +#: ../source/discussions/downstream-packaging.rst:266 +msgid "" +"Static linking and vendoring can result in multiple different versions of " +"the same library being loaded in the same process (for example, attempting " +"to import two Python packages that link to different versions of the same " +"library). This sometimes works without incident, but it can also lead to " +"anything from library loading errors, to subtle runtime bugs, to " +"catastrophic failures (like suddenly crashing and losing data)." +msgstr "" +"ການ link ແບບ static ແລະ ການເຮັດ vendor ອາດຈະເຮັດໃຫ້ມີການໂຫຼດ library " +"ດຽວກັນຫຼາຍເວີຊັນໃນ process ດຽວ ເຊິ່ງອາດຈະເຮັດໃຫ້ໂປຣແກຣມ crash ໄດ້." + +#: ../source/discussions/downstream-packaging.rst:273 +msgid "" +"Last but not least, static linking and vendoring results in duplication, and " +"may increase the use of both disk space and memory." +msgstr "" +"ສຸດທ້າຍ, ການ link ແບບ static ແລະ ການເຮັດ vendor ເຮັດໃຫ້ເກີດຄວາມຊ້ຳຊ້ອນ ແລະ " +"ເພີ່ມການໃຊ້ເນື້ອທີ່ໃນ disk ແລະ memory." + +#: ../source/discussions/downstream-packaging.rst:279 +msgid "" +"A good compromise between the needs of both parties is to provide a switch " +"between using vendored and system dependencies. Ideally, if the package has " +"multiple vendored dependencies, it should provide both individual switches " +"for each dependency, and a general switch to control the default for them, " +"e.g. via a ``USE_SYSTEM_DEPS`` environment variable." +msgstr "" +"ການແກ້ໄຂທີ່ດີຄືການມີປຸ່ມປິດ (switch) ເພື່ອເລືອກລະຫວ່າງການໃຊ້ vendored ແລະ system " +"dependencies ເຊັ່ນການໃຊ້ environment variable ``USE_SYSTEM_DEPS``." + +#: ../source/discussions/downstream-packaging.rst:285 +msgid "" +"If the user requests using system dependencies, and a particular dependency " +"is either missing or incompatible, the build should fail with an explanatory " +"message rather than fall back to a vendored version. This gives the packager " +"the opportunity to notice their mistake and a chance to consciously decide " +"how to solve it." +msgstr "" +"ຖ້າຜູ້ໃຊ້ຮ້ອງຂໍການໃຊ້ dependencies ຂອງລະບົບ ແຕ່ມັນບໍ່ມີ ຫຼື ບໍ່ເຂົ້າກັນ, ການ build " +"ຄວນຈະຫຼົ້ມເຫຼວພ້ອມແຈ້ງຂໍ້ຄວາມອະທິບາຍ." + +#: ../source/discussions/downstream-packaging.rst:291 +msgid "" +"It is reasonable for upstream projects to leave *testing* of building with " +"system dependencies to their downstream repackagers. The goal of these " +"guidelines is to facilitate more effective collaboration between upstream " +"projects and downstream repackagers, not to suggest upstream projects take " +"on tasks that downstream repackagers are better equipped to handle." +msgstr "" +"ມັນເປັນເລື່ອງສົມຄວນທີ່ຕົ້ນນ້ຳຈະໃຫ້ການ *ທົດສອບ* ການ build ດ້ວຍ dependencies ຂອງລະບົບ " +"ເປັນໜ້າທີ່ຂອງປາຍນ້ຳ." + +#: ../source/discussions/downstream-packaging.rst:300 +msgid "Support downstream testing" +msgstr "ສະໜັບສະໜູນການທົດສອບຂອງປາຍນ້ຳ" + +#: ../source/discussions/downstream-packaging.rst:305 +msgid "" +"A variety of downstream projects run some degree of testing on the packaged " +"Python projects. Depending on the particular case, this can range from " +"minimal smoke testing to comprehensive runs of the complete test suite. " +"There can be various reasons for doing this, for example:" +msgstr "ໂຄງການປາຍນ້ຳຫຼາຍແຫ່ງມີການລັນການທົດສອບແພັກເກດ Python. ເຫດຜົນໃນການເຮັດແບບນີ້ລວມມີ:" + +#: ../source/discussions/downstream-packaging.rst:310 +msgid "Verifying that the downstream packaging did not introduce any bugs." +msgstr "ເພື່ອກວດສອບວ່າການເຮັດແພັກເກດຂອງປາຍນ້ຳບໍ່ໄດ້ສ້າງ bug ໃໝ່." + +#: ../source/discussions/downstream-packaging.rst:312 +msgid "" +"Testing on additional platforms that are not covered by upstream testing." +msgstr "ເພື່ອທົດສອບໃນແພລັດຟອມເພີ່ມເຕີມທີ່ຕົ້ນນ້ຳບໍ່ໄດ້ທົດສອບ." + +#: ../source/discussions/downstream-packaging.rst:314 +msgid "" +"Finding subtle bugs that can only be reproduced with particular hardware, " +"system package versions, and so on." +msgstr "ເພື່ອຊອກຫາ bug ທີ່ເກີດຂຶ້ນສະເພາະກັບຮາດແວ ຫຼື ເວີຊັນຂອງລະບົບໃດໜຶ່ງ." + +#: ../source/discussions/downstream-packaging.rst:317 +msgid "" +"Testing the released package against newer (or older) dependency versions " +"than the ones present during upstream release testing." +msgstr "ເພື່ອທົດສອບແພັກເກດກັບ dependency ເວີຊັນໃໝ່ (ຫຼື ເກົ່າ) ກວ່າທີ່ໃຊ້ໃນຕອນທົດສອບຕົ້ນນ້ຳ." + +#: ../source/discussions/downstream-packaging.rst:320 +msgid "" +"Testing the package in an environment closely resembling the production " +"setup. This can detect issues caused by non-trivial interactions between " +"different installed packages, including packages that are not dependencies " +"of your package, but nevertheless can cause issues." +msgstr "ເພື່ອທົດສອບແພັກເກດໃນສະພາບແວດລ້ອມທີ່ໃກ້ຄຽງກັບການໃຊ້ງານຈິງ." + +#: ../source/discussions/downstream-packaging.rst:325 +msgid "" +"Testing the released package against newer Python versions (including newer " +"point releases), or less tested Python implementations such as PyPy." +msgstr "ເພື່ອທົດສອບແພັກເກດກັບ Python ເວີຊັນໃໝ່ໆ ຫຼື Python ປະເພດອື່ນ ເຊັ່ນ PyPy." + +#: ../source/discussions/downstream-packaging.rst:328 +msgid "" +"Admittedly, sometimes downstream testing may yield false positives or bug " +"reports about scenarios the upstream project is not interested in " +"supporting. However, perhaps even more often it does provide early notice of " +"problems, or find non-trivial bugs that would otherwise cause issues for the " +"upstream project's users. While mistakes do happen, the majority of " +"downstream packagers are doing their best to double-check their results, and " +"help upstream maintainers triage and fix the bugs that they reported." +msgstr "" +"ເຖິງວ່າບາງຄັ້ງການທົດສອບຂອງປາຍນ້ຳອາດຈະໄດ້ຜົນທີ່ຄາດເຄື່ອນ, ແຕ່ສ່ວນໃຫຍ່ແລ້ວມັນຊ່ວຍໃຫ້ພົບບັນຫາໄດ້ໄວຂຶ້ນ." + +#: ../source/discussions/downstream-packaging.rst:339 +msgid "" +"There are a number of things that upstream projects can do to help " +"downstream repackagers test their packages efficiently and effectively, " +"including some of the suggestions already mentioned above. These are " +"typically improvements that make the test suite more reliable and easier to " +"use for everyone, not just downstream packagers. Some specific suggestions " +"are:" +msgstr "ມີຫຼາຍຢ່າງທີ່ຕົ້ນນ້ຳສາມາດເຮັດໄດ້ເພື່ອຊ່ວຍໃຫ້ປາຍນ້ຳທົດສອບໄດ້ງ່າຍຂຶ້ນ:" + +#: ../source/discussions/downstream-packaging.rst:345 +msgid "" +"Include the test files and fixtures in the source distribution, or make it " +"possible to easily download them separately." +msgstr "" +"ລວມໄຟລ໌ທົດສອບ ແລະ fixtures ໄວ້ໃນ source distribution ຫຼື ເຮັດໃຫ້ດາວໂຫຼດແຍກໄດ້ງ່າຍ." + +#: ../source/discussions/downstream-packaging.rst:348 +msgid "" +"Do not write to the package directories during testing. Downstream test " +"setups sometimes run tests on top of the installed package, and " +"modifications performed during testing and temporary test files may end up " +"being part of the installed package!" +msgstr "ຢ່າຂຽນຂໍ້ມູນລົງໃນໄດເຣັກທໍຣີຂອງແພັກເກດໃນລະຫວ່າງການທົດສອບ." + +#: ../source/discussions/downstream-packaging.rst:353 +msgid "" +"Make the test suite work offline. Mock network interactions, using packages " +"such as responses_ or vcrpy_. If that is not possible, make it possible to " +"easily disable the tests using Internet access, e.g. via a pytest_ marker. " +"Use pytest-socket_ to verify that your tests work offline. This often makes " +"your own test workflows faster and more reliable as well." +msgstr "ເຮັດໃຫ້ຊຸດການທົດສອບເຮັດວຽກແບບ offline ໄດ້. ໃຊ້ການ mock ເຄືອຂ່າຍ." + +#: ../source/discussions/downstream-packaging.rst:359 +msgid "" +"Make your tests work without a specialized setup, or perform the necessary " +"setup as part of test fixtures. Do not ever assume that you can connect to " +"system services such as databases — in an extreme case, you could crash a " +"production service!" +msgstr "" +"ເຮັດໃຫ້ການທົດສອບເຮັດວຽກໄດ້ໂດຍບໍ່ຕ້ອງມີການຕັ້ງຄ່າພິເສດ. " +"ຢ່າຄາດການວ່າຈະສາມາດເຊື່ອມຕໍ່ກັບບໍລິການຂອງລະບົບ ເຊັ່ນ ຖານຂໍ້ມູນ ໄດ້ສະເໝີ." + +#: ../source/discussions/downstream-packaging.rst:364 +msgid "" +"If your package has optional dependencies, make their tests optional as " +"well. Either skip them if the needed packages are not installed, or add " +"markers to make deselecting easy." +msgstr "ຖ້າແພັກເກດມີ optional dependencies, ໃຫ້ການທົດສອບຂອງພວກມັນເປັນທາງເລືອກຄືກັນ." + +#: ../source/discussions/downstream-packaging.rst:368 +msgid "" +"More generally, add markers to tests with special requirements. These can " +"include e.g. significant space usage, significant memory usage, long " +"runtime, incompatibility with parallel testing." +msgstr "ເພີ່ມ markers ໃຫ້ກັບການທົດສອບທີ່ມີຄວາມຕ້ອງການພິເສດ ເຊັ່ນ ໃຊ້ memory ຫຼາຍ ຫຼື ໃຊ້ເວລາດົນ." + +#: ../source/discussions/downstream-packaging.rst:372 +msgid "" +"Do not assume that the test suite will be run with ``-Werror``. Downstreams " +"often need to disable that, as it causes false positives, e.g. due to newer " +"dependency versions. Assert for warnings using ``pytest.warns()`` rather " +"than ``pytest.raises()``!" +msgstr "ຢ່າຄາດການວ່າຊຸດການທົດສອບຈະຖືກລັນດ້ວຍ ``-Werror``." + +#: ../source/discussions/downstream-packaging.rst:377 +msgid "" +"Aim to make your test suite reliable and reproducible. Avoid flaky tests. " +"Avoid depending on specific platform details, don't rely on exact results of " +"floating-point computation, or timing of operations, and so on. Fuzzing has " +"its advantages, but you want to have static test cases for completeness as " +"well." +msgstr "ພະຍາຍາມເຮັດໃຫ້ຊຸດການທົດສອບມີຄວາມໜ້າເຊື່ອຖື ແລະ ໃຫ້ຜົນຄືເກົ່າທຸກຄັ້ງ." + +#: ../source/discussions/downstream-packaging.rst:383 +msgid "" +"Split tests by their purpose, and make it easy to skip categories that are " +"irrelevant or problematic. Since the primary purpose of downstream testing " +"is to ensure that the package itself works, downstreams are not generally " +"interested in tasks such as checking code coverage, code formatting, " +"typechecking or running benchmarks. These tests can fail as dependencies are " +"upgraded or the system is under load, without actually affecting the package " +"itself." +msgstr "ແຍກການທົດສອບຕາມຈຸດປະສົງ." + +#: ../source/discussions/downstream-packaging.rst:390 +msgid "" +"If your test suite takes significant time to run, support testing in " +"parallel. Downstreams often maintain a large number of packages, and testing " +"them all takes a lot of time. Using pytest-xdist_ can help them avoid " +"bottlenecks." +msgstr "ຖ້າການທົດສອບໃຊ້ເວລານານ, ຄວນຮອງຮັບການທົດສອບແບບຂະໜານ (parallel)." + +#: ../source/discussions/downstream-packaging.rst:395 +msgid "" +"Ideally, support running your test suite via ``pytest``. pytest_ has many " +"command-line arguments that are truly helpful to downstreams, such as the " +"ability to conveniently deselect tests, rerun flaky tests (via pytest-" +"rerunfailures_), add a timeout to prevent tests from hanging (via pytest-" +"timeout_) or run tests in parallel (via pytest-xdist_). Note that test " +"suites don't need to be *written* with ``pytest`` to be *executed* with " +"``pytest``: ``pytest`` is able to find and execute almost all test cases " +"that are compatible with the standard library's ``unittest`` test discovery." +msgstr "ຕາມທີ່ຄວນຈະເປັນ, ຄວນຮອງຮັບການລັນການທົດສອບຜ່ານ ``pytest``." + +#: ../source/discussions/downstream-packaging.rst:409 +msgid "Aim for stable releases" +msgstr "ຕັ້ງເປົ້າໝາຍສຳລັບການ release ທີ່ສະຖຽນ" + +#: ../source/discussions/downstream-packaging.rst:414 +msgid "" +"Many downstreams provide stable release channels in addition to the main " +"package streams. The goal of these channels is to provide more conservative " +"upgrades to users with higher stability needs. These users often prefer to " +"trade having the newest features available for lower risk of issues." +msgstr "ປາຍນ້ຳຫຼາຍແຫ່ງມີຊ່ອງທາງ stable release." + +#: ../source/discussions/downstream-packaging.rst:419 +msgid "" +"While the exact policies differ, an important criterion for including a new " +"package version in a stable release channel is for it to be available in " +"testing for some time already, and have no known major regressions. For " +"example, in Gentoo Linux a package is usually marked stable after being " +"available in testing for a month, and being tested against the versions of " +"its dependencies that are marked stable at the time." +msgstr "" +"ເງື່ອນໄຂສຳຄັນໃນການເອົາແພັກເກດເຂົ້າ stable channel ແມ່ນມັນຕ້ອງຜ່ານການທົດສອບມາໄລຍະໜຶ່ງ." + +#: ../source/discussions/downstream-packaging.rst:426 +msgid "" +"However, there are circumstances which demand more prompt action. For " +"example, if a security vulnerability or a major bug is found in the version " +"that is currently available in the stable channel, the downstream is facing " +"a need to resolve it. In this case, they need to consider various options, " +"such as:" +msgstr "" +"ຢ່າງໃດກໍຕາມ, ບາງກໍລະນີອາດຈະຕ້ອງການການແກ້ໄຂຢ່າງຮີບດ່ວນ ເຊັ່ນ ເມື່ອພົບຊ່ອງໂຫວ່ດ້ານຄວາມປອດໄພ." + +#: ../source/discussions/downstream-packaging.rst:431 +msgid "putting a new version in the stable channel early," +msgstr "ການເອົາເວີຊັນໃໝ່ເຂົ້າ stable channel ໄວກວ່າກຳນົດ," + +#: ../source/discussions/downstream-packaging.rst:433 +msgid "adding patches to the version currently published," +msgstr "ການເພີ່ມ patch ໃນເວີຊັນທີ່ເຜີຍແຜ່ຢູ່ໃນປັດຈຸບັນ," + +#: ../source/discussions/downstream-packaging.rst:435 +msgid "or even downgrading the stable channel to an earlier release." +msgstr "ຫຼື ແມ່ນແຕ່ການ downgrade ກັບໄປໃຊ້ເວີຊັນກ່ອນໜ້າ." + +#: ../source/discussions/downstream-packaging.rst:437 +msgid "" +"Each of these options involves certain risks and a certain amount of work, " +"and packagers needs to weigh them to determine the course of action." +msgstr "ແຕ່ລະທາງເລືອກມີຄວາມສ່ຽງ ແລະ ປະລິມານວຽກທີ່ແຕກຕ່າງກັນ." + +#: ../source/discussions/downstream-packaging.rst:443 +msgid "" +"There are some things that upstreams can do to tailor their workflow to " +"stable release channels. These actions often are beneficial to the package's " +"users as well. Some specific suggestions are:" +msgstr "ມີບາງຢ່າງທີ່ຕົ້ນນ້ຳສາມາດເຮັດໄດ້ເພື່ອຊ່ວຍໃນການ release ແບບ stable:" + +#: ../source/discussions/downstream-packaging.rst:447 +msgid "" +"Adjust the release frequency to the rate of code changes. Packages that are " +"released rarely often bring significant changes with every release, and a " +"higher risk of accidental regressions." +msgstr "ປັບຄວາມຖີ່ຂອງການ release ໃຫ້ເໝາະສົມ." + +#: ../source/discussions/downstream-packaging.rst:451 +msgid "" +"Avoid mixing bug fixes and new features, if possible. In particular, if " +"there are known bug fixes merged already, consider making a new release " +"before merging feature branches." +msgstr "ຫຼີກເວັ້ນການລວມ bug fixes ເຂົ້າກັບ features ໃໝ່." + +#: ../source/discussions/downstream-packaging.rst:455 +msgid "" +"Consider making prereleases after major changes, to provide more testing " +"opportunities for users and downstreams willing to opt-in." +msgstr "ພິຈາລະນາການເຮັດ prereleases ຫຼັງຈາກມີການປ່ຽນແປງຄັ້ງໃຫຍ່." + +#: ../source/discussions/downstream-packaging.rst:458 +msgid "" +"If your project is subject to very intense development, consider splitting " +"one or more branches that include a more conservative subset of commits, and " +"are released separately. For example, Django_ currently maintains three " +"release branches in addition to main." +msgstr "ຖ້າໂຄງການມີການພັດທະນາຢ່າງຕໍ່ເນື່ອງ, ໃຫ້ພິຈາລະນາການແຍກ branches." + +#: ../source/discussions/downstream-packaging.rst:463 +msgid "" +"Even if you don't wish to maintain additional branches permanently, consider " +"making additional patch releases with minimal changes to the previous " +"version, especially when a security vulnerability is discovered." +msgstr "" +"ພິຈາລະນາການເຮັດ patch releases ທີ່ມີການປ່ຽນແປງໜ້ອຍທີ່ສຸດ ເມື່ອພົບຊ່ອງໂຫວ່ດ້ານຄວາມປອດໄພ." + +#: ../source/discussions/downstream-packaging.rst:467 +msgid "" +"Split your changes into focused commits that address one problem at a time, " +"to make it easier to cherry-pick changes to earlier releases when necessary." +msgstr "ແຍກ commits ໃຫ້ຊັດເຈນ ເພື່ອໃຫ້ງ່າຍໃນການ cherry-pick." + +#: ../source/discussions/index.rst:4 +msgid "" +"**Discussions** are focused on providing comprehensive information about a " +"specific topic. If you're just trying to get stuff done, see :doc:`/guides/" +"index`." +msgstr "" +"**ການສົນທະນາ ແລະ ອະທິບາຍ (Discussions)** ແມ່ນເນັ້ນໃສ່ການໃຫ້ຂໍ້ມູນທີ່ຄົບຖ້ວນກ່ຽວກັບຫົວຂໍ້ໃດໜຶ່ງ. " +"ຖ້າທ່ານຕ້ອງການພຽງແຕ່ເຮັດວຽກໃຫ້ສຳເລັດ, ໃຫ້ເບິ່ງ :doc:`/guides/index`." + +#: ../source/discussions/install-requires-vs-requirements.rst:5 +msgid "install_requires vs requirements files" +msgstr "install_requires ທຽບກັບໄຟລ໌ requirements" + +#: ../source/discussions/install-requires-vs-requirements.rst:9 +msgid "install_requires" +msgstr "" + +#: ../source/discussions/install-requires-vs-requirements.rst:11 +msgid "" +"``install_requires`` is a :ref:`setuptools` :file:`setup.py` keyword that " +"should be used to specify what a project **minimally** needs to run " +"correctly. When the project is installed by :ref:`pip`, this is the " +"specification that is used to install its dependencies." +msgstr "" +"``install_requires`` ແມ່ນ keyword ໃນ :file:`setup.py` ຂອງ :ref:`setuptools` " +"ທີ່ຄວນໃຊ້ເພື່ອລະບຸສິ່ງທີ່ໂຄງການຕ້ອງການ **ຂັ້ນຕ່ຳ** ເພື່ອໃຫ້ເຮັດວຽກໄດ້ຢ່າງຖືກຕ້ອງ. " +"ເມື່ອໂຄງການຖືກຕິດຕັ້ງໂດຍ :ref:`pip`, ນີ້ຄືຂໍ້ກຳນົດທີ່ຈະຖືກໃຊ້ເພື່ອຕິດຕັ້ງ dependencies ຂອງມັນ." + +#: ../source/discussions/install-requires-vs-requirements.rst:16 +msgid "" +"For example, if the project requires A and B, your ``install_requires`` " +"would be like so:" +msgstr "ຕົວຢ່າງ: ຖ້າໂຄງການຕ້ອງການ A ແລະ B, ``install_requires`` ຂອງທ່ານຈະເປັນແບບນີ້:" + +#: ../source/discussions/install-requires-vs-requirements.rst:26 +msgid "" +"Additionally, it's best practice to indicate any known lower or upper bounds." +msgstr "ນອກຈາກນັ້ນ, ວິທີການທີ່ດີທີ່ສຸດຄືການລະບຸຂອບເຂດຕ່ຳສຸດ ຫຼື ສູງສຸດທີ່ຮູ້ຈັກ." + +#: ../source/discussions/install-requires-vs-requirements.rst:28 +msgid "" +"For example, it may be known, that your project requires at least v1 of 'A', " +"and v2 of 'B', so it would be like so:" +msgstr "ຕົວຢ່າງ: ຖ້າຮູ້ວ່າໂຄງການຕ້ອງການ 'A' ຢ່າງໜ້ອຍ v1, ແລະ 'B' v2, ມັນຈະເປັນແບບນີ້:" + +#: ../source/discussions/install-requires-vs-requirements.rst:38 +msgid "" +"It may also be known that project 'A' introduced a change in its v2 that " +"breaks the compatibility of your project with v2 of 'A' and later, so it " +"makes sense to not allow v2:" +msgstr "ຖ້າຮູ້ວ່າ 'A' v2 ຈະເຮັດໃຫ້ໂຄງການມີບັນຫາ, ກໍບໍ່ຄວນອະນຸຍາດໃຫ້ໃຊ້ v2:" + +#: ../source/discussions/install-requires-vs-requirements.rst:49 +msgid "" +"It is not considered best practice to use ``install_requires`` to pin " +"dependencies to specific versions, or to specify sub-dependencies (i.e. " +"dependencies of your dependencies). This is overly-restrictive, and " +"prevents the user from gaining the benefit of dependency upgrades." +msgstr "" +"ບໍ່ແນະນຳໃຫ້ໃຊ້ ``install_requires`` ເພື່ອລັອກເວີຊັນ (pin) ທີ່ແນ່ນອນເກີນໄປ ຫຼື ລະບຸ " +"dependencies ຂອງ dependencies ອີກເທື່ອໜຶ່ງ." + +#: ../source/discussions/install-requires-vs-requirements.rst:54 +msgid "" +"Lastly, it's important to understand that ``install_requires`` is a listing " +"of \"Abstract\" requirements, i.e just names and version restrictions that " +"don't determine where the dependencies will be fulfilled from (i.e. from " +"what index or source). The where (i.e. how they are to be made " +"\"Concrete\") is to be determined at install time using :ref:`pip` options. " +"[1]_" +msgstr "" +"ສຸດທ້າຍ, ສິ່ງສຳຄັນທີ່ຕ້ອງເຂົ້າໃຈຄື ``install_requires`` ແມ່ນການລະບຸຄວາມຕ້ອງການແບບ " +"\"ນາມມະທຳ (Abstract)\" ເຊິ່ງລະບຸພຽງແຕ່ຊື່ ແລະ ຂໍ້ຈຳກັດຂອງເວີຊັນເທົ່ານັ້ນ." + +#: ../source/discussions/install-requires-vs-requirements.rst:62 +#: ../source/tutorials/installing-packages.rst:463 +msgid "Requirements files" +msgstr "ໄຟລ໌ Requirements" + +#: ../source/discussions/install-requires-vs-requirements.rst:64 +msgid "" +":ref:`Requirements Files ` described most simply, " +"are just a list of :ref:`pip:pip install` arguments placed into a file." +msgstr "" +":ref:`Requirements Files ` ຖ້າອະທິບາຍແບບງ່າຍທີ່ສຸດ, " +"ກໍຄືລາຍການຂອງ arguments ສຳລັບ :ref:`pip:pip install` ທີ່ຖືກຈັດໃສ່ໃນໄຟລ໌." + +#: ../source/discussions/install-requires-vs-requirements.rst:67 +msgid "" +"Whereas ``install_requires`` defines the dependencies for a single " +"project, :ref:`Requirements Files ` are often used " +"to define the requirements for a complete Python environment." +msgstr "" +"ໃນຂະນະທີ່ ``install_requires`` ກຳນົດ dependencies " +"ສຳລັບໂຄງການດຽວ, :ref:`Requirements Files ` " +"ມັກຈະຖືກໃຊ້ເພື່ອ ກຳນົດຄວາມຕ້ອງການສຳລັບສະພາບແວດລ້ອມ Python ທັງໝົດ." + +#: ../source/discussions/install-requires-vs-requirements.rst:71 +msgid "" +"Whereas ``install_requires`` requirements are minimal, requirements files " +"often contain an exhaustive listing of pinned versions for the purpose of " +"achieving :ref:`repeatable installations ` of a complete " +"environment." +msgstr "" +"ໃນຂະນະທີ່ ``install_requires`` ລະບຸຄວາມຕ້ອງການຂັ້ນຕ່ຳ, ໄຟລ໌ requirements " +"ມັກຈະບັນຈຸລາຍການເວີຊັນທີ່ລະບຸໄວ້ຢ່າງແນ່ນອນເພື່ອໃຫ້ສາມາດຕິດຕັ້ງຊ້ຳໄດ້ (repeatable)." + +#: ../source/discussions/install-requires-vs-requirements.rst:76 +msgid "" +"Whereas ``install_requires`` requirements are \"Abstract\", i.e. not " +"associated with any particular index, requirements files often contain pip " +"options like ``--index-url`` or ``--find-links`` to make requirements " +"\"Concrete\", i.e. associated with a particular index or directory of " +"packages. [1]_" +msgstr "" +"ໃນຂະນະທີ່ ``install_requires`` ເປັນແບບ \"Abstract\", ໄຟລ໌ requirements " +"ມັກຈະມີຕົວເລືອກຂອງ pip ເພື່ອເຮັດໃຫ້ຄວາມຕ້ອງການນັ້ນເປັນແບບ \"ຮູບປະທຳ (Concrete)\"." + +#: ../source/discussions/install-requires-vs-requirements.rst:82 +msgid "" +"Whereas ``install_requires`` metadata is automatically analyzed by pip " +"during an install, requirements files are not, and only are used when a user " +"specifically installs them using ``python -m pip install -r``." +msgstr "" +"ໃນຂະນະທີ່ metadata ຂອງ ``install_requires`` ຈະຖືກວິເຄາະໂດຍອັດຕະໂນມັດ, ໄຟລ໌ " +"requirements ຈະຖືກໃຊ້ກໍຕໍ່ເມື່ອຜູ້ໃຊ້ລະບຸຄຳສັ່ງຕິດຕັ້ງໂດຍກົງເທົ່ານັ້ນ." + +#: ../source/discussions/install-requires-vs-requirements.rst:88 +msgid "" +"For more on \"Abstract\" vs \"Concrete\" requirements, see https://" +"caremad.io/posts/2013/07/setup-vs-requirement/." +msgstr "" +"ສຳລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບຄວາມຕ້ອງການແບບ \"Abstract\" ແລະ \"Concrete\", ເບິ່ງ https://" +"caremad.io/posts/2013/07/setup-vs-requirement/." + +#: ../source/discussions/package-formats.rst:5 +msgid "Package Formats" +msgstr "ຮູບແບບຂອງແພັກເກດ (Package Formats)" + +#: ../source/discussions/package-formats.rst:7 +msgid "" +"This page discusses the file formats that are used to distribute Python " +"packages and the differences between them." +msgstr "" +"ໜ້ານີ້ຈະປຶກສາຫາລືກ່ຽວກັບຮູບແບບໄຟລ໌ທີ່ໃຊ້ໃນການແຈກຢາຍແພັກເກດ Python ແລະ " +"ຄວາມແຕກຕ່າງລະຫວ່າງພວກມັນ." + +#: ../source/discussions/package-formats.rst:10 +msgid "" +"You will find files in two formats on package indices such as PyPI_: " +"**source distributions**, or **sdists** for short, and **binary " +"distributions**, commonly called **wheels**. For example, the `PyPI page " +"for pip 23.3.1 `_ lets you download two files, " +"``pip-23.3.1.tar.gz`` and ``pip-23.3.1-py3-none-any.whl``. The former is an " +"sdist, the latter is a wheel. As explained below, these serve different " +"purposes. When publishing a package on PyPI (or elsewhere), you should " +"always upload both an sdist and one or more wheel." +msgstr "" +"ທ່ານຈະພົບຮູບແບບໄຟລ໌ສອງປະເພດໃນ PyPI_: **source distributions** (ຫຼື **sdists**) ແລະ " +"**binary distributions** (ຫຼື **wheels**). ເມື່ອເຜີຍແຜ່ແພັກເກດ, ທ່ານຄວນອັບໂຫຼດທັງ sdist " +"ແລະ wheel ສະເໝີ." + +#: ../source/discussions/package-formats.rst:21 +msgid "What is a source distribution?" +msgstr "Source distribution ແມ່ນຫຍັງ?" + +#: ../source/discussions/package-formats.rst:23 +msgid "" +"Conceptually, a source distribution is an archive of the source code in raw " +"form. Concretely, an sdist is a ``.tar.gz`` archive containing the source " +"code plus an additional special file called ``PKG-INFO``, which holds the " +"project metadata. The presence of this file helps packaging tools to be more " +"efficient by not needing to compute the metadata themselves. The ``PKG-" +"INFO`` file follows the format specified in :ref:`core-metadata` and is not " +"intended to be written by hand [#core-metadata-format]_." +msgstr "" +"ໃນທາງແນວຄິດ, source distribution ແມ່ນໄຟລ໌ archive ຂອງ source code ໃນຮູບແບບດິບ. " +"ໃນທາງປະຕິບັດ, sdist ແມ່ນໄຟລ໌ ``.tar.gz`` ທີ່ບັນຈຸ source code ພ້ອມກັບໄຟລ໌ພິເສດທີ່ຊື່ວ່າ ``PKG-" +"INFO`` ເຊິ່ງເກັບຂໍ້ມູນ metadata ຂອງໂຄງການ." + +#: ../source/discussions/package-formats.rst:31 +msgid "" +"You can thus inspect the contents of an sdist by unpacking it using standard " +"tools to work with tar archives, such as ``tar -xvf`` on UNIX platforms " +"(like Linux and macOS), or :ref:`the command line interface of Python's " +"tarfile module ` on any platform." +msgstr "" +"ທ່ານສາມາດກວດສອບເນື້ອຫາຂອງ sdist ໄດ້ໂດຍການແຕກໄຟລ໌ດ້ວຍເຄື່ອງມືມາດຕະຖານ ເຊັ່ນ ``tar -xvf``." + +#: ../source/discussions/package-formats.rst:36 +msgid "" +"Sdists serve several purposes in the packaging ecosystem. When :ref:`pip`, " +"the standard Python package installer, cannot find a wheel to install, it " +"will fall back on downloading a source distribution, compiling a wheel from " +"it, and installing the wheel. Furthermore, sdists are often used as the " +"package source by downstream packagers (such as Linux distributions, Conda, " +"Homebrew and MacPorts on macOS, ...), who, for various reasons, may prefer " +"them over, e.g., pulling from a Git repository." +msgstr "" +"Sdists ມີປະໂຫຍດຫຼາຍຢ່າງ. ເມື່ອ :ref:`pip` ບໍ່ພົບ wheel, ມັນຈະໄປດາວໂຫຼດ sdist ມາແທນ." + +#: ../source/discussions/package-formats.rst:44 +msgid "" +"A source distribution is recognized by its file name, which has the " +"form :samp:`{package_name}-{version}.tar.gz`, e.g., ``pip-23.3.1.tar.gz``." +msgstr "" +"Source distribution ສັງເກດໄດ້ຈາກຊື່ໄຟລ໌ ເຊິ່ງຈະຢູ່ໃນຮູບແບບ :samp:`{package_name}-" +"{version}.tar.gz`." + +#: ../source/discussions/package-formats.rst:50 +msgid "" +"If you want technical details on the sdist format, read the :ref:`sdist " +"specification `." +msgstr "" +"ຖ້າຕ້ອງການລາຍລະອຽດທາງເຕັກນິກຂອງຮູບແບບ sdist, ໃຫ້ອ່ານ :ref:`sdist specification " +"`." + +#: ../source/discussions/package-formats.rst:55 +msgid "What is a wheel?" +msgstr "Wheel ແມ່ນຫຍັງ?" + +#: ../source/discussions/package-formats.rst:57 +msgid "" +"Conceptually, a wheel contains exactly the files that need to be copied when " +"installing the package." +msgstr "ໃນທາງແນວຄິດ, wheel ບັນຈຸໄຟລ໌ທີ່ຕ້ອງຖືກ copy ເຂົ້າໄປໃນລະບົບໃນຕອນຕິດຕັ້ງແພັກເກດ." + +#: ../source/discussions/package-formats.rst:60 +msgid "" +"There is a big difference between sdists and wheels for packages " +"with :term:`extension modules `, written in compiled " +"languages like C, C++ and Rust, which need to be compiled into platform-" +"dependent machine code. With these packages, wheels do not contain source " +"code (like C source files) but compiled, executable code (like ``.so`` files " +"on Linux or DLLs on Windows)." +msgstr "" +"ມີຄວາມແຕກຕ່າງຢ່າງຫຼວງຫຼາຍລະຫວ່າງ sdist ແລະ wheel ສຳລັບແພັກເກດທີ່ມີ :term:`extension " +"modules `." + +#: ../source/discussions/package-formats.rst:66 +msgid "" +"Furthermore, while there is only one sdist per version of a project, there " +"may be many wheels. Again, this is most relevant in the context of extension " +"modules. The compiled code of an extension module is tied to an operating " +"system and processor architecture, and often also to the version of the " +"Python interpreter (unless the :ref:`Python stable ABI ` " +"is used)." +msgstr "ນອກຈາກນັ້ນ, ໃນຂະນະທີ່ມີ sdist ພຽງອັນດຽວຕໍ່ໜຶ່ງເວີຊັນ, ແຕ່ອາດຈະມີ wheel ໄດ້ຫຼາຍອັນ." + +#: ../source/discussions/package-formats.rst:72 +msgid "" +"For pure-Python packages, the difference between sdists and wheels is less " +"marked. There is normally one single wheel, for all platforms and Python " +"versions. Python is an interpreted language, which does not need ahead-of-" +"time compilation, so wheels contain ``.py`` files just like sdists." +msgstr "" +"ສຳລັບແພັກເກດທີ່ເປັນ Python ລ້ວນໆ (pure-Python), ຄວາມແຕກຕ່າງລະຫວ່າງ sdist ແລະ wheel " +"ຈະມີໜ້ອຍລົງ." + +#: ../source/discussions/package-formats.rst:77 +msgid "" +"If you are wondering about ``.pyc`` bytecode files: they are not included in " +"wheels, since they are cheap to generate, and including them would " +"unnecessarily force a huge number of packages to distribute one wheel per " +"Python version instead of one single wheel. Instead, installers " +"like :ref:`pip` generate them while installing the package." +msgstr "ໄຟລ໌ bytecode ``.pyc`` ຈະບໍ່ຖືກລວມເຂົ້າໃນ wheel." + +#: ../source/discussions/package-formats.rst:83 +msgid "" +"With that being said, there are still important differences between sdists " +"and wheels, even for pure Python projects. Wheels are meant to contain " +"exactly what is to be installed, and nothing more. In particular, wheels " +"should never include tests and documentation, while sdists commonly do. " +"Also, the wheel format is more complex than sdist. For example, it includes " +"a special file -- called ``RECORD`` -- that lists all files in the wheel " +"along with a hash of their content, as a safety check of the download's " +"integrity." +msgstr "Wheel ຖືກອອກແບບມາເພື່ອບັນຈຸສິ່ງທີ່ຈະຖືກຕິດຕັ້ງແທ້ໆ ເທົ່ານັ້ນ." + +#: ../source/discussions/package-formats.rst:91 +msgid "" +"At a glance, you might wonder if wheels are really needed for \"plain and " +"basic\" pure Python projects. Keep in mind that due to the flexibility of " +"sdists, installers like pip cannot install from sdists directly -- they need " +"to first build a wheel, by invoking the :term:`build backend` that the sdist " +"specifies (the build backend may do all sorts of transformations while " +"building the wheel, such as compiling C extensions). For this reason, even " +"for a pure Python project, you should always upload *both* an sdist and a " +"wheel to PyPI or other package indices. This makes installation much faster " +"for your users, since a wheel is directly installable. By only including " +"files that must be installed, wheels also make for smaller downloads." +msgstr "ທ່ານຄວນອັບໂຫຼດທັງ sdist ແລະ wheel ເຂົ້າ PyPI ສະເໝີ ເພື່ອໃຫ້ການຕິດຕັ້ງໄວຂຶ້ນ." + +#: ../source/discussions/package-formats.rst:102 +msgid "" +"On the technical level, a wheel is a ZIP archive (unlike sdists which are " +"TAR archives). You can inspect its contents by unpacking it as a normal ZIP " +"archive, e.g., using ``unzip`` on UNIX platforms like Linux and macOS, " +"``Expand-Archive`` in Powershell on Windows, or :ref:`the command line " +"interface of Python's zipfile module `. This can " +"be very useful to check that the wheel includes all the files you need it to." +msgstr "ໃນທາງເຕັກນິກ, wheel ແມ່ນ ZIP archive (ຕ່າງຈາກ sdist ທີ່ເປັນ TAR archive)." + +#: ../source/discussions/package-formats.rst:109 +msgid "" +"Inside a wheel, you will find the package's files, plus an additional " +"directory called :samp:`{package_name}-{version}.dist-info`. This directory " +"contains various files, including a ``METADATA`` file which is the " +"equivalent of ``PKG-INFO`` in sdists, as well as ``RECORD``. This can be " +"useful to ensure no files are missing from your wheels." +msgstr "" +"ພາຍໃນ wheel, ທ່ານຈະພົບເຫັນໄຟລ໌ຂອງແພັກເກັດ, " +"ບວກກັບໄດເຣັກທໍຣີເພີ່ມເຕີມທີ່ເອີ້ນວ່າ :samp:`{package_name}-{version}.dist-info`. " +"ໄດເຣັກທໍຣີນີ້ປະກອບດ້ວຍໄຟລ໌ຕ່າງໆ, ລວມທັງໄຟລ໌ ``METADATA`` ເຊິ່ງທຽບເທົ່າກັບ ``PKG-INFO`` ໃນ " +"sdists, ເຊັ່ນດຽວກັນກັບ ``RECORD``. ສິ່ງນີ້ສາມາດມີປະໂຫຍດເພື່ອຮັບປະກັນວ່າບໍ່ມີໄຟລ໌ໃດຂາດຫາຍໄປຈາກ " +"wheel ຂອງທ່ານ." + +#: ../source/discussions/package-formats.rst:115 +msgid "" +"The file name of a wheel (ignoring some rarely used features) looks like " +"this: :samp:`{package_name}-{version}-{python_tag}-{abi_tag}-" +"{platform_tag}.whl`. This naming convention identifies which platforms and " +"Python versions the wheel is compatible with. For example, the name " +"``pip-23.3.1-py3-none-any.whl`` means that:" +msgstr "" +"ຊື່ໄຟລ໌ຂອງ wheel ຈະຢູ່ໃນຮູບແບບ :samp:`{package_name}-{version}-{python_tag}-" +"{abi_tag}-{platform_tag}.whl`." + +#: ../source/discussions/package-formats.rst:121 +msgid "" +"(``py3``) This wheel can be installed on any implementation of Python 3, " +"whether CPython, the most widely used Python implementation, or an " +"alternative implementation like PyPy_;" +msgstr "(``py3``) Wheel ນີ້ສາມາດຕິດຕັ້ງໄດ້ໃນ Python 3 ທຸກປະເພດ;" + +#: ../source/discussions/package-formats.rst:124 +msgid "(``none``) It does not depend on the Python version;" +msgstr "(``none``) ມັນບໍ່ຂຶ້ນກັບເວີຊັນຂອງ Python;" + +#: ../source/discussions/package-formats.rst:125 +msgid "(``any``) It does not depend on the platform." +msgstr "(``any``) ມັນບໍ່ຂຶ້ນກັບແພລັດຟອມໃດໜຶ່ງ." + +#: ../source/discussions/package-formats.rst:127 +msgid "" +"The pattern ``py3-none-any`` is common for pure Python projects. Packages " +"with extension modules typically ship multiple wheels with more complex tags." +msgstr "ຮູບແບບ ``py3-none-any`` ແມ່ນພົບໄດ້ທົ່ວໄປໃນໂຄງການ Python ລ້ວນໆ." + +#: ../source/discussions/package-formats.rst:130 +msgid "" +"All technical details on the wheel format can be found in the :ref:`wheel " +"specification `." +msgstr "" +"ລາຍລະອຽດທາງເຕັກນິກທັງໝົດຂອງ wheel ສາມາດເບິ່ງໄດ້ທີ່ :ref:`wheel specification `." + +#: ../source/discussions/package-formats.rst:138 +msgid "What about eggs?" +msgstr "ແລ້ວ Eggs ເດ?" + +#: ../source/discussions/package-formats.rst:140 +msgid "" +"\"Egg\" is an old package format that has been replaced with the wheel " +"format. It should not be used anymore. Since August 2023, PyPI `rejects egg " +"uploads `_." +msgstr "\"Egg\" ແມ່ນຮູບແບບແພັກເກດແບບເກົ່າທີ່ຖືກແທນທີ່ດ້ວຍ wheel ແລ້ວ. ມັນບໍ່ຄວນຖືກໃຊ້ອີກຕໍ່ໄປ." + +#: ../source/discussions/package-formats.rst:144 +msgid "Here's a breakdown of the important differences between wheel and egg." +msgstr "ນີ້ຄືຄວາມແຕກຕ່າງທີ່ສຳຄັນລະຫວ່າງ wheel ແລະ egg." + +#: ../source/discussions/package-formats.rst:146 +msgid "" +"The egg format was introduced by :ref:`setuptools` in 2004, whereas the " +"wheel format was introduced by :pep:`427` in 2012." +msgstr "ຮູບແບບ egg ຖືກນຳໃຊ້ໃນປີ 2004, ສ່ວນ wheel ແມ່ນປີ 2012." + +#: ../source/discussions/package-formats.rst:149 +msgid "" +"Wheel has an :doc:`official standard specification `. Egg did not." +msgstr "Wheel ມີຂໍ້ກຳນົດມາດຕະຖານຢ່າງເປັນທາງການ, ສ່ວນ Egg ບໍ່ມີ." + +#: ../source/discussions/package-formats.rst:152 +msgid "" +"Wheel is a :term:`distribution ` format, i.e a " +"packaging format. [#wheel-importable]_ Egg was both a distribution format " +"and a runtime installation format (if left zipped), and was designed to be " +"importable." +msgstr "Wheel ແມ່ນຮູບແບບການແຈກຢາຍ (distribution format)." + +#: ../source/discussions/package-formats.rst:156 +msgid "" +"Wheel archives do not include ``.pyc`` files. Therefore, when the " +"distribution only contains Python files (i.e. no compiled extensions), and " +"is compatible with Python 2 and 3, it's possible for a wheel to be " +"\"universal\", similar to an :term:`sdist `." +msgstr "Wheel ບໍ່ໄດ້ລວມເອົາໄຟລ໌ ``.pyc`` ໄວ້ນຳ." + +#: ../source/discussions/package-formats.rst:161 +msgid "" +"Wheel uses standard :ref:`.dist-info directories `. Egg used ``.egg-info``." +msgstr "Wheel ໃຊ້ໄດເຣັກທໍຣີ ``.dist-info``, ສ່ວນ Egg ໃຊ້ ``.egg-info``." + +#: ../source/discussions/package-formats.rst:164 +msgid "" +"Wheel has a :ref:`richer file naming convention `. A " +"single wheel archive can indicate its compatibility with a number of Python " +"language versions and implementations, ABIs, and system architectures." +msgstr "Wheel ມີວິທີການຕັ້ງຊື່ໄຟລ໌ທີ່ໃຫ້ຂໍ້ມູນໄດ້ລະອຽດກວ່າ." + +#: ../source/discussions/package-formats.rst:168 +msgid "" +"Wheel is versioned. Every wheel file contains the version of the wheel " +"specification and the implementation that packaged it." +msgstr "Wheel ມີການລະບຸເວີຊັນຂອງຂໍ້ກຳນົດ." + +#: ../source/discussions/package-formats.rst:171 +msgid "" +"Wheel is internally organized by `sysconfig path type `_, therefore " +"making it easier to convert to other formats." +msgstr "Wheel ຖືກຈັດລະບຽບພາຍໃນຕາມ sysconfig path type ເຮັດໃຫ້ປ່ຽນໄປເປັນຮູບແບບອື່ນໄດ້ງ່າຍ." + +#: ../source/discussions/package-formats.rst:177 +msgid "" +"This format is email-based. Although this would be unlikely to be chosen " +"today, backwards compatibility considerations lead to it being kept as the " +"canonical format. From the user point of view, this is mostly invisible, " +"since the metadata is specified by the user in a way understood by the build " +"backend, typically ``[project]`` in ``pyproject.toml``, and translated by " +"the build backend into ``PKG-INFO``." +msgstr "ຮູບແບບນີ້ແມ່ນອີງໃສ່ email-based." + +#: ../source/discussions/package-formats.rst:184 +msgid "" +"Circumstantially, in some cases, wheels can be used as an importable runtime " +"format, although :ref:`this is not officially supported at this time `." +msgstr "" +"ໃນບາງກໍລະນີ, wheel ສາມາດໃຊ້ເປັນ importable runtime format ໄດ້, " +"ແຕ່ຍັງບໍ່ໄດ້ຮັບການສະໜັບສະໜູນຢ່າງເປັນທາງການ." + +#: ../source/discussions/pip-vs-easy-install.rst:6 +msgid "pip vs easy_install" +msgstr "pip ທຽບກັບ easy_install" + +#: ../source/discussions/pip-vs-easy-install.rst:9 +msgid "" +":ref:`easy_install `, now `deprecated`_, was released in 2004 " +"as part of :ref:`setuptools`. It was notable at the time for " +"installing :term:`packages ` from :term:`PyPI ` using requirement specifiers, and automatically " +"installing dependencies." +msgstr "" +":ref:`easy_install ` ຕອນນີ້ຖືກຍົກເລີກການນຳໃຊ້ (deprecated) ແລ້ວ." + +#: ../source/discussions/pip-vs-easy-install.rst:14 +msgid "" +":ref:`pip` came later in 2008, as an alternative to :ref:`easy_install " +"`, although still largely built on top of :ref:`setuptools` " +"components. It was notable at the time for *not* installing packages " +"as :term:`Eggs ` or from :term:`Eggs ` (but rather simply as " +"'flat' packages from :term:`sdists `), " +"and introducing the idea of :ref:`Requirements Files `, which gave users the power to easily replicate environments." +msgstr "" +":ref:`pip` ຖືກເປີດຕົວໃນປີ 2008 ເພື່ອເປັນທາງເລືອກແທນ :ref:`easy_install " +"`." + +#: ../source/discussions/pip-vs-easy-install.rst:22 +msgid "" +"Here's a breakdown of the important differences between pip and the " +"deprecated easy_install:" +msgstr "ນີ້ຄືຄວາມແຕກຕ່າງທີ່ສຳຄັນລະຫວ່າງ pip ແລະ easy_install ທີ່ຖືກຍົກເລີກໄປແລ້ວ:" + +#: ../source/discussions/pip-vs-easy-install.rst:25 +msgid "**pip**" +msgstr "" + +#: ../source/discussions/pip-vs-easy-install.rst:25 +msgid "**easy_install**" +msgstr "" + +#: ../source/discussions/pip-vs-easy-install.rst:27 +msgid "Installs from :term:`Wheels `" +msgstr "ຕິດຕັ້ງຈາກ Wheels" + +#: ../source/discussions/pip-vs-easy-install.rst:27 +#: ../source/discussions/pip-vs-easy-install.rst:38 +#: ../source/discussions/pip-vs-easy-install.rst:44 +#: ../source/discussions/pip-vs-easy-install.rst:48 +#: ../source/discussions/pip-vs-easy-install.rst:54 +#: ../source/discussions/pip-vs-easy-install.rst:57 +msgid "Yes" +msgstr "ແມ່ນ" + +#: ../source/discussions/pip-vs-easy-install.rst:27 +#: ../source/discussions/pip-vs-easy-install.rst:30 +#: ../source/discussions/pip-vs-easy-install.rst:32 +#: ../source/discussions/pip-vs-easy-install.rst:35 +#: ../source/discussions/pip-vs-easy-install.rst:38 +#: ../source/discussions/pip-vs-easy-install.rst:44 +#: ../source/discussions/pip-vs-easy-install.rst:48 +#: ../source/discussions/pip-vs-easy-install.rst:51 +#: ../source/discussions/pip-vs-easy-install.rst:54 +#: ../source/discussions/pip-vs-easy-install.rst:57 +msgid "No" +msgstr "ບໍ່" + +#: ../source/discussions/pip-vs-easy-install.rst:30 +msgid "Uninstall Packages" +msgstr "ຖອນການຕິດຕັ້ງແພັກເກດ" + +#: ../source/discussions/pip-vs-easy-install.rst:30 +msgid "Yes (``python -m pip uninstall``)" +msgstr "ໄດ້ (``python -m pip uninstall``)" + +#: ../source/discussions/pip-vs-easy-install.rst:32 +msgid "Dependency Overrides" +msgstr "ການແທນທີ່ Dependency" + +#: ../source/discussions/pip-vs-easy-install.rst:32 +msgid "Yes (:ref:`Requirements Files `)" +msgstr "ໄດ້ (:ref:`Requirements Files `)" + +#: ../source/discussions/pip-vs-easy-install.rst:35 +msgid "List Installed Packages" +msgstr "ສະແດງລາຍຊື່ແພັກເກດທີ່ຕິດຕັ້ງແລ້ວ" + +#: ../source/discussions/pip-vs-easy-install.rst:35 +msgid "Yes (``python -m pip list`` and ``python -m pip freeze``)" +msgstr "ໄດ້ (``python -m pip list`` ແລະ ``python -m pip freeze``)" + +#: ../source/discussions/pip-vs-easy-install.rst:38 +msgid ":pep:`438` Support" +msgstr "ຮອງຮັບ :pep:`438`" + +#: ../source/discussions/pip-vs-easy-install.rst:41 +msgid "Installation format" +msgstr "ຮູບແບບການຕິດຕັ້ງ" + +#: ../source/discussions/pip-vs-easy-install.rst:41 +msgid "'Flat' packages with :file:`egg-info` metadata." +msgstr "ແພັກເກດແບບ 'Flat' ພ້ອມ metadata :file:`egg-info`." + +#: ../source/discussions/pip-vs-easy-install.rst:41 +msgid "Encapsulated Egg format" +msgstr "ຮູບແບບ Encapsulated Egg" + +#: ../source/discussions/pip-vs-easy-install.rst:44 +msgid "sys.path modification" +msgstr "ການແກ້ໄຂ sys.path" + +#: ../source/discussions/pip-vs-easy-install.rst:48 +msgid "Installs from :term:`Eggs `" +msgstr "ຕິດຕັ້ງຈາກ Eggs" + +#: ../source/discussions/pip-vs-easy-install.rst:51 +msgid "`pylauncher support`_" +msgstr "ຮອງຮັບ `pylauncher`_" + +#: ../source/discussions/pip-vs-easy-install.rst:51 +msgid "Yes [1]_" +msgstr "ແມ່ນ [1]_" + +#: ../source/discussions/pip-vs-easy-install.rst:54 +msgid ":ref:`Multi-version Installs`" +msgstr "ຕິດຕັ້ງໄດ້ຫຼາຍເວີຊັນ" + +#: ../source/discussions/pip-vs-easy-install.rst:57 +msgid "Exclude scripts during install" +msgstr "ບໍ່ລວມ scripts ໃນລະຫວ່າງການຕິດຕັ້ງ" + +#: ../source/discussions/pip-vs-easy-install.rst:60 +msgid "per project index" +msgstr "ດັດຊະນີແຍກຕາມໂຄງການ" + +#: ../source/discussions/pip-vs-easy-install.rst:60 +msgid "Only in virtualenv" +msgstr "ສະເພາະໃນ virtualenv ເທົ່ານັ້ນ" + +#: ../source/discussions/pip-vs-easy-install.rst:60 +msgid "Yes, via setup.cfg" +msgstr "ໄດ້, ຜ່ານ setup.cfg" + +#: ../source/discussions/pip-vs-easy-install.rst:68 +msgid "" +"https://setuptools.readthedocs.io/en/latest/deprecated/" +"easy_install.html#natural-script-launcher" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:6 +msgid "Is ``setup.py`` deprecated?" +msgstr "``setup.py`` ຖືກຍົກເລີກການນຳໃຊ້ແລ້ວບໍ?" + +#: ../source/discussions/setup-py-deprecated.rst:8 +msgid "No, :term:`setup.py` and :ref:`setuptools` are not deprecated." +msgstr "ບໍ່, :term:`setup.py` ແລະ :ref:`setuptools` ຍັງບໍ່ໄດ້ຖືກຍົກເລີກການນຳໃຊ້." + +#: ../source/discussions/setup-py-deprecated.rst:10 +msgid "" +"Setuptools is perfectly usable as a :term:`build backend` for packaging " +"Python projects. And :file:`setup.py` is a valid configuration file " +"for :ref:`setuptools` that happens to be written in Python, instead of in " +"*TOML* for example (a similar practice is used by other tools like *nox* and " +"its :file:`noxfile.py` configuration file, or *pytest* " +"and :file:`conftest.py`)." +msgstr "Setuptools ຍັງສາມາດໃຊ້ເປັນ :term:`build backend` ໄດ້ຕາມປົກກະຕິ." + +#: ../source/discussions/setup-py-deprecated.rst:18 +msgid "" +"However, ``python setup.py`` and the use of :file:`setup.py` as a command " +"line tool are deprecated." +msgstr "" +"ຢ່າງໃດກໍຕາມ, ການໃຊ້ ``python setup.py`` ເປັນເຄື່ອງມືຄຳສັ່ງ (command line tool) " +"ແມ່ນຖືກຍົກເລີກແລ້ວ." + +#: ../source/discussions/setup-py-deprecated.rst:21 +msgid "" +"This means that commands such as the following **MUST NOT** be run anymore:" +msgstr "ນີ້ໝາຍຄວາມວ່າຄຳສັ່ງຕໍ່ໄປນີ້ **ຫ້າມ** ໃຊ້ງານອີກຕໍ່ໄປ:" + +#: ../source/discussions/setup-py-deprecated.rst:23 +#: ../source/discussions/setup-py-deprecated.rst:35 +#: ../source/guides/modernize-setup-py-project.rst:32 +msgid "``python setup.py install``" +msgstr "``python setup.py install``" + +#: ../source/discussions/setup-py-deprecated.rst:24 +#: ../source/discussions/setup-py-deprecated.rst:37 +#: ../source/guides/modernize-setup-py-project.rst:34 +msgid "``python setup.py develop``" +msgstr "``python setup.py develop``" + +#: ../source/discussions/setup-py-deprecated.rst:25 +#: ../source/discussions/setup-py-deprecated.rst:39 +#: ../source/guides/modernize-setup-py-project.rst:36 +msgid "``python setup.py sdist``" +msgstr "``python setup.py sdist``" + +#: ../source/discussions/setup-py-deprecated.rst:26 +#: ../source/discussions/setup-py-deprecated.rst:41 +#: ../source/guides/modernize-setup-py-project.rst:38 +msgid "``python setup.py bdist_wheel``" +msgstr "``python setup.py bdist_wheel``" + +#: ../source/discussions/setup-py-deprecated.rst:30 +msgid "What commands should be used instead?" +msgstr "ຄວນໃຊ້ຄຳສັ່ງໃດແທນ?" + +#: ../source/discussions/setup-py-deprecated.rst:33 +#: ../source/guides/modernize-setup-py-project.rst:30 +msgid "Deprecated" +msgstr "ຍົກເລີກແລ້ວ" + +#: ../source/discussions/setup-py-deprecated.rst:33 +#: ../source/guides/modernize-setup-py-project.rst:30 +msgid "Recommendation" +msgstr "ຄຳແນະນຳ" + +#: ../source/discussions/setup-py-deprecated.rst:35 +#: ../source/guides/modernize-setup-py-project.rst:32 +msgid "``python -m pip install .``" +msgstr "``python -m pip install .``" + +#: ../source/discussions/setup-py-deprecated.rst:37 +#: ../source/guides/modernize-setup-py-project.rst:34 +msgid "``python -m pip install --editable .``" +msgstr "``python -m pip install --editable .``" + +#: ../source/discussions/setup-py-deprecated.rst:39 +msgid "``python -m build`` [#needs-build]_" +msgstr "``python -m build`` [#needs-build]_" + +#: ../source/discussions/setup-py-deprecated.rst:45 +msgid "" +"This requires the :ref:`build` dependency. It is recommended to always build " +"and publish both the source distribution and wheel of a project, which is " +"what ``python -m build`` does. If necessary the ``--sdist`` and ``--wheel`` " +"options can be used to generate only one or the other." +msgstr "ນີ້ຕ້ອງການ dependency :ref:`build`." + +#: ../source/discussions/setup-py-deprecated.rst:52 +msgid "" +"In order to install a setuptools based project, it was common to " +"run :file:`setup.py`'s ``install`` command such as: ``python setup.py " +"install``. Nowadays, the recommended method is to use :ref:`pip` directly " +"with a command like this one: ``python -m pip install .``. Where the dot " +"``.`` is actually a file system path, it is the path notation for the " +"current directory. Indeed, *pip* accepts a path to a project's source tree " +"directory on the local filesystem as argument to its ``install`` sub-" +"command. So this would also be a valid command: ``python -m pip install path/" +"to/project``." +msgstr "ແນະນຳໃຫ້ໃຊ້ ``python -m pip install .`` ແທນ." + +#: ../source/discussions/setup-py-deprecated.rst:65 +msgid "" +"As for the installation in *develop* mode aka *editable* mode, instead of " +"``python setup.py develop`` one can use the ``--editable`` option of pip's " +"*install* sub-command: ``python -m pip install --editable .``." +msgstr "" +"ສຳລັບການຕິດຕັ້ງແບບ *editable*, ໃຫ້ໃຊ້ ``python -m pip install --editable .``." + +#: ../source/discussions/setup-py-deprecated.rst:70 +msgid "" +"One recommended, simple, and straightforward method of " +"building :term:`source distributions ` " +"and :term:`wheels ` is to use the :ref:`build` tool with a command " +"like ``python -m build`` which triggers the generation of both distribution " +"formats. If necessary the ``--sdist`` and ``--wheel`` options can be used to " +"generate only one or the other. Note that the build tool needs to be " +"installed separately." +msgstr "ວິທີການທີ່ແນະນຳໃນການ build ແມ່ນການໃຊ້ເຄື່ອງມື :ref:`build`." + +#: ../source/discussions/setup-py-deprecated.rst:80 +msgid "" +"The command ``python setup.py install`` was deprecated in setuptools version " +"*58.3.0*." +msgstr "" +"ຄຳສັ່ງ ``python setup.py install`` ຖືກຍົກເລີກການນຳໃຊ້ໃນ setuptools ເວີຊັນ *58.3.0*." + +#: ../source/discussions/setup-py-deprecated.rst:85 +msgid "What about other commands?" +msgstr "ແລ້ວຄຳສັ່ງອື່ນໆ ເດ?" + +#: ../source/discussions/setup-py-deprecated.rst:87 +msgid "What are some replacements for the other ``python setup.py`` commands?" +msgstr "ມີສິ່ງໃດມາແທນທີ່ຄຳສັ່ງ ``python setup.py`` ອື່ນໆ?" + +#: ../source/discussions/setup-py-deprecated.rst:91 +msgid "``python setup.py test``" +msgstr "``python setup.py test``" + +#: ../source/discussions/setup-py-deprecated.rst:93 +msgid "The recommendation is to use a test runner such as pytest_." +msgstr "ຄຳແນະນຳແມ່ນໃຫ້ໃຊ້ test runner ເຊັ່ນ pytest_." + +#: ../source/discussions/setup-py-deprecated.rst:99 +msgid "" +"``python setup.py check``, ``python setup.py register``, and ``python " +"setup.py upload``" +msgstr "" +"``python setup.py check``, ``python setup.py register``, ແລະ ``python " +"setup.py upload``" + +#: ../source/discussions/setup-py-deprecated.rst:101 +msgid "A trusted replacement is :ref:`twine`:" +msgstr "ສິ່ງທີ່ມາແທນທີ່ ແລະ ເຊື່ອຖືໄດ້ແມ່ນ :ref:`twine`:" + +#: ../source/discussions/setup-py-deprecated.rst:103 +msgid "``python -m twine check --strict dist/*``" +msgstr "``python -m twine check --strict dist/*``" + +#: ../source/discussions/setup-py-deprecated.rst:104 +msgid "``python -m twine register dist/*.whl`` [#not-pypi]_" +msgstr "``python -m twine register dist/*.whl`` [#not-pypi]_" + +#: ../source/discussions/setup-py-deprecated.rst:105 +msgid "``python -m twine upload dist/*``" +msgstr "``python -m twine upload dist/*``" + +#: ../source/discussions/setup-py-deprecated.rst:107 +msgid "" +"Not necessary, nor supported on :term:`PyPI `. " +"But might be necessary on other :term:`package indexes ` (for " +"example :ref:`devpi`)." +msgstr "ບໍ່ຈຳເປັນ ແລະ ບໍ່ໄດ້ຮັບການສະໜັບສະໜູນໃນ PyPI." + +#: ../source/discussions/setup-py-deprecated.rst:112 +msgid "``python setup.py --version``" +msgstr "``python setup.py --version``" + +#: ../source/discussions/setup-py-deprecated.rst:114 +msgid "" +"A possible replacement solution (among others) is to rely on setuptools-scm_:" +msgstr "ທາງເລືອກໃນການແທນທີ່ແມ່ນການໃຊ້ setuptools-scm_:" + +#: ../source/discussions/setup-py-deprecated.rst:116 +msgid "``python -m setuptools_scm``" +msgstr "``python -m setuptools_scm``" + +#: ../source/discussions/setup-py-deprecated.rst:122 +msgid "Remaining commands" +msgstr "ຄຳສັ່ງທີ່ເຫຼືອ" + +#: ../source/discussions/setup-py-deprecated.rst:124 +msgid "" +"This guide does not make suggestions of replacement solutions for those " +"commands:" +msgstr "ຄູ່ມືນີ້ບໍ່ມີຂໍ້ສະເໜີແນະສຳລັບການແທນທີ່ຄຳສັ່ງເຫຼົ່ານີ້:" + +#: ../source/discussions/setup-py-deprecated.rst:129 +msgid "``alias``" +msgstr "``alias``" + +#: ../source/discussions/setup-py-deprecated.rst:130 +msgid "``bdist``" +msgstr "``bdist``" + +#: ../source/discussions/setup-py-deprecated.rst:131 +msgid "``bdist_dumb``" +msgstr "``bdist_dumb``" + +#: ../source/discussions/setup-py-deprecated.rst:132 +msgid "``bdist_egg``" +msgstr "``bdist_egg``" + +#: ../source/discussions/setup-py-deprecated.rst:133 +msgid "``bdist_rpm``" +msgstr "``bdist_rpm``" + +#: ../source/discussions/setup-py-deprecated.rst:134 +msgid "``build``" +msgstr "``build``" + +#: ../source/discussions/setup-py-deprecated.rst:135 +msgid "``build_clib``" +msgstr "``build_clib``" + +#: ../source/discussions/setup-py-deprecated.rst:136 +msgid "``build_ext``" +msgstr "``build_ext``" + +#: ../source/discussions/setup-py-deprecated.rst:137 +msgid "``build_py``" +msgstr "``build_py``" + +#: ../source/discussions/setup-py-deprecated.rst:138 +msgid "``build_scripts``" +msgstr "``build_scripts``" + +#: ../source/discussions/setup-py-deprecated.rst:139 +msgid "``clean``" +msgstr "``clean``" + +#: ../source/discussions/setup-py-deprecated.rst:140 +msgid "``dist_info``" +msgstr "``dist_info``" + +#: ../source/discussions/setup-py-deprecated.rst:141 +msgid "``easy_install``" +msgstr "``easy_install``" + +#: ../source/discussions/setup-py-deprecated.rst:142 +msgid "``editable_wheel``" +msgstr "``editable_wheel``" + +#: ../source/discussions/setup-py-deprecated.rst:143 +msgid "``egg_info``" +msgstr "``egg_info``" + +#: ../source/discussions/setup-py-deprecated.rst:144 +msgid "``install_data``" +msgstr "``install_data``" + +#: ../source/discussions/setup-py-deprecated.rst:145 +msgid "``install_egg_info``" +msgstr "``install_egg_info``" + +#: ../source/discussions/setup-py-deprecated.rst:146 +msgid "``install_headers``" +msgstr "``install_headers``" + +#: ../source/discussions/setup-py-deprecated.rst:147 +msgid "``install_lib``" +msgstr "``install_lib``" + +#: ../source/discussions/setup-py-deprecated.rst:148 +msgid "``install_scripts``" +msgstr "``install_scripts``" + +#: ../source/discussions/setup-py-deprecated.rst:149 +msgid "``rotate``" +msgstr "``rotate``" + +#: ../source/discussions/setup-py-deprecated.rst:150 +msgid "``saveopts``" +msgstr "``saveopts``" + +#: ../source/discussions/setup-py-deprecated.rst:151 +msgid "``setopt``" +msgstr "``setopt``" + +#: ../source/discussions/setup-py-deprecated.rst:152 +msgid "``upload_docs``" +msgstr "``upload_docs``" + +#: ../source/discussions/setup-py-deprecated.rst:156 +msgid "What about custom commands?" +msgstr "ແລ້ວຄຳສັ່ງທີ່ກຳນົດເອງ (custom commands) ເດ?" + +#: ../source/discussions/setup-py-deprecated.rst:158 +msgid "" +"Likewise, custom :file:`setup.py` commands are deprecated. The " +"recommendation is to migrate those custom commands to a task runner tool or " +"any other similar tool. Some examples of such tools are: chuy, make, nox or " +"tox, pydoit, pyinvoke, taskipy, and thx." +msgstr "ຄຳສັ່ງ custom ໃນ :file:`setup.py` ກໍຖືກຍົກເລີກການນຳໃຊ້ເຊັ່ນກັນ." + +#: ../source/discussions/setup-py-deprecated.rst:166 +msgid "What about custom build steps?" +msgstr "ແລ້ວຂັ້ນຕອນການ build ທີ່ກຳນົດເອງເດ?" + +#: ../source/discussions/setup-py-deprecated.rst:168 +msgid "" +"Custom build steps that for example either overwrite existing steps such as " +"``build_py``, ``build_ext``, and ``bdist_wheel`` or add new build steps are " +"not deprecated. Those will be automatically called as expected." +msgstr "" +"ຂັ້ນຕອນການ build ທີ່ກຳນົດເອງ ເຊັ່ນ ການຂຽນທັບ ``build_py`` ແມ່ນຍັງບໍ່ໄດ້ຖືກຍົກເລີກການນຳໃຊ້." + +#: ../source/discussions/setup-py-deprecated.rst:175 +#: ../source/guides/modernize-setup-py-project.rst:21 +msgid "Should ``setup.py`` be deleted?" +msgstr "ຄວນລຶບ ``setup.py`` ຖິ້ມເລີຍບໍ?" + +#: ../source/discussions/setup-py-deprecated.rst:177 +msgid "" +"Although the usage of :file:`setup.py` as an executable script is " +"deprecated, its usage as a configuration file for setuptools is absolutely " +"fine. There is likely no modification needed in :file:`setup.py`." +msgstr "" +"ເຖິງວ່າການໃຊ້ :file:`setup.py` ເປັນ script ຈະຖືກຍົກເລີກ, ແຕ່ການໃຊ້ມັນເປັນໄຟລ໌ " +"configuration ສຳລັບ setuptools ແມ່ນຍັງໃຊ້ໄດ້ປົກກະຕິ." + +#: ../source/discussions/setup-py-deprecated.rst:183 +msgid "Is ``pyproject.toml`` mandatory?" +msgstr "``pyproject.toml`` ເປັນສິ່ງທີ່ຕ້ອງມີ (mandatory) ບໍ?" + +#: ../source/discussions/setup-py-deprecated.rst:185 +msgid "" +"While it is not technically necessary yet, it is **STRONGLY RECOMMENDED** " +"for a project to have a :file:`pyproject.toml` file at the root of its " +"source tree with a content like this:" +msgstr "" +"ເຖິງວ່າໃນທາງເຕັກນິກຈະຍັງບໍ່ຈຳເປັນ, ແຕ່ **ແນະນຳຢ່າງຍິ່ງ** " +"ໃຫ້ແຕ່ລະໂຄງການມີໄຟລ໌ :file:`pyproject.toml`." + +#: ../source/discussions/setup-py-deprecated.rst:196 +msgid "" +"The guide :ref:`modernize-setup-py-project` has more details about this." +msgstr "ຄູ່ມື :ref:`modernize-setup-py-project` ມີລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບເລື່ອງນີ້." + +#: ../source/discussions/setup-py-deprecated.rst:198 +msgid "" +"The standard fallback behavior for a :term:`build frontend ` " +"in the absence of a :file:`pyproject.toml` file and its ``[build-system]`` " +"table is to assume that the :term:`build backend ` is " +"setuptools." +msgstr "" +"ຖ້າບໍ່ມີໄຟລ໌ :file:`pyproject.toml`, build frontend ຈະສົມມຸດວ່າ build backend ແມ່ນ " +"setuptools." + +#: ../source/discussions/setup-py-deprecated.rst:204 +msgid "Why? What does it all mean?" +msgstr "ເປັນຫຍັງ? ທັງໝົດນີ້ໝາຍຄວາມວ່າແນວໃດ?" + +#: ../source/discussions/setup-py-deprecated.rst:206 +msgid "" +"One way to look at it is that the scope of setuptools has now been reduced " +"to the role of a build backend." +msgstr "" +"ໃຫ້ເບິ່ງວ່າ ຂອບເຂດຂອງ setuptools ໃນຕອນນີ້ໄດ້ຖືກຫຼຸດລົງມາໃຫ້ເຮັດໜ້າທີ່ພຽງແຕ່ເປັນ build backend " +"ເທົ່ານັ້ນ." + +#: ../source/discussions/setup-py-deprecated.rst:211 +#: ../source/guides/modernize-setup-py-project.rst:244 +msgid "Where to read more about this?" +msgstr "ສາມາດອ່ານຂໍ້ມູນເພີ່ມເຕີມໄດ້ບ່ອນໃດ?" + +#: ../source/discussions/setup-py-deprecated.rst:213 +msgid "" +"`Why you shouldn't invoke setup.py directly `__ by Paul Ganssle" +msgstr "" +"`Why you shouldn't invoke setup.py directly `__ ໂດຍ Paul Ganssle" + +#: ../source/discussions/setup-py-deprecated.rst:215 +msgid ":doc:`setuptools:deprecated/commands`" +msgstr ":doc:`setuptools:deprecated/commands`" + +#: ../source/discussions/single-source-version.rst:5 +msgid "Single-sourcing the Project Version" +msgstr "ການຈັດການເວີຊັນຂອງໂຄງການຈາກແຫຼ່ງດຽວ (Single-sourcing)" + +#: ../source/discussions/single-source-version.rst:7 +msgid "Complete" +msgstr "ສຳເລັດແລ້ວ" + +#: ../source/discussions/single-source-version.rst:8 +msgid "2024-10-07" +msgstr "2024-10-07" + +#: ../source/discussions/single-source-version.rst:10 +msgid "" +"Many Python :term:`distribution packages ` publish a " +"single Python :term:`import package ` where it is desired " +"that the runtime ``__version__`` attribute on the import package report the " +"same version specifier as :func:`importlib.metadata.version` reports for the " +"distribution package (as described in :ref:`runtime-version-access`)." +msgstr "" +"ຫຼາຍແພັກເກດ Python ຕ້ອງການໃຫ້ຄ່າ ``__version__`` ໃນຕອນ runtime ກົງກັບເວີຊັນທີ່ລະບຸໄວ້ໃນ " +"distribution package." + +#: ../source/discussions/single-source-version.rst:16 +msgid "" +"It is also frequently desired that this version information be derived from " +"a version control system *tag* (such as ``v1.2.3``) rather than being " +"manually updated in the source code." +msgstr "" +"ນອກຈາກນັ້ນ ຍັງມັກມີການຕ້ອງການໃຫ້ຂໍ້ມູນເວີຊັນນີ້ຖືກດຶງມາຈາກ *tag* ຂອງລະບົບຄວບຄຸມເວີຊັນ (ເຊັ່ນ " +"``v1.2.3``)." + +#: ../source/discussions/single-source-version.rst:20 +msgid "" +"Some projects may choose to simply live with the data entry duplication, and " +"rely on automated testing to ensure the different values do not diverge." +msgstr "" +"ບາງໂຄງການອາດຈະເລືອກທີ່ຈະປ່ອຍໃຫ້ມີຂໍ້ມູນຊ້ຳຊ້ອນກັນ ແລະ " +"ໃຊ້ການທົດສອບອັດຕະໂນມັດເພື່ອຮັບປະກັນວ່າຄ່າຕ່າງໆ ຈະບໍ່ຕ່າງກັນ." + +#: ../source/discussions/single-source-version.rst:23 +msgid "" +"Alternatively, a project's chosen build system may offer a way to define a " +"single source of truth for the version number." +msgstr "" +"ຫຼື ທາງເລືອກອື່ນ, ລະບົບ build ທີ່ເລືອກໃຊ້ອາດຈະມີວິທີການກຳນົດແຫຼ່ງຂໍ້ມູນຄວາມຈິງອັນດຽວ (single " +"source of truth) ສຳລັບເລກເວີຊັນ." + +#: ../source/discussions/single-source-version.rst:26 +msgid "In general, the options are:" +msgstr "ໂດຍທົ່ວໄປແລ້ວ, ທາງເລືອກມີດັ່ງນີ້:" + +#: ../source/discussions/single-source-version.rst:28 +msgid "" +"If the code is in a version control system (VCS), such as Git, then the " +"version can be extracted from the VCS." +msgstr "ຖ້າໂຄ້ດຢູ່ໃນລະບົບຄວບຄຸມເວີຊັນ (VCS) ເຊັ່ນ Git, ເວີຊັນສາມາດຖືກດຶງອອກມາຈາກ VCS ໄດ້." + +#: ../source/discussions/single-source-version.rst:30 +msgid "" +"The version can be hard-coded into the :file:`pyproject.toml` file -- and " +"the build system can copy it into other locations it may be required." +msgstr "ເວີຊັນສາມາດຖືກລະບຸໄວ້ (hard-coded) ໃນໄຟລ໌ :file:`pyproject.toml`." + +#: ../source/discussions/single-source-version.rst:33 +msgid "" +"The version string can be hard-coded into the source code -- either in a " +"special purpose file, such as :file:`_version.txt` (which must then be " +"shipped as part of the project's source distribution package), or as an " +"attribute in a particular module, such as :file:`__init__.py`. The build " +"system can then extract it from the runtime location at build time." +msgstr "ເວີຊັນສາມາດຖືກລະບຸໄວ້ໃນ source code." + +#: ../source/discussions/single-source-version.rst:38 +msgid "Consult your build system's documentation for their recommended method." +msgstr "ໃຫ້ສຶກສາເອກະສານຂອງລະບົບ build ຂອງທ່ານສຳລັບວິທີການທີ່ແນະນຳ." + +#: ../source/discussions/single-source-version.rst:40 +msgid "" +"When the intention is that a distribution package and its associated import " +"package share the same version, it is recommended that the project include " +"an automated test case that ensures ``import_name.__version__`` and " +"``importlib.metadata.version(\"dist-name\")`` report the same value (note: " +"for many projects, ``import_name`` and ``dist-name`` will be the same name)." +msgstr "" +"ເມື່ອຕ້ອງການໃຫ້ແພັກເກດທັງສອງປະເພດໃຊ້ເວີຊັນດຽວກັນ, ແນະນຳໃຫ້ມີການທົດສອບອັດຕະໂນມັດເພື່ອຢືນຢັນເລື່ອງນີ້." + +#: ../source/discussions/single-source-version.rst:50 +msgid "Build System Version Handling" +msgstr "ການຈັດການເວີຊັນໂດຍລະບົບ Build" + +#: ../source/discussions/single-source-version.rst:52 +msgid "" +"The following are links to some build system's documentation for handling " +"version strings." +msgstr "ຕໍ່ໄປນີ້ແມ່ນລິ້ງໄປຫາເອກະສານຂອງລະບົບ build ບາງຢ່າງສຳລັບການຈັດການເວີຊັນ." + +#: ../source/discussions/single-source-version.rst:54 +msgid "`Flit `_" +msgstr "`Flit `_" + +#: ../source/discussions/single-source-version.rst:56 +msgid "`Hatchling `_" +msgstr "`Hatchling `_" + +#: ../source/discussions/single-source-version.rst:58 +msgid "" +"`PDM `_" +msgstr "" +"`PDM `_" + +#: ../source/discussions/single-source-version.rst:60 +msgid "" +"`Setuptools `_" +msgstr "" +"`Setuptools `_" + +#: ../source/discussions/single-source-version.rst:62 +#, fuzzy +#| msgid "`setuptools_scm `_" +msgid "`setuptools_scm `_" +msgstr "`setuptools_scm `_" + +#: ../source/discussions/src-layout-vs-flat-layout.rst:5 +msgid "src layout vs flat layout" +msgstr "ໂຄງຮ່າງແບບ src ທຽບກັບ ໂຄງຮ່າງແບບແປ (flat layout)" + +#: ../source/discussions/src-layout-vs-flat-layout.rst:7 +msgid "" +"The \"flat layout\" refers to organising a project's files in a folder or " +"repository, such that the various configuration files and :term:`import " +"packages ` are all in the top-level directory." +msgstr "" +"\"ໂຄງຮ່າງແບບແປ (flat layout)\" ໝາຍເຖິງການຈັດລະບຽບໄຟລ໌ຂອງໂຄງການໃນໂຟນເດີ ຫຼື ຄັງເກັບ " +"(repository), ໂດຍທີ່ໄຟລ໌ກຳນົດຄ່າຕ່າງໆ ແລະ :term:`ແພັກເກດນຳເຂົ້າ ` " +"ທັງໝົດຈະຢູ່ໃນໄດເຣັກທໍຣີລະດັບສູງສຸດ." + +#: ../source/discussions/src-layout-vs-flat-layout.rst:25 +msgid "" +"The \"src layout\" deviates from the flat layout by moving the code that is " +"intended to be importable (i.e. ``import awesome_package``, also known " +"as :term:`import packages `) into a subdirectory. This " +"subdirectory is typically named ``src/``, hence \"src layout\"." +msgstr "" +"\"ໂຄງຮ່າງແບບ src\" ຈະແຕກຕ່າງຈາກໂຄງຮ່າງແບບແປ ໂດຍການຍ້າຍໂຄ້ດທີ່ຕ້ອງການໃຫ້ສາມາດນຳເຂົ້າໄດ້ " +"(ເຊັ່ນ ``import awesome_package``, ຫຼືທີ່ຮູ້ຈັກກັນໃນຊື່ :term:`ແພັກເກດນຳເຂົ້າ `) ເຂົ້າໄປໃນໄດເຣັກທໍຣີຍ່ອຍ. ໄດເຣັກທໍຣີຍ່ອຍນີ້ປົກກະຕິຈະຖືກຕັ້ງຊື່ວ່າ ``src/``, " +"ຈຶ່ງເປັນທີ່ມາຂອງຊື່ \"ໂຄງຮ່າງແບບ src\"." + +#: ../source/discussions/src-layout-vs-flat-layout.rst:45 +msgid "" +"Here's a breakdown of the important behaviour differences between the src " +"layout and the flat layout:" +msgstr "ນີ້ຄືລາຍລະອຽດຄວາມແຕກຕ່າງຂອງພຶດຕິກຳທີ່ສຳຄັນລະຫວ່າງ ໂຄງຮ່າງແບບ src ແລະ ໂຄງຮ່າງແບບແປ:" + +#: ../source/discussions/src-layout-vs-flat-layout.rst:48 +msgid "" +"The src layout requires installation of the project to be able to run its " +"code, and the flat layout does not." +msgstr "" +"ໂຄງຮ່າງແບບ src ຈຳເປັນຕ້ອງມີການຕິດຕັ້ງໂຄງການກ່ອນຈຶ່ງຈະສາມາດລັນໂຄ້ດໄດ້, ແຕ່ໂຄງຮ່າງແບບແປບໍ່ຈຳເປັນ." + +#: ../source/discussions/src-layout-vs-flat-layout.rst:51 +msgid "" +"This means that the src layout involves an additional step in the " +"development workflow of a project (typically, an :doc:`editable installation " +"` is used for development and a " +"regular installation is used for testing)." +msgstr "" +"ນີ້ໝາຍຄວາມວ່າ ໂຄງຮ່າງແບບ src ຈະມີຂັ້ນຕອນເພີ່ມເຕີມໃນຂະບວນການພັດທະນາໂຄງການ " +"(ໂດຍປົກກະຕິ, :doc:`ການຕິດຕັ້ງແບບແກ້ໄຂໄດ້ ` " +"ຈະຖືກໃຊ້ສຳລັບການພັດທະນາ ແລະ ການຕິດຕັ້ງແບບປົກກະຕິຈະຖືກໃຊ້ສຳລັບການທົດສອບ)." + +#: ../source/discussions/src-layout-vs-flat-layout.rst:56 +msgid "" +"The src layout helps prevent accidental usage of the in-development copy of " +"the code." +msgstr "ໂຄງຮ່າງແບບ src ຊ່ວຍປ້ອງກັນການນຳໃຊ້ໂຄ້ດສະບັບທີ່ກຳລັງພັດທະນາຢູ່ໂດຍບໍ່ໄດ້ຕັ້ງໃຈ." + +#: ../source/discussions/src-layout-vs-flat-layout.rst:59 +msgid "" +"This is relevant since the Python interpreter includes the current working " +"directory as the first item on the import path. This means that if an import " +"package exists in the current working directory with the same name as an " +"installed import package, the variant from the current working directory " +"will be used. This can lead to subtle misconfiguration of the project's " +"packaging tooling, which could result in files not being included in a " +"distribution." +msgstr "" +"ເລື່ອງນີ້ມີຄວາມສຳຄັນເນື່ອງຈາກ Python interpreter ຈະລວມເອົາໄດເຣັກທໍຣີທີ່ກຳລັງເຮັດວຽກຢູ່ " +"(current working directory) ເປັນລາຍການທຳອິດໃນເສັ້ນທາງການນຳເຂົ້າ (import path). " +"ນີ້ໝາຍຄວາມວ່າ ຖ້າມີແພັກເກດນຳເຂົ້າຢູ່ໃນໄດເຣັກທໍຣີປະຈຸບັນທີ່ມີຊື່ດຽວກັນກັບແພັກເກດທີ່ຕິດຕັ້ງໄວ້, " +"ຕົວທີ່ຢູ່ໃນໄດເຣັກທໍຣີປະຈຸບັນຈະຖືກນຳມາໃຊ້ແທນ. " +"ສິ່ງນີ້ອາດນຳໄປສູ່ການຕັ້ງຄ່າທີ່ຜິດພາດຂອງເຄື່ອງມືການຈັດເຮັດແພັກເກດ, " +"ເຊິ່ງອາດເຮັດໃຫ້ບາງໄຟລ໌ບໍ່ຖືກລວມເຂົ້າໃນຊຸດແຈກຢາຍ (distribution)." + +#: ../source/discussions/src-layout-vs-flat-layout.rst:66 +msgid "" +"The src layout helps avoid this by keeping import packages in a directory " +"separate from the root directory of the project, ensuring that the installed " +"copy is used." +msgstr "" +"ໂຄງຮ່າງແບບ src " +"ຊ່ວຍຫຼີກເວັ້ນບັນຫານີ້ໄດ້ໂດຍການເກັບແພັກເກດນຳເຂົ້າໄວ້ໃນໄດເຣັກທໍຣີທີ່ແຍກຕ່າງຫາກຈາກໄດເຣັກທໍຣີຮາກ (root) " +"ຂອງໂຄງການ, ເພື່ອຮັບປະກັນວ່າຕົວທີ່ຕິດຕັ້ງແລ້ວຈະຖືກນຳມາໃຊ້." + +#: ../source/discussions/src-layout-vs-flat-layout.rst:70 +msgid "" +"The src layout helps enforce that an :doc:`editable installation " +"` is only able to import files that " +"were meant to be importable." +msgstr "" +"ໂຄງຮ່າງແບບ src ຊ່ວຍບັງຄັບໃຫ້ :doc:`ການຕິດຕັ້ງແບບແກ້ໄຂໄດ້ ` ສາມາດນຳເຂົ້າໄດ້ສະເພາະໄຟລ໌ທີ່ຕັ້ງໃຈໃຫ້ສາມາດນຳເຂົ້າໄດ້ເທົ່ານັ້ນ." + +#: ../source/discussions/src-layout-vs-flat-layout.rst:74 +msgid "" +"This is especially relevant when the editable installation is implemented " +"using a `path configuration file `_ that adds the directory to the import path." +msgstr "" +"ສິ່ງນີ້ມີຄວາມສຳຄັນເປັນພິເສດເມື່ອການຕິດຕັ້ງແບບແກ້ໄຂໄດ້ຖືກນຳໃຊ້ຜ່ານ `ໄຟລ໌ກຳນົດຄ່າເສັ້ນທາງ (path " +"configuration file) `_ " +"ທີ່ເພີ່ມໄດເຣັກທໍຣີເຂົ້າໃນເສັ້ນທາງການນຳເຂົ້າ." + +#: ../source/discussions/src-layout-vs-flat-layout.rst:78 +msgid "" +"The flat layout would add the other project files (eg: ``README.md``, " +"``tox.ini``) and packaging/tooling configuration files (eg: ``setup.py``, " +"``noxfile.py``) on the import path. This would make certain imports work in " +"editable installations but not regular installations." +msgstr "" +"ໂຄງຮ່າງແບບແປຈະເພີ່ມໄຟລ໌ອື່ນໆຂອງໂຄງການ (ເຊັ່ນ: ``README.md``, ``tox.ini``) ແລະ " +"ໄຟລ໌ກຳນົດຄ່າການຈັດເຮັດແພັກເກດ/ເຄື່ອງມື (ເຊັ່ນ: ``setup.py``, ``noxfile.py``) " +"ເຂົ້າໃນເສັ້ນທາງການນຳເຂົ້າ. ສິ່ງນີ້ຈະເຮັດໃຫ້ການນຳເຂົ້າບາງຢ່າງໃຊ້ງານໄດ້ໃນການຕິດຕັ້ງແບບແກ້ໄຂໄດ້ " +"ແຕ່ຈະໃຊ້ງານບໍ່ໄດ້ໃນການຕິດຕັ້ງແບບປົກກະຕິ." + +#: ../source/discussions/src-layout-vs-flat-layout.rst:86 +msgid "Running a command-line interface from source with src-layout" +msgstr "ການລັນ interface ແບບບັນທັດຄຳສັ່ງ (CLI) ຈາກຊອດໂຄ້ດດ້ວຍ src-layout" + +#: ../source/discussions/src-layout-vs-flat-layout.rst:88 +msgid "" +"Due to the firstly mentioned specialty of the src layout, a command-line " +"interface can not be run directly from the :term:`source tree `, but requires installation of the package in :doc:`Development " +"Mode ` for testing purposes. Since " +"this can be unpractical in some situations, a workaround could be to prepend " +"the package folder to Python's :py:data:`sys.path` when called via " +"its :file:`__main__.py` file:" +msgstr "" +"ເນື່ອງຈາກຄຸນລັກສະນະພິເສດຂອງໂຄງຮ່າງແບບ src ທີ່ໄດ້ກ່າວມາຂ້າງເທິງ, interface " +"ແບບບັນທັດຄຳສັ່ງຈຶ່ງບໍ່ສາມາດລັນໂດຍກົງຈາກ :term:`ຊອດໂຄ້ດຕົ້ນສະບັບ (source tree) `, ແຕ່ຈຳເປັນຕ້ອງມີການຕິດຕັ້ງແພັກເກດໃນ :doc:`ໂໝດການພັດທະນາ (Development " +"Mode) ` ເພື່ອຈຸດປະສົງໃນການທົດສອບ. " +"ເນື່ອງຈາກສິ່ງນີ້ອາດບໍ່ສະດວກໃນບາງສະຖານະການ, " +"ວິທີແກ້ໄຂຊົ່ວຄາວຄືການເພີ່ມໂຟນເດີແພັກເກດໄວ້ທາງໜ້າຂອງ :py:data:`sys.path` ຂອງ Python " +"ເມື່ອຖືກເອີ້ນໃຊ້ຜ່ານໄຟລ໌ :file:`__main__.py`:" + +#: ../source/discussions/versioning.rst:6 +#: ../source/specifications/simple-repository-api.rst:358 +msgid "Versioning" +msgstr "ການກຳນົດເວີຊັນ" + +#: ../source/discussions/versioning.rst:8 +msgid "This discussion covers all aspects of versioning Python packages." +msgstr "ການສົນທະນານີ້ກວມເອົາທຸກດ້ານຂອງການກຳນົດເວີຊັນສຳລັບແພັກເກດ Python." + +#: ../source/discussions/versioning.rst:12 +msgid "Valid version numbers" +msgstr "ໝາຍເລກເວີຊັນທີ່ຖືກຕ້ອງ" + +#: ../source/discussions/versioning.rst:14 +msgid "" +"Different Python projects may use different versioning schemes based on the " +"needs of that particular project, but in order to be compatible with tools " +"like :ref:`pip`, all of them are required to comply with a flexible format " +"for version identifiers, for which the authoritative reference is " +"the :ref:`specification of version specifiers `. Here " +"are some examples of version numbers [#version-examples]_:" +msgstr "" +"ໂຄງການ Python ຕ່າງໆອາດໃຊ້ຮູບແບບການກຳນົດເວີຊັນທີ່ແຕກຕ່າງກັນຕາມຄວາມຕ້ອງການຂອງໂຄງການນັ້ນໆ, " +"ແຕ່ເພື່ອໃຫ້ສາມາດໃຊ້ງານຮ່ວມກັບເຄື່ອງມືຢ່າງ :ref:`pip` ໄດ້, " +"ທຸກໂຄງການຈຳເປັນຕ້ອງປະຕິບັດຕາມຮູບແບບທີ່ຢືດຢຸ່ນສຳລັບຕົວລະບຸເວີຊັນ, " +"ເຊິ່ງສາມາດອ້າງອີງໄດ້ຈາກ :ref:`ຂໍ້ກຳນົດຂອງຕົວລະບຸເວີຊັນ `. " +"ນີ້ຄືບາງຕົວຢ່າງຂອງໝາຍເລກເວີຊັນ [#version-examples]_:" + +#: ../source/discussions/versioning.rst:21 +msgid "A simple version (final release): ``1.2.0``" +msgstr "ເວີຊັນແບບງ່າຍ (ເວີຊັນປ່ອຍຕົວຈິງ): ``1.2.0``" + +#: ../source/discussions/versioning.rst:22 +msgid "A development release: ``1.2.0.dev1``" +msgstr "ເວີຊັນສຳລັບການພັດທະນາ (development release): ``1.2.0.dev1``" + +#: ../source/discussions/versioning.rst:23 +msgid "An alpha release: ``1.2.0a1``" +msgstr "ເວີຊັນອັລຟາ (alpha release): ``1.2.0a1``" + +#: ../source/discussions/versioning.rst:24 +msgid "A beta release: ``1.2.0b1``" +msgstr "ເວີຊັນເບຕ້າ (beta release): ``1.2.0b1``" + +#: ../source/discussions/versioning.rst:25 +msgid "A release candidate: ``1.2.0rc1``" +msgstr "ເວີຊັນກ່ອນປ່ອຍຕົວຈິງ (release candidate): ``1.2.0rc1``" + +#: ../source/discussions/versioning.rst:26 +msgid "A post-release: ``1.2.0.post1``" +msgstr "ເວີຊັນຫຼັງການປ່ອຍ (post-release): ``1.2.0.post1``" + +#: ../source/discussions/versioning.rst:27 +msgid "" +"A post-release of an alpha release (possible, but discouraged): " +"``1.2.0a1.post1``" +msgstr "ເວີຊັນຫຼັງການປ່ອຍຂອງເວີຊັນອັລຟາ (ສາມາດເຮັດໄດ້, ແຕ່ບໍ່ແນະນຳ): ``1.2.0a1.post1``" + +#: ../source/discussions/versioning.rst:28 +msgid "A simple version with only two components: ``23.12``" +msgstr "ເວີຊັນແບບງ່າຍທີ່ມີພຽງສອງສ່ວນ: ``23.12``" + +#: ../source/discussions/versioning.rst:29 +msgid "A simple version with just one component: ``42``" +msgstr "ເວີຊັນແບບງ່າຍທີ່ມີພຽງສ່ວນດຽວ: ``42``" + +#: ../source/discussions/versioning.rst:30 +msgid "A version with an epoch (discouraged): ``1!1.0``" +msgstr "ເວີຊັນທີ່ມີ epoch (ບໍ່ແນະນຳ): ``1!1.0``" + +#: ../source/discussions/versioning.rst:32 +msgid "" +"Projects can use a cycle of pre-releases to support testing by their users " +"before a final release. In order, the steps are: alpha releases, beta " +"releases, release candidates, final release. Pip and other modern Python " +"package installers ignore pre-releases by default when deciding which " +"versions of dependencies to install, unless explicitly requested (e.g., with " +"``pip install pkg==1.1a3`` or ``pip install --pre pkg``)." +msgstr "" +"ໂຄງການຕ່າງໆສາມາດໃຊ້ວົງຈອນການປ່ອຍກ່ອນກຳນົດ (pre-release) " +"ເພື່ອສະໜັບສະໜູນການທົດສອບໂດຍຜູ້ໃຊ້ກ່ອນຈະປ່ອຍຕົວຈິງ. ຕາມລຳດັບຂັ້ນຕອນຄື: ເວີຊັນອັລຟາ, ເວີຊັນເບຕ້າ, " +"ເວີຊັນກ່ອນປ່ອຍຕົວຈິງ, ແລະ ເວີຊັນປ່ອຍຕົວຈິງ. Pip ແລະ ເຄື່ອງມືຕິດຕັ້ງແພັກເກດ Python " +"ທີ່ທັນສະໄໝອື່ນໆຈະຂ້າມເວີຊັນ pre-release ໂດຍຄ່າເລີ່ມຕົ້ນໃນເວລາເລືອກເວີຊັນຂອງສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ " +"(dependencies) ເພື່ອຕິດຕັ້ງ, ເວັ້ນເສຍແຕ່ຈະມີການລະບຸຢ່າງຊັດເຈນ (ເຊັ່ນ: ດ້ວຍຄຳສັ່ງ ``pip " +"install pkg==1.1a3`` ຫຼື ``pip install --pre pkg``)." + +#: ../source/discussions/versioning.rst:39 +msgid "" +"The purpose of development releases is to support releases made early during " +"a development cycle, for example, a nightly build, or a build from the " +"latest source in a Linux distribution." +msgstr "" +"ຈຸດປະສົງຂອງ development releases " +"ແມ່ນເພື່ອສະໜັບສະໜູນການປ່ອຍເວີຊັນໃນໄລຍະເລີ່ມຕົ້ນຂອງວົງຈອນການພັດທະນາ, ຕົວຢ່າງເຊັ່ນ: nightly " +"build, ຫຼື ການສ້າງຈາກຊອດໂຄ້ດຫຼ້າສຸດໃນຊຸດແຈກຢາຍ Linux." + +#: ../source/discussions/versioning.rst:43 +msgid "" +"Post-releases are used to address minor errors in a final release that do " +"not affect the distributed software, such as correcting an error in the " +"release notes. They should not be used for bug fixes; these should be done " +"with a new final release (e.g., incrementing the third component when using " +"semantic versioning)." +msgstr "" +"Post-releases " +"ຖືກນຳໃຊ້ເພື່ອແກ້ໄຂຂໍ້ຜິດພາດເລັກໆນ້ອຍໆໃນເວີຊັນປ່ອຍຕົວຈິງທີ່ບໍ່ມີຜົນກະທົບຕໍ່ຊອບແວທີ່ແຈກຢາຍໄປ, " +"ເຊັ່ນການແກ້ໄຂຂໍ້ຜິດພາດໃນບັນທຶກການປ່ອຍ (release notes). ພວກມັນບໍ່ຄວນຖືກນຳໃຊ້ເພື່ອແກ້ໄຂບັກ (bug " +"fixes); ການແກ້ໄຂບັກຄວນເຮັດໃນເວີຊັນປ່ອຍຕົວຈິງໃໝ່ (ເຊັ່ນ: " +"ການເພີ່ມຕົວເລກສ່ວນທີສາມເມື່ອໃຊ້ການກຳນົດເວີຊັນຕາມຄວາມໝາຍ)." + +#: ../source/discussions/versioning.rst:49 +msgid "" +"Finally, epochs were intended to fix the sorting order when changing the " +"versioning scheme. For example, if a project was using calendar versioning, " +"with versions like ``23.12``, and switched to semantic versioning, with " +"versions like ``1.0``, the comparison between ``1.0`` and ``23.12`` would go " +"the wrong way. To correct this, the new version numbers would have an " +"explicit epoch, as in ``1!1.0``, in order to be treated as more recent than " +"the old version numbers. However, this is discouraged, and it is preferable " +"to use a higher version number that is unlikely to cause user confusion, " +"such as ``100.0``." +msgstr "" +"ສຸດທ້າຍ, epochs ມີໄວ້ເພື່ອແກ້ໄຂລຳດັບການຈັດລຽງເມື່ອມີການປ່ຽນຮູບແບບການກຳນົດເວີຊັນ. ຕົວຢ່າງ: " +"ຖ້າໂຄງການເຄີຍໃຊ້ການກຳນົດເວີຊັນຕາມປະຕິທິນ ເຊັ່ນ ``23.12``, " +"ແລ້ວປ່ຽນມາໃຊ້ການກຳນົດເວີຊັນຕາມຄວາມໝາຍ ເຊັ່ນ ``1.0``, ການປຽບທຽບລະຫວ່າງ ``1.0`` ແລະ " +"``23.12`` ຈະຜິດລຳດັບ. ເພື່ອແກ້ໄຂສິ່ງນີ້, ໝາຍເລກເວີຊັນໃໝ່ຈະມີ epoch ລະບຸໄວ້ຢ່າງຊັດເຈນ ເຊັ່ນ ``1!" +"1.0`` ເພື່ອໃຫ້ຖືກນັບວ່າໃໝ່ກວ່າໝາຍເລກເວີຊັນເກົ່າ. ເຖິງຢ່າງໃດກໍຕາມ, ວິທີນີ້ບໍ່ແນະນຳ ແລະ " +"ຄວນໃຊ້ໝາຍເລກເວີຊັນທີ່ສູງຂຶ້ນເຊິ່ງຈະບໍ່ເຮັດໃຫ້ຜູ້ໃຊ້ສັບສົນ ເຊັ່ນ ``100.0`` ຈະດີກວ່າ." + +#: ../source/discussions/versioning.rst:60 +msgid "Semantic versioning vs. calendar versioning" +msgstr "ການກຳນົດເວີຊັນຕາມຄວາມໝາຍ (Semantic) ທຽບກັບ ການກຳນົດເວີຊັນຕາມປະຕິທິນ (Calendar)" + +#: ../source/discussions/versioning.rst:62 +msgid "" +"A versioning scheme is a formalized way to interpret the segments of a " +"version number, and to decide which should be the next version number for a " +"new release of a package. Two versioning schemes are commonly used for " +"Python packages, semantic versioning and calendar versioning." +msgstr "" +"ຮູບແບບການກຳນົດເວີຊັນແມ່ນວິທີການທີ່ເປັນທາງການໃນການຕີຄວາມໝາຍສ່ວນຕ່າງໆຂອງໝາຍເລກເວີຊັນ, ແລະ " +"ເພື່ອຕັດສິນໃຈວ່າໝາຍເລກເວີຊັນຖັດໄປສຳລັບການປ່ອຍແພັກເກດໃໝ່ຄວນເປັນແນວໃດ. " +"ມີສອງຮູບແບບທີ່ນິຍົມໃຊ້ສຳລັບແພັກເກດ Python ຄື: ການກຳນົດເວີຊັນຕາມຄວາມໝາຍ ແລະ " +"ການກຳນົດເວີຊັນຕາມປະຕິທິນ." + +#: ../source/discussions/versioning.rst:69 +msgid "" +"The decision which version number to choose is up to a project's maintainer. " +"This effectively means that version bumps reflect the maintainer's view. " +"That view may differ from the end-users' perception of what said formalized " +"versioning scheme promises them." +msgstr "" +"ການຕັດສິນໃຈເລືອກໝາຍເລກເວີຊັນແມ່ນຂຶ້ນກັບຜູ້ດູແລໂຄງການ. " +"ສິ່ງນີ້ໝາຍຄວາມວ່າການປ່ຽນໝາຍເລກເວີຊັນສະທ້ອນເຖິງມຸມມອງຂອງຜູ້ດູແລ. " +"ມຸມມອງນັ້ນອາດຈະແຕກຕ່າງຈາກການຮັບຮູ້ຂອງຜູ້ໃຊ້ກ່ຽວກັບສິ່ງທີ່ຮູບແບບການກຳນົດເວີຊັນນັ້ນໄດ້ບອກໄວ້." + +#: ../source/discussions/versioning.rst:75 +msgid "" +"There are known exceptions for selecting the next version number. The " +"maintainers may consciously choose to break the assumption that the last " +"version segment only contains backwards-compatible changes. One such case is " +"when a security vulnerability needs to be addressed. Security releases often " +"come in patch versions but contain breaking changes inevitably." +msgstr "" +"ມີຂໍ້ຍົກເວັ້ນບາງປະການໃນການເລືອກໝາຍເລກເວີຊັນຖັດໄປ. " +"ຜູ້ດູແລອາດຕັ້ງໃຈທີ່ຈະເຮັດໃຫ້ການປ່ຽນແປງໃນສ່ວນສຸດທ້າຍຂອງເວີຊັນບໍ່ສາມາດໃຊ້ງານຮ່ວມກັບເວີຊັນເກົ່າໄດ້ " +"(break backwards compatibility). ກໍລະນີໜຶ່ງຄືເມື່ອມີການແກ້ໄຂຊ່ອງໂຫວ່ດ້ານຄວາມປອດໄພ. " +"ການປ່ອຍເວີຊັນດ້ານຄວາມປອດໄພມັກຈະມາໃນຮູບແບບຂອງ patch " +"ແຕ່ອາດມີການປ່ຽນແປງທີ່ຫຼີກເວັ້ນບໍ່ໄດ້ເຊິ່ງເຮັດໃຫ້ລະບົບເກົ່າໃຊ້ງານບໍ່ໄດ້." + +#: ../source/discussions/versioning.rst:85 +#: ../source/specifications/version-specifiers.rst:738 +msgid "Semantic versioning" +msgstr "ການກຳນົດເວີຊັນຕາມຄວາມໝາຍ (Semantic versioning)" + +#: ../source/discussions/versioning.rst:87 +msgid "" +"The idea of *semantic versioning* (or SemVer) is to use 3-part version " +"numbers, *major.minor.patch*, where the project author increments:" +msgstr "" +"ແນວຄິດຂອງ *ການກຳນົດເວີຊັນຕາມຄວາມໝາຍ* (ຫຼື SemVer) ແມ່ນການໃຊ້ໝາຍເລກເວີຊັນ 3 ສ່ວນ ຄື " +"*major.minor.patch*, ໂດຍທີ່ຜູ້ຂຽນໂຄງການຈະເພີ່ມຕົວເລກ:" + +#: ../source/discussions/versioning.rst:90 +msgid "*major* when they make incompatible API changes," +msgstr "*major* ເມື່ອມີການປ່ຽນແປງ API ທີ່ບໍ່ສາມາດໃຊ້ງານຮ່ວມກັບເວີຊັນເກົ່າໄດ້," + +#: ../source/discussions/versioning.rst:91 +msgid "" +"*minor* when they add functionality in a backwards-compatible manner, and" +msgstr "*minor* ເມື່ອມີການເພີ່ມຟັງຊັນໃໝ່ທີ່ຍັງສາມາດໃຊ້ງານຮ່ວມກັບເວີຊັນເກົ່າໄດ້, ແລະ" + +#: ../source/discussions/versioning.rst:92 +msgid "*patch*, when they make backwards-compatible bug fixes." +msgstr "*patch* ເມື່ອມີການແກ້ໄຂບັກທີ່ຍັງສາມາດໃຊ້ງານຮ່ວມກັບເວີຊັນເກົ່າໄດ້." + +#: ../source/discussions/versioning.rst:94 +msgid "" +"A majority of Python projects use a scheme that resembles semantic " +"versioning. However, most projects, especially larger ones, do not strictly " +"adhere to semantic versioning, since many changes are technically breaking " +"changes but affect only a small fraction of users. Such projects tend to " +"increment the major number when the incompatibility is high, or to signal a " +"shift in the project, rather than for any tiny incompatibility [#semver-" +"strictness]_. Conversely, a bump of the major version number is sometimes " +"used to signal significant but backwards-compatible new features." +msgstr "" +"ໂຄງການ Python ສ່ວນໃຫຍ່ໃຊ້ຮູບແບບທີ່ຄ້າຍຄືກັບການກຳນົດເວີຊັນຕາມຄວາມໝາຍ. ເຖິງຢ່າງໃດກໍຕາມ, " +"ຫຼາຍໂຄງການ ໂດຍສະເພາະໂຄງການຂະໜາດໃຫຍ່, ບໍ່ໄດ້ປະຕິບັດຕາມ SemVer ຢ່າງເຄັ່ງຄັດ, " +"ເນື່ອງຈາກການປ່ຽນແປງຫຼາຍຢ່າງທາງດ້ານເຕັກນິກອາດຈະ break ລະບົບ " +"ແຕ່ມີຜົນກະທົບຕໍ່ຜູ້ໃຊ້ພຽງສ່ວນໜ້ອຍເທົ່ານັ້ນ. ໂຄງການເຫຼົ່ານີ້ມັກຈະເພີ່ມເລກ major ເມື່ອມີການປ່ຽນແປງທີ່ໃຫຍ່ຫຼາຍ " +"ຫຼື ເພື່ອສົ່ງສັນຍານເຖິງການປ່ຽນແປງຄັ້ງສຳຄັນຂອງໂຄງການ ຫຼາຍກວ່າຈະປ່ຽນຍ້ອນຄວາມບໍ່ເຂົ້າກັນເລັກໆນ້ອຍໆ " +"[#semver-strictness]_. ໃນທາງກັບກັນ, ບາງຄັ້ງການເພີ່ມເລກ major " +"ກໍຖືກໃຊ້ເພື່ອບອກເຖິງຟີເຈີໃໝ່ທີ່ສຳຄັນແຕ່ຍັງຄົງໃຊ້ງານຮ່ວມກັບເວີຊັນເກົ່າໄດ້." + +#: ../source/discussions/versioning.rst:104 +msgid "" +"For those projects that do use strict semantic versioning, this approach " +"allows users to make use of :ref:`compatible release version specifiers " +"`, with the ``~=`` operator. For " +"example, ``name ~= X.Y`` is roughly equivalent to ``name >= X.Y, == X.*``, " +"i.e., it requires at least release X.Y, and allows any later release with " +"greater Y as long as X is the same. Likewise, ``name ~= X.Y.Z`` is roughly " +"equivalent to ``name >= X.Y.Z, == X.Y.*``, i.e., it requires at least X.Y.Z " +"and allows a later release with same X and Y but higher Z." +msgstr "" +"ສຳລັບໂຄງການທີ່ໃຊ້ SemVer ຢ່າງເຄັ່ງຄັດ, ວິທີນີ້ຊ່ວຍໃຫ້ຜູ້ໃຊ້ສາມາດໃຊ້ :ref:`ຕົວລະບຸເວີຊັນທີ່ເຂົ້າກັນໄດ້ " +"` ດ້ວຍເຄື່ອງໝາຍ ``~=``. ຕົວຢ່າງ: ``name ~= " +"X.Y`` ຈະທຽບເທົ່າກັບ ``name >= X.Y, == X.*``, ໝາຍຄວາມວ່າຕ້ອງການຢ່າງໜ້ອຍເວີຊັນ X.Y ແລະ " +"ອະນຸຍາດໃຫ້ໃຊ້ເວີຊັນທີ່ Y ສູງກວ່າໄດ້ ຕາບໃດທີ່ X ຍັງຄືເກົ່າ. ໃນທຳນອງດຽວກັນ, ``name ~= X.Y.Z`` " +"ຈະທຽບເທົ່າກັບ ``name >= X.Y.Z, == X.Y.*``, ຄືຕ້ອງການຢ່າງໜ້ອຍ X.Y.Z ແລະ " +"ອະນຸຍາດໃຫ້ໃຊ້ເວີຊັນທີ່ Z ສູງກວ່າໄດ້ ຕາບໃດທີ່ X ແລະ Y ຍັງຄືເກົ່າ." + +#: ../source/discussions/versioning.rst:113 +msgid "" +"Python projects adopting semantic versioning should abide by clauses 1-8 of " +"the `Semantic Versioning 2.0.0 specification `_." +msgstr "" +"ໂຄງການ Python ທີ່ນຳໃຊ້ການກຳນົດເວີຊັນຕາມຄວາມໝາຍ ຄວນປະຕິບັດຕາມຂໍ້ກຳນົດທີ 1-8 ຂອງ `Semantic " +"Versioning 2.0.0 `_." + +#: ../source/discussions/versioning.rst:116 +msgid "" +"The popular :doc:`Sphinx ` documentation generator is an " +"example project that uses strict semantic versioning (:doc:`Sphinx " +"versioning policy `). The " +"famous :doc:`NumPy ` scientific computing package explicitly " +"uses \"loose\" semantic versioning, where releases incrementing the minor " +"version can contain backwards-incompatible API changes (:doc:`NumPy " +"versioning policy `)." +msgstr "" +"ເຄື່ອງມືສ້າງເອກະສານ :doc:`Sphinx ` ທີ່ນິຍົມແມ່ນຕົວຢ່າງຂອງໂຄງການທີ່ໃຊ້ SemVer " +"ຢ່າງເຄັ່ງຄັດ (:doc:`ນະໂຍບາຍການກຳນົດເວີຊັນຂອງ Sphinx `). ສ່ວນແພັກເກດ :doc:`NumPy ` " +"ທີ່ມີຊື່ສຽງສຳລັບການຄຳນວນທາງວິທະຍາສາດ ແມ່ນໃຊ້ SemVer ແບບ \"ຢືດຢຸ່ນ\", ເຊິ່ງການປ່ຽນເລກ minor " +"ອາດຈະມີການປ່ຽນແປງ API ທີ່ບໍ່ສາມາດໃຊ້ງານຮ່ວມກັບເວີຊັນເກົ່າໄດ້ (:doc:`ນະໂຍບາຍການກຳນົດເວີຊັນຂອງ " +"NumPy `)." + +#: ../source/discussions/versioning.rst:125 +msgid "Calendar versioning" +msgstr "ການກຳນົດເວີຊັນຕາມປະຕິທິນ (Calendar versioning)" + +#: ../source/discussions/versioning.rst:127 +msgid "" +"Semantic versioning is not a suitable choice for all projects, such as those " +"with a regular time-based release cadence and a deprecation process that " +"provides warnings for a number of releases prior to removal of a feature." +msgstr "" +"ການກຳນົດເວີຊັນຕາມຄວາມໝາຍອາດບໍ່ເໝາະສົມກັບທຸກໂຄງການ, ເຊັ່ນໂຄງການທີ່ມີຮອບການປ່ອຍທີ່ແນ່ນອນຕາມເວລາ " +"ແລະ ມີຂະບວນການຍົກເລີກຟີເຈີ (deprecation) " +"ທີ່ຈະມີການແຈ້ງເຕືອນລ່ວງໜ້າຫຼາຍເວີຊັນກ່ອນຈະເອົາຟີເຈີນັ້ນອອກ." + +#: ../source/discussions/versioning.rst:131 +msgid "" +"A key advantage of date-based versioning, or `calendar versioning " +"`_ (CalVer), is that it is straightforward to tell how old the base " +"feature set of a particular release is given just the version number." +msgstr "" +"ຂໍ້ດີຫຼັກຂອງການກຳນົດເວີຊັນຕາມວັນທີ ຫຼື `ການກຳນົດເວີຊັນຕາມປະຕິທິນ `_ (CalVer) " +"ແມ່ນສາມາດຮູ້ໄດ້ທັນທີວ່າຟີເຈີຂອງເວີຊັນນັ້ນເກົ່າ ຫຼື ໃໝ່ປານໃດ ພຽງແຕ່ເບິ່ງຈາກໝາຍເລກເວີຊັນ." + +#: ../source/discussions/versioning.rst:135 +msgid "" +"Calendar version numbers typically take the form *year.month* (for example, " +"23.12 for December 2023)." +msgstr "" +"ໝາຍເລກເວີຊັນຕາມປະຕິທິນປົກກະຕິຈະຢູ່ໃນຮູບແບບ *ປີ.ເດືອນ* (ຕົວຢ່າງ: 23.12 ສຳລັບເດືອນທັນວາ 2023)." + +#: ../source/discussions/versioning.rst:138 +msgid "" +":doc:`Pip `, the standard Python package installer, uses calendar " +"versioning." +msgstr "" +":doc:`Pip `, ເຄື່ອງມືຕິດຕັ້ງແພັກເກດ Python ມາດຕະຖານ, " +"ໃຊ້ການກຳນົດເວີຊັນຕາມປະຕິທິນ." + +#: ../source/discussions/versioning.rst:143 +msgid "Other schemes" +msgstr "ຮູບແບບອື່ນໆ" + +#: ../source/discussions/versioning.rst:145 +msgid "" +"Serial versioning refers to the simplest possible versioning scheme, which " +"consists of a single number incremented every release. While serial " +"versioning is very easy to manage as a developer, it is the hardest to track " +"as an end user, as serial version numbers convey little or no information " +"regarding API backwards compatibility." +msgstr "" +"ການກຳນົດເວີຊັນແບບລຳດັບ (Serial versioning) ໝາຍເຖິງຮູບແບບການກຳນົດເວີຊັນທີ່ງ່າຍທີ່ສຸດ, " +"ເຊິ່ງປະກອບດ້ວຍຕົວເລກດຽວທີ່ເພີ່ມຂຶ້ນໃນທຸກໆການປ່ອຍ. " +"ເຖິງວ່າການກຳນົດເວີຊັນແບບລຳດັບຈະຈັດການງ່າຍສຳລັບຜູ້ພັດທະນາ, ແຕ່ມັນຍາກທີ່ສຸດສຳລັບຜູ້ໃຊ້ໃນການຕິດຕາມ " +"ເນື່ອງຈາກໝາຍເລກເວີຊັນແບບລຳດັບບໍ່ໄດ້ບອກຂໍ້ມູນກ່ຽວກັບຄວາມສາມາດໃນການໃຊ້ງານຮ່ວມກັບ API " +"ເວີຊັນເກົ່າເລີຍ." + +#: ../source/discussions/versioning.rst:151 +msgid "" +"Combinations of the above schemes are possible. For example, a project may " +"combine date-based versioning with serial versioning to create a " +"*year.serial* numbering scheme that readily conveys the approximate age of a " +"release, but doesn't otherwise commit to a particular release cadence within " +"the year." +msgstr "" +"ການປະສົມປະສານຮູບແບບຂ້າງເທິງເຂົ້າກັນກໍສາມາດເຮັດໄດ້. ຕົວຢ່າງ: " +"ໂຄງການອາດຈະລວມເອົາການກຳນົດເວີຊັນຕາມວັນທີເຂົ້າກັບແບບລຳດັບ ເພື່ອສ້າງຮູບແບບ *ປີ.ລຳດັບ* " +"ເຊິ່ງຈະບອກອາຍຸໂດຍປະມານຂອງເວີຊັນນັ້ນ ແຕ່ບໍ່ໄດ້ບັງຄັບຮອບການປ່ອຍທີ່ແນ່ນອນພາຍໃນປີ." + +#: ../source/discussions/versioning.rst:158 +#: ../source/specifications/version-specifiers.rst:114 +msgid "Local version identifiers" +msgstr "ຕົວລະບຸເວີຊັນທ້ອງຖິ່ນ (Local version identifiers)" + +#: ../source/discussions/versioning.rst:160 +msgid "" +"Public version identifiers are designed to support distribution " +"via :term:`PyPI `. Python packaging tools also " +"support the notion of a :ref:`local version identifier `, which can be used to identify local development builds not " +"intended for publication, or modified variants of a release maintained by a " +"redistributor." +msgstr "" +"ຕົວລະບຸເວີຊັນສາທາລະນະຖືກອອກແບບມາເພື່ອຮອງຮັບການແຈກຢາຍຜ່ານ :term:`PyPI `. ເຄື່ອງມືການຈັດເຮັດແພັກເກດ Python " +"ຍັງຮອງຮັບແນວຄິດຂອງ :ref:`ຕົວລະບຸເວີຊັນທ້ອງຖິ່ນ `, " +"ເຊິ່ງສາມາດໃຊ້ເພື່ອລະບຸເວີຊັນທີ່ສ້າງຂຶ້ນໃນເຄື່ອງເພື່ອພັດທະນາໂດຍບໍ່ໄດ້ຕັ້ງໃຈຈະເຜີຍແຜ່, ຫຼື " +"ເວີຊັນທີ່ຖືກດັດແປງໂດຍຜູ້ແຈກຢາຍຕໍ່." + +#: ../source/discussions/versioning.rst:166 +msgid "" +"A local version identifier takes the form of a public version identifier, " +"followed by \"+\" and a local version label. For example, a package with " +"Fedora-specific patches applied could have the version \"1.2.1+fedora.4\". " +"Another example is versions computed by setuptools-scm_, a setuptools plugin " +"that reads the version from Git data. In a Git repository with some commits " +"since the latest release, setuptools-scm generates a version like " +"\"0.5.dev1+gd00980f\", or if the repository has untracked changes, like " +"\"0.5.dev1+gd00980f.d20231217\"." +msgstr "" +"ຕົວລະບຸເວີຊັນທ້ອງຖິ່ນຈະຢູ່ໃນຮູບແບບຂອງຕົວລະບຸເວີຊັນສາທາລະນະ, ຕາມດ້ວຍເຄື່ອງໝາຍ \"+\" ແລະ " +"ປ້າຍກຳກັບເວີຊັນທ້ອງຖິ່ນ. ຕົວຢ່າງ: ແພັກເກດທີ່ຖືກ patch ສະເພາະສຳລັບ Fedora ອາດຈະມີເວີຊັນເປັນ " +"\"1.2.1+fedora.4\". ອີກຕົວຢ່າງໜຶ່ງຄືເວີຊັນທີ່ຄຳນວນໂດຍ setuptools-scm_, ເຊິ່ງເປັນປລັກອິນຂອງ " +"setuptools ທີ່ອ່ານເວີຊັນຈາກຂໍ້ມູນ Git. ໃນຄັງເກັບ Git ທີ່ມີການ commit ຫຼັງຈາກການປ່ອຍເວີຊັນຫຼ້າສຸດ, " +"setuptools-scm ຈະສ້າງເວີຊັນເຊັ່ນ \"0.5.dev1+gd00980f\", ຫຼື " +"ຖ້າຄັງເກັບມີການປ່ຽນແປງທີ່ຍັງບໍ່ໄດ້ຕິດຕາມ (untracked), ກໍຈະເປັນ " +"\"0.5.dev1+gd00980f.d20231217\"." + +#: ../source/discussions/versioning.rst:178 +msgid "Accessing version information at runtime" +msgstr "ການເຂົ້າເຖິງຂໍ້ມູນເວີຊັນໃນຂະນະທີ່ໂປຣແກຣມກຳລັງເຮັດວຽກ (Runtime)" + +#: ../source/discussions/versioning.rst:180 +msgid "" +"Version information for all :term:`distribution packages ` that are locally available in the current environment can be " +"obtained at runtime using the standard " +"library's :func:`importlib.metadata.version` function::" +msgstr "" +"ຂໍ້ມູນເວີຊັນສຳລັບທຸກໆ :term:`ຊຸດແຈກຢາຍ (distribution package) ` ທີ່ມີຢູ່ໃນສະພາບແວດລ້ອມປະຈຸບັນ " +"ສາມາດເອົາມາໄດ້ໃນຂະນະເຮັດວຽກໂດຍໃຊ້ຟັງຊັນ :func:`importlib.metadata.version` " +"ຂອງໄລບຣາຣີມາດຕະຖານ::" + +#: ../source/discussions/versioning.rst:187 +msgid "" +"Many projects also choose to version their top level :term:`import packages " +"` by providing a package level ``__version__`` attribute::" +msgstr "" +"ຫຼາຍໂຄງການຍັງເລືອກທີ່ຈະກຳນົດເວີຊັນໃຫ້ກັບ :term:`ແພັກເກດນຳເຂົ້າ (import package) ` ລະດັບສູງສຸດຂອງພວກເຂົາ ໂດຍການກຳນົດແອັດທຣິບິວ (attribute) ``__version__`` " +"ໃນລະດັບແພັກເກດ::" + +#: ../source/discussions/versioning.rst:195 +msgid "" +"This technique can be particularly valuable for CLI applications which want " +"to ensure that version query invocations (such as ``pip -V``) run as quickly " +"as possible." +msgstr "" +"ເຕັກນິກນີ້ມີປະໂຫຍດເປັນພິເສດສຳລັບແອັບພລິເຄຊັນ CLI ທີ່ຕ້ອງການໃຫ້ການກວດສອບເວີຊັນ (ເຊັ່ນ ``pip " +"-V``) ເຮັດວຽກໄດ້ໄວທີ່ສຸດເທົ່າທີ່ຈະໄວໄດ້." + +#: ../source/discussions/versioning.rst:199 +msgid "" +"Package publishers wishing to ensure their reported distribution package and " +"import package versions are consistent with each other can review " +"the :ref:`single-source-version` discussion for potential approaches to " +"doing so." +msgstr "" +"ຜູ້ເຜີຍແຜ່ແພັກເກດທີ່ຕ້ອງການໃຫ້ແນ່ໃຈວ່າເວີຊັນຂອງຊຸດແຈກຢາຍ ແລະ ເວີຊັນຂອງແພັກເກດນຳເຂົ້າກົງກັນ " +"ສາມາດສຶກສາການສົນທະນາເລື່ອງ :ref:`single-source-version` ເພື່ອເບິ່ງວິທີການຕ່າງໆ." + +#: ../source/discussions/versioning.rst:203 +msgid "" +"As import packages and modules are not *required* to publish runtime version " +"information in this way (see the withdrawn proposal in :pep:`PEP 396 " +"<396>`), the ``__version__`` attribute should either only be queried with " +"interfaces that are known to provide it (such as a project querying its own " +"version or the version of one of its direct dependencies), or else the " +"querying code should be designed to handle the case where the attribute is " +"missing [#fallback-to-dist-version]_." +msgstr "" +"ເນື່ອງຈາກແພັກເກດນຳເຂົ້າ ແລະ ໂມດູນບໍ່ໄດ້ຖືກ *ບັງຄັບ* ໃຫ້ເຜີຍແຜ່ຂໍ້ມູນເວີຊັນໃນຮູບແບບນີ້ " +"(ເບິ່ງຂໍ້ສະເໜີທີ່ຖືກຖອນອອກໃນ :pep:`PEP 396 <396>`), ດັ່ງນັ້ນແອັດທຣິບິວ ``__version__`` " +"ຄວນຖືກເອີ້ນໃຊ້ສະເພາະກັບ interface ທີ່ຮູ້ແນ່ນອນວ່າມີມັນ (ເຊັ່ນ ໂຄງການທີ່ກວດສອບເວີຊັນຂອງຕົວເອງ ຫຼື " +"ເວີຊັນຂອງສິ່ງທີ່ມັນຈຳເປັນຕ້ອງໃຊ້ໂດຍກົງ), ຖ້າບໍ່ດັ່ງນັ້ນ " +"ໂຄ້ດທີ່ໃຊ້ກວດສອບຄວນຖືກອອກແບບມາເພື່ອຮອງຮັບກໍລະນີທີ່ບໍ່ມີແອັດທຣິບິວດັ່ງກ່າວ [#fallback-to-dist-" +"version]_." + +#: ../source/discussions/versioning.rst:211 +msgid "" +"Some projects may need to publish version information for external APIs that " +"aren't the version of the module itself. Such projects should define their " +"own project-specific ways of obtaining the relevant information at runtime. " +"For example, the standard library's :mod:`ssl` module offers multiple ways " +"to access the underlying OpenSSL library version::" +msgstr "" +"ບາງໂຄງການອາດຈໍາເປັນຕ້ອງເຜີຍແຜ່ຂໍ້ມູນເວີຊັນສໍາລັບ API ພາຍນອກທີ່ບໍ່ແມ່ນເວີຊັນຂອງໂມດູນນັ້ນເອງ. " +"ໂຄງການດັ່ງກ່າວຄວນກໍານົດວິທີການສະເພາະຂອງໂຄງການເພື່ອຂໍຂໍ້ມູນທີ່ກ່ຽວຂ້ອງໃນເວລາເຮັດວຽກ (runtime). " +"ຕົວຢ່າງ, ໂມດູນ :mod:`ssl` ຂອງຄັງມາດຕະຖານມີຫຼາຍວິທີໃນການເຂົ້າເຖິງເວີຊັນຂອງຄັງ OpenSSL " +"ທີ່ຢູ່ເບື້ອງຫຼັງ::" + +#: ../source/discussions/versioning.rst:226 +msgid "" +"Some more examples of unusual version numbers are given in a `blog post " +"`_ by Seth Larson." +msgstr "" +"ຕົວຢ່າງເພີ່ມເຕີມຂອງໝາຍເລກເວີຊັນທີ່ບໍ່ປົກກະຕິສາມາດເບິ່ງໄດ້ໃນ `ບົດຄວາມບລັອກ `_ ໂດຍ Seth Larson." + +#: ../source/discussions/versioning.rst:229 +msgid "" +"For some personal viewpoints on this issue, see these blog posts: `by Hynek " +"Schlawak `_, `by Donald Stufft `_, `by Bernát Gábor `_, `by Brett Cannon " +"`_. For a humoristic take, read about ZeroVer_." +msgstr "" +"ສຳລັບມຸມມອງສ່ວນຕົວໃນເລື່ອງນີ້, ສາມາດອ່ານໄດ້ຈາກບົດຄວາມບລັອກເຫຼົ່ານີ້: `ໂດຍ Hynek Schlawak " +"`_, `ໂດຍ Donald Stufft `_, " +"`ໂດຍ Bernát Gábor `_, `ໂດຍ Brett Cannon `_. ແລະ ສຳລັບມຸມມອງແບບຕະຫຼົກ, ສາມາດອ່ານກ່ຽວກັບ ZeroVer_." + +#: ../source/discussions/versioning.rst:235 +msgid "" +"A full list mapping the top level names available for import to the " +"distribution packages that provide those import packages and modules may be " +"obtained through the standard " +"library's :func:`importlib.metadata.packages_distributions` function. This " +"means that even code that is attempting to infer a version to report for all " +"importable top-level names has a means to fall back to reporting the " +"distribution version information if no ``__version__`` attribute is defined. " +"Only standard library modules, and modules added via means other than Python " +"package installation would fail to have version information reported in that " +"case." +msgstr "" +"ລາຍຊື່ທັງໝົດທີ່ຈັບຄູ່ລະຫວ່າງຊື່ລະດັບສູງສຸດທີ່ສາມາດນຳເຂົ້າໄດ້ ກັບ ຊຸດແຈກຢາຍທີ່ໃຫ້ແພັກເກດນຳເຂົ້າ ແລະ " +"ໂມດູນເຫຼົ່ານັ້ນ " +"ສາມາດເອົາມາໄດ້ຜ່ານຟັງຊັນ :func:`importlib.metadata.packages_distributions` " +"ຂອງໄລບຣາຣີມາດຕະຖານ. ນີ້ໝາຍຄວາມວ່າ " +"ເຖິງແມ່ນວ່າໂຄ້ດຈະພະຍາຍາມຄົ້ນຫາເວີຊັນເພື່ອລາຍງານສຳລັບທຸກຊື່ລະດັບສູງສຸດ, " +"ມັນກໍຍັງມີວິທີທີ່ຈະກັບໄປລາຍງານຂໍ້ມູນເວີຊັນຂອງຊຸດແຈກຢາຍໄດ້ ຖ້າຫາກບໍ່ມີການກຳນົດແອັດທຣິບິວ " +"``__version__`` ໄວ້. ໃນກໍລະນີນັ້ນ, ຈະມີພຽງແຕ່ໂມດູນໄລບຣາຣີມາດຕະຖານ ແລະ " +"ໂມດູນທີ່ຖືກເພີ່ມມາດ້ວຍວິທີອື່ນທີ່ບໍ່ແມ່ນການຕິດຕັ້ງແພັກເກດ Python ເທົ່ານັ້ນ ທີ່ຈະບໍ່ມີຂໍ້ມູນເວີຊັນລາຍງານ." + +#: ../source/flow.rst:3 +msgid "The Packaging Flow" +msgstr "ຂັ້ນຕອນການຈັດເຮັດແພັກເກດ (Packaging Flow)" + +#: ../source/flow.rst:5 +msgid "" +"The document aims to outline the flow involved in publishing/distributing " +"a :term:`distribution package `, usually to the " +"`Python Package Index (PyPI)`_. It is written for package publishers, who " +"are assumed to be the package author." +msgstr "" +"ເອກະສານນີ້ມີຈຸດປະສົງເພື່ອສະຫຼຸບຂັ້ນຕອນທີ່ກ່ຽວຂ້ອງກັບການເຜີຍແຜ່/ແຈກຢາຍ :term:`ຊຸດແຈກຢາຍ " +"(distribution package) `, ເຊິ່ງປົກກະຕິຈະແມ່ນການສົ່ງໄປທີ່ " +"`Python Package Index (PyPI)`_. ມັນຖືກຂຽນຂຶ້ນສຳລັບຜູ້ເຜີຍແຜ່ແພັກເກດ, " +"ເຊິ່ງສົມມຸດວ່າເປັນຜູ້ຂຽນແພັກເກດເອງ." + +#: ../source/flow.rst:12 +msgid "" +"While the :doc:`tutorial ` walks through the " +"process of preparing a simple package for release, it does not fully " +"enumerate what steps and files are required, and for what purpose." +msgstr "" +"ເຖິງແມ່ນວ່າ :doc:`ບົດຮຽນ (tutorial) ` " +"ຈະແນະນຳຂັ້ນຕອນການກຽມແພັກເກດແບບງ່າຍໆເພື່ອປ່ອຍ, ແຕ່ມັນບໍ່ໄດ້ລະບຸຂັ້ນຕອນ ແລະ ໄຟລ໌ທີ່ຈຳເປັນທັງໝົດ " +"ລວມເຖິງຈຸດປະສົງຂອງແຕ່ລະຢ່າງໄວ້ຢ່າງຄົບຖ້ວນ." + +#: ../source/flow.rst:16 +msgid "" +"Publishing a package requires a flow from the author's source code to an end " +"user's Python environment. The steps to achieve this are:" +msgstr "" +"ການເຜີຍແຜ່ແພັກເກດຕ້ອງມີຂັ້ນຕອນເລີ່ມຕັ້ງແຕ່ຊອດໂຄ້ດຂອງຜູ້ຂຽນ ໄປຈົນເຖິງສະພາບແວດລ້ອມ Python " +"ຂອງຜູ້ໃຊ້ປາຍທາງ. ຂັ້ນຕອນຕ່າງໆມີດັ່ງນີ້:" + +#: ../source/flow.rst:19 +msgid "" +"Have a source tree containing the package. This is typically a checkout from " +"a version control system (VCS)." +msgstr "" +"ມີຊອດໂຄ້ດຕົ້ນສະບັບ (source tree) ທີ່ບັນຈຸແພັກເກດໄວ້. ໂດຍທົ່ວໄປແລ້ວແມ່ນໄດ້ມາຈາກລະບົບຄວບຄຸມເວີຊັນ " +"(VCS)." + +#: ../source/flow.rst:22 +msgid "" +"Prepare a configuration file describing the package metadata (name, version " +"and so forth) and how to create the build artifacts. For most packages, this " +"will be a :file:`pyproject.toml` file, maintained manually in the source " +"tree." +msgstr "" +"ກຽມໄຟລ໌ກຳນົດຄ່າທີ່ອະທິບາຍຂໍ້ມູນເມຕາດາຕາຂອງແພັກເກດ (ຊື່, ເວີຊັນ ແລະ ອື່ນໆ) ແລະ ວິທີການສ້າງ build " +"artifacts. ສຳລັບແພັກເກດສ່ວນໃຫຍ່, ສິ່ງນີ້ຈະແມ່ນໄຟລ໌ :file:`pyproject.toml`, " +"ເຊິ່ງຖືກດູແລດ້ວຍຕົວເອງໃນຊອດໂຄ້ດຕົ້ນສະບັບ." + +#: ../source/flow.rst:27 +msgid "" +"Create build artifacts to be sent to the package distribution service " +"(usually PyPI); these will normally be a :term:`source distribution " +"(\"sdist\") ` and one or " +"more :term:`built distributions (\"wheels\") `. These " +"are made by a build tool using the configuration file from the previous " +"step. Often there is just one generic wheel for a pure Python package." +msgstr "" +"ສ້າງ build artifacts ເພື່ອສົ່ງໄປຍັງບໍລິການແຈກຢາຍແພັກເກດ (ໂດຍທົ່ວໄປແມ່ນ PyPI); " +"ປົກກະຕິແລ້ວຈະປະກອບດ້ວຍ :term:`ຊຸດແຈກຢາຍແບບຊອດໂຄ້ດ (\"sdist\") ` ແລະ :term:`ຊຸດແຈກຢາຍທີ່ສ້າງແລ້ວ (\"wheels\") ` ໜຶ່ງ ຫຼື ຫຼາຍໄຟລ໌. ສິ່ງເຫຼົ່ານີ້ຖືກສ້າງຂຶ້ນໂດຍເຄື່ອງມື build " +"ໂດຍໃຊ້ໄຟລ໌ກຳນົດຄ່າຈາກຂັ້ນຕອນກ່ອນໜ້າ. ສ່ວນຫຼາຍມັກຈະມີພຽງແຕ່ wheel ດຽວສຳລັບແພັກເກດ Python ແທ້ໆ " +"(pure Python package)." + +#: ../source/flow.rst:35 +msgid "Upload the build artifacts to the package distribution service." +msgstr "ອັບໂຫຼດ build artifacts ໄປຍັງບໍລິການແຈກຢາຍແພັກເກດ." + +#: ../source/flow.rst:37 +msgid "" +"At that point, the package is present on the package distribution service. " +"To use the package, end users must:" +msgstr "" +"ເມື່ອຮອດຈຸດນັ້ນ, ແພັກເກດຈະໄປຢູ່ເທິງບໍລິການແຈກຢາຍແພັກເກດແລ້ວ. ເພື່ອຈະໃຊ້ງານແພັກເກດ, " +"ຜູ້ໃຊ້ປາຍທາງຈະຕ້ອງ:" + +#: ../source/flow.rst:40 +msgid "" +"Download one of the package's build artifacts from the package distribution " +"service." +msgstr "ດາວໂຫຼດ build artifacts ຂອງແພັກເກດຈາກບໍລິການແຈກຢາຍ." + +#: ../source/flow.rst:43 +msgid "" +"Install it in their Python environment, usually in its ``site-packages`` " +"directory. This step may involve a build/compile step which, if needed, must " +"be described by the package metadata." +msgstr "" +"ຕິດຕັ້ງມັນລົງໃນສະພາບແວດລ້ອມ Python, ເຊິ່ງປົກກະຕິຈະຢູ່ໃນໄດເຣັກທໍຣີ ``site-packages``. " +"ຂັ້ນຕອນນີ້ອາດມີການ build ຫຼື compile ເຊິ່ງຖ້າຈຳເປັນ, ຈະຕ້ອງຖືກລະບຸໄວ້ໃນເມຕາດາຕາຂອງແພັກເກດ." + +#: ../source/flow.rst:47 +msgid "" +"These last 2 steps are typically performed by :ref:`pip` when an end user " +"runs ``pip install``." +msgstr "" +"ສອງຂັ້ນຕອນສຸດທ້າຍນີ້ ປົກກະຕິແລ້ວຈະຖືກເຮັດໂດຍ :ref:`pip` ເມື່ອຜູ້ໃຊ້ລັນຄຳສັ່ງ ``pip install``." + +#: ../source/flow.rst:50 +msgid "The steps above are described in more detail below." +msgstr "ຂັ້ນຕອນຂ້າງເທິງນີ້ຈະຖືກອະທິບາຍຢ່າງລະອຽດຕື່ມຢູ່ດ້ານລຸ່ມ." + +#: ../source/flow.rst:53 +msgid "The source tree" +msgstr "ຊອດໂຄ້ດຕົ້ນສະບັບ (The source tree)" + +#: ../source/flow.rst:55 +msgid "" +"The source tree contains the package source code, usually a checkout from a " +"VCS. The particular version of the code used to create the build artifacts " +"will typically be a checkout based on a tag associated with the version." +msgstr "" +"ຊອດໂຄ້ດຕົ້ນສະບັບ (source tree) ປະກອບດ້ວຍຊອດໂຄ້ດຂອງແພັກເກດ, ປົກກະຕິຈະໄດ້ມາຈາກ VCS. " +"ເວີຊັນຂອງໂຄ້ດທີ່ໃຊ້ໃນການສ້າງ build artifacts ໂດຍທົ່ວໄປຈະເປັນການ checkout ໂດຍອີງຕາມ tag " +"ທີ່ກ່ຽວຂ້ອງກັບເວີຊັນນັ້ນ." + +#: ../source/flow.rst:60 +msgid "The configuration file" +msgstr "ໄຟລ໌ກຳນົດຄ່າ" + +#: ../source/flow.rst:62 +msgid "" +"The configuration file depends on the tool used to create the build " +"artifacts. The standard practice is to use a :file:`pyproject.toml` file in " +"the `TOML format`_." +msgstr "" +"ໄຟລ໌ກຳນົດຄ່າແມ່ນຂຶ້ນກັບເຄື່ອງມືທີ່ໃຊ້ໃນການສ້າງ build artifacts. " +"ວິທີການມາດຕະຖານແມ່ນການໃຊ້ໄຟລ໌ :file:`pyproject.toml` ໃນຮູບແບບ `TOML`_." + +#: ../source/flow.rst:68 +msgid "" +"At a minimum, the :file:`pyproject.toml` file needs a ``[build-system]`` " +"table specifying your build tool. There are many build tools available, " +"including but not limited " +"to :ref:`flit`, :ref:`hatch`, :ref:`pdm`, :ref:`poetry`, :ref:`setuptools`, " +"`trampolim`_, and `whey`_. Each tool's documentation will show what to put " +"in the ``[build-system]`` table." +msgstr "" +"ຢ່າງໜ້ອຍທີ່ສຸດ, ໄຟລ໌ :file:`pyproject.toml` ຈະຕ້ອງມີຕາຕະລາງ ``[build-system]`` " +"ເພື່ອລະບຸເຄື່ອງມື build ຂອງທ່ານ. ມີເຄື່ອງມື build ຫຼາຍຢ່າງໃຫ້ເລືອກໃຊ້ " +"ເຊັ່ນ :ref:`flit`, :ref:`hatch`, :ref:`pdm`, :ref:`poetry`, :ref:`setuptools`, " +"`trampolim`_, ແລະ `whey`_. ເອກະສານຂອງແຕ່ລະເຄື່ອງມືຈະບອກວິທີການຕັ້ງຄ່າໃນຕາຕະລາງ " +"``[build-system]``." + +#: ../source/flow.rst:77 +msgid "For example, here is a table for using :ref:`hatch`:" +msgstr "ຕົວຢ່າງ, ນີ້ຄືຕາຕະລາງສຳລັບການໃຊ້ :ref:`hatch`:" + +#: ../source/flow.rst:85 +msgid "" +"With such a table in the :file:`pyproject.toml` file, a \":term:`frontend " +"`\" tool like :ref:`build` can run your chosen build tool's " +"\":term:`backend `\" to create the build artifacts. Your " +"build tool may also provide its own frontend. An install tool " +"like :ref:`pip` also acts as a frontend when it runs your build tool's " +"backend to install from a source distribution." +msgstr "" +"ເມື່ອມີຕາຕະລາງດັ່ງກ່າວໃນໄຟລ໌ :file:`pyproject.toml`, ເຄື່ອງມື \":term:`frontend `\" ຢ່າງ :ref:`build` ຈະສາມາດລັນ \":term:`backend `\" " +"ຂອງເຄື່ອງມື build ທີ່ທ່ານເລືອກເພື່ອສ້າງ build artifacts ໄດ້. ເຄື່ອງມື build ຂອງທ່ານອາດຈະມີ " +"frontend ຂອງມັນເອງນຳ. ເຄື່ອງມືຕິດຕັ້ງຢ່າງ :ref:`pip` ກໍເຮັດໜ້າທີ່ເປັນ frontend ເຊັ່ນກັນ " +"ເມື່ອມັນລັນ backend ຂອງເຄື່ອງມື build ເພື່ອຕິດຕັ້ງຈາກຊຸດແຈກຢາຍແບບຊອດໂຄ້ດ." + +#: ../source/flow.rst:94 +msgid "" +"The particular build tool you choose dictates what additional information is " +"required in the :file:`pyproject.toml` file. For example, you might specify:" +msgstr "" +"ເຄື່ອງມື build " +"ແຕ່ລະຢ່າງທີ່ທ່ານເລືອກຈະກຳນົດຂໍ້ມູນເພີ່ມເຕີມທີ່ຈຳເປັນໃນໄຟລ໌ :file:`pyproject.toml`. ຕົວຢ່າງ, " +"ທ່ານອາດຈະລະບຸ:" + +#: ../source/flow.rst:97 +msgid "" +"a ``[project]`` table containing project :doc:`Core Metadata ` (name, version, author and so forth)," +msgstr "" +"ຕາຕະລາງ ``[project]`` ທີ່ບັນຈຸ :doc:`ເມຕາດາຕາຫຼັກ (Core Metadata) ` ຂອງໂຄງການ (ຊື່, ເວີຊັນ, ຜູ້ຂຽນ ແລະ ອື່ນໆ)," + +#: ../source/flow.rst:101 +msgid "a ``[tool]`` table containing tool-specific configuration options." +msgstr "ຕາຕະລາງ ``[tool]`` ທີ່ບັນຈຸຕົວເລືອກການກຳນົດຄ່າສະເພາະສຳລັບເຄື່ອງມືນັ້ນໆ." + +#: ../source/flow.rst:103 +msgid "" +"Refer to the :ref:`pyproject.toml guide ` for a " +"complete guide to ``pyproject.toml`` configuration." +msgstr "" +"ອ້າງອີງເຖິງ :ref:`ຄູ່ມື pyproject.toml ` " +"ສຳລັບຄຳແນະນຳການກຳນົດຄ່າ ``pyproject.toml`` ທີ່ຄົບຖ້ວນ." + +#: ../source/flow.rst:108 +msgid "Build artifacts" +msgstr "Build artifacts" + +#: ../source/flow.rst:111 +msgid "The source distribution (sdist)" +msgstr "ຊຸດແຈກຢາຍແບບຊອດໂຄ້ດ (sdist)" + +#: ../source/flow.rst:113 +msgid "" +"A source distribution contains enough to install the package from source in " +"an end user's Python environment. As such, it needs the package source, and " +"may also include tests and documentation. These are useful for end users " +"wanting to develop your sources, and for end user systems where some local " +"compilation step is required (such as a C extension)." +msgstr "" +"ຊຸດແຈກຢາຍແບບຊອດໂຄ້ດປະກອບດ້ວຍຂໍ້ມູນພຽງພໍທີ່ຈະຕິດຕັ້ງແພັກເກດຈາກຊອດໂຄ້ດໃນສະພາບແວດລ້ອມ Python " +"ຂອງຜູ້ໃຊ້ໄດ້. ມັນປະກອບດ້ວຍຊອດໂຄ້ດຂອງແພັກເກດ, ແລະ ອາດຈະລວມເຖິງການທົດສອບ (tests) ແລະ " +"ເອກະສານ (documentation). ສິ່ງເຫຼົ່ານີ້ມີປະໂຫຍດສຳລັບຜູ້ໃຊ້ທີ່ຕ້ອງການພັດທະນາຊອດໂຄ້ດຂອງທ່ານຕໍ່, ແລະ " +"ສຳລັບລະບົບຂອງຜູ້ໃຊ້ທີ່ຈຳເປັນຕ້ອງມີຂັ້ນຕອນການ compile ໃນເຄື່ອງ (ເຊັ່ນ C extension)." + +#: ../source/flow.rst:119 ../source/flow.rst:143 +msgid "" +"The :ref:`build` package knows how to invoke your build tool to create one " +"of these:" +msgstr "ແພັກເກດ :ref:`build` ຮູ້ວິທີການເອີ້ນໃຊ້ເຄື່ອງມື build ຂອງທ່ານເພື່ອສ້າງສິ່ງເຫຼົ່ານີ້:" + +#: ../source/flow.rst:126 +msgid "" +"Or, your build tool may provide its own interface for creating an sdist." +msgstr "ຫຼື ເຄື່ອງມື build ຂອງທ່ານອາດຈະມີ interface ຂອງມັນເອງສຳລັບການສ້າງ sdist." + +#: ../source/flow.rst:130 +msgid "The built distributions (wheels)" +msgstr "ຊຸດແຈກຢາຍທີ່ສ້າງແລ້ວ (wheels)" + +#: ../source/flow.rst:132 +msgid "" +"A built distribution contains only the files needed for an end user's Python " +"environment. No compilation steps are required during the install, and the " +"wheel file can simply be unpacked into the ``site-packages`` directory. This " +"makes the install faster and more convenient for end users." +msgstr "" +"ຊຸດແຈກຢາຍທີ່ສ້າງແລ້ວ (built distribution) ປະກອບດ້ວຍໄຟລ໌ທີ່ຈຳເປັນສຳລັບສະພາບແວດລ້ອມ Python " +"ຂອງຜູ້ໃຊ້ເທົ່ານັ້ນ. ບໍ່ມີຂັ້ນຕອນການ compile ໃນລະຫວ່າງການຕິດຕັ້ງ, ແລະ ໄຟລ໌ wheel " +"ສາມາດຖືກແຕກໄຟລ໌ລົງໃນໄດເຣັກທໍຣີ ``site-packages`` ໄດ້ເລີຍ. ສິ່ງນີ້ເຮັດໃຫ້ການຕິດຕັ້ງໄວຂຶ້ນ ແລະ " +"ສະດວກກວ່າສຳລັບຜູ້ໃຊ້." + +#: ../source/flow.rst:137 +msgid "" +"A pure Python package typically needs only one \"generic\" wheel. A package " +"with compiled binary extensions needs a wheel for each supported combination " +"of Python interpreter, operating system, and CPU architecture that it " +"supports. If a suitable wheel file is not available, tools like :ref:`pip` " +"will fall back to installing the source distribution." +msgstr "" +"ແພັກເກດ Python ແທ້ໆ (pure Python package) ໂດຍທົ່ວໄປຕ້ອງການພຽງແຕ່ wheel ແບບ \"ທົ່ວໄປ " +"(generic)\" ອັນດຽວ. ສ່ວນແພັກເກດທີ່ມີ binary extensions ທີ່ຖືກ compile ແລ້ວ ຕ້ອງການ " +"wheel ສຳລັບແຕ່ລະຮູບແບບຂອງ Python interpreter, ລະບົບປະຕິບັດການ, ແລະ ສະຖາປັດຕະຍະກຳ " +"CPU ທີ່ມັນຮອງຮັບ. ຖ້າບໍ່ມີໄຟລ໌ wheel ທີ່ເໝາະສົມ, ເຄື່ອງມືຢ່າງ :ref:`pip` " +"ຈະປ່ຽນໄປຕິດຕັ້ງຈາກຊຸດແຈກຢາຍແບບຊອດໂຄ້ດແທນ." + +#: ../source/flow.rst:150 +msgid "Or, your build tool may provide its own interface for creating a wheel." +msgstr "ຫຼື ເຄື່ອງມື build ຂອງທ່ານອາດຈະມີ interface ຂອງມັນເອງສຳລັບການສ້າງ wheel." + +#: ../source/flow.rst:154 +msgid "" +"The default behaviour of :ref:`build` is to make both an sdist and a wheel " +"from the source in the current directory; the above examples are " +"deliberately specific." +msgstr "" +"ພຶດຕິກຳເລີ່ມຕົ້ນຂອງ :ref:`build` ແມ່ນການສ້າງທັງ sdist ແລະ wheel " +"ຈາກຊອດໂຄ້ດໃນໄດເຣັກທໍຣີປະຈຸບັນ; ຕົວຢ່າງຂ້າງເທິງນັ້ນແມ່ນການລະບຸໃຫ້ເຫັນຢ່າງຊັດເຈນ." + +#: ../source/flow.rst:159 +msgid "Upload to the package distribution service" +msgstr "ອັບໂຫຼດໄປຍັງບໍລິການແຈກຢາຍແພັກເກດ" + +#: ../source/flow.rst:161 +msgid "" +"The :ref:`twine` tool can upload build artifacts to PyPI for distribution, " +"using a command like:" +msgstr "" +"ເຄື່ອງມື :ref:`twine` ສາມາດອັບໂຫຼດ build artifacts ໄປຍັງ PyPI ເພື່ອແຈກຢາຍ, " +"ໂດຍໃຊ້ຄຳສັ່ງເຊັ່ນ:" + +#: ../source/flow.rst:168 +msgid "Or, your build tool may provide its own interface for uploading." +msgstr "ຫຼື ເຄື່ອງມື build ຂອງທ່ານອາດຈະມີ interface ຂອງມັນເອງສຳລັບການອັບໂຫຼດ." + +#: ../source/flow.rst:171 +msgid "Download and install" +msgstr "ດາວໂຫຼດ ແລະ ຕິດຕັ້ງ" + +#: ../source/flow.rst:173 +msgid "" +"Now that the package is published, end users can download and install the " +"package into their Python environment. Typically this is done " +"with :ref:`pip`, using a command like:" +msgstr "" +"ເມື່ອແພັກເກດຖືກເຜີຍແຜ່ແລ້ວ, ຜູ້ໃຊ້ສາມາດດາວໂຫຼດ ແລະ ຕິດຕັ້ງແພັກເກດລົງໃນສະພາບແວດລ້ອມ Python " +"ຂອງພວກເຂົາໄດ້. ໂດຍທົ່ວໄປແມ່ນເຮັດດ້ວຍ :ref:`pip`, ໂດຍໃຊ້ຄຳສັ່ງເຊັ່ນ:" + +#: ../source/flow.rst:181 +msgid "" +"End users may also use other tools like :ref:`pipenv`, :ref:`poetry`, " +"or :ref:`pdm`." +msgstr "ຜູ້ໃຊ້ອາດຈະໃຊ້ເຄື່ອງມືອື່ນໆນຳ ເຊັ່ນ :ref:`pipenv`, :ref:`poetry`, ຫຼື :ref:`pdm`." + +#: ../source/glossary.rst:3 +msgid "Glossary" +msgstr "ອະພິທານສັບ" + +#: ../source/glossary.rst:8 +msgid "Binary Distribution" +msgstr "ການແຈກຈ່າຍແບບໄບນາຣີ" + +#: ../source/glossary.rst:11 +msgid "" +"A specific kind of :term:`Built Distribution` that contains compiled " +"extensions." +msgstr "" +":term:`ຊຸດແຈກຢາຍທີ່ສ້າງແລ້ວ (Built Distribution)` ປະເພດສະເພາະທີ່ປະກອບດ້ວຍ extensions " +"ທີ່ຖືກ compile ແລ້ວ." + +#: ../source/glossary.rst:14 +msgid "Build Backend" +msgstr "ລະບົບເບື້ອງຫຼັງການສ້າງ (Build Backend)" + +#: ../source/glossary.rst:17 +msgid "" +"A library that takes a :term:`source tree ` and builds " +"a :term:`source distribution ` " +"or :term:`built distribution ` from it. The build is " +"delegated to the backend by a :term:`frontend `. All " +"backends offer a standardized interface." +msgstr "" +"ໄລບຣາຣີທີ່ນຳເອົາ :term:`ຊອດໂຄ້ດຕົ້ນສະບັບ (source tree) ` " +"ມາສ້າງເປັນ :term:`ຊຸດແຈກຢາຍແບບຊອດໂຄ້ດ ` " +"ຫຼື :term:`ຊຸດແຈກຢາຍທີ່ສ້າງແລ້ວ `. ການ build ຈະຖືກມອບໝາຍໃຫ້ " +"backend ໂດຍ :term:`frontend `. backend ທັງໝົດຈະມີ interface " +"ທີ່ເປັນມາດຕະຖານ." + +#: ../source/glossary.rst:24 +msgid "" +"Examples of build backends are :ref:`flit's flit-core `, :ref:`hatch's " +"hatchling `, :ref:`maturin`, :ref:`meson-python`, :ref:`scikit-build-" +"core`, and :ref:`setuptools`." +msgstr "" +"ຕົວຢ່າງຂອງ build backends ແມ່ນ :ref:`flit-core ຂອງ flit " +"`, :ref:`hatchling ຂອງ hatch `, :ref:`maturin`, :ref:`meson-" +"python`, :ref:`scikit-build-core`, ແລະ :ref:`setuptools`." + +#: ../source/glossary.rst:32 +msgid "Build Frontend" +msgstr "ລະບົບສ່ວນໜ້າການສ້າງ (Build Frontend)" + +#: ../source/glossary.rst:35 +msgid "" +"A tool that users might run that takes arbitrary source trees " +"or :term:`source distributions ` and " +"builds source distributions or :term:`wheels ` from them. The actual " +"building is delegated to each source tree's :term:`build backend `." +msgstr "" +"ເຄື່ອງມືທີ່ຜູ້ໃຊ້ລັນເພື່ອປ່ຽນຊອດໂຄ້ດຕົ້ນສະບັບ ຫຼື :term:`ຊຸດແຈກຢາຍແບບຊອດໂຄ້ດ ` ໃຫ້ເປັນຊຸດແຈກຢາຍແບບຊອດໂຄ້ດ ຫຼື :term:`wheels " +"`. ການ build ຕົວຈິງຈະຖືກມອບໝາຍໃຫ້ກັບ :term:`build backend ` " +"ຂອງແຕ່ລະຊອດໂຄ້ດ." + +#: ../source/glossary.rst:42 +msgid "Examples of build frontends are :ref:`pip` and :ref:`build`." +msgstr "ຕົວຢ່າງຂອງ build frontends ແມ່ນ :ref:`pip` ແລະ :ref:`build`." + +#: ../source/glossary.rst:44 +msgid "Built Distribution" +msgstr "ການແຈກຈ່າຍທີ່ສ້າງສຳເລັດແລ້ວ" + +#: ../source/glossary.rst:47 +msgid "" +"A :term:`Distribution ` format containing files and " +"metadata that only need to be moved to the correct location on the target " +"system, to be installed. :term:`Wheel` is such a format, " +"whereas :term:`Source Distribution ` is " +"not, in that it requires a build step before it can be installed. This " +"format does not imply that Python files have to be precompiled " +"(:term:`Wheel` intentionally does not include compiled Python files). " +"See :ref:`package-formats` for more information." +msgstr "" +"ຮູບແບບ :term:`ຊຸດແຈກຢາຍ (Distribution Package)` ທີ່ປະກອບດ້ວຍໄຟລ໌ ແລະ " +"ເມຕາດາຕາທີ່ພຽງແຕ່ຍ້າຍໄປໄວ້ໃນບ່ອນທີ່ຖືກຕ້ອງໃນລະບົບເປົ້າໝາຍກໍສາມາດຕິດຕັ້ງໄດ້ເລີຍ. :term:`Wheel` " +"ແມ່ນຮູບແບບດັ່ງກ່າວ, ໃນຂະນະທີ່ :term:`ຊຸດແຈກຢາຍແບບຊອດໂຄ້ດ ` ບໍ່ແມ່ນ ເພາະມັນຕ້ອງມີຂັ້ນຕອນການ build ກ່ອນຈຶ່ງຈະຕິດຕັ້ງໄດ້. " +"ຮູບແບບນີ້ບໍ່ໄດ້ໝາຍຄວາມວ່າໄຟລ໌ Python ຕ້ອງຖືກ precompile ໄວ້ກ່ອນ (:term:`Wheel` " +"ຕັ້ງໃຈທີ່ຈະບໍ່ລວມເອົາໄຟລ໌ Python ທີ່ compile ແລ້ວ). ເບິ່ງ :ref:`package-formats` " +"ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ." + +#: ../source/glossary.rst:56 +msgid "Built Metadata" +msgstr "ເມຕາດາຕາທີ່ສ້າງແລ້ວ (Built Metadata)" + +#: ../source/glossary.rst:59 +msgid "" +"The concrete form :term:`Core Metadata` takes when included inside an " +"installed :term:`Project` (``METADATA`` file) or a :term:`Distribution " +"Archive` (``PKG-INFO`` in a :term:`Sdist ` and ``METADATA`` in a :term:`Wheel`)." +msgstr "" +"ຮູບແບບຕົວຈິງຂອງ :term:`ເມຕາດາຕາຫຼັກ (Core Metadata)` ເມື່ອຖືກລວມເຂົ້າໃນ :term:`ໂຄງການ` " +"ທີ່ຕິດຕັ້ງແລ້ວ (ໄຟລ໌ ``METADATA``) ຫຼື :term:`ໄຟລ໌ຈັດເກັບຊຸດແຈກຢາຍ (Distribution " +"Archive)` (``PKG-INFO`` ໃນ :term:`Sdist ` ແລະ ``METADATA`` ໃນ :term:`Wheel`)." + +#: ../source/glossary.rst:66 +msgid "Core Metadata" +msgstr "ເມຕາດາຕາຫຼັກ (Core Metadata)" + +#: ../source/glossary.rst:69 +msgid "" +"The :ref:`specification ` and the set of :term:`Core Metadata " +"Field`\\s it defines that describe key static attributes of " +"a :term:`Distribution Package` or :term:`Installed Project`." +msgstr "" +":ref:`ຂໍ້ກຳນົດ ` ແລະ ຊຸດຂອງ :term:`ຟິວເມຕາດາຕາຫຼັກ (Core Metadata " +"Field)` ທີ່ອະທິບາຍຄຸນລັກສະນະຄົງທີ່ຂອງ :term:`ຊຸດແຈກຢາຍ (Distribution Package)` " +"ຫຼື :term:`ໂຄງການທີ່ຕິດຕັ້ງແລ້ວ (Installed Project)`." + +#: ../source/glossary.rst:74 +msgid "Core Metadata Field" +msgstr "ຟິວເມຕາດາຕາຫຼັກ (Core Metadata Field)" + +#: ../source/glossary.rst:77 +msgid "" +"A single key-value pair (or sequence of such with the same name, for " +"multiple-use fields) defined in the :term:`Core Metadata` spec and stored in " +"the :term:`Built Metadata`. Notably, distinct from a :term:`Pyproject " +"Metadata Key`." +msgstr "" +"ຄູ່ຄ່າ key-value ອັນດຽວ (ຫຼື ຊຸດຂອງຄ່າທີ່ມີຊື່ດຽວກັນ ສຳລັບຟິວທີ່ໃຊ້ໄດ້ຫຼາຍຄັ້ງ) " +"ທີ່ຖືກກຳນົດໃນຂໍ້ກຳນົດ :term:`ເມຕາດາຕາຫຼັກ` ແລະ ຖືກເກັບໄວ້ໃນ :term:`ເມຕາດາຕາທີ່ສ້າງແລ້ວ`. " +"ສິ່ງນີ້ມີຄວາມແຕກຕ່າງຈາກ :term:`ຄີເມຕາດາຕາຂອງ Pyproject (Pyproject Metadata Key)`." + +#: ../source/glossary.rst:83 +msgid "Distribution Archive" +msgstr "ໄຟລ໌ຈັດເກັບຊຸດແຈກຢາຍ (Distribution Archive)" + +#: ../source/glossary.rst:86 +msgid "" +"The physical distribution artifact (i.e. a file on disk) for " +"a :term:`Distribution Package`." +msgstr "ໄຟລ໌ຕົວຈິງ (ເຊັ່ນ ໄຟລ໌ໃນດິສກ໌) ຂອງ :term:`ຊຸດແຈກຢາຍ (Distribution Package)`." + +#: ../source/glossary.rst:89 +msgid "Distribution Package" +msgstr "ແພັກເກດການແຈກຈ່າຍ" + +#: ../source/glossary.rst:92 +msgid "" +"A versioned archive file that contains Python :term:`packages `, :term:`modules `, and other resource files that are used " +"to distribute a :term:`Release`. The archive file is what an end-user will " +"download from the internet and install." +msgstr "" +"ໄຟລ໌ຈັດເກັບທີ່ມີການລະບຸເວີຊັນ ເຊິ່ງປະກອບດ້ວຍ Python :term:`ແພັກເກດ `, :term:`ໂມດູນ `, ແລະ ໄຟລ໌ຊັບພະຍາກອນອື່ນໆ " +"ທີ່ໃຊ້ໃນການແຈກຢາຍ :term:`ລຸ້ນ (Release)`. ໄຟລ໌ຈັດເກັບນີ້ຄືສິ່ງທີ່ຜູ້ໃຊ້ຈະດາວໂຫຼດຈາກອິນເຕີເນັດ ແລະ " +"ຕິດຕັ້ງ." + +#: ../source/glossary.rst:97 +msgid "" +"A distribution package is more commonly referred to with the single words " +"\"package\" or \"distribution\", but this guide may use the expanded term " +"when more clarity is needed to prevent confusion with an :term:`Import " +"Package` (which is also commonly called a \"package\") or another kind of " +"distribution (e.g. a Linux distribution or the Python language " +"distribution), which are often referred to with the single term " +"\"distribution\". See :ref:`distribution-package-vs-import-package` for a " +"breakdown of the differences." +msgstr "" +"ຊຸດແຈກຢາຍ (distribution package) ມັກຈະຖືກເອີ້ນສັ້ນໆວ່າ \"ແພັກເກດ\" ຫຼື \"ຊຸດແຈກຢາຍ " +"(distribution)\", ແຕ່ຄູ່ມືນີ້ອາດຈະໃຊ້ຄຳເຕັມເມື່ອຕ້ອງການຄວາມຊັດເຈນ " +"ເພື່ອປ້ອງກັນຄວາມສັບສົນກັບ :term:`ແພັກເກດນຳເຂົ້າ (Import Package)` (ເຊິ່ງກໍມັກຈະຖືກເອີ້ນວ່າ " +"\"ແພັກເກດ\" ຄືກັນ) ຫຼື ການແຈກຢາຍປະເພດອື່ນໆ (ເຊັ່ນ ຊຸດແຈກຢາຍ Linux). " +"ເບິ່ງ :ref:`distribution-package-vs-import-package` ສຳລັບລາຍລະອຽດຂອງຄວາມແຕກຕ່າງ." + +#: ../source/glossary.rst:105 +msgid "Egg" +msgstr "Egg" + +#: ../source/glossary.rst:108 +msgid "" +"A :term:`Built Distribution` format introduced by :ref:`setuptools`, which " +"has been replaced by :term:`Wheel`. For details, see :ref:`egg-format`." +msgstr "" +"ຮູບແບບ :term:`ຊຸດແຈກຢາຍທີ່ສ້າງແລ້ວ (Built Distribution)` " +"ທີ່ແນະນຳໂດຍ :ref:`setuptools`, ເຊິ່ງປະຈຸບັນຖືກປ່ຽນແທນດ້ວຍ :term:`Wheel`. " +"ສຳລັບລາຍລະອຽດ, ເບິ່ງ :ref:`egg-format`." + +#: ../source/glossary.rst:111 +msgid "Extension Module" +msgstr "ໂມດູນສ່ວນເສີມ" + +#: ../source/glossary.rst:114 +msgid "" +"A :term:`Module` written in the low-level language of the Python " +"implementation: C/C++ for Python, Java for Jython. Typically contained in a " +"single dynamically loadable pre-compiled file, e.g. a shared object (.so) " +"file for Python extensions on Unix, a DLL (given the .pyd extension) for " +"Python extensions on Windows, or a Java class file for Jython extensions." +msgstr "" +":term:`ໂມດູນ` ທີ່ຂຽນດ້ວຍພາສາລະດັບຕ່ຳຂອງການນຳໃຊ້ Python: C/C++ ສຳລັບ Python, Java " +"ສຳລັບ Jython. ໂດຍປົກກະຕິຈະຖືກບັນຈຸໃນໄຟລ໌ດຽວທີ່ຖືກ pre-compile ມາແລ້ວ ແລະ " +"ສາມາດໂຫຼດໄດ້ແບບໄດນາມິກ ເຊັ່ນ ໄຟລ໌ .so ໃນ Unix, ໄຟລ໌ .pyd ໃນ Windows, ຫຼື ໄຟລ໌ Java " +"class ສຳລັບ Jython." + +#: ../source/glossary.rst:121 +msgid "Import Package" +msgstr "ແພັກເກດນຳເຂົ້າ" + +#: ../source/glossary.rst:124 +msgid "" +"A Python module which can contain other modules or recursively, other " +"packages." +msgstr "ໂມດູນ Python ທີ່ສາມາດບັນຈຸໂມດູນອື່ນໆ ຫຼື ແພັກເກດອື່ນໆຊ້ອນກັນຢູ່ພາຍໃນໄດ້." + +#: ../source/glossary.rst:127 +msgid "" +"An import package is more commonly referred to with the single word " +"\"package\", but this guide will use the expanded term when more clarity is " +"needed to prevent confusion with a :term:`Distribution Package` which is " +"also commonly called a \"package\". See :ref:`distribution-package-vs-import-" +"package` for a breakdown of the differences." +msgstr "" +"ແພັກເກດນຳເຂົ້າ (import package) ມັກຈະຖືກເອີ້ນສັ້ນໆວ່າ \"ແພັກເກດ\", " +"ແຕ່ຄູ່ມືນີ້ຈະໃຊ້ຄຳເຕັມເມື່ອຕ້ອງການຄວາມຊັດເຈນ ເພື່ອປ້ອງກັນຄວາມສັບສົນກັບ :term:`ຊຸດແຈກຢາຍ " +"(Distribution Package)` ເຊິ່ງມັກຈະຖືກເອີ້ນວ່າ \"ແພັກເກດ\" ຄືກັນ. " +"ເບິ່ງ :ref:`distribution-package-vs-import-package` ສຳລັບລາຍລະອຽດຂອງຄວາມແຕກຕ່າງ." + +#: ../source/glossary.rst:133 +msgid "Installed Project" +msgstr "ໂໂຄງການທີ່ຕິດຕັ້ງແລ້ວ (Installed Project)" + +#: ../source/glossary.rst:136 +msgid "" +"A :term:`Project` that is installed for use with a Python interpreter " +"or :term:`Virtual Environment`, as described in the " +"specification :ref:`recording-installed-packages`." +msgstr "" +":term:`ໂຄງການ` ທີ່ຖືກຕິດຕັ້ງເພື່ອໃຊ້ງານກັບ Python interpreter " +"ຫຼື :term:`ສະພາບແວດລ້ອມສະເືອນ (Virtual Environment)`, " +"ຕາມທີ່ອະທິບາຍໃນຂໍ້ກຳນົດ :ref:`recording-installed-packages`." + +#: ../source/glossary.rst:140 +msgid "Known Good Set (KGS)" +msgstr "ຊຸດທີ່ຮູ້ວ່າດີ (Known Good Set - KGS)" + +#: ../source/glossary.rst:143 +msgid "" +"A set of distributions at specified versions which are compatible with each " +"other. Typically a test suite will be run which passes all tests before a " +"specific set of packages is declared a known good set. This term is commonly " +"used by frameworks and toolkits which are comprised of multiple individual " +"distributions." +msgstr "" +"ຊຸດຂອງຊຸດແຈກຢາຍໃນເວີຊັນທີ່ລະບຸໄວ້ເຊິ່ງສາມາດໃຊ້ງານຮ່ວມກັນໄດ້. ໂດຍປົກກະຕິຈະມີການລັນຊຸດການທົດສອບ " +"(test suite) ໃຫ້ຜ່ານທັງໝົດກ່ອນທີ່ຈະປະກາດວ່າຊຸດແພັກເກດນັ້ນເປັນຊຸດທີ່ຮູ້ວ່າດີ. ຄຳສັບນີ້ມັກໃຊ້ກັບ " +"framework ແລະ toolkit ທີ່ປະກອບດ້ວຍຫຼາຍຊຸດແຈກຢາຍແຍກກັນ." + +#: ../source/glossary.rst:149 +msgid "License Classifier" +msgstr "ຕົວຈຳແນກໃບອະນຸຍາດ (License Classifier)" + +#: ../source/glossary.rst:152 +msgid "" +"A PyPI Trove classifier (as :ref:`described ` in " +"the :term:`Core Metadata` specification) which begins with ``License ::``." +msgstr "" +"ຕົວຈຳແນກ PyPI Trove (ຕາມທີ່ :ref:`ອະທິບາຍ ` " +"ໃນຂໍ້ກຳນົດ :term:`ເມຕາດາຕາຫຼັກ`) ເຊິ່ງເລີ່ມຕົ້ນດ້ວຍ ``License ::``." + +#: ../source/glossary.rst:157 ../source/specifications/license-expression.rst:3 +msgid "License Expression" +msgstr "ນິພົດໃບອະນຸຍາດ (License Expression)" + +#: ../source/glossary.rst:158 +msgid "SPDX Expression" +msgstr "ນິພົດ SPDX" + +#: ../source/glossary.rst:161 +msgid "" +"A string with valid SPDX license expression syntax, including one or more " +"SPDX :term:`License Identifier`\\(s), which describes a :term:`Distribution " +"Archive`'s license(s) and how they inter-relate. Examples: ``GPL-3.0-or-" +"later``, ``MIT AND (Apache-2.0 OR BSD-2-Clause)``" +msgstr "" +"ຂໍ້ຄວາມທີ່ມີໄວຍາກອນນິພົດໃບອະນຸຍາດ SPDX ທີ່ຖືກຕ້ອງ, ລວມເຖິງ :term:`ຕົວລະບຸໃບອະນຸຍາດ (License " +"Identifier)` ຂອງ SPDX ໜຶ່ງຢ່າງ ຫຼື ຫຼາຍກວ່າ, " +"ເຊິ່ງອະທິບາຍໃບອະນຸຍາດຂອງ :term:`ໄຟລ໌ຈັດເກັບຊຸດແຈກຢາຍ` ແລະ ຄວາມສຳພັນລະຫວ່າງພວກມັນ. " +"ຕົວຢ່າງ: ``GPL-3.0-or-later``, ``MIT AND (Apache-2.0 OR BSD-2-Clause)``" + +#: ../source/glossary.rst:169 +msgid "License Identifier" +msgstr "ຕົວລະບຸໃບອະນຸຍາດ (License Identifier)" + +#: ../source/glossary.rst:170 +msgid "SPDX Identifier" +msgstr "ຕົວລະບຸ SPDX" + +#: ../source/glossary.rst:173 +msgid "" +"A valid SPDX short-form license identifier, originally specified " +"in :pep:`639`. This includes all valid SPDX identifiers and the custom " +"``LicenseRef-[idstring]`` strings conforming to the SPDX specification. " +"Examples: ``MIT``, ``GPL-3.0-only``, ``LicenseRef-My-Custom-License``" +msgstr "" +"ຕົວລະບຸໃບອະນຸຍາດແບບສັ້ນຂອງ SPDX ທີ່ຖືກຕ້ອງ, ເຊິ່ງກຳນົດໄວ້ໃນ :pep:`639`. ສິ່ງນີ້ລວມເຖິງຕົວລະບຸ " +"SPDX ທີ່ຖືກຕ້ອງທັງໝົດ ແລະ ຂໍ້ຄວາມ ``LicenseRef-[idstring]`` ທີ່ສ້າງຂຶ້ນເອງຕາມຂໍ້ກຳນົດຂອງ " +"SPDX. ຕົວຢ່າງ: ``MIT``, ``GPL-3.0-only``, ``LicenseRef-My-Custom-License``" + +#: ../source/glossary.rst:183 +msgid "Module" +msgstr "ໂມດູນ" + +#: ../source/glossary.rst:186 +msgid "" +"The basic unit of code reusability in Python, existing in one of two " +"types: :term:`Pure Module`, or :term:`Extension Module`." +msgstr "" +"ໜ່ວຍພື້ນຖານຂອງໂຄ້ດທີ່ສາມາດນຳມາໃຊ້ໃໝ່ໄດ້ໃນ Python, ມີສອງປະເພດຄື: :term:`ໂມດູນແທ້ (Pure " +"Module)` ຫຼື :term:`ໂມດູນສ່ວນຂະຫຍາຍ (Extension Module)`." + +#: ../source/glossary.rst:189 +msgid "Package Index" +msgstr "ດັດຊະນີແພັກເກດ" + +#: ../source/glossary.rst:192 +msgid "" +"A repository of distributions with a web interface to " +"automate :term:`package ` discovery and consumption." +msgstr "" +"ຄັງເກັບຊຸດແຈກຢາຍທີ່ມີ interface ແບບເວັບ ເພື່ອຊ່ວຍໃນການຄົ້ນຫາ ແລະ ການນຳໃຊ້ :term:`ແພັກເກດ " +"` ແບບອັດຕະໂນມັດ." + +#: ../source/glossary.rst:195 +msgid "Per Project Index" +msgstr "ດັດຊະນີສະເພາະໂຄງການ (Per Project Index)" + +#: ../source/glossary.rst:198 +msgid "" +"A private or other non-canonical :term:`Package Index` indicated by a " +"specific :term:`Project` as the index preferred or required to resolve " +"dependencies of that project." +msgstr "" +":term:`ດັດຊະນີແພັກເກດ` ສ່ວນຕົວ ຫຼື ແບບອື່ນໆທີ່ບໍ່ແມ່ນມາດຕະຖານ ເຊິ່ງຖືກລະບຸໂດຍ :term:`ໂຄງການ` " +"ໃດໜຶ່ງວ່າເປັນດັດຊະນີທີ່ຕ້ອງການ ຫຼື ຈຳເປັນສຳລັບການແກ້ໄຂ dependencies ຂອງໂຄງການນັ້ນ." + +#: ../source/glossary.rst:202 ../source/guides/hosting-your-own-index.rst:62 +#: ../source/guides/index-mirrors-and-caches.rst:52 +msgid "Project" +msgstr "ໂຄງການ" + +#: ../source/glossary.rst:205 +msgid "" +"A library, framework, script, plugin, application, or collection of data or " +"other resources, or some combination thereof that is intended to be packaged " +"into a :term:`Distribution `." +msgstr "" +"ໄລບຣາຣີ, ເຟຣມເວີກ (framework), ສະຄຣິບ (script), ປລັກອິນ (plugin), ແອັບພລິເຄຊັນ, ຫຼື " +"ກຸ່ມຂອງຂໍ້ມູນ ຫຼື ຊັບພະຍາກອນອື່ນໆ, ຫຼື ສິ່ງເຫຼົ່ານີ້ລວມກັນ ເຊິ່ງຕັ້ງໃຈຈະຖືກຈັດເຮັດເປັນ :term:`ຊຸດແຈກຢາຍ " +"`." + +#: ../source/glossary.rst:209 +msgid "" +"Since most projects create :term:`Distributions ` " +"using either :pep:`518` ``build-system``, :ref:`distutils` " +"or :ref:`setuptools`, another practical way to define projects currently is " +"something that contains a :term:`pyproject.toml`, :term:`setup.py`, " +"or :term:`setup.cfg` file at the root of the project source directory." +msgstr "" +"ເນື່ອງຈາກໂຄງການສ່ວນໃຫຍ່ສ້າງ :term:`ຊຸດແຈກຢາຍ ` ໂດຍໃຊ້ ``build-" +"system`` ຕາມ :pep:`518`, :ref:`distutils` ຫຼື :ref:`setuptools`, " +"ອີກວິທີໜຶ່ງໃນການນິຍາມໂຄງການໃນປະຈຸບັນຄື " +"ສິ່ງທີ່ມີໄຟລ໌ :term:`pyproject.toml`, :term:`setup.py`, ຫຼື :term:`setup.cfg` ຢູ່ທີ່ຮາກ " +"(root) ຂອງໄດເຣັກທໍຣີຊອດໂຄ້ດຂອງໂຄງການ." + +#: ../source/glossary.rst:215 +msgid "" +"Python projects must have unique names, which are registered on :term:`PyPI " +"`. Each project will then contain one or " +"more :term:`Releases `, and each release may comprise one or " +"more :term:`distributions `." +msgstr "" +"ໂຄງການ Python ຕ້ອງມີຊື່ທີ່ບໍ່ຊ້ຳກັນ, ເຊິ່ງຖືກລົງທະບຽນໄວ້ໃນ :term:`PyPI `. ແຕ່ລະໂຄງການຈະປະກອບດ້ວຍ :term:`ລຸ້ນ (Release)` ໜຶ່ງ ຫຼື ຫຼາຍລຸ້ນ, ແລະ " +"ແຕ່ລະລຸ້ນອາດຈະປະກອບດ້ວຍ :term:`ຊຸດແຈກຢາຍ ` ໜຶ່ງ ຫຼື ຫຼາຍຊຸດ." + +#: ../source/glossary.rst:220 +msgid "" +"Note that there is a strong convention to name a project after the name of " +"the package that is imported to run that project. However, this doesn't have " +"to hold true. It's possible to install a distribution from the project 'foo' " +"and have it provide a package importable only as 'bar'." +msgstr "" +"ໃຫ້ສັງເກດວ່າມີທຳນຽມການຕັ້ງຊື່ໂຄງການຕາມຊື່ຂອງແພັກເກດທີ່ຖືກນຳເຂົ້າເພື່ອລັນໂຄງການນັ້ນ. ເຖິງຢ່າງໃດກໍຕາມ, " +"ສິ່ງນີ້ບໍ່ຈຳເປັນຕ້ອງເປັນຈິງສະເໝີໄປ. ມັນເປັນໄປໄດ້ທີ່ຈະຕິດຕັ້ງຊຸດແຈກຢາຍຈາກໂຄງການ 'foo' " +"ແຕ່ໃຫ້ແພັກເກດທີ່ນຳເຂົ້າໄດ້ໃນຊື່ 'bar' ເທົ່ານັ້ນ." + +#: ../source/glossary.rst:226 +msgid "Project Root Directory" +msgstr "ໄດເຣັກທໍຣີຮາກຂອງໂຄງການ (Project Root Directory)" + +#: ../source/glossary.rst:229 +msgid "" +"The filesystem directory in which a :term:`Project`'s :term:`source tree " +"` is located." +msgstr "" +"ໄດເຣັກທໍຣີໃນລະບົບໄຟລ໌ທີ່ :term:`ຊອດໂຄ້ດຕົ້ນສະບັບ ` " +"ຂອງ :term:`ໂຄງການ` ຕັ້ງຢູ່." + +#: ../source/glossary.rst:232 +msgid "Project Source Tree" +msgstr "ຊອດໂຄ້ດຕົ້ນສະບັບຂອງໂຄງການ (Project Source Tree)" + +#: ../source/glossary.rst:235 +msgid "" +"The on-disk format of a :term:`Project` used for development, containing its " +"raw source code before being packaged into a :term:`Source Distribution " +"` or :term:`Built Distribution`." +msgstr "" +"ຮູບແບບໃນດິສກ໌ຂອງ :term:`ໂຄງການ` ທີ່ໃຊ້ສຳລັບການພັດທະນາ, " +"ເຊິ່ງປະກອບດ້ວຍຊອດໂຄ້ດດິບກ່ອນທີ່ຈະຖືກຈັດເຮັດເປັນ :term:`ຊຸດແຈກຢາຍແບບຊອດໂຄ້ດ ` ຫຼື :term:`ຊຸດແຈກຢາຍທີ່ສ້າງແລ້ວ `." + +#: ../source/glossary.rst:241 +msgid "Project Source Metadata" +msgstr "ເມຕາດາຕາຊອດໂຄ້ດຂອງໂຄງການ (Project Source Metadata)" + +#: ../source/glossary.rst:244 +msgid "" +"Metadata defined by the package author in a :term:`Project`'s :term:`source " +"tree `, to be transformed into :term:`Core Metadata " +"field`\\s in the :term:`Built Metadata` by the project's :term:`build " +"backend `. Can be written as :term:`Pyproject Metadata`, or " +"in a tool-specific format (under the ``[tool]`` table in ``pyproject.toml``, " +"or in a tool's own configuration file)." +msgstr "" +"ເມຕາດາຕາທີ່ກຳນົດໂດຍຜູ້ຂຽນແພັກເກດໃນ :term:`ຊອດໂຄ້ດຕົ້ນສະບັບ ` " +"ຂອງ :term:`ໂຄງການ`, ເພື່ອຖືກປ່ຽນໃຫ້ເປັນ :term:`ຟິວເມຕາດາຕາຫຼັກ (Core Metadata Field)` " +"ໃນ :term:`ເມຕາດາຕາທີ່ສ້າງແລ້ວ` ໂດຍ :term:`build backend ` " +"ຂອງໂຄງການ. ສາມາດຂຽນໃນຮູບແບບ :term:`Pyproject Metadata`, ຫຼື " +"ໃນຮູບແບບສະເພາະຂອງເຄື່ອງມື (ພາຍໃຕ້ຕາຕະລາງ ``[tool]`` ໃນ ``pyproject.toml``, ຫຼື " +"ໃນໄຟລ໌ກຳນົດຄ່າຂອງເຄື່ອງມືນັ້ນເອງ)." + +#: ../source/glossary.rst:254 +msgid "Pure Module" +msgstr "ໂມດູນບໍລິສຸດ" + +#: ../source/glossary.rst:257 +msgid "" +"A :term:`Module` written in Python and contained in a single ``.py`` file " +"(and possibly associated ``.pyc`` and/or ``.pyo`` files)." +msgstr "" +":term:`ໂໂມດູນ` ທີ່ຂຽນດ້ວຍ Python ແລະ ຖືກບັນຈຸໃນໄຟລ໌ ``.py`` ພຽງໄຟລ໌ດຽວ (ແລະ ອາດຈະມີໄຟລ໌ " +"``.pyc`` ແລະ/ຫຼື ``.pyo`` ທີ່ກ່ຽວຂ້ອງ)." + +#: ../source/glossary.rst:260 +msgid "Pyproject Metadata" +msgstr "ເມຕາດາຕາ Pyproject" + +#: ../source/glossary.rst:263 +msgid "" +"The :term:`Project Source Metadata` format defined by the :ref:`declaring-" +"project-metadata` specification and originally introduced in :pep:`621`, " +"stored as :term:`Pyproject Metadata Key`\\s under the ``[project]`` table of " +"a :term:`pyproject.toml` file. Notably, *not* a tool-specific source " +"metadata format under the ``[tool]`` table in ``pyproject.toml``." +msgstr "" +"ຮູບແບບ :term:`ເມຕາດາຕາຊອດໂຄ້ດຂອງໂຄງການ` ທີ່ກຳນົດໂດຍຂໍ້ກຳນົດ :ref:`declaring-project-" +"metadata` ແລະ ເລີ່ມໃຊ້ໃນ :pep:`621`, ຖືກເກັບໄວ້ໃນຮູບແບບ :term:`ຄີເມຕາດາຕາຂອງ " +"Pyproject (Pyproject Metadata Key)` ພາຍໃຕ້ຕາຕະລາງ ``[project]`` " +"ຂອງໄຟລ໌ :term:`pyproject.toml`. ໃຫ້ສັງເກດວ່າ ສິ່ງນີ້ *ບໍ່ແມ່ນ* " +"ຮູບແບບເມຕາດາຕາສະເພາະຂອງເຄື່ອງມືພາຍໃຕ້ຕາຕະລາງ ``[tool]``." + +#: ../source/glossary.rst:271 +msgid "Pyproject Metadata Key" +msgstr "ຄີເມຕາດາຕາ Pyproject" + +#: ../source/glossary.rst:274 +msgid "" +"A top-level TOML key in the ``[project]`` table in ``pyproject.toml``; part " +"of the :term:`Pyproject Metadata`. Notably, distinct from a :term:`Core " +"Metadata Field`." +msgstr "" +"ຄີ TOML ລະດັບສູງສຸດໃນຕາຕະລາງ ``[project]`` ໃນ ``pyproject.toml``; " +"ເປັນສ່ວນໜຶ່ງຂອງ :term:`ເມຕາດາຕາ Pyproject`. ມີຄວາມແຕກຕ່າງຈາກ :term:`ຟິວເມຕາດາຕາຫຼັກ " +"(Core Metadata Field)`." + +#: ../source/glossary.rst:278 +msgid "Pyproject Metadata Subkey" +msgstr "ຄີຍ່ອຍເມຕາດາຕາ Pyproject" + +#: ../source/glossary.rst:281 +msgid "" +"A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." +msgstr "ຄີ TOML ລະດັບທີສອງ ພາຍໃຕ້ :term:`ຄີເມຕາດາຕາ Pyproject` ທີ່ມີຄ່າເປັນຕາຕະລາງ." + +#: ../source/glossary.rst:284 +msgid "Python Packaging Authority (PyPA)" +msgstr "Python Packaging Authority (PyPA)" + +#: ../source/glossary.rst:287 +msgid "" +"PyPA is a working group that maintains many of the relevant projects in " +"Python packaging. They maintain a site at :doc:`pypa.io `, host " +"projects on `GitHub `_, and discuss issues on the " +"`distutils-sig mailing list `_ and `the Python Discourse forum `__." +msgstr "" +"PyPA ແມ່ນກຸ່ມເຮັດວຽກທີ່ເບິ່ງແຍງຫຼາຍໂຄງການທີ່ກ່ຽວຂ້ອງກັບການຈັດເຮັດແພັກເກດ Python. " +"ພວກເຂົາດູແລເວັບໄຊ :doc:`pypa.io `, ເກັບໂຄງການໄວ້ໃນ `GitHub `_, ແລະ ສົນທະນາບັນຫາຕ່າງໆໃນ `ລາຍຊື່ຜູ້ຮັບອີເມວ distutils-sig `_ ແລະ `ເວັບບອດ " +"Python Discourse `__." + +#: ../source/glossary.rst:295 +msgid "Python Package Index (PyPI)" +msgstr "Python Package Index (PyPI)" + +#: ../source/glossary.rst:298 +msgid "" +"`PyPI `_ is the default :term:`Package Index` for the " +"Python community. It is open to all Python developers to consume and " +"distribute their distributions." +msgstr "" +"`PyPI `_ ແມ່ນ :term:`ດັດຊະນີແພັກເກດ` ເລີ່ມຕົ້ນສຳລັບຊຸມຊົນ Python. " +"ມັນເປີດໃຫ້ຜູ້ພັດທະນາ Python ທຸກຄົນສາມາດນຳໃຊ້ ແລະ ແຈກຢາຍຊຸດແຈກຢາຍຂອງພວກເຂົາໄດ້." + +#: ../source/glossary.rst:301 +msgid "pypi.org" +msgstr "pypi.org" + +#: ../source/glossary.rst:304 +msgid "" +"`pypi.org `_ is the domain name for the :term:`Python " +"Package Index (PyPI)`. It replaced the legacy index domain name, " +"``pypi.python.org``, in 2017. It is powered by :ref:`warehouse`." +msgstr "" +"`pypi.org `_ ແມ່ນຊື່ໂດເມນຂອງ :term:`Python Package Index " +"(PyPI)`. ມັນຖືກນຳມາແທນຊື່ໂດເມນເກົ່າ ``pypi.python.org`` ໃນປີ 2017. " +"ມັນເຮັດວຽກດ້ວຍ :ref:`warehouse`." + +#: ../source/glossary.rst:308 +msgid "pyproject.toml" +msgstr "pyproject.toml" + +#: ../source/glossary.rst:311 +msgid "" +"The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." +msgstr "ໄຟລ໌ຂໍ້ກຳນົດ :term:`ໂຄງການ` ທີ່ບໍ່ຂຶ້ນກັບເຄື່ອງມືໃດໜຶ່ງ. ຖືກກຳນົດໃນ :pep:`518`." + +#: ../source/glossary.rst:313 +msgid "Release" +msgstr "ລຸ້ນ (Release)" + +#: ../source/glossary.rst:316 +msgid "" +"A snapshot of a :term:`Project` at a particular point in time, denoted by a " +"version identifier." +msgstr "ສະຖານະຂອງ :term:`ໂຄງການ` ໃນເວລາໃດໜຶ່ງ, ເຊິ່ງຖືກລະບຸດ້ວຍຕົວລະບຸເວີຊັນ." + +#: ../source/glossary.rst:319 +msgid "" +"Making a release may entail the publishing of multiple :term:`Distributions " +"`. For example, if version 1.0 of a project was " +"released, it could be available in both a source distribution format and a " +"Windows installer distribution format." +msgstr "" +"ການປ່ອຍລຸ້ນ (release) ອາດຈະລວມເຖິງການເຜີຍແຜ່ຫຼາຍ :term:`ຊຸດແຈກຢາຍ `. ຕົວຢ່າງ: ຖ້າເວີຊັນ 1.0 ຂອງໂຄງການຖືກປ່ອຍອອກມາ, " +"ມັນອາດຈະມີໃຫ້ໃຊ້ທັງໃນຮູບແບບຊຸດແຈກຢາຍແບບຊອດໂຄ້ດ ແລະ ຮູບແບບຕົວຕິດຕັ້ງສຳລັບ Windows." + +#: ../source/glossary.rst:324 +msgid "Requirement" +msgstr "ຄວາມຕ້ອງການ (Requirement)" + +#: ../source/glossary.rst:327 +msgid "" +"A specification for a :term:`package ` to be " +"installed. :ref:`pip`, the :term:`PYPA ` " +"recommended installer, allows various forms of specification that can all be " +"considered a \"requirement\". For more information, see the :ref:`pip:pip " +"install` reference." +msgstr "" +"ຂໍ້ກຳນົດສຳລັບ :term:`ແພັກເກດ ` ທີ່ຈະຕິດຕັ້ງ. :ref:`pip`, " +"ເຊິ່ງເປັນເຄື່ອງມືຕິດຕັ້ງທີ່ :term:`PYPA ` ແນະນຳ, " +"ອະນຸຍາດໃຫ້ລະບຸໄດ້ຫຼາຍຮູບແບບເຊິ່ງທັງໝົດຖືວ່າເປັນ \"ຄວາມຕ້ອງການ\". ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, " +"ເບິ່ງເອກະສານອ້າງອີງ :ref:`pip:pip install`." + +#: ../source/glossary.rst:333 +msgid "Requirement Specifier" +msgstr "ຕົວລະບຸຂໍ້ກຳນົດ" + +#: ../source/glossary.rst:336 +msgid "" +"A format used by :ref:`pip` to install packages from a :term:`Package " +"Index`. For an EBNF diagram of the format, see :ref:`dependency-specifiers`. " +"For example, \"foo>=1.3\" is a requirement specifier, where \"foo\" is the " +"project name, and the \">=1.3\" portion is the :term:`Version Specifier`" +msgstr "" +"ຮູບແບບທີ່ :ref:`pip` ໃຊ້ເພື່ອຕິດຕັ້ງແພັກເກດຈາກ :term:`ດັດຊະນີແພັກເກດ`. ສຳລັບແຜນວາດ EBNF " +"ຂອງຮູບແບບນີ້, ເບິ່ງ :ref:`dependency-specifiers`. ຕົວຢ່າງ: \"foo>=1.3\" " +"ແມ່ນຕົວລະບຸຄວາມຕ້ອງການ, ໂດຍທີ່ \"foo\" ແມ່ນຊື່ໂຄງການ ແລະ ສ່ວນ \">=1.3\" " +"ແມ່ນ :term:`ຕົວລະບຸເວີຊັນ (Version Specifier)`." + +#: ../source/glossary.rst:341 +msgid "Requirements File" +msgstr "ໄຟລ໌ລາຍການຄວາມຕ້ອງການ (Requirements File)" + +#: ../source/glossary.rst:344 +msgid "" +"A file containing a list of :term:`Requirements ` that can be " +"installed using :ref:`pip`. For more information, see the :ref:`pip` docs " +"on :ref:`pip:Requirements Files`." +msgstr "" +"ໄຟລ໌ທີ່ບັນຈຸລາຍຊື່ຂອງ :term:`ຄວາມຕ້ອງການ ` " +"ທີ່ສາມາດຕິດຕັ້ງໄດ້ໂດຍໃຊ້ :ref:`pip`. ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ເບິ່ງເອກະສານ :ref:`pip` " +"ກ່ຽວກັບ :ref:`pip:Requirements Files`." + +#: ../source/glossary.rst:348 +msgid "Root License Directory" +msgstr "ໄໄດເຣັກທໍຣີຮາກຂອງໃບອະນຸຍາດ (Root License Directory)" + +#: ../source/glossary.rst:349 +msgid "License Directory" +msgstr "ໄໄດເຣັກທໍຣີໃບອະນຸຍາດ (License Directory)" + +#: ../source/glossary.rst:352 +msgid "" +"The directory under which license files are stored in a :term:`Project " +"Source Tree`, :term:`Distribution Archive` or :term:`Installed Project`. For " +"a :term:`Project Source Tree` or :term:`Source Distribution (or \"sdist\")`, " +"this is the :term:`Project Root Directory`. For a :term:`Built Distribution` " +"or :term:`Installed Project`, this is the :file:`.dist-info/licenses/` " +"directory of the wheel archive or project folder respectively. Also, the " +"root directory that paths recorded in the ``License-File`` :term:`Core " +"Metadata Field` are relative to." +msgstr "" +"ໄດເຣັກທໍຣີທີ່ເກັບຮັກສາໄຟລ໌ໃບອະນຸຍາດໄວ້ໃນ :term:`Project Source " +"Tree`, :term:`Distribution Archive` ຫຼື :term:`Installed Project`. " +"ສໍາລັບ :term:`Project Source Tree` ຫຼື :term:`Source Distribution (ຫຼື " +"\"sdist\")`, ນີ້ແມ່ນ :term:`Project Root Directory`. ສໍາລັບ :term:`Built " +"Distribution` ຫຼື :term:`Installed Project`, ນີ້ແມ່ນໄດເຣັກທໍຣີ :file:`.dist-info/" +"licenses/` ຂອງ wheel archive ຫຼື ໂຟນເດີໂຄງການຕາມລໍາດັບ. ນອກຈາກນັ້ນ, " +"ຍັງເປັນໄດເຣັກທໍຣີຮາກທີ່ເສັ້ນທາງເຊິ່ງຖືກບັນທຶກໄວ້ໃນ ``License-File`` :term:`Core Metadata " +"Field` ອ້າງອີງໃສ່." + +#: ../source/glossary.rst:365 +#: ../source/guides/distributing-packages-using-setuptools.rst:59 +msgid "setup.py" +msgstr "setup.py" + +#: ../source/glossary.rst:366 +#: ../source/guides/distributing-packages-using-setuptools.rst:80 +msgid "setup.cfg" +msgstr "setup.cfg" + +#: ../source/glossary.rst:369 +msgid "" +"The project specification files for :ref:`distutils` and :ref:`setuptools`. " +"See also :term:`pyproject.toml`." +msgstr "" +"ໄໄຟລ໌ຂໍ້ກຳນົດໂຄງການສຳລັບ :ref:`distutils` ແລະ :ref:`setuptools`. " +"ເບິ່ງ :term:`pyproject.toml` ປະກອບນຳ." + +#: ../source/glossary.rst:372 +msgid "Source Archive" +msgstr "ໄຟລ໌ຈັດເກັບຊອດໂຄ້ດ" + +#: ../source/glossary.rst:375 +msgid "" +"An archive containing the raw source code for a :term:`Release`, prior to " +"creation of a :term:`Source Distribution ` or :term:`Built Distribution`." +msgstr "" +"ໄໄຟລ໌ຈັດເກັບທີ່ປະກອບດ້ວຍຊອດໂຄ້ດດິບສຳລັບ :term:`ລຸ້ນ (Release)`, " +"ກ່ອນທີ່ຈະມີການສ້າງ :term:`ຊຸດແຈກຢາຍແບບຊອດໂຄ້ດ (sdist)` ຫຼື :term:`ຊຸດແຈກຢາຍທີ່ສ້າງແລ້ວ`." + +#: ../source/glossary.rst:379 +msgid "Source Distribution (or \"sdist\")" +msgstr "ຊຸດແຈກຢາຍແບບຊອດໂຄ້ດ (ຫຼື \"sdist\")" + +#: ../source/glossary.rst:382 +msgid "" +"A :term:`distribution ` format (usually generated " +"using ``python -m build --sdist``) that provides metadata and the essential " +"source files needed for installing by a tool like :ref:`pip`, or for " +"generating a :term:`Built Distribution`. See :ref:`package-formats` for more " +"information." +msgstr "" +"ຮູບແບບ :term:`ຊຸດແຈກຢາຍ ` (ປົກກະຕິສ້າງໂດຍໃຊ້ ``python -m " +"build --sdist``) ທີ່ໃຫ້ເມຕາດາຕາ ແລະ " +"ໄຟລ໌ຊອດໂຄ້ດທີ່ຈຳເປັນສຳລັບການຕິດຕັ້ງດ້ວຍເຄື່ອງມືຢ່າງ :ref:`pip`, ຫຼື " +"ສຳລັບການສ້າງ :term:`ຊຸດແຈກຢາຍທີ່ສ້າງແລ້ວ`. ເບິ່ງ :ref:`package-formats` ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ." + +#: ../source/glossary.rst:388 +msgid "System Package" +msgstr "ແພັກເກດຂອງລະບົບ (System Package)" + +#: ../source/glossary.rst:391 +msgid "" +"A package provided in a format native to the operating system, e.g. an rpm " +"or dpkg file." +msgstr "ແພັກເກດທີ່ໃຫ້ມາໃນຮູບແບບມາດຕະຖານຂອງລະບົບປະຕິບັດການ, ເຊັ່ນ ໄຟລ໌ rpm ຫຼື dpkg." + +#: ../source/glossary.rst:394 +msgid "Version Specifier" +msgstr "ຕົວລະບຸເວີຊັນ" + +#: ../source/glossary.rst:397 +msgid "" +"The version component of a :term:`Requirement Specifier`. For example, the " +"\">=1.3\" portion of \"foo>=1.3\". Read the :ref:`Version specifier " +"specification ` for a full description of the specifiers " +"that Python packaging currently supports. Support for this specification " +"was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." +msgstr "" +"ສ່ວນປະກອບຂອງເວີຊັນໃນ :term:`ຕົວລະບຸຄວາມຕ້ອງການ (Requirement Specifier)`. ຕົວຢ່າງເຊັ່ນ " +"ສ່ວນ \">=1.3\" ໃນ \"foo>=1.3\". ສາມາດອ່ານ :ref:`ຂໍ້ກຳນົດຕົວລະບຸເວີຊັນ ` ສຳລັບລາຍລະອຽດທັງໝົດຂອງຕົວລະບຸທີ່ການຈັດເຮັດແພັກເກດ Python ຮອງຮັບໃນປະຈຸບັນ. " +"ການຮອງຮັບຂໍ້ກຳນົດນີ້ຖືກເລີ່ມໃຊ້ໃນ :ref:`setuptools` v8.0 ແລະ :ref:`pip` v6.0." + +#: ../source/glossary.rst:402 +msgid "Virtual Environment" +msgstr "ສະພາບແວດລ້ອມສະເໝືອນ (Virtual Environment)" + +#: ../source/glossary.rst:405 +msgid "" +"An isolated Python environment that allows packages to be installed for use " +"by a particular application, rather than being installed system wide. For " +"more information, see the section on :ref:`Creating and using Virtual " +"Environments`." +msgstr "" +"ສະພາບແວດລ້ອມ Python ທີ່ຖືກແຍກອອກມາຕ່າງຫາກ " +"ເພື່ອໃຫ້ສາມາດຕິດຕັ້ງແພັກເກດສຳລັບໃຊ້ໃນແອັບພລິເຄຊັນໃດໜຶ່ງໂດຍສະເພາະ, ແທນທີ່ຈະຕິດຕັ້ງລົງໃນລະບົບທັງໝົດ. " +"ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ເບິ່ງພາກ :ref:`ການສ້າງ ແລະ ການໃຊ້ສະພາບແວດລ້ອມສະເໝືອນ`." + +#: ../source/glossary.rst:410 +msgid "Wheel Format" +msgstr "ຮູບແບບ Wheel" + +#: ../source/glossary.rst:411 +msgid "Wheel" +msgstr "Wheel" + +#: ../source/glossary.rst:414 +msgid "" +"The standard :term:`Built Distribution` format originally introduced " +"in :pep:`427` and defined by the :ref:`binary-distribution-format` " +"specification. See :ref:`package-formats` for more information. Not to be " +"confused with its reference implementation, the :term:`Wheel Project`." +msgstr "" +"ຮູບແບບ :term:`ຊຸດແຈກຢາຍທີ່ສ້າງແລ້ວ` ມາດຕະຖານ ທີ່ເລີ່ມໃຊ້ໃນ :pep:`427` ແລະ " +"ກຳນົດໂດຍຂໍ້ກຳນົດ :ref:`binary-distribution-format`. ເບິ່ງ :ref:`package-formats` " +"ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ. ຢ່າສັບສົນກັບຕົວການນຳໃຊ້ຕົວຈິງ (reference implementation) " +"ທີ່ຊື່ວ່າ :term:`Wheel Project`." + +#: ../source/glossary.rst:421 +msgid "Wheel Project" +msgstr "Wheel Project" + +#: ../source/glossary.rst:424 +msgid "" +"The PyPA reference implementation of the :term:`Wheel Format`; " +"see :ref:`wheel`." +msgstr "ການນຳໃຊ້ຕົວຈິງອ້າງອີງຂອງ PyPA ສຳລັບ :term:`ຮູບແບບ Wheel`; ເບິ່ງ :ref:`wheel`." + +#: ../source/glossary.rst:426 +msgid "Working Set" +msgstr "Working Set" + +#: ../source/glossary.rst:429 +msgid "" +"A collection of :term:`distributions ` available for " +"importing. These are the distributions that are on the `sys.path` variable. " +"At most, one :term:`Distribution ` for a project is " +"possible in a working set." +msgstr "" +"ກຸ່ມຂອງ :term:`ຊຸດແຈກຢາຍ ` ທີ່ມີໃຫ້ສາມາດນຳເຂົ້າໄດ້. " +"ເຫຼົ່ານີ້ແມ່ນຊຸດແຈກຢາຍທີ່ຢູ່ໃນຕົວປ່ຽນ `sys.path`. ໃນ working set ໜຶ່ງ, ຈະມີ :term:`ຊຸດແຈກຢາຍ " +"` ຂອງໂຄງການໃດໜຶ່ງໄດ້ພຽງຊຸດດຽວເທົ່ານັ້ນ." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:5 +msgid "Analyzing PyPI package downloads" +msgstr "ການວິເຄາະການດາວໂຫຼດແພັກເກດຈາກ PyPI" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:7 +msgid "" +"This section covers how to use the public PyPI download statistics dataset " +"to learn more about downloads of a package (or packages) hosted on PyPI. For " +"example, you can use it to discover the distribution of Python versions used " +"to download a package." +msgstr "" +"ພາກນີ້ອະທິບາຍວິທີການໃຊ້ຂໍ້ມູນສະຖິຕິການດາວໂຫຼດ PyPI ແບບສາທາລະນະ " +"ເພື່ອຮຽນຮູ້ເພີ່ມເຕີມກ່ຽວກັບການດາວໂຫຼດແພັກເກດທີ່ຢູ່ເທິງ PyPI. ຕົວຢ່າງ: " +"ທ່ານສາມາດໃຊ້ມັນເພື່ອເບິ່ງສັດສ່ວນຂອງເວີຊັນ Python ທີ່ຖືກໃຊ້ໃນການດາວໂຫຼດແພັກເກດ." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:14 +#: ../source/guides/supporting-windows-using-appveyor.rst:17 +msgid "Background" +msgstr "ຄວາມເປັນມາ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:16 +msgid "PyPI does not display download statistics for a number of reasons: [#]_" +msgstr "PyPI ບໍ່ສະແດງສະຖິຕິການດາວໂຫຼດຍ້ອນເຫດຜົນຫຼາຍປະການ: [#]_" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:18 +msgid "" +"**Inefficient to make work with a Content Distribution Network (CDN):** " +"Download statistics change constantly. Including them in project pages, " +"which are heavily cached, would require invalidating the cache more often, " +"and reduce the overall effectiveness of the cache." +msgstr "" +"**ຂາດປະສິດທິພາບໃນການເຮັດວຽກຮ່ວມກັບ Content Distribution Network (CDN):** " +"ສະຖິຕິການດາວໂຫຼດມີການປ່ຽນແປງຕະຫຼອດເວລາ. ການສະແດງສະຖິຕິເຫຼົ່ານີ້ໃນໜ້າໂຄງການ (ເຊິ່ງມີການໃຊ້ " +"cache ຢ່າງໜັກ) ຈະເຮັດໃຫ້ຕ້ອງມີການລ້າງ cache ດຸຂຶ້ນ, ແລະ ຫຼຸດປະສິດທິພາບໂດຍລວມຂອງ cache ລົງ." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:23 +msgid "" +"**Highly inaccurate:** A number of things prevent the download counts from " +"being accurate, some of which include:" +msgstr "**ຂາດຄວາມແມ່ັນຢຳຢ່າງສູງ:** ມີຫຼາຍປັດໄຈທີ່ເຮັດໃຫ້ການນັບຈຳນວນການດາວໂຫຼດບໍ່ແມ່ັນຢຳ, ເຊັ່ນ:" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:26 +msgid "``pip``'s download cache (lowers download counts)" +msgstr "cache ການດາວໂຫຼດຂອງ ``pip`` (ເຮັດໃຫ້ຈຳນວນການດາວໂຫຼດຕໍ່າກວ່າຄວາມເປັນຈິງ)" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:27 +msgid "" +"Internal or unofficial mirrors (can both raise or lower download counts)" +msgstr "Mirror ພາຍໃນ ຫຼື Mirror ທີ່ບໍ່ເປັນທາງການ (ອາດເຮັດໃຫ້ຈຳນວນການດາວໂຫຼດສູງຂຶ້ນ ຫຼື ຫຼຸດລົງ)" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:28 +msgid "Packages not hosted on PyPI (for comparisons sake)" +msgstr "ແພັກເກດທີ່ບໍ່ໄດ້ຢູ່ເທິງ PyPI (ເຮັດໃຫ້ປຽບທຽບໄດ້ຍາກ)" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:29 +msgid "" +"Unofficial scripts or attempts at download count inflation (raises download " +"counts)" +msgstr "" +"ສະຄຣິບທີ່ບໍ່ເປັນທາງການ ຫຼື ຄວາມພະຍາຍາມໃນການປັ້ມຍອດການດາວໂຫຼດ " +"(ເຮັດໃຫ້ຈຳນວນການດາວໂຫຼດສູງເກີນຈິງ)" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:31 +msgid "Known historical data quality issues (lowers download counts)" +msgstr "ບັນຫາດ້ານຄຸນນະພາບຂໍ້ມູນໃນອະດີດ (ເຮັດໃຫ້ຈຳນວນການດາວໂຫຼດຕໍ່າກວ່າຄວາມເປັນຈິງ)" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:33 +msgid "" +"**Not particularly useful:** Just because a project has been downloaded a " +"lot doesn't mean it's good; Similarly just because a project hasn't been " +"downloaded a lot doesn't mean it's bad!" +msgstr "" +"**ບໍ່ມີປະໂຫຍດຫຼາຍປານໃດ:** ພຽງແຕ່ໂຄງການມີຍອດດາວໂຫຼດຫຼາຍ ບໍ່ໄດ້ໝາຍຄວາມວ່າມັນດີ; " +"ໃນທຳນອງດຽວກັນ, ໂຄງການທີ່ມິຍອດດາວໂຫຼດໜ້ອຍ ກໍບໍ່ໄດ້ໝາຍຄວາມວ່າມັນບໍ່ດີ!" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:37 +msgid "" +"In short, because its value is low for various reasons, and the tradeoffs " +"required to make it work are high, it has been not an effective use of " +"limited resources." +msgstr "" +"ສະຫຼຸບຄື, ເນື່ອງຈາກຄຸນຄ່າຂອງມັນຕໍ່າດ້ວຍເຫດຜົນຕ່າງໆ ແລະ ຄວາມຫຍຸ້ງຍາກໃນການເຮັດໃຫ້ມັນໃຊ້ງານໄດ້ມີສູງ, " +"ມັນຈຶ່ງບໍ່ແມ່ນການໃຊ້ຊັບພະຍາກອນທີ່ມີຈຳກັດຢ່າງມີປະສິດທິພາບ." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:42 +msgid "Public dataset" +msgstr "ຊຸດຂໍ້ມູນສາທາລະນະ (Public dataset)" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:44 +msgid "" +"As an alternative, the `Linehaul project `__ streams download logs from PyPI to `Google BigQuery`_ " +"[#]_, where they are stored as a public dataset." +msgstr "" +"ເພື່ອເປັນທາງເລືອກ, `ໂຄງການ Linehaul `__ ຈະສົ່ງຂໍ້ມູນບັນທຶກ (logs) ການດາວໂຫຼດຈາກ PyPI ໄປທີ່ `Google BigQuery`_ " +"[#]_, ເຊິ່ງພວກມັນຈະຖືກເກັບໄວ້ເປັນຊຸດຂໍ້ມູນສາທາລະນະ." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:49 +msgid "Getting set up" +msgstr "ການຕັ້ງຄ່າເພື່ອເລີ່ມຕົ້ນ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:51 +msgid "" +"In order to use `Google BigQuery`_ to query the `public PyPI download " +"statistics dataset`_, you'll need a Google account and to enable the " +"BigQuery API on a Google Cloud Platform project. You can run up to 1TB of " +"queries per month `using the BigQuery free tier without a credit card " +"`__" +msgstr "" +"ໃນການໃຊ້ `Google BigQuery`_ ເພື່ອສອບຖາມ (query) `ຊຸດຂໍ້ມູນສະຖິຕິການດາວໂຫຼດ PyPI " +"ສາທາລະນະ`_, ທ່ານຕ້ອງມີບັນຊີ Google ແລະ ເປີດໃຊ້ BigQuery API ໃນໂຄງການ Google Cloud " +"Platform. ທ່ານສາມາດສອບຖາມຂໍ້ມູນໄດ້ຟຣີສູງສຸດ 1TB ຕໍ່ເດືອນ `ໂດຍໃຊ້ BigQuery free tier " +"ໂດຍບໍ່ຕ້ອງມີບັດເຄຣດິດ `__" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:57 +msgid "Navigate to the `BigQuery web UI`_." +msgstr "ໄປທີ່ `BigQuery web UI`_." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:58 +msgid "Create a new project." +msgstr "ສ້າງໂຄງການໃໝ່." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:59 +msgid "" +"Enable the `BigQuery API `__." +msgstr "" +"ເປີດໃຊ້ `BigQuery API `__." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:62 +msgid "" +"For more detailed instructions on how to get started with BigQuery, check " +"out the `BigQuery quickstart guide `__." +msgstr "" +"ສຳລັບຄຳແນະນຳລະອຽດກ່ຽວກັບການເລີ່ມຕົ້ນໃຊ້ BigQuery, ສາມາດເບິ່ງໄດ້ທີ່ `ຄູ່ມືເລີ່ມຕົ້ນ BigQuery " +"`__." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:68 +msgid "Data schema" +msgstr "ໂຄງສ້າງຂໍ້ມູນ (Data schema)" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:70 +msgid "" +"Linehaul writes an entry in a ``bigquery-public-data.pypi.file_downloads`` " +"table for each download. The table contains information about what file was " +"downloaded and how it was downloaded. Some useful columns from the `table " +"schema `__ include:" +msgstr "" +"Linehaul ຈະບັນທຶກຂໍ້ມູນລົງໃນຕາຕະລາງ ``bigquery-public-data.pypi.file_downloads`` " +"ສຳລັບແຕ່ລະການດາວໂຫຼດ. ຕາຕະລາງນີ້ປະກອບດ້ວຍຂໍ້ມູນວ່າໄຟລ໌ໃດຖືກດາວໂຫຼດ ແລະ ດາວໂຫຼດແນວໃດ. " +"ບາງຄໍລຳ (column) ທີ່ເປັນປະໂຫຍດຈາກ `ໂຄງສ້າງຕາຕະລາງ `__ ມີດັ່ງນີ້:" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:77 +msgid "Column" +msgstr "ຄໍລຳ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:77 +#: ../source/specifications/core-metadata.rst:214 +#: ../source/specifications/well-known-project-urls.rst:106 +msgid "Description" +msgstr "ຄຳອະທິບາຍ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:77 +#: ../source/specifications/dependency-groups.rst:23 +#: ../source/specifications/dependency-specifiers.rst:33 +#: ../source/specifications/direct-url-data-structure.rst:242 +#: ../source/specifications/version-specifiers.rst:1085 +msgid "Examples" +msgstr "ຕົວຢ່າງ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:79 +msgid "timestamp" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:79 +msgid "Date and time" +msgstr "ວັນທີ ແລະ ເວລາ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:79 +msgid "``2020-03-09 00:33:03 UTC``" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:81 +msgid "file.project" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:81 +msgid "Project name" +msgstr "ຊື່ໂຄງການ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:81 +msgid "``pipenv``, ``nose``" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:83 +msgid "file.version" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:83 +msgid "Package version" +msgstr "ເວີຊັນຂອງແພັກເກດ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:83 +msgid "``0.1.6``, ``1.4.2``" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:85 +msgid "details.installer.name" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:85 +msgid "Installer" +msgstr "ເຄື່ອງມືຕິດຕັ້ງ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:85 +msgid "pip, :ref:`bandersnatch`" +msgstr "pip, :ref:`bandersnatch`" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:87 +msgid "details.python" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:87 +msgid "Python version" +msgstr "ເວີຊັນ Python" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:87 +msgid "``2.7.12``, ``3.6.4``" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:92 +msgid "Useful queries" +msgstr "ຄຳສັ່ງສອບຖາມ (query) ທີ່ເປັນປະໂຫຍດ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:94 +msgid "" +"Run queries in the `BigQuery web UI`_ by clicking the \"Compose query\" " +"button." +msgstr "ລັນຄຳສັ່ງສອບຖາມໃນ `BigQuery web UI`_ ໂດຍການຄລິກປຸ່ມ \"Compose query\"." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:96 +msgid "" +"Note that the rows are stored in a partitioned table, which helps limit the " +"cost of queries. These example queries analyze downloads from recent history " +"by filtering on the ``timestamp`` column." +msgstr "" +"ໃຫ້ສັງເກດວ່າແຖວຂໍ້ມູນຖືກເກັບໄວ້ໃນຕາຕະລາງແບບ partitioned, " +"ເຊິ່ງຊ່ວຍຈຳກັດຄ່າໃຊ້ຈ່າຍໃນການສອບຖາມ. " +"ຕົວຢ່າງຄຳສັ່ງເຫຼົ່ານີ້ຈະວິເຄາະການດາວໂຫຼດຈາກປະຫວັດຫຼ້າສຸດໂດຍການກັ່ນຕອງ (filter) ຈາກຄໍລຳ " +"``timestamp``." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:101 +msgid "Counting package downloads" +msgstr "ການນັບຈຳນວນການດາວໂຫຼດແພັກເກດ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:103 +msgid "" +"The following query counts the total number of downloads for the project " +"\"pytest\"." +msgstr "ຄຳສັ່ງຕໍ່ໄປນີ້ຈະນັບຈຳນວນການດາວໂຫຼດທັງໝົດຂອງໂຄງການ \"pytest\"." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:118 +#: ../source/guides/analyzing-pypi-package-downloads.rst:139 +#: ../source/guides/analyzing-pypi-package-downloads.rst:167 +#: ../source/guides/analyzing-pypi-package-downloads.rst:204 +msgid "num_downloads" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:120 +msgid "26190085" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:123 +msgid "" +"To count downloads from pip only, filter on the ``details.installer.name`` " +"column." +msgstr "" +"ໃນການນັບຈຳນວນການດາວໂຫຼດຈາກ pip ເທົ່ານັ້ນ, ໃຫ້ກັ່ນຕອງຈາກຄໍລຳ ``details.installer.name``." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:141 +msgid "24334215" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:145 +msgid "Package downloads over time" +msgstr "ຈຳນວນການດາວໂຫຼດແພັກເກດຕາມໄລຍະເວລາ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:147 +msgid "" +"To group by monthly downloads, use the ``TIMESTAMP_TRUNC`` function. Also " +"filtering by this column reduces corresponding costs." +msgstr "" +"ໃນການຈັດກຸ່ມການດາວໂຫຼດຕາມເດືອນ, ໃຫ້ໃຊ້ຟັງຊັນ ``TIMESTAMP_TRUNC``. ນອກຈາກນີ້ " +"ການກັ່ນຕອງດ້ວຍຄໍລຳນີ້ຍັງຊ່ວຍຫຼຸດຄ່າໃຊ້ຈ່າຍທີ່ກ່ຽວຂ້ອງນຳ." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:167 +msgid "month" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:169 +msgid "1956741" +msgstr "1956741" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:169 +msgid "2018-01-01" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:171 +msgid "2344692" +msgstr "2344692" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:171 +msgid "2017-12-01" +msgstr "2017-12-01" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:173 +msgid "1730398" +msgstr "1730398" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:173 +msgid "2017-11-01" +msgstr "2017-11-01" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:175 +msgid "2047310" +msgstr "2047310" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:175 +msgid "2017-10-01" +msgstr "2017-10-01" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:177 +msgid "1744443" +msgstr "1744443" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:177 +msgid "2017-09-01" +msgstr "2017-09-01" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:179 +msgid "1916952" +msgstr "1916952" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:179 +msgid "2017-08-01" +msgstr "2017-08-01" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:183 +msgid "Python versions over time" +msgstr "ເວີຊັນ Python ຕາມໄລຍະເວລາ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:185 +msgid "" +"Extract the Python version from the ``details.python`` column. Warning: This " +"query processes over 500 GB of data." +msgstr "" +"ການດຶງຂໍ້ມູນເວີຊັນ Python ຈາກຄໍລຳ ``details.python``. ຄຳເຕືອນ: " +"ຄຳສັ່ງສອບຖາມນີ້ຈະປະມວນຜົນຂໍ້ມູນຫຼາຍກວ່າ 500 GB." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:204 +msgid "python" +msgstr "python" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:206 +msgid "3.7" +msgstr "3.7" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:206 +msgid "18051328726" +msgstr "18051328726" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:208 +msgid "3.6" +msgstr "3.6" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:208 +msgid "9635067203" +msgstr "9635067203" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:210 +msgid "3.8" +msgstr "3.8" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:210 +msgid "7781904681" +msgstr "7781904681" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:212 +msgid "2.7" +msgstr "2.7" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:212 +msgid "6381252241" +msgstr "6381252241" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:214 +msgid "null" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:214 +msgid "2026630299" +msgstr "2026630299" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:216 +msgid "3.5" +msgstr "3.5" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:216 +msgid "1894153540" +msgstr "1894153540" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:221 +msgid "Getting absolute links to artifacts" +msgstr "ການເອົາລິ້ງຖາວອນ (absolute links) ໄປຍັງ artifacts" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:223 +msgid "" +"It's sometimes helpful to be able to get the absolute links to download " +"artifacts from PyPI based on their hashes, e.g. if a particular project or " +"release has been deleted from PyPI. The metadata table includes the ``path`` " +"column, which includes the hash and artifact filename." +msgstr "" +"ບາງຄັ້ງມັນມີປະໂຫຍດທີ່ຈະສາມາດເອົາລິ້ງຖາວອນເພື່ອດາວໂຫຼດ artifacts ຈາກ PyPI ໂດຍອີງຕາມ hash " +"ຂອງພວກມັນ, ເຊັ່ນ ຖ້າໂຄງການ ຫຼື ລຸ້ນໃດໜຶ່ງຖືກລຶບອອກຈາກ PyPI. ຕາຕະລາງເມຕາດາຕາຈະລວມເອົາຄໍລຳ " +"``path``, ເຊິ່ງມີທັງ hash ແລະ ຊື່ໄຟລ໌ artifact." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:229 +msgid "" +"The URL generated here is not guaranteed to be stable, but currently aligns " +"with the URL where PyPI artifacts are hosted." +msgstr "" +"URL ທີ່ສ້າງຂຶ້ນຢູ່ນີ້ບໍ່ໄດ້ຮັບປະກັນວ່າຈະຄົງທີ່ຕະຫຼອດໄປ, ແຕ່ປະຈຸບັນແມ່ນກົງກັບ URL ທີ່ artifacts ຂອງ PyPI " +"ຖືກເກັບໄວ້." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:242 +msgid "url" +msgstr "url" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:244 +msgid "" +"https://files.pythonhosted.org/packages/eb/" +"45/79be82bdeafcecb9dca474cad4003e32ef8e4a0dec6abbd4145ccb02abe1/" +"sampleproject-1.2.0.tar.gz" +msgstr "" +"https://files.pythonhosted.org/packages/eb/" +"45/79be82bdeafcecb9dca474cad4003e32ef8e4a0dec6abbd4145ccb02abe1/" +"sampleproject-1.2.0.tar.gz" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:246 +msgid "" +"https://files.pythonhosted.org/packages/56/0a/" +"178e8bbb585ec5b13af42dae48b1d7425d6575b3ff9b02e5ec475e38e1d6/" +"sampleproject_nomura-1.2.0-py2.py3-none-any.whl" +msgstr "" +"https://files.pythonhosted.org/packages/56/0a/" +"178e8bbb585ec5b13af42dae48b1d7425d6575b3ff9b02e5ec475e38e1d6/" +"sampleproject_nomura-1.2.0-py2.py3-none-any.whl" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:248 +msgid "" +"https://files.pythonhosted.org/packages/" +"63/88/3200eeaf22571f18d2c41e288862502e33365ccbdc12b892db23f51f8e70/" +"sampleproject_nomura-1.2.0.tar.gz" +msgstr "" +"https://files.pythonhosted.org/packages/" +"63/88/3200eeaf22571f18d2c41e288862502e33365ccbdc12b892db23f51f8e70/" +"sampleproject_nomura-1.2.0.tar.gz" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:250 +msgid "" +"https://files.pythonhosted.org/packages/21/" +"e9/2743311822e71c0756394b6c5ab15cb64ca66c78c6c6a5cd872c9ed33154/" +"sampleproject_doubleyoung18-1.3.0-py2.py3-none-any.whl" +msgstr "" +"https://files.pythonhosted.org/packages/21/" +"e9/2743311822e71c0756394b6c5ab15cb64ca66c78c6c6a5cd872c9ed33154/" +"sampleproject_doubleyoung18-1.3.0-py2.py3-none-any.whl" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:252 +msgid "" +"https://files.pythonhosted.org/packages/6f/5b/" +"2f3fe94e1c02816fe23c7ceee5292fb186912929e1972eee7fb729fa27af/" +"sampleproject-1.3.1.tar.gz" +msgstr "" +"https://files.pythonhosted.org/packages/6f/5b/" +"2f3fe94e1c02816fe23c7ceee5292fb186912929e1972eee7fb729fa27af/" +"sampleproject-1.3.1.tar.gz" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:257 +msgid "Caveats" +msgstr "ຂໍ້ຄວນລະວັງ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:259 +msgid "" +"In addition to the caveats listed in the background above, Linehaul suffered " +"from a bug which caused it to significantly under-report download statistics " +"prior to July 26, 2018. Downloads before this date are proportionally " +"accurate (e.g. the percentage of Python 2 vs. Python 3 downloads) but total " +"numbers are lower than actual by an order of magnitude." +msgstr "" +"ນອກຈາກຂໍ້ຄວນລະວັງທີ່ລະບຸໄວ້ໃນສ່ວນຄວາມເປັນມາຂ້າງເທິງແລ້ວ, Linehaul " +"ເຄີຍພົບກັບບັກທີ່ເຮັດໃຫ້ການລາຍງານສະຖິຕິການດາວໂຫຼດຕໍ່າກວ່າຄວາມເປັນຈິງຢ່າງຫຼວງຫຼາຍ ກ່ອນວັນທີ 26 ກໍລະກົດ " +"2018. ການດາວໂຫຼດກ່ອນວັນທີນີ້ມີຄວາມແມ່ັນຢຳໃນແງ່ຂອງສັດສ່ວນ (ເຊັ່ນ ເປີເຊັນຂອງການດາວໂຫຼດ Python 2 " +"ທຽບກັບ Python 3) ແຕ່ຈຳນວນທັງໝົດແມ່ນຕໍ່າກວ່າຄວາມເປັນຈິງຫຼາຍເທົ່າ." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:267 +msgid "Additional tools" +msgstr "ເຄື່ອງມືເພີ່ມເຕີມ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:269 +msgid "" +"Besides using the BigQuery console, there are some additional tools which " +"may be useful when analyzing download statistics." +msgstr "" +"ນອກຈາກການໃຊ້ BigQuery console ແລ້ວ, " +"ຍັງມີເຄື່ອງມືເພີ່ມເຕີມບາງຢ່າງທີ່ອາດຈະເປັນປະໂຫຍດໃນການວິເຄາະສະຖິຕິການດາວໂຫຼດ." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:273 +msgid "``google-cloud-bigquery``" +msgstr "``google-cloud-bigquery``" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:275 +msgid "" +"You can also access the public PyPI download statistics dataset " +"programmatically via the BigQuery API and the `google-cloud-bigquery`_ " +"project, the official Python client library for BigQuery." +msgstr "" +"ທ່ານຍັງສາມາດເຂົ້າເຖິງຊຸດຂໍ້ມູນສະຖິຕິການດາວໂຫຼດ PyPI ສາທາລະນະຜ່ານການຂຽນໂປຣແກຣມດ້ວຍ BigQuery " +"API ແລະ ໂຄງການ `google-cloud-bigquery`_, ເຊິ່ງເປັນໄລບຣາຣີລູກຂ່າຍ Python " +"ຢ່າງເປັນທາງການສຳລັບ BigQuery." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:303 +msgid "``pypinfo``" +msgstr "``pypinfo``" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:305 +msgid "" +"`pypinfo`_ is a command-line tool which provides access to the dataset and " +"can generate several useful queries. For example, you can query the total " +"number of download for a package with the command ``pypinfo package_name``." +msgstr "" +"`pypinfo`_ ແມ່ນເຄື່ອງມືແບບບັນທັດຄຳສັ່ງທີ່ໃຫ້ການເຂົ້າເຖິງຊຸດຂໍ້ມູນ ແລະ " +"ສາມາດສ້າງຄຳສັ່ງສອບຖາມທີ່ເປັນປະໂຫຍດໄດ້ຫຼາຍຢ່າງ. ຕົວຢ່າງ: " +"ທ່ານສາມາດສອບຖາມຈຳນວນການດາວໂຫຼດທັງໝົດຂອງແພັກເກດໄດ້ດ້ວຍຄຳສັ່ງ ``pypinfo package_name``." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:309 +msgid "Install `pypinfo`_ using pip." +msgstr "ຕິດຕັ້ງ `pypinfo`_ ໂດຍໃຊ້ pip." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:315 +msgid "Usage:" +msgstr "ວິທີໃຊ້:" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:331 +msgid "``pandas-gbq``" +msgstr "``pandas-gbq``" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:333 +msgid "" +"The `pandas-gbq`_ project allows for accessing query results via `Pandas`_." +msgstr "ໂຄງການ `pandas-gbq`_ ຊ່ວຍໃຫ້ສາມາດເຂົ້າເຖິງຜົນການສອບຖາມຜ່ານ `Pandas`_ ໄດ້." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:337 +msgid "``ClickPy``" +msgstr "``ClickPy``" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:339 +msgid "" +"The `ClickPy`_ project provides a public application to visualize download " +"statistics, with free direct SQL access to the underlying open-source " +"`ClickHouse`_ database, updated daily." +msgstr "" +"ໂຄງການ `ClickPy`_ ໃຫ້ບໍລິການແອັບພລິເຄຊັນສາທາລະນະເພື່ອສະແດງພາບສະຖິຕິການດາວໂຫຼດ, " +"ໂດຍມີການເຂົ້າເຖິງ SQL ໂດຍກົງຟຣີໄປຍັງຖານຂໍ້ມູນ `ClickHouse`_ ທີ່ເປັນ open-source ແລະ " +"ມີການອັບເດດທຸກໆມື້." + +#: ../source/guides/analyzing-pypi-package-downloads.rst:345 +#: ../source/specifications/dependency-specifiers.rst:716 +msgid "References" +msgstr "ເອກະສານອ້າງອີງ" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:347 +msgid "" +"`PyPI Download Counts deprecation email `__" +msgstr "" +"`ອີເມວແຈ້ງການຍົກເລີກການນັບຈຳນວນການດາວໂຫຼດຂອງ PyPI `__" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:348 +msgid "" +"`PyPI BigQuery dataset announcement email `__" +msgstr "" +"`ອີເມວປະກາດຊຸດຂໍ້ມູນ PyPI BigQuery `__" + +#: ../source/guides/creating-and-discovering-plugins.rst:3 +msgid "Creating and discovering plugins" +msgstr "ການສ້າງ ແລະ ການຄົ້ນຫາປລັກອິນ (plugins)" + +#: ../source/guides/creating-and-discovering-plugins.rst:5 +msgid "" +"Often when creating a Python application or library you'll want the ability " +"to provide customizations or extra features via **plugins**. Because Python " +"packages can be separately distributed, your application or library may want " +"to automatically **discover** all of the plugins available." +msgstr "" +"ເລື້ອຍໆໃນເວລາສ້າງແອັບພລິເຄຊັນ ຫຼື ໄລບຣາຣີດ້ວຍ Python, " +"ທ່ານອາດຈະຕ້ອງການໃຫ້ມີຄວາມສາມາດໃນການປັບແຕ່ງ ຫຼື ເພີ່ມຟີເຈີພິເສດຜ່ານ **ປລັກອິນ**. " +"ເນື່ອງຈາກແພັກເກດ Python ສາມາດແຈກຢາຍແຍກກັນໄດ້, ແອັບພລິເຄຊັນ ຫຼື ໄລບຣາຣີຂອງທ່ານອາດຈະຕ້ອງການ " +"**ຄົ້ນຫາ (discover)** ປລັກອິນທັງໝົດທີ່ມີຢູ່ໂດຍອັດຕະໂນມັດ." + +#: ../source/guides/creating-and-discovering-plugins.rst:10 +msgid "There are three major approaches to doing automatic plugin discovery:" +msgstr "ມີສາມວິທີຫຼັກໆໃນການເຮັດການຄົ້ນຫາປລັກອິນແບບອັດຕະໂນມັດ:" + +#: ../source/guides/creating-and-discovering-plugins.rst:12 +msgid "`Using naming convention`_." +msgstr "`ການໃຊ້ທຳນຽມການຕັ້ງຊື່ (naming convention)`_." + +#: ../source/guides/creating-and-discovering-plugins.rst:13 +msgid "`Using namespace packages`_." +msgstr "`ການໃຊ້ແພັກເກດແບບ namespace`_." + +#: ../source/guides/creating-and-discovering-plugins.rst:14 +msgid "`Using package metadata`_." +msgstr "`ການໃຊ້ເມຕາດາຕາຂອງແພັກເກດ (package metadata)`_." + +#: ../source/guides/creating-and-discovering-plugins.rst:18 +msgid "Using naming convention" +msgstr "ການໃຊ້ທຳນຽມການຕັ້ງຊື່" + +#: ../source/guides/creating-and-discovering-plugins.rst:20 +msgid "" +"If all of the plugins for your application follow the same naming " +"convention, you can use :func:`pkgutil.iter_modules` to discover all of the " +"top-level modules that match the naming convention. For example, `Flask`_ " +"uses the naming convention ``flask_{plugin_name}``. If you wanted to " +"automatically discover all of the Flask plugins installed:" +msgstr "" +"ຖ້າປລັກອິນທັງໝົດສຳລັບແອັບພລິເຄຊັນຂອງທ່ານປະຕິບັດຕາມທຳນຽມການຕັ້ງຊື່ດຽວກັນ, " +"ທ່ານສາມາດໃຊ້ :func:`pkgutil.iter_modules` " +"ເພື່ອຄົ້ນຫາໂມດູນລະດັບສູງສຸດທັງໝົດທີ່ກົງກັບທຳນຽມການຕັ້ງຊື່ນັ້ນ. ຕົວຢ່າງ: `Flask`_ ໃຊ້ທຳນຽມການຕັ້ງຊື່ " +"``flask_{plugin_name}``. ຖ້າທ່ານຕ້ອງການຄົ້ນຫາປລັກອິນ Flask ທັງໝົດທີ່ຕິດຕັ້ງໄວ້ໂດຍອັດຕະໂນມັດ:" + +#: ../source/guides/creating-and-discovering-plugins.rst:38 +msgid "" +"If you had both the `Flask-SQLAlchemy`_ and `Flask-Talisman`_ plugins " +"installed then ``discovered_plugins`` would be:" +msgstr "" +"ຖ້າທ່ານຕິດຕັ້ງທັງປລັກອິນ `Flask-SQLAlchemy`_ ແລະ `Flask-Talisman`_, ແລ້ວ " +"``discovered_plugins`` ຈະເປັນ:" + +#: ../source/guides/creating-and-discovering-plugins.rst:48 +msgid "" +"Using naming convention for plugins also allows you to query the Python " +"Package Index's :ref:`simple repository API ` for all " +"packages that conform to your naming convention." +msgstr "" +"ການໃຊ້ທຳນຽມການຕັ້ງຊື່ສຳລັບປລັກອິນຍັງຊ່ວຍໃຫ້ທ່ານສາມາດສອບຖາມ :ref:`simple repository API " +"` ຂອງ PyPI ສຳລັບທຸກແພັກເກດທີ່ປະຕິບັດຕາມທຳນຽມການຕັ້ງຊື່ຂອງທ່ານໄດ້." + +#: ../source/guides/creating-and-discovering-plugins.rst:58 +msgid "Using namespace packages" +msgstr "ການໃຊ້ແພັກເກດແບບ namespace" + +#: ../source/guides/creating-and-discovering-plugins.rst:60 +msgid "" +":doc:`Namespace packages ` can be used to " +"provide a convention for where to place plugins and also provides a way to " +"perform discovery. For example, if you make the sub-package " +"``myapp.plugins`` a namespace package then other :term:`distributions " +"` can provide modules and packages to that namespace. " +"Once installed, you can use :func:`pkgutil.iter_modules` to discover all " +"modules and packages installed under that namespace:" +msgstr "" +":doc:`ແພັກເກດແບບ namespace ` " +"ສາມາດໃຊ້ເພື່ອສ້າງຂໍ້ຕົກລົງວ່າຄວນວາງປລັກອິນໄວ້ບ່ອນໃດ ແລະ ຍັງເປັນວິທີໃນການຄົ້ນຫາປລັກອິນນຳ. ຕົວຢ່າງ: " +"ຖ້າທ່ານເຮັດໃຫ້ແພັກເກດຍ່ອຍ ``myapp.plugins`` ເປັນແພັກເກດແບບ namespace, " +"ແລ້ວ :term:`ຊຸດແຈກຢາຍ ` ອື່ນໆກໍຈະສາມາດໃຫ້ໂມດູນ ແລະ ແພັກເກດແກ່ " +"namespace ນັ້ນໄດ້. ເມື່ອຕິດຕັ້ງແລ້ວ, ທ່ານສາມາດໃຊ້ :func:`pkgutil.iter_modules` " +"ເພື່ອຄົ້ນຫາທຸກໂມດູນ ແລະ ແພັກເກດທີ່ຕິດຕັ້ງຢູ່ພາຍໃຕ້ namespace ນັ້ນ:" + +#: ../source/guides/creating-and-discovering-plugins.rst:88 +msgid "" +"Specifying ``myapp.plugins.__path__`` to :func:`~pkgutil.iter_modules` " +"causes it to only look for the modules directly under that namespace. For " +"example, if you have installed distributions that provide the modules " +"``myapp.plugins.a`` and ``myapp.plugins.b`` then ``discovered_plugins`` in " +"this case would be:" +msgstr "" +"ການລະບຸ ``myapp.plugins.__path__`` ໃຫ້ກັບ :func:`~pkgutil.iter_modules` " +"ຈະເຮັດໃຫ້ມັນຊອກຫາສະເພາະໂມດູນທີ່ຢູ່ພາຍໃຕ້ namespace ນັ້ນໂດຍກົງ. ຕົວຢ່າງ: " +"ຖ້າທ່ານຕິດຕັ້ງຊຸດແຈກຢາຍທີ່ໃຫ້ໂມດູນ ``myapp.plugins.a`` ແລະ ``myapp.plugins.b``, ແລ້ວ " +"``discovered_plugins`` ໃນກໍລະນີນັ້ນຈະເປັນ:" + +#: ../source/guides/creating-and-discovering-plugins.rst:100 +msgid "" +"This sample uses a sub-package as the namespace package (``myapp.plugins``), " +"but it's also possible to use a top-level package for this purpose (such as " +"``myapp_plugins``). How to pick the namespace to use is a matter of " +"preference, but it's not recommended to make your project's main top-level " +"package (``myapp`` in this case) a namespace package for the purpose of " +"plugins, as one bad plugin could cause the entire namespace to break which " +"would in turn make your project unimportable. For the \"namespace sub-" +"package\" approach to work, the plugin packages must omit " +"the :file:`__init__.py` for your top-level package directory (``myapp`` in " +"this case) and include the namespace-package style :file:`__init__.py` in " +"the namespace sub-package directory (``myapp/plugins``). This also means " +"that plugins will need to explicitly pass a list of packages " +"to :func:`setup`'s ``packages`` argument instead of " +"using :func:`setuptools.find_packages`." +msgstr "" +"ຕົວຢ່າງນີ້ໃຊ້ແພັກເກດຍ່ອຍເປັນແພັກເກດແບບ namespace (``myapp.plugins``), " +"ແຕ່ມັນກໍເປັນໄປໄດ້ທີ່ຈະໃຊ້ແພັກເກດລະດັບສູງສຸດເພື່ອຈຸດປະສົງນີ້ (ເຊັ່ນ ``myapp_plugins``). ການເລືອກໃຊ້ " +"namespace ແບບໃດແມ່ນຂຶ້ນກັບຄວາມມັກ, ແຕ່ບໍ່ແນະນຳໃຫ້ເຮັດໃຫ້ແພັກເກດຫຼັກລະດັບສູງສຸດຂອງໂຄງການ " +"(ໃນກໍລະນີນີ້ຄື ``myapp``) ເປັນແພັກເກດແບບ namespace ເພື່ອໃຊ້ເປັນປລັກອິນ, " +"ເພາະຖ້າມີປລັກອິນໃດໜຶ່ງທີ່ບໍ່ດີ ມັນອາດຈະເຮັດໃຫ້ທັງໝົດຂອງ namespace ເພພັງ ແລະ " +"ສົ່ງຜົນໃຫ້ໂຄງການຂອງທ່ານບໍ່ສາມາດນຳເຂົ້າໄດ້. ເພື່ອໃຫ້ວິທີ \"ແພັກເກດຍ່ອຍແບບ namespace\" " +"ເຮັດວຽກໄດ້, ແພັກເກດປລັກອິນຈະຕ້ອງບໍ່ມີໄຟລ໌ :file:`__init__.py` " +"ໃນໄດເຣັກທໍຣີແພັກເກດລະດັບສູງສຸດຂອງທ່ານ (ໃນກໍລະນີນີ້ຄື ``myapp``) ແລະ " +"ຕ້ອງລວມເອົາ :file:`__init__.py` ແບບ namespace-package ໄວ້ໃນໄດເຣັກທໍຣີແພັກເກດຍ່ອຍ " +"(``myapp/plugins``). ນີ້ຍັງໝາຍຄວາມວ່າປລັກອິນຈະຕ້ອງສົ່ງລາຍຊື່ແພັກເກດໃຫ້ກັບອາກິວເມນ " +"(argument) ``packages`` ຂອງ :func:`setup` ໂດຍກົງ " +"ແທນທີ່ຈະໃຊ້ :func:`setuptools.find_packages`." + +#: ../source/guides/creating-and-discovering-plugins.rst:114 +msgid "" +"Namespace packages are a complex feature and there are several different " +"ways to create them. It's highly recommended to read the :doc:`packaging-" +"namespace-packages` documentation and clearly document which approach is " +"preferred for plugins to your project." +msgstr "" +"ແພັກເກດແບບ namespace ແມ່ນຟີເຈີທີ່ຊັບຊ້ອນ ແລະ ມີຫຼາຍວິທີໃນການສ້າງ. " +"ແນະນຳຢ່າງຍິ່ງໃຫ້ອ່ານເອກະສານ :doc:`packaging-namespace-packages` ແລະ " +"ຂຽນເອກະສານໃຫ້ຊັດເຈນວ່າວິທີໃດທີ່ເໝາະສົມສຳລັບປລັກອິນໃນໂຄງການຂອງທ່ານ." + +#: ../source/guides/creating-and-discovering-plugins.rst:122 +msgid "Using package metadata" +msgstr "ການໃຊ້ເມຕາດາຕາຂອງແພັກເກດ" + +#: ../source/guides/creating-and-discovering-plugins.rst:124 +msgid "" +"Packages can have metadata for plugins described in the :ref:`entry-points`. " +"By specifying them, a package announces that it contains a specific kind of " +"plugin. Another package supporting this kind of plugin can use the metadata " +"to discover that plugin." +msgstr "" +"ແພັກເກດສາມາດມີເມຕາດາຕາສຳລັບປລັກອິນທີ່ຖືກອະທິບາຍໄວ້ໃນ :ref:`entry-points`. " +"ໂດຍການລະບຸພວກມັນ, ແພັກເກດຈະບອກໃຫ້ຮູ້ວ່າມັນປະກອບດ້ວຍປລັກອິນປະເພດໃດໜຶ່ງ. " +"ແພັກເກດອື່ນທີ່ຮອງຮັບປລັກອິນປະເພດນັ້ນກໍຈະສາມາດໃຊ້ເມຕາດາຕານີ້ເພື່ອຄົ້ນຫາປລັກອິນດັ່ງກ່າວໄດ້." + +#: ../source/guides/creating-and-discovering-plugins.rst:128 +msgid "" +"For example if you have a package named ``myapp-plugin-a`` and it includes " +"the following in its ``pyproject.toml``:" +msgstr "" +"ຕົວຢ່າງ: ຖ້າທ່ານມີແພັກເກດຊື່ ``myapp-plugin-a`` ແລະ ມັນລວມເອົາສິ່ງຕໍ່ໄປນີ້ໄວ້ໃນ " +"``pyproject.toml``:" + +#: ../source/guides/creating-and-discovering-plugins.rst:136 +msgid "" +"Then you can discover and load all of the registered entry points by " +"using :func:`importlib.metadata.entry_points` (or the backport_ " +"``importlib_metadata >= 3.6`` for Python 3.6-3.9):" +msgstr "" +"ຈາກນັ້ນທ່ານສາມາດຄົ້ນຫາ ແລະ ໂຫຼດທຸກ entry points " +"ທີ່ລົງທະບຽນໄວ້ໄດ້ໂດຍໃຊ້ :func:`importlib.metadata.entry_points` (ຫຼື backport_ " +"``importlib_metadata >= 3.6`` ສຳລັບ Python 3.6-3.9):" + +#: ../source/guides/creating-and-discovering-plugins.rst:151 +msgid "" +"In this example, ``discovered_plugins`` would be a collection of " +"type :class:`importlib.metadata.EntryPoint`:" +msgstr "" +"ໃນຕົວຢ່າງນີ້, ``discovered_plugins`` " +"ຈະເປັນກຸ່ມຂອງຂໍ້ມູນປະເພດ :class:`importlib.metadata.EntryPoint`:" + +#: ../source/guides/creating-and-discovering-plugins.rst:160 +msgid "" +"Now the module of your choice can be imported by executing " +"``discovered_plugins['a'].load()``." +msgstr "" +"ຕອນນີ້ໂມດູນທີ່ທ່ານເລືອກສາມາດຖືກນຳເຂົ້າໄດ້ໂດຍການລັນຄຳສັ່ງ " +"``discovered_plugins['a'].load()``." + +#: ../source/guides/creating-and-discovering-plugins.rst:163 +msgid "" +"The ``entry_point`` specification in :file:`setup.py` is fairly flexible and " +"has a lot of options. It's recommended to read over the entire section " +"on :doc:`entry points ` ." +msgstr "" +"ຂໍ້ກຳນົດ ``entry_point`` ໃນ :file:`setup.py` ແມ່ນມີຄວາມຢືດຢຸ່ນ ແລະ ມີຕົວເລືອກຫຼາຍຢ່າງ. " +"ແນະນຳໃຫ້ອ່ານທັງໝົດໃນພາກ :doc:`entry points `." + +#: ../source/guides/creating-and-discovering-plugins.rst:167 +msgid "" +"Since this specification is part of the :doc:`standard library " +"`, packaging tools including setuptools " +"provide support for defining entry points." +msgstr "" +"ເນື່ອງຈາກຂໍ້ກຳນົດສະເພາະນີ້ເປັນສ່ວນໜຶ່ງຂອງ :doc:`ຫ້ອງສະໝຸດມາດຕະຖານ `, ເຄື່ອງມືການຈັດການແພັກເກດ ລວມທັງ setuptools " +"ໃຫ້ການສະໜັບສະໜູນສຳລັບການກຳນົດຈຸດເຂົ້າ." + +#: ../source/guides/creating-command-line-tools.rst:5 +msgid "Creating and packaging command-line tools" +msgstr "ການສ້າງ ແລະ ການຈັດເຮັດແພັກເກດສຳລັບເຄື່ອງມືແບບບັນທັດຄຳສັ່ງ" + +#: ../source/guides/creating-command-line-tools.rst:7 +msgid "" +"This guide will walk you through creating and packaging a standalone command-" +"line application that can be installed with :ref:`pipx`, a tool for creating " +"and managing :term:`Python Virtual Environments ` and " +"exposing the executable scripts of packages (and available manual pages) for " +"use on the command-line." +msgstr "" +"ຄູ່ມືນີ້ຈະພາທ່ານໄປເບິ່ງຂັ້ນຕອນການສ້າງ ແລະ ການຈັດເຮັດແພັກເກດສຳລັບແອັບພລິເຄຊັນແບບບັນທັດຄຳສັ່ງ " +"(command-line) ແບບ standalone ທີ່ສາມາດຕິດຕັ້ງໄດ້ດ້ວຍ :ref:`pipx`, " +"ເຊິ່ງເປັນເຄື່ອງມືສຳລັບສ້າງ ແລະ ຈັດການ :term:`ສະພາບແວດລ້ອມສະເໝືອນ (Virtual Environment) " +"` ຂອງ Python ແລະ ເປີດໃຊ້ສະຄຣິບທີ່ສາມາດລັນໄດ້ຂອງແພັກເກດ " +"(ລວມເຖິງໜ້າຄູ່ມື manual pages ທີ່ມີຢູ່) ເພື່ອໃຊ້ງານໃນບັນທັດຄຳສັ່ງ." + +#: ../source/guides/creating-command-line-tools.rst:12 +msgid "Creating the package" +msgstr "ການສ້າງແພັກເກດ" + +#: ../source/guides/creating-command-line-tools.rst:14 +msgid "" +"First of all, create a source tree for the :term:`project `. For " +"the sake of an example, we'll build a simple tool outputting a greeting (a " +"string) for a person based on arguments given on the command-line." +msgstr "" +"ກ່ອນອື່ນໝົດ, ໃຫ້ສ້າງຊອດໂຄ້ດຕົ້ນສະບັບ (source tree) ສຳລັບ :term:`ໂຄງການ `. " +"ເພື່ອເປັນຕົວຢ່າງ, ພວກເຮົາຈະສ້າງເຄື່ອງມືງ່າຍໆທີ່ຈະສະແດງຄຳທັກທາຍ (ຂໍ້ຄວາມ) " +"ໃຫ້ກັບບຸກຄົນໂດຍອີງຕາມອາກິວເມນທີ່ລະບຸໃນບັນທັດຄຳສັ່ງ." + +#: ../source/guides/creating-command-line-tools.rst:17 +#: ../source/guides/tool-recommendations.rst:45 +msgid "Todo" +msgstr "Todo" + +#: ../source/guides/creating-command-line-tools.rst:17 +msgid "" +"Advise on the optimal structure of a Python package in another guide or " +"discussion and link to it here." +msgstr "ແນະນຳກ່ຽວກັບໂຄງສ້າງທີ່ດີທີ່ສຸດຂອງແພັກເກດ Python ໃນຄູ່ມື ຫຼື ການສົນທະນາອື່ນ ແລະ ເພີ່ມລິ້ງທີ່ນີ້." + +#: ../source/guides/creating-command-line-tools.rst:19 +msgid "" +"This project will adhere to :ref:`src-layout ` " +"and in the end be alike this file tree, with the top-level folder and " +"package name ``greetings``:" +msgstr "" +"ໂຄງການນີ້ຈະປະຕິບັດຕາມ :ref:`src-layout ` ແລະ " +"ສຸດທ້າຍຈະມີໂຄງສ້າງໄຟລ໌ແບບນີ້, ໂດຍມີໂຟນເດີລະດັບສູງສຸດ ແລະ ຊື່ແພັກເກດວ່າ ``greetings``:" + +#: ../source/guides/creating-command-line-tools.rst:33 +msgid "" +"The actual code responsible for the tool's functionality will be stored in " +"the file :file:`greet.py`, named after the main module:" +msgstr "" +"ໂຄ້ດຕົວຈິງທີ່ເຮັດໜ້າທີ່ໃນການເຮັດວຽກຂອງເຄື່ອງມືຈະຖືກເກັບໄວ້ໃນໄຟລ໌ :file:`greet.py`, " +"ເຊິ່ງຕັ້ງຊື່ຕາມໂມດູນຫຼັກ:" + +#: ../source/guides/creating-command-line-tools.rst:62 +msgid "" +"The above function receives several keyword arguments that determine how the " +"greeting to output is constructed. Now, construct the command-line interface " +"to provision it with the same, which is done in :file:`cli.py`:" +msgstr "" +"ຟັງຊັນຂ້າງເທິງຈະຮັບອາກິວເມນຫຼາຍຢ່າງເພື່ອເລືອກວິທີສ້າງຄຳທັກທາຍທີ່ຈະສະແດງ. ຕອນນີ້, ໃຫ້ສ້າງ " +"interface ແບບບັນທັດຄຳສັ່ງເພື່ອສົ່ງຄ່າເຫຼົ່ານັ້ນເຂົ້າໄປ, ເຊິ່ງຈະເຮັດໃນໄຟລ໌ :file:`cli.py`:" + +#: ../source/guides/creating-command-line-tools.rst:80 +msgid "" +"The command-line interface is built with typer_, an easy-to-use CLI parser " +"based on Python type hints. It provides auto-completion and nicely styled " +"command-line help out of the box. Another option would " +"be :py:mod:`argparse`, a command-line parser which is included in Python's " +"standard library. It is sufficient for most needs, but requires a lot of " +"code, usually in ``cli.py``, to function properly. Alternatively, docopt_ " +"makes it possible to create CLI interfaces based solely on docstrings; " +"advanced users are encouraged to make use of click_ (on which ``typer`` is " +"based)." +msgstr "" +"ອິນເຕີເຟດແບບຄຳສັ່ງ (command-line interface) ຖືກສ້າງຂຶ້ນດ້ວຍ typer_, ເຊິ່ງເປັນຕົວວິເຄາະ CLI " +"ທີ່ໃຊ້ງ່າຍໂດຍອີງໃສ່ Python type hints. ມັນມີລະບົບຕື່ມຄຳສັ່ງອັດຕະໂນມັດ ແລະ " +"ການຊ່ວຍເຫຼືອແບບຄຳສັ່ງທີ່ສວຍງາມມາໃຫ້ພ້ອມໃຊ້ງານເລີຍ. ອີກທາງເລືອກໜຶ່ງແມ່ນ :py:mod:`argparse`, " +"ເຊິ່ງເປັນຕົວວິເຄາະແບບຄຳສັ່ງທີ່ລວມຢູ່ໃນໄລບຣາຣີມາດຕະຖານຂອງ Python. " +"ມັນພຽງພໍສຳລັບຄວາມຕ້ອງການສ່ວນໃຫຍ່, ແຕ່ຕ້ອງໃຊ້ໂຄດຫຼາຍ, ໂດຍປົກກະຕິແມ່ນຢູ່ໃນ ``cli.py``, " +"ເພື່ອໃຫ້ເຮັດວຽກໄດ້ຢ່າງຖືກຕ້ອງ. ນອກຈາກນັ້ນ, docopt_ ເຮັດໃຫ້ສາມາດສ້າງອິນເຕີເຟດ CLI ໂດຍອີງໃສ່ " +"docstrings ພຽງຢ່າງດຽວ; ຜູ້ໃຊ້ລະດັບສູງແມ່ນໄດ້ຮັບການແນະນຳໃຫ້ໃຊ້ click_ (ເຊິ່ງເປັນພື້ນຖານຂອງ " +"``typer``)." + +#: ../source/guides/creating-command-line-tools.rst:86 +msgid "" +"Now, add an empty :file:`__init__.py` file, to define the project as a " +"regular :term:`import package `." +msgstr "" +"ຕອນນີ້, ໃຫ້ເພີ່ມໄຟລ໌ :file:`__init__.py` ຫວ່າງເປົ່າ " +"ເພື່ອກຳນົດໃຫ້ໂຄງການເປັນ :term:`ແພັກເກດນຳເຂົ້າ (Import Package) ` " +"ປົກກະຕິ." + +#: ../source/guides/creating-command-line-tools.rst:88 +msgid "" +"The file :file:`__main__.py` marks the main entry point for the application " +"when running it via :mod:`runpy` (i.e. ``python -m greetings``, which works " +"immediately with flat layout, but requires installation of the package with " +"src layout), so initialize the command-line interface here:" +msgstr "" +"ໄຟລ໌ :file:`__main__.py` ຈະເປັນຈຸດເລີ່ມຕົ້ນຫຼັກຂອງແອັບພລິເຄຊັນເມື່ອລັນຜ່ານ :mod:`runpy` (ເຊັ່ນ " +"``python -m greetings``, ເຊິ່ງຈະໃຊ້ງານໄດ້ທັນທີກັບ flat layout, " +"ແຕ່ຕ້ອງການການຕິດຕັ້ງແພັກເກດກ່ອນສຳລັບ src layout), ດັ່ງນັ້ນໃຫ້ເລີ່ມຕົ້ນ interface " +"ແບບບັນທັດຄຳສັ່ງຢູ່ບ່ອນນີ້:" + +#: ../source/guides/creating-command-line-tools.rst:100 +msgid "" +"In order to enable calling the command-line interface directly from " +"the :term:`source tree `, i.e. as ``python src/" +"greetings``, a certain hack could be placed in this file; read more " +"at :ref:`running-cli-from-source-src-layout`." +msgstr "" +"ເພື່ອໃຫ້ສາມາດເອີ້ນໃຊ້ interface ແບບບັນທັດຄຳສັ່ງໄດ້ໂດຍກົງຈາກ :term:`ຊອດໂຄ້ດຕົ້ນສະບັບ `, ເຊັ່ນ ``python src/greetings``, ອາດຈະຕ້ອງໃຊ້ເຕັກນິກບາງຢ່າງໃນໄຟລ໌ນີ້; " +"ອ່ານເພີ່ມເຕີມໄດ້ທີ່ :ref:`running-cli-from-source-src-layout`." + +#: ../source/guides/creating-command-line-tools.rst:106 +msgid "``pyproject.toml``" +msgstr "``pyproject.toml``" + +#: ../source/guides/creating-command-line-tools.rst:108 +msgid "" +"The project's :term:`metadata ` is placed " +"in :term:`pyproject.toml`. The :term:`pyproject metadata keys ` and the ``[build-system]`` table may be filled in as " +"described in :ref:`writing-pyproject-toml`, adding a dependency on ``typer`` " +"(this tutorial uses version *0.12.3*)." +msgstr "" +":term:`ເມຕາດາຕາ ` " +"ຂອງໂຄງການຈະຖືກວາງໄວ້ໃນ :term:`pyproject.toml`. ສາມາດຕື່ມ :term:`ຄີເມຕາດາຕາຂອງ " +"pyproject (Pyproject Metadata Key) ` ແລະ ຕາຕະລາງ " +"``[build-system]`` ຕາມທີ່ອະທິບາຍໄວ້ໃນ :ref:`writing-pyproject-toml`, ໂດຍເພີ່ມ " +"dependency ຂອງ ``typer`` ເຂົ້າໄປ (ບົດຮຽນນີ້ໃຊ້ເວີຊັນ *0.12.3*)." + +#: ../source/guides/creating-command-line-tools.rst:111 +msgid "" +"For the project to be recognised as a command-line tool, additionally a " +"``console_scripts`` :ref:`entry point ` " +"(see :ref:`console_scripts`) needs to be added as a :term:`subkey `:" +msgstr "" +"ເພື່ອໃຫ້ໂຄງການຖືກຮັບຮູ້ວ່າເປັນເຄື່ອງມືແບບບັນທັດຄຳສັ່ງ, ຈຳເປັນຕ້ອງເພີ່ມ :ref:`entry point ` ແບບ ``console_scripts`` (ເບິ່ງ :ref:`console_scripts`) " +"ເປັນ :term:`ຄີຍ່ອຍ (subkey) `:" + +#: ../source/guides/creating-command-line-tools.rst:118 +msgid "" +"Now, the project's source tree is ready to be transformed into " +"a :term:`distribution package `, which makes it " +"installable." +msgstr "" +"ຕອນນີ້, ຊອດໂຄ້ດຕົ້ນສະບັບຂອງໂຄງການພ້ອມແລ້ວທີ່ຈະຖືກປ່ຽນໃຫ້ເປັນ :term:`ຊຸດແຈກຢາຍ (distribution " +"package) `, ເຊິ່ງຈະເຮັດໃຫ້ມັນສາມາດຕິດຕັ້ງໄດ້." + +#: ../source/guides/creating-command-line-tools.rst:123 +msgid "Installing the package with ``pipx``" +msgstr "ການຕິດຕັ້ງແພັກເກດດ້ວຍ ``pipx``" + +#: ../source/guides/creating-command-line-tools.rst:125 +msgid "" +"After installing ``pipx`` as described in :ref:`installing-stand-alone-" +"command-line-tools`, install your project:" +msgstr "" +"ຫຼັງຈາກຕິດຕັ້ງ ``pipx`` ຕາມທີ່ອະທິບາຍໃນ :ref:`installing-stand-alone-command-line-" +"tools`, ໃຫ້ຕິດຕັ້ງໂຄງການຂອງທ່ານ:" + +#: ../source/guides/creating-command-line-tools.rst:132 +msgid "" +"This will expose the executable script we defined as an entry point and make " +"the command ``greet`` available. Let's test it:" +msgstr "" +"ສິ່ງນີ້ຈະເຮັດໃຫ້ສະຄຣິບທີ່ເຮົາກຳນົດໄວ້ໃນ entry point ສາມາດລັນໄດ້ ແລະ ເຮັດໃຫ້ມີຄຳສັ່ງ ``greet`` " +"ໃຫ້ໃຊ້ງານ. ລອງທົດສອບເບິ່ງ:" + +#: ../source/guides/creating-command-line-tools.rst:146 +msgid "" +"Since this example uses ``typer``, you could now also get an overview of the " +"program's usage by calling it with the ``--help`` option, or configure " +"completions via the ``--install-completion`` option." +msgstr "" +"ເນື່ອງຈາກຕົວຢ່າງນີ້ໃຊ້ ``typer``, " +"ຕອນນີ້ທ່ານສາມາດເບິ່ງພາບລວມຂອງວິທີໃຊ້ໂປຣແກຣມໄດ້ໂດຍການເອີ້ນໃຊ້ດ້ວຍຕົວເລືອກ ``--help``, ຫຼື " +"ຕັ້ງຄ່າການຕື່ມຄຳອັດຕະໂນມັດຜ່ານຕົວເລືອກ ``--install-completion``." + +#: ../source/guides/creating-command-line-tools.rst:149 +msgid "" +"To just run the program without installing it permanently, use ``pipx run``, " +"which will create a temporary (but cached) virtual environment for it:" +msgstr "" +"ຖ້າຕ້ອງການພຽງແຕ່ລັນໂປຣແກຣມໂດຍບໍ່ຕ້ອງຕິດຕັ້ງແບບຖາວອນ, ໃຫ້ໃຊ້ ``pipx run``, " +"ເຊິ່ງມັນຈະສ້າງສະພາບແວດລ້ອມສະເໝືອນຊົ່ວຄາວ (ແຕ່ມີການ cache ໄວ້) ໃຫ້ກັບໂປຣແກຣມ:" + +#: ../source/guides/creating-command-line-tools.rst:156 +msgid "" +"This syntax is a bit impractical, however; as the name of the entry point we " +"defined above does not match the package name, we need to state explicitly " +"which executable script to run (even though there is only one in existence)." +msgstr "" +"ແນວໃດກໍຕາມ, ວິທີນີ້ອາດຈະບໍ່ສະດວກປານໃດ; ເນື່ອງຈາກຊື່ຂອງ entry point " +"ທີ່ເຮົາກຳນົດໄວ້ຂ້າງເທິງບໍ່ກົງກັບຊື່ແພັກເກດ, ເຮົາຈຶ່ງຕ້ອງລະບຸໃຫ້ຊັດເຈນວ່າຈະລັນສະຄຣິບໃດ " +"(ເຖິງແມ່ນວ່າມັນຈະມີພຽງອັນດຽວກໍຕາມ)." + +#: ../source/guides/creating-command-line-tools.rst:159 +msgid "" +"There is, however, a more practical solution to this problem, in the form of " +"an entry point specific to ``pipx run``. The same can be defined as follows " +"in :file:`pyproject.toml`:" +msgstr "" +"ແຕ່ຍັງມີວິທີແກ້ໄຂທີ່ສະດວກກວ່າ, ຄືການໃຊ້ entry point ສະເພາະສຳລັບ ``pipx run``. " +"ສາມາດກຳນົດໄດ້ດັ່ງນີ້ໃນ :file:`pyproject.toml`:" + +#: ../source/guides/creating-command-line-tools.rst:168 +msgid "" +"Thanks to this entry point (which *must* match the package name), ``pipx`` " +"will pick up the executable script as the default one and run it, which " +"makes this command possible:" +msgstr "" +"ຍ້ອນມີ entry point ນີ້ (ເຊິ່ງ *ຕ້ອງ* ກົງກັບຊື່ແພັກເກດ), ``pipx`` ຈະເລືອກສະຄຣິບນັ້ນເປັນຄ່າເລີ່ມຕົ້ນ " +"ແລະ ລັນມັນທັນທີ, ເຊິ່ງເຮັດໃຫ້ສາມາດໃຊ້ຄຳສັ່ງນີ້ໄດ້:" + +#: ../source/guides/creating-command-line-tools.rst:176 +msgid "Conclusion" +msgstr "ສະຫຼຸບ" + +#: ../source/guides/creating-command-line-tools.rst:178 +msgid "" +"You know by now how to package a command-line application written in Python. " +"A further step could be to distribute your package, meaning uploading it to " +"a :term:`package index `, most commonly :term:`PyPI `. To do that, follow the instructions " +"at :ref:`Packaging your project`. And once you're done, don't forget " +"to :ref:`do some research ` on how your " +"package is received!" +msgstr "" +"ຕອນນີ້ທ່ານຮູ້ແລ້ວວ່າຈະຈັດເຮັດແພັກເກດສຳລັບແອັບພລິເຄຊັນແບບບັນທັດຄຳສັ່ງທີ່ຂຽນດ້ວຍ Python ແນວໃດ. " +"ຂັ້ນຕອນຕໍ່ໄປອາດຈະເປັນການແຈກຢາຍແພັກເກດຂອງທ່ານ, " +"ເຊິ່ງໝາຍເຖິງການອັບໂຫຼດໄປຍັງ :term:`ດັດຊະນີແພັກເກດ `, " +"ເຊິ່ງໂດຍທົ່ວໄປແມ່ນ :term:`PyPI `. ໃນການເຮັດສິ່ງນັ້ນ, " +"ໃຫ້ປະຕິບັດຕາມຄຳແນະນຳທີ່ :ref:`ການຈັດເຮັດແພັກເກດໃຫ້ໂຄງການຂອງທ່ານ`. ແລະ ເມື່ອສຳເລັດແລ້ວ, " +"ຢ່າລືມ :ref:`ວິໄຈ ` " +"ເບິ່ງວ່າແພັກເກດຂອງທ່ານໄດ້ຮັບການຕອບຮັບແນວໃດ!" + +#: ../source/guides/distributing-packages-using-setuptools.rst:5 +msgid "Packaging and distributing projects" +msgstr "ການຈັດເຮັດແພັກເກດ ແລະ ການແຈກຢາຍໂຄງການ" + +#: ../source/guides/distributing-packages-using-setuptools.rst:7 +msgid "Outdated" +msgstr "ຫຼ້າສະໄໝ" + +#: ../source/guides/distributing-packages-using-setuptools.rst:8 +msgid "2023-12-14" +msgstr "2023-12-14" + +#: ../source/guides/distributing-packages-using-setuptools.rst:10 +msgid "" +"This section covers some additional details on configuring, packaging and " +"distributing Python projects with ``setuptools`` that aren't covered by the " +"introductory tutorial in :doc:`/tutorials/packaging-projects`. It still " +"assumes that you are already familiar with the contents of the :doc:`/" +"tutorials/installing-packages` page." +msgstr "" +"ພາກນີ້ກວມເອົາລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບການກຳນົດຄ່າ, ການຈັດເຮັດແພັກເກດ ແລະ ການແຈກຢາຍໂຄງການ " +"Python ດ້ວຍ ``setuptools`` ເຊິ່ງບໍ່ໄດ້ຖືກເວົ້າເຖິງໃນບົດຮຽນເບື້ອງຕົ້ນໃນ :doc:`/tutorials/" +"packaging-projects`. ມັນຍັງຄົງສົມມຸດວ່າທ່ານມີຄວາມຄຸ້ນເຄີຍກັບເນື້ອໃນຂອງໜ້າ :doc:`/tutorials/" +"installing-packages` ແລ້ວ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:16 +msgid "" +"The section does *not* aim to cover best practices for Python project " +"development as a whole. For example, it does not provide guidance or tool " +"recommendations for version control, documentation, or testing." +msgstr "" +"ພາກນີ້ *ບໍ່ໄດ້* ມີຈຸດປະສົງເພື່ອໃຫ້ຂໍ້ມູນກ່ຽວກັບວິທີການທີ່ດີທີ່ສຸດ (best practices) " +"ສຳລັບການພັດທະນາໂຄງການ Python ໂດຍລວມ. ຕົວຢ່າງເຊັ່ນ ມັນບໍ່ໄດ້ໃຫ້ຄຳແນະນຳ ຫຼື " +"ເຄື່ອງມືແນະນຳສຳລັບການຄວບຄຸມເວີຊັນ, ການເຮັດເອກະສານ, ຫຼື ການທົດສອບ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:20 +msgid "" +"For more reference material, see :std:doc:`Building and Distributing " +"Packages ` in the :ref:`setuptools` docs, but " +"note that some advisory content there may be outdated. In the event of " +"conflicts, prefer the advice in the Python Packaging User Guide." +msgstr "" +"ສຳລັບເອກະສານອ້າງອີງເພີ່ມເຕີມ, ເບິ່ງ :std:doc:`Building and Distributing Packages " +"` ໃນເອກະສານຂອງ :ref:`setuptools`, " +"ແຕ່ໃຫ້ສັງເກດວ່າບາງເນື້ອໃນທີ່ແນະນຳຢູ່ທີ່ນັ້ນອາດຈະຫຼ້າສະໄໝ. ໃນກໍລະນີທີ່ມີຂໍ້ມູນຂັດແຍ່ງກັນ, " +"ໃຫ້ຍຶດຕາມຄຳແນະນຳໃນ Python Packaging User Guide ເປັນຫຼັກ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:28 +msgid "Requirements for packaging and distributing" +msgstr "ຄວາມຕ້ອງການສຳລັບການຈັດເຮັດແພັກເກດ ແລະ ການແຈກຢາຍ" + +#: ../source/guides/distributing-packages-using-setuptools.rst:29 +msgid "" +"First, make sure you have already fulfilled the :ref:`requirements for " +"installing packages `." +msgstr "" +"ທຳອິດ, ໃຫ້ແນ່ໃຈວ່າທ່ານໄດ້ປະຕິບັດຕາມ :ref:`ຄວາມຕ້ອງການສຳລັບການຕິດຕັ້ງແພັກເກດ " +"` ຮຽບຮ້ອຍແລ້ວ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:32 +msgid "Install \"twine\" [1]_:" +msgstr "ຕິດຕັ້ງ \"twine\" [1]_:" + +#: ../source/guides/distributing-packages-using-setuptools.rst:46 +msgid "" +"You'll need this to upload your project :term:`distributions ` to :term:`PyPI ` (see :ref:`below " +"`)." +msgstr "" +"ທ່ານຈະຕ້ອງໃຊ້ສິ່ງນີ້ເພື່ອອັບໂຫຼດ :term:`ຊຸດແຈກຢາຍ (distributions) ` ຂອງໂຄງການຂອງທ່ານໄປຍັງ :term:`PyPI ` " +"(ເບິ່ງ :ref:`ດ້ານລຸ່ມ `)." + +#: ../source/guides/distributing-packages-using-setuptools.rst:52 +msgid "Configuring your project" +msgstr "ການກຳນົດຄ່າໂຄງການຂອງທ່ານ" + +#: ../source/guides/distributing-packages-using-setuptools.rst:56 +msgid "Initial files" +msgstr "ໄຟລ໌ເລີ່ມຕົ້ນ" + +#: ../source/guides/distributing-packages-using-setuptools.rst:61 +msgid "" +"The most important file is :file:`setup.py` which exists at the root of your " +"project directory. For an example, see the `setup.py `_ " +"in the `PyPA sample project `_." +msgstr "" +"ໄຟລ໌ທີ່ສຳຄັນທີ່ສຸດແມ່ນ :file:`setup.py` ເຊິ່ງຢູ່ທີ່ຮາກ (root) ຂອງໄດເຣັກທໍຣີໂຄງການຂອງທ່ານ. " +"ສຳລັບຕົວຢ່າງ, ສາມາດເບິ່ງໄດ້ທີ່ `setup.py `_ ໃນ `ໂຄງການຕົວຢ່າງຂອງ PyPA " +"`_." + +#: ../source/guides/distributing-packages-using-setuptools.rst:66 +msgid ":file:`setup.py` serves two primary functions:" +msgstr ":file:`setup.py` ເຮັດໜ້າທີ່ຫຼັກສອງຢ່າງ:" + +#: ../source/guides/distributing-packages-using-setuptools.rst:68 +msgid "" +"It's the file where various aspects of your project are configured. The " +"primary feature of :file:`setup.py` is that it contains a global ``setup()`` " +"function. The keyword arguments to this function are how specific details " +"of your project are defined. The most relevant arguments are explained " +"in :ref:`the section below `." +msgstr "" +"ມັນແມ່ນໄຟລ໌ທີ່ໃຊ້ກຳນົດຄ່າຕ່າງໆຂອງໂຄງການ. ຄຸນລັກສະນະຫຼັກຂອງ :file:`setup.py` " +"ແມ່ນມັນປະກອບດ້ວຍຟັງຊັນ ``setup()``. ອາກິວເມນ (keyword arguments) " +"ຂອງຟັງຊັນນີ້ແມ່ນວິທີທີ່ໃຊ້ລະບຸລາຍລະອຽດສະເພາະຂອງໂຄງການ. " +"ອາກິວເມນທີ່ກ່ຽວຂ້ອງທີ່ສຸດຈະຖືກອະທິບາຍໃນ :ref:`ພາກສ່ວນດ້ານລຸ່ມ `." + +#: ../source/guides/distributing-packages-using-setuptools.rst:74 +msgid "" +"It's the command line interface for running various commands that relate to " +"packaging tasks. To get a listing of available commands, run ``python3 " +"setup.py --help-commands``." +msgstr "" +"ມັນເປັນ interface ແບບບັນທັດຄຳສັ່ງສຳລັບລັນຄຳສັ່ງຕ່າງໆທີ່ກ່ຽວຂ້ອງກັບວຽກງານການຈັດເຮັດແພັກເກດ. " +"ເພື່ອເບິ່ງລາຍຊື່ຄຳສັ່ງທີ່ມີຢູ່, ໃຫ້ລັນ ``python3 setup.py --help-commands``." + +#: ../source/guides/distributing-packages-using-setuptools.rst:82 +msgid "" +":file:`setup.cfg` is an ini file that contains option defaults " +"for :file:`setup.py` commands. For an example, see the `setup.cfg `_ in the `PyPA sample project `_." +msgstr "" +":file:`setup.cfg` ແມ່ນໄຟລ໌ ini ທີ່ປະກອບດ້ວຍຄ່າເລີ່ມຕົ້ນສຳລັບຄຳສັ່ງໃນ :file:`setup.py`. " +"ສຳລັບຕົວຢ່າງ, ເບິ່ງ `setup.cfg `_ ໃນ `ໂຄງການຕົວຢ່າງຂອງ " +"PyPA `_." + +#: ../source/guides/distributing-packages-using-setuptools.rst:89 +msgid "README.rst / README.md" +msgstr "README.rst / README.md" + +#: ../source/guides/distributing-packages-using-setuptools.rst:91 +msgid "" +"All projects should contain a readme file that covers the goal of the " +"project. The most common format is `reStructuredText `_ with an \"rst\" extension, although this " +"is not a requirement; multiple variants of `Markdown `_ are supported as well (look at " +"``setup()``'s :ref:`long_description_content_type ` argument)." +msgstr "" +"ທຸກໆໂຄງການຄວນມີໄຟລ໌ readme ທີ່ບອກເຖິງເປົ້າໝາຍຂອງໂຄງການ. ຮູບແບບທີ່ນິຍົມທີ່ສຸດແມ່ນ " +"`reStructuredText `_ ທີ່ມີນາມສະກຸນ " +"\"rst\", ເຖິງວ່າຈະບໍ່ແມ່ນຂໍ້ບັງຄັບ; ຮູບແບບຕ່າງໆຂອງ `Markdown `_ ກໍໄດ້ຮັບການຮອງຮັບເຊັ່ນກັນ " +"(ເບິ່ງອາກິວເມນ :ref:`long_description_content_type ` ຂອງ " +"``setup()``)." + +#: ../source/guides/distributing-packages-using-setuptools.rst:98 +msgid "" +"For an example, see `README.md `_ from the `PyPA sample project `_." +msgstr "" +"ສຳລັບຕົວຢ່າງ, ເບິ່ງ `README.md `_ ຈາກ `ໂຄງການຕົວຢ່າງຂອງ PyPA `_." + +#: ../source/guides/distributing-packages-using-setuptools.rst:102 +msgid "" +"Projects using :ref:`setuptools` 0.6.27+ have standard readme files " +"(:file:`README.rst`, :file:`README.txt`, or :file:`README`) included in " +"source distributions by default. The built-in :ref:`distutils` library " +"adopts this behavior beginning in Python 3.7. " +"Additionally, :ref:`setuptools` 36.4.0+ will include a :file:`README.md` if " +"found. If you are using setuptools, you don't need to list your readme file " +"in :file:`MANIFEST.in`. Otherwise, include it to be explicit." +msgstr "" +"ໂຄງການທີ່ໃຊ້ :ref:`setuptools` 0.6.27 ຂຶ້ນໄປ ຈະມີໄຟລ໌ readme ມາດຕະຖານ " +"(:file:`README.rst`, :file:`README.txt`, ຫຼື :file:`README`) " +"ລວມຢູ່ໃນຊຸດແຈກຢາຍແບບຊອດໂຄ້ດໂດຍຄ່າເລີ່ມຕົ້ນ. ໄລບຣາຣີ :ref:`distutils` ທີ່ມາກັບ Python " +"ກໍເລີ່ມໃຊ້ພຶດຕິກຳນີ້ຕັ້ງແຕ່ Python 3.7 ເປັນຕົ້ນມາ. ນອກຈາກນີ້, :ref:`setuptools` 36.4.0 ຂຶ້ນໄປ " +"ຈະລວມເອົາ :file:`README.md` ເຂົ້ານຳຖ້າພົບເຫັນ. ຖ້າທ່ານໃຊ້ setuptools, " +"ທ່ານບໍ່ຈຳເປັນຕ້ອງລະບຸໄຟລ໌ readme ໃນ :file:`MANIFEST.in`. ຖ້າບໍ່ດັ່ງນັ້ນ, " +"ໃຫ້ລະບຸໄວ້ເພື່ອຄວາມຊັດເຈນ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:111 +msgid "MANIFEST.in" +msgstr "MANIFEST.in" + +#: ../source/guides/distributing-packages-using-setuptools.rst:113 +msgid "" +"A :file:`MANIFEST.in` is needed when you need to package additional files " +"that are not automatically included in a source distribution. For details " +"on writing a :file:`MANIFEST.in` file, including a list of what's included " +"by default, see \":ref:`Using MANIFEST.in`\"." +msgstr "" +"ໄຟລ໌ :file:`MANIFEST.in` " +"ແມ່ນຈຳເປັນເມື່ອທ່ານຕ້ອງການລວມເອົາໄຟລ໌ເພີ່ມເຕີມທີ່ບໍ່ໄດ້ຖືກລວມເຂົ້າໃນຊຸດແຈກຢາຍແບບຊອດໂຄ້ດໂດຍອັດຕະໂນມັດ. " +"ສຳລັບລາຍລະອຽດການຂຽນໄຟລ໌ :file:`MANIFEST.in`, ລວມເຖິງລາຍຊື່ສິ່ງທີ່ຖືກລວມມາໃຫ້ໂດຍຄ່າເລີ່ມຕົ້ນ, " +"ເບິ່ງ \":ref:`ການໃຊ້ MANIFEST.in`\"." + +#: ../source/guides/distributing-packages-using-setuptools.rst:118 +msgid "" +"However, you may not have to use a :file:`MANIFEST.in`. For an example, the " +"`PyPA sample project `_ has removed " +"its manifest file, since all the necessary files have been included " +"by :ref:`setuptools` 43.0.0 and newer." +msgstr "" +"ແນວໃດກໍຕາມ, ທ່ານອາດບໍ່ຈຳເປັນຕ້ອງໃຊ້ :file:`MANIFEST.in`. ຕົວຢ່າງ: `ໂໂຄງການຕົວຢ່າງຂອງ " +"PyPA `_ ໄດ້ເອົາໄຟລ໌ manifest ອອກແລ້ວ, " +"ເນື່ອງຈາກໄຟລ໌ທີ່ຈຳເປັນທັງໝົດໄດ້ຖືກລວມເຂົ້າໂດຍ :ref:`setuptools` 43.0.0 ແລະ ເວີຊັນໃໝ່ກວ່າ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:123 +msgid "" +":file:`MANIFEST.in` does not affect binary distributions such as wheels." +msgstr ":file:`MANIFEST.in` ບໍ່ມີຜົນຕໍ່ຊຸດແຈກຢາຍແບບໄບນາຣີ ເຊັ່ນ wheels." + +#: ../source/guides/distributing-packages-using-setuptools.rst:126 +msgid "LICENSE.txt" +msgstr "LICENSE.txt" + +#: ../source/guides/distributing-packages-using-setuptools.rst:128 +msgid "" +"Every package should include a license file detailing the terms of " +"distribution. In many jurisdictions, packages without an explicit license " +"can not be legally used or distributed by anyone other than the copyright " +"holder. If you're unsure which license to choose, you can use resources such " +"as `GitHub's Choose a License `_ or consult a " +"lawyer." +msgstr "" +"ທຸກໆແພັກເກດຄວນລວມເອົາໄຟລ໌ໃບອະນຸຍາດທີ່ລະບຸເງື່ອນໄຂການແຈກຢາຍ. ໃນຫຼາຍຂົງເຂດກົດໝາຍ, " +"ແພັກເກດທີ່ບໍ່ມີໃບອະນຸຍາດທີ່ຊັດເຈນຈະບໍ່ສາມາດຖືກໃຊ້ ຫຼື " +"ແຈກຢາຍໄດ້ຢ່າງຖືກກົດໝາຍໂດຍບຸກຄົນອື່ນນອກຈາກເຈົ້າຂອງລິຂະສິດ. ຖ້າທ່ານບໍ່ແນ່ໃຈວ່າຈະເລືອກໃບອະນຸຍາດໃດ, " +"ທ່ານສາມາດໃຊ້ຊັບພະຍາກອນເຊັ່ນ `Choose a License ຂອງ GitHub `_ ຫຼື ປຶກສານັກກົດໝາຍ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:134 +msgid "" +"For an example, see the `LICENSE.txt `_ from the `PyPA sample project `_." +msgstr "" +"ສຳລັບຕົວຢ່າງ, ເບິ່ງ `LICENSE.txt `_ ຈາກ `ໂໂຄງການຕົວຢ່າງຂອງ PyPA `_." + +#: ../source/guides/distributing-packages-using-setuptools.rst:139 +msgid "" +msgstr "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:141 +msgid "" +"Although it's not required, the most common practice is to include your " +"Python modules and packages under a single top-level package that has the " +"same :ref:`name ` as your project, or something very close." +msgstr "" +"ເຖິງແມ່ນວ່າຈະບໍ່ແມ່ນຂໍ້ບັງຄັບ, ແຕ່ວິທີການທົ່ວໄປທີ່ສຸດຄືການລວມເອົາໂມດູນ ແລະ ແພັກເກດ Python " +"ຂອງທ່ານໄວ້ພາຍໃຕ້ແພັກເກດລະດັບສູງສຸດພຽງອັນດຽວ ທີ່ມີ :ref:`ຊື່ ` " +"ດຽວກັນກັບໂຄງການຂອງທ່ານ, ຫຼື ຊື່ທີ່ໃກ້ຄຽງທີ່ສຸດ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:145 +msgid "" +"For an example, see the `sample `_ package that's included in the `PyPA sample project " +"`_." +msgstr "" +"ສຳລັບຕົວຢ່າງ, ເບິ່ງແພັກເກດ `sample `_ ທີ່ລວມຢູ່ໃນ `ໂໂຄງການຕົວຢ່າງຂອງ PyPA `_." + +#: ../source/guides/distributing-packages-using-setuptools.rst:153 +msgid "setup() args" +msgstr "ອາກິວເມນຂອງ setup()" + +#: ../source/guides/distributing-packages-using-setuptools.rst:155 +msgid "" +"As mentioned above, the primary feature of :file:`setup.py` is that it " +"contains a global ``setup()`` function. The keyword arguments to this " +"function are how specific details of your project are defined." +msgstr "" +"ຕາມທີ່ໄດ້ກ່າວມາຂ້າງເທິງ, ຄຸນລັກສະນະຫຼັກຂອງ :file:`setup.py` ແມ່ນມັນປະກອບດ້ວຍຟັງຊັນ " +"``setup()``. ອາກິວເມນຂອງຟັງຊັນນີ້ແມ່ນວິທີທີ່ໃຊ້ລະບຸລາຍລະອຽດສະເພາະຂອງໂຄງການ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:159 +msgid "" +"Some are temporarily explained below until their information is moved " +"elsewhere. The full list can be found :doc:`in the setuptools documentation " +"`." +msgstr "" +"ບາງສ່ວນຈະຖືກອະທິບາຍຊົ່ວຄາວຢູ່ດ້ານລຸ່ມນີ້ ຈົນກວ່າຂໍ້ມູນຈະຖືກຍ້າຍໄປບ່ອນອື່ນ. " +"ລາຍຊື່ທັງໝົດສາມາດເບິ່ງໄດ້ :doc:`ໃນເອກະສານຂອງ setuptools `." + +#: ../source/guides/distributing-packages-using-setuptools.rst:163 +msgid "" +"Most of the snippets given are taken from the `setup.py `_ " +"contained in the `PyPA sample project `_." +msgstr "" +"ຂໍ້ຄວາມສ່ວນໃຫຍ່ທີ່ໃຫ້ມາແມ່ນມາຈາກ `setup.py `_ ທີ່ຢູ່ໃນ `ໂຄງການຕົວຢ່າງ " +"PyPA `_." + +#: ../source/guides/distributing-packages-using-setuptools.rst:170 +msgid "" +"See :ref:`Choosing a versioning scheme` for more information on ways to use " +"versions to convey compatibility information to your users." +msgstr "" +"ເບິ່ງ :ref:`ການເລືອກຮູບແບບການກຳນົດເວີຊັນ` ສຳລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບວິທີການນຳໃຊ້ " +"ເວີຊັນເພື່ອສື່ສານຂໍ້ມູນຄວາມເຂົ້າກັນໄດ້ໃຫ້ກັບຜູ້ໃຊ້ຂອງທ່ານ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:177 +msgid "``packages``" +msgstr "``packages``" + +#: ../source/guides/distributing-packages-using-setuptools.rst:183 +msgid "" +"Set ``packages`` to a list of all :term:`packages ` in your " +"project, including their subpackages, sub-subpackages, etc. Although the " +"packages can be listed manually, ``setuptools.find_packages()`` finds them " +"automatically. Use the ``include`` keyword argument to find only the given " +"packages. Use the ``exclude`` keyword argument to omit packages that are " +"not intended to be released and installed." +msgstr "" +"ກຳນົດ ``packages`` ໃຫ້ເປັນລາຍຊື່ຂອງ :term:`ແພັກເກດ ` ທັງໝົດໃນ " +"ໂຄງການຂອງທ່ານ, ລວມທັງແພັກເກດຍ່ອຍ, ແພັກເກດຍ່ອຍຊັ້ນຕໍ່ໆໄປ ແລະ ອື່ນໆ. ເຖິງແມ່ນວ່າ " +"ແພັກເກດສາມາດລະບຸໄດ້ດ້ວຍຕົນເອງ, ແຕ່ ``setuptools.find_packages()`` ຈະຄົ້ນຫາພວກມັນ " +"ໃຫ້ໂດຍອັດຕະໂນມັດ. ໃຊ້ຕົວປ່ຽນ ``include`` ເພື່ອຄົ້ນຫາສະເພາະແພັກເກດທີ່ກຳນົດໄວ້. ໃຊ້ຕົວປ່ຽນ " +"``exclude`` ເພື່ອຍົກເວັ້ນແພັກເກດທີ່ບໍ່ຕ້ອງການຈະເຜີຍແຜ່ ຫຼື ຕິດຕັ້ງ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:192 +msgid "``py_modules``" +msgstr "``py_modules``" + +#: ../source/guides/distributing-packages-using-setuptools.rst:198 +msgid "" +"If your project contains any single-file Python modules that aren't part of " +"a package, set ``py_modules`` to a list of the names of the modules (minus " +"the ``.py`` extension) in order to make :ref:`setuptools` aware of them." +msgstr "" +"ຖ້າໂຄງການຂອງທ່ານມີໂມດູນ Python ໄຟລ໌ດຽວໃດໜຶ່ງທີ່ບໍ່ໄດ້ເປັນສ່ວນໜຶ່ງຂອງ ແພັກເກດ, ໃຫ້ກຳນົດ " +"``py_modules`` ເປັນລາຍຊື່ຂອງຊື່ໂມດູນ (ໂດຍບໍ່ຕ້ອງໃສ່ນາມສະກຸນ ``.py``) " +"ເພື່ອໃຫ້ :ref:`setuptools` ຮັບຮູ້ພວກມັນ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:204 +msgid "``install_requires``" +msgstr "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:210 +msgid "" +"\"install_requires\" should be used to specify what dependencies a project " +"minimally needs to run. When the project is installed by :ref:`pip`, this is " +"the specification that is used to install its dependencies." +msgstr "" +"\"install_requires\" ຄວນຖືກໃຊ້ເພື່ອລະບຸສິ່ງທີ່ໂຄງການຈຳເປັນຕ້ອງໃຊ້ (dependencies) " +"ໃນການເຮັດວຽກຂັ້ນຕ່ຳ. ເມື່ອໂຄງການຖືກຕິດຕັ້ງໂດຍ :ref:`pip`, ຂໍ້ມູນສ່ວນນີ້ " +"ຈະຖືກໃຊ້ເພື່ອຕິດຕັ້ງສິ່ງທີ່ໂຄງການຕ້ອງການເພີ່ມເຕີມ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:214 +msgid "" +"For more on using \"install_requires\" see :ref:`install_requires vs " +"Requirements files`." +msgstr "" +"ສຳລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບການນຳໃຊ້ \"install_requires\" ເບິ່ງໄດ້ທີ່ :ref:`install_requires " +"vs Requirements files`." + +#: ../source/guides/distributing-packages-using-setuptools.rst:221 +msgid "``package_data``" +msgstr "``package_data``" + +#: ../source/guides/distributing-packages-using-setuptools.rst:230 +msgid "" +"Often, additional files need to be installed into a :term:`package `. These files are often data that’s closely related to the " +"package’s implementation, or text files containing documentation that might " +"be of interest to programmers using the package. These files are called " +"\"package data\"." +msgstr "" +"ເລື້ອຍໆທີ່ໄຟລ໌ເພີ່ມເຕີມຈຳເປັນຕ້ອງໄດ້ຕິດຕັ້ງເຂົ້າໄປໃນ :term:`ແພັກເກດ `. " +"ໄຟລ໌ເຫຼົ່ານີ້ມັກຈະເປັນຂໍ້ມູນທີ່ກ່ຽວຂ້ອງຢ່າງໃກ້ຊິດກັບການເຮັດວຽກຂອງ ແພັກເກດ, ຫຼື " +"ເປັນໄຟລ໌ຂໍ້ຄວາມທີ່ມີເອກະສານອ້າງອີງທີ່ນັກພັດທະນາຜູ້ໃຊ້ແພັກເກດ ອາດຈະສົນໃຈ. ໄຟລ໌ເຫຼົ່ານີ້ເອີ້ນວ່າ " +"\"package data\" (ຂໍ້ມູນແພັກເກດ)." + +#: ../source/guides/distributing-packages-using-setuptools.rst:235 +msgid "" +"The value must be a mapping from package name to a list of relative path " +"names that should be copied into the package. The paths are interpreted as " +"relative to the directory containing the package." +msgstr "" +"ຄ່າຕ້ອງເປັນການຈັບຄູ່ລະຫວ່າງຊື່ແພັກເກດກັບລາຍຊື່ຂອງເສັ້ນທາງ (path) ທີ່ກ່ຽວຂ້ອງ " +"ເຊິ່ງຄວນຈະຖືກສຳເນົາເຂົ້າໄປໃນແພັກເກດ. ເສັ້ນທາງເຫຼົ່ານີ້ຈະຖືກຕີຄວາມໝາຍ " +"ໂດຍອີງຕາມໂຟນເດີທີ່ບັນຈຸແພັກເກດນັ້ນຢູ່." + +#: ../source/guides/distributing-packages-using-setuptools.rst:239 +msgid "" +"For more information, see :std:doc:`Including Data Files " +"` from the :std:doc:`setuptools docs " +"`." +msgstr "" +"ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ເບິ່ງ :std:doc:`Including Data Files ` ຈາກ :std:doc:`ເອກະສານ setuptools `." + +#: ../source/guides/distributing-packages-using-setuptools.rst:247 +msgid "``data_files``" +msgstr "``data_files``" + +#: ../source/guides/distributing-packages-using-setuptools.rst:253 +msgid "" +"Although configuring :ref:`Package Data` is sufficient for most needs, in " +"some cases you may need to place data files *outside* of " +"your :term:`packages `. The ``data_files`` directive allows " +"you to do that. It is mostly useful if you need to install files which are " +"used by other programs, which may be unaware of Python packages." +msgstr "" +"ເຖິງແມ່ນວ່າການຕັ້ງຄ່າ :ref:`Package Data` ຈະພຽງພໍສຳລັບຄວາມຕ້ອງການສ່ວນໃຫຍ່, ແຕ່ໃນ " +"ບາງກໍລະນີທ່ານອາດຈະຕ້ອງວາງໄຟລ໌ຂໍ້ມູນໄວ້ *ພາຍນອກ* ຂອງ :term:`ແພັກເກດ ` " +"ຂອງທ່ານ. ຄຳສັ່ງ ``data_files`` ຊ່ວຍໃຫ້ທ່ານເຮັດສິ່ງນັ້ນໄດ້. ມັນມີປະໂຫຍດຫຼາຍທີ່ສຸດ " +"ຫາກທ່ານຕ້ອງການຕິດຕັ້ງໄຟລ໌ທີ່ຖືກໃຊ້ໂດຍໂປຣແກຣມອື່ນໆ, ເຊິ່ງອາດຈະບໍ່ຮູ້ຈັກແພັກເກດ Python." + +#: ../source/guides/distributing-packages-using-setuptools.rst:259 +msgid "" +"Each ``(directory, files)`` pair in the sequence specifies the installation " +"directory and the files to install there. The ``directory`` must be a " +"relative path (although this may change in the future, see `wheel Issue #92 " +"`_), and it is interpreted relative " +"to the installation prefix (Python’s ``sys.prefix`` for a default " +"installation; ``site.USER_BASE`` for a user installation). Each file name in " +"``files`` is interpreted relative to the :file:`setup.py` script at the top " +"of the project source distribution." +msgstr "" +"ແຕ່ລະຄູ່ ``(directory, files)`` ໃນລຳດັບຈະລະບຸໂຟນເດີຕິດຕັ້ງ ແລະ ໄຟລ໌ທີ່ຈະ ຕິດຕັ້ງໄວ້ທີ່ນັ້ນ. " +"``directory`` ຕ້ອງເປັນເສັ້ນທາງທີ່ກ່ຽວຂ້ອງ (ເຖິງແມ່ນວ່າສິ່ງນີ້ອາດຈະ ປ່ຽນແປງໃນອະນາຄົດ, ເບິ່ງ " +"`wheel Issue #92 `_), ແລະ " +"ມັນຖືກຕີຄວາມໝາຍໂດຍອີງຕາມຄ່ານຳໜ້າການຕິດຕັ້ງ (``sys.prefix`` ຂອງ Python ສຳລັບ " +"ການຕິດຕັ້ງແບບມາດຕະຖານ; ``site.USER_BASE`` ສຳລັບການຕິດຕັ້ງຂອງຜູ້ໃຊ້). ແຕ່ລະຊື່ໄຟລ໌ໃນ " +"``files`` ແມ່ນຖືກຕີຄວາມໝາຍໂດຍອີງຕາມສະຄຣິບ :file:`setup.py` ທີ່ຢູ່ສ່ວນເທິງສຸດ " +"ຂອງໄຟລ໌ແຫຼ່ງກຳເນີດໂຄງການ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:269 +msgid "" +"For more information see the distutils section on :ref:`Installing " +"Additional Files `." +msgstr "" +"ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ ເບິ່ງພາກ distutils ໃນ :ref:`Installing Additional Files " +"`." + +#: ../source/guides/distributing-packages-using-setuptools.rst:274 +msgid "" +"When installing packages as egg, ``data_files`` is not supported. So, if " +"your project uses :ref:`setuptools`, you must use ``pip`` to install it. " +"Alternatively, if you must use ``python setup.py``, then you need to pass " +"the ``--old-and-unmanageable`` option." +msgstr "" +"ເມື່ອຕິດຕັ້ງແພັກເກດແບບ egg, ``data_files`` ຈະບໍ່ຖືກຮອງຮັບ. ດັ່ງນັ້ນ, ຖ້າ " +"ໂຄງການຂອງທ່ານໃຊ້ :ref:`setuptools`, ທ່ານຕ້ອງໃຊ້ ``pip`` ເພື່ອຕິດຕັ້ງມັນ. ຫຼື ຫາກທ່ານຕ້ອງໃຊ້ " +"``python setup.py``, ທ່ານຈຳເປັນຕ້ອງສົ່ງຄ່າຕົວເລືອກ ``--old-and-unmanageable`` ນຳ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:281 +#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:661 +msgid "``scripts``" +msgstr "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:283 +msgid "" +"Although ``setup()`` supports a :ref:`scripts ` keyword for pointing to pre-made scripts to install, " +"the recommended approach to achieve cross-platform compatibility is to " +"use :ref:`console_scripts` entry points (see below)." +msgstr "" +"ເຖິງແມ່ນວ່າ ``setup()`` ຈະຮອງຮັບຄຳສັບຫຼັກ :ref:`scripts ` ເພື່ອຊີ້ໄປຫາສະຄຣິບທີ່ກຽມໄວ້ກ່ອນໜ້າສຳລັບການຕິດຕັ້ງ, " +"ແຕ່ວິທີທີ່ແນະນຳເພື່ອໃຫ້ສາມາດເຮັດວຽກໄດ້ໃນຫຼາຍລະບົບ (cross-platform) " +"ແມ່ນການໃຊ້ :ref:`console_scripts` entry points (ເບິ່ງລຸ່ມນີ້)." + +#: ../source/guides/distributing-packages-using-setuptools.rst:291 +msgid "Choosing a versioning scheme" +msgstr "ການເລືອກຮູບແບບການກຳນົດເວີຊັນ" + +#: ../source/guides/distributing-packages-using-setuptools.rst:293 +msgid "" +"See :ref:`versioning` for information on common version schemes and how to " +"choose between them." +msgstr "" +"ເບິ່ງ :ref:`versioning` ສຳລັບຂໍ້ມູນກ່ຽວກັບຮູບແບບເວີຊັນທີ່ນິຍົມໃຊ້ ແລະ ວິທີ ການເລືອກລະຫວ່າງພວກມັນ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:298 +msgid "Working in \"development mode\"" +msgstr "ການເຮັດວຽກໃນ \"ໂໝດນັກພັດທະນາ\"" + +#: ../source/guides/distributing-packages-using-setuptools.rst:300 +msgid "" +"You can install a project in \"editable\" or \"develop\" mode while you're " +"working on it. When installed as editable, a project can be edited in-place " +"without reinstallation: changes to Python source files in projects installed " +"as editable will be reflected the next time an interpreter process is " +"started." +msgstr "" +"ທ່ານສາມາດຕິດຕັ້ງໂຄງການໃນໂໝດ \"editable\" (ແກ້ໄຂໄດ້) ຫຼື \"develop\" (ພັດທະນາ) ໃນຂະນະທີ່ " +"ທ່ານກຳລັງເຮັດວຽກຢູ່. ເມື່ອຕິດຕັ້ງແບບ editable, ໂຄງການສາມາດຖືກແກ້ໄຂໄດ້ໂດຍກົງ ໂດຍບໍ່ຕ້ອງຕິດຕັ້ງໃໝ່: " +"ການປ່ຽນແປງໃນໄຟລ໌ແຫຼ່ງກຳເນີດ Python ໃນໂຄງການທີ່ຕິດຕັ້ງ ແບບ editable " +"ຈະມີຜົນໃນຄັ້ງຕໍ່ໄປທີ່ໂປຣແກຣມ Python ເລີ່ມເຮັດວຽກ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:306 +msgid "" +"To install a Python package in \"editable\"/\"development\" mode Change " +"directory to the root of the project directory and run:" +msgstr "" +"ເພື່ອຕິດຕັ້ງແພັກເກດ Python ໃນໂໝດ \"editable\"/\"development\" ໃຫ້ປ່ຽນ ໂຟນເດີໄປຫາສ່ວນຫຼັກ " +"(root) ຂອງໂຄງການ ແລະ ຣັນຄຳສັ່ງ:" + +#: ../source/guides/distributing-packages-using-setuptools.rst:314 +msgid "" +"The pip command-line flag ``-e`` is short for ``--editable``, and ``.`` " +"refers to the current working directory, so together, it means to install " +"the current directory (i.e. your project) in editable mode. This will also " +"install any dependencies declared with ``install_requires`` and any scripts " +"declared with ``console_scripts``. Dependencies will be installed in the " +"usual, non-editable mode." +msgstr "" +"ຕົວເລືອກ ``-e`` ໃນຄຳສັ່ງ pip ແມ່ນຫຍໍ້ມາຈາກ ``--editable``, ແລະ ``.`` " +"ໝາຍເຖິງໂຟນເດີທີ່ກຳລັງເຮັດວຽກຢູ່, ດັ່ງນັ້ນເມື່ອລວມກັນແລ້ວ ມັນໝາຍເຖິງການຕິດຕັ້ງ ໂຟນເດີປັດຈຸບັນ " +"(ກໍ່ຄືໂຄງການຂອງທ່ານ) ໃນໂໝດ editable. ສິ່ງນີ້ຈະ ຕິດຕັ້ງສິ່ງທີ່ໂຄງການຕ້ອງການ (dependencies) " +"ທີ່ລະບຸໄວ້ໃນ ``install_requires`` ແລະ ສະຄຣິບທີ່ລະບຸໄວ້ໃນ ``console_scripts``. ສ່ວນ " +"dependencies ຈະຖືກຕິດຕັ້ງໃນ ໂໝດປົກກະຕິ (ທີ່ບໍ່ແມ່ນ editable)." + +#: ../source/guides/distributing-packages-using-setuptools.rst:321 +msgid "" +"You may want to install some of your dependencies in editable mode as well. " +"For example, supposing your project requires \"foo\" and \"bar\", but you " +"want \"bar\" installed from VCS in editable mode, then you could construct a " +"requirements file like so::" +msgstr "" +"ທ່ານອາດຈະຕ້ອງການຕິດຕັ້ງບາງ dependencies ໃນໂໝດ editable ຄືກັນ. ຕົວຢ່າງ, " +"ສົມມຸດວ່າໂຄງການຂອງທ່ານຕ້ອງການ \"foo\" ແລະ \"bar\", ແຕ່ທ່ານ ຕ້ອງການຕິດຕັ້ງ \"bar\" ຈາກ " +"VCS ໃນໂໝດ editable, ທ່ານສາມາດສ້າງ ໄຟລ໌ requirements ໄດ້ດັ່ງນີ້::" + +#: ../source/guides/distributing-packages-using-setuptools.rst:329 +msgid "" +"The first line says to install your project and any dependencies. The second " +"line overrides the \"bar\" dependency, such that it's fulfilled from VCS, " +"not PyPI." +msgstr "" +"ແຖວທຳອິດໝາຍເຖິງການຕິດຕັ້ງໂຄງການຂອງທ່ານ ແລະ dependencies ທັງໝົດ. ແຖວທີສອງ ຈະຂຽນທັບ " +"dependency \"bar\", ເພື່ອໃຫ້ມັນຖືກຕິດຕັ້ງຈາກ VCS ແທນທີ່ຈະເປັນ PyPI." + +#: ../source/guides/distributing-packages-using-setuptools.rst:333 +msgid "" +"If, however, you want \"bar\" installed from a local directory in editable " +"mode, the requirements file should look like this, with the local paths at " +"the top of the file::" +msgstr "" +"ແຕ່ຖ້າຫາກທ່ານຕ້ອງການຕິດຕັ້ງ \"bar\" ຈາກໂຟນເດີພາຍໃນເຄື່ອງໃນໂໝດ editable, ໄຟລ໌ " +"requirements ຄວນຈະເປັນແບບນີ້, ໂດຍວາງເສັ້ນທາງພາຍໃນເຄື່ອງໄວ້ ສ່ວນເທິງຂອງໄຟລ໌::" + +#: ../source/guides/distributing-packages-using-setuptools.rst:338 +msgid "" +"Otherwise, the dependency will be fulfilled from PyPI, due to the " +"installation order of the requirements file. For more on requirements " +"files, see the :ref:`Requirements File ` section in " +"the pip docs. For more on VCS installs, see the :ref:`VCS Support ` section of the pip docs." +msgstr "" +"ຖ້າບໍ່ດັ່ງນັ້ນ, dependency ຈະຖືກຕິດຕັ້ງຈາກ PyPI ເນື່ອງຈາກລຳດັບການຕິດຕັ້ງ ຂອງໄຟລ໌ requirements. " +"ສຳລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບໄຟລ໌ requirements, ເບິ່ງທີ່ພາກ :ref:`Requirements File " +"` ໃນເອກະສານຂອງ pip. ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ ກ່ຽວກັບການຕິດຕັ້ງຈາກ " +"VCS, ເບິ່ງທີ່ພາກ :ref:`VCS Support ` ໃນເອກະສານຂອງ pip." + +#: ../source/guides/distributing-packages-using-setuptools.rst:342 +msgid "" +"Lastly, if you don't want to install any dependencies at all, you can run:" +msgstr "ສຸດທ້າຍ, ຫາກທ່ານບໍ່ຕ້ອງການຕິດຕັ້ງ dependencies ໃດໆເລີຍ, ທ່ານສາມາດຣັນຄຳສັ່ງ:" + +#: ../source/guides/distributing-packages-using-setuptools.rst:349 +msgid "" +"For more information, see the :doc:`Development Mode ` section of the :ref:`setuptools` docs." +msgstr "" +"ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ເບິ່ງພາກ :doc:`Development Mode ` ໃນເອກະສານຂອງ :ref:`setuptools`." + +#: ../source/guides/distributing-packages-using-setuptools.rst:356 +msgid "Packaging your project" +msgstr "ການເຮັດແພັກເກດໃຫ້ໂຄງການຂອງທ່ານ" + +#: ../source/guides/distributing-packages-using-setuptools.rst:358 +msgid "" +"To have your project installable from a :term:`Package Index` " +"like :term:`PyPI `, you'll need to create " +"a :term:`Distribution ` (aka \":term:`Package " +"`\") for your project." +msgstr "" +"ເພື່ອໃຫ້ໂຄງການຂອງທ່ານສາມາດຕິດຕັ້ງໄດ້ຈາກ :term:`Package Index` ເຊັ່ນ :term:`PyPI " +"`, ທ່ານຈຳເປັນຕ້ອງສ້າງ :term:`Distribution " +"` (ຫຼື \":term:`Package `\") " +"ສຳລັບໂຄງການຂອງທ່ານ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:363 +msgid "" +"Before you can build wheels and sdists for your project, you'll need to " +"install the ``build`` package:" +msgstr "" +"ກ່ອນທີ່ທ່ານຈະສາມາດສ້າງໄຟລ໌ wheel ແລະ sdist ສຳລັບໂຄງການຂອງທ່ານ, ທ່ານຈຳເປັນຕ້ອງ " +"ຕິດຕັ້ງແພັກເກດ ``build`` ກ່ອນ:" + +#: ../source/guides/distributing-packages-using-setuptools.rst:380 +msgid "Source distributions" +msgstr "ການແຈກຢາຍແບບໄຟລ໌ແຫຼ່ງກຳເນີດ (Source distributions)" + +#: ../source/guides/distributing-packages-using-setuptools.rst:382 +msgid "" +"Minimally, you should create a :term:`Source Distribution `:" +msgstr "" +"ຢ່າງໜ້ອຍທີ່ສຸດ, ທ່ານຄວນສ້າງ :term:`Source Distribution `:" + +#: ../source/guides/distributing-packages-using-setuptools.rst:398 +msgid "" +"A \"source distribution\" is unbuilt (i.e. it's not a :term:`Built " +"Distribution`), and requires a build step when installed by pip. Even if " +"the distribution is pure Python (i.e. contains no extensions), it still " +"involves a build step to build out the installation metadata " +"from :file:`setup.py` and/or :file:`setup.cfg`." +msgstr "" +"\"source distribution\" ແມ່ນສິ່ງທີ່ຍັງບໍ່ທັນໄດ້ຖືກບິວ (ບໍ່ແມ່ນ :term:`Built Distribution`), " +"ແລະ ຕ້ອງການຂັ້ນຕອນການບິວເມື່ອຕິດຕັ້ງໂດຍ pip. ເຖິງແມ່ນວ່າ ການແຈກຢາຍນັ້ນຈະເປັນ Python ລ້ວນໆ " +"(ບໍ່ມີສ່ວນຂະຫຍາຍອື່ນໆ), ມັນກໍ່ຍັງ ຕ້ອງມີຂັ້ນຕອນການບິວເພື່ອສ້າງຂໍ້ມູນ metadata " +"ສຳລັບການຕິດຕັ້ງຈາກ :file:`setup.py` ແລະ/ຫຼື :file:`setup.cfg`." + +#: ../source/guides/distributing-packages-using-setuptools.rst:406 +msgid "Wheels" +msgstr "Wheels" + +#: ../source/guides/distributing-packages-using-setuptools.rst:408 +msgid "" +"You should also create a wheel for your project. A wheel is a :term:`built " +"package ` that can be installed without needing to go " +"through the \"build\" process. Installing wheels is substantially faster for " +"the end user than installing from a source distribution." +msgstr "" +"ທ່ານຄວນສ້າງ wheel ສໍາລັບໂຄງການຂອງທ່ານນຳ. wheel ແມ່ນ :term:`built package ` ທີ່ສາມາດຕິດຕັ້ງໄດ້ໂດຍບໍ່ຈໍາເປັນຕ້ອງຜ່ານຂັ້ນຕອນການ \"build\". ການຕິດຕັ້ງ wheel " +"ແມ່ນໄວເວີກວ່າການຕິດຕັ້ງຈາກ source distribution ສໍາລັບຜູ້ໃຊ້ທົ່ວໄປ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:413 +msgid "" +"If your project is pure Python then you'll be creating a :ref:`\"Pure Python " +"Wheel\" (see section below) `." +msgstr "" +"ຖ້າໂຄງການຂອງທ່ານເປັນ Python ລ້ວນໆ, ທ່ານຈະໄດ້ສ້າງ :ref:`\"Pure Python Wheel\" " +"(ເບິ່ງພາກລຸ່ມນີ້) `." + +#: ../source/guides/distributing-packages-using-setuptools.rst:416 +msgid "" +"If your project contains compiled extensions, then you'll be creating what's " +"called a :ref:`*Platform Wheel* (see section below) `." +msgstr "" +"ຖ້າໂຄງການຂອງທ່ານມີສ່ວນຂະຫຍາຍທີ່ຕ້ອງໄດ້ຄອມໄພລ໌ (compiled extensions), ທ່ານຈະໄດ້ສ້າງ " +"ສິ່ງທີ່ເອີ້ນວ່າ :ref:`*Platform Wheel* (ເບິ່ງພາກລຸ່ມນີ້) `." + +#: ../source/guides/distributing-packages-using-setuptools.rst:419 +msgid "" +"If your project also supports Python 2 *and* contains no C extensions, then " +"you should create what's called a *Universal Wheel* by adding the following " +"to your :file:`setup.cfg` file:" +msgstr "" +"ຖ້າໂຄງການຂອງທ່ານຮອງຮັບ Python 2 *ແລະ* ບໍ່ມີສ່ວນຂະຫຍາຍ C, ທ່ານຄວນ ສ້າງສິ່ງທີ່ເອີ້ນວ່າ " +"*Universal Wheel* ໂດຍການເພີ່ມຂໍ້ຄວາມລຸ່ມນີ້ໃສ່ໃນໄຟລ໌ :file:`setup.cfg` ຂອງທ່ານ:" + +#: ../source/guides/distributing-packages-using-setuptools.rst:428 +msgid "" +"Only use this setting if your project does not have any C extensions *and* " +"supports Python 2 and 3." +msgstr "" +"ໃຊ້ການຕັ້ງຄ່ານີ້ສະເພາະຫາກໂຄງການຂອງທ່ານບໍ່ມີສ່ວນຂະຫຍາຍ C *ແລະ* ຮອງຮັບທັງ Python 2 ແລະ 3." + +#: ../source/guides/distributing-packages-using-setuptools.rst:435 +msgid "Pure Python Wheels" +msgstr "Pure Python Wheels" + +#: ../source/guides/distributing-packages-using-setuptools.rst:437 +msgid "" +"*Pure Python Wheels* contain no compiled extensions, and therefore only " +"require a single Python wheel." +msgstr "" +"*Pure Python Wheels* ບໍ່ມີສ່ວນຂະຫຍາຍທີ່ຖືກຄອມໄພລ໌, ດັ່ງນັ້ນຈຶ່ງ ຕ້ອງການພຽງແຕ່ Python wheel " +"ໄຟລ໌ດຽວ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:440 +#: ../source/guides/distributing-packages-using-setuptools.rst:469 +msgid "To build the wheel:" +msgstr "ເພື່ອບິວ wheel:" + +#: ../source/guides/distributing-packages-using-setuptools.rst:454 +msgid "" +"The ``wheel`` package will detect that the code is pure Python, and build a " +"wheel that's named such that it's usable on any Python 3 installation. For " +"details on the naming of wheel files, see :pep:`425`." +msgstr "" +"ແພັກເກດ ``wheel`` ຈະກວດສອບວ່າໂຄ້ດເປັນ Python ລ້ວນໆ, ແລະ ຈະບິວ wheel " +"ທີ່ຖືກຕັ້ງຊື່ໃຫ້ສາມາດໃຊ້ໄດ້ກັບການຕິດຕັ້ງ Python 3 ໃດໆກໍ່ໄດ້. ສຳລັບ ລາຍລະອຽດກ່ຽວກັບການຕັ້ງຊື່ໄຟລ໌ " +"wheel, ເບິ່ງ :pep:`425`." + +#: ../source/guides/distributing-packages-using-setuptools.rst:458 +msgid "" +"If you run ``build`` without ``--wheel`` or ``--sdist``, it will build both " +"files for you; this is useful when you don't need multiple wheels." +msgstr "" +"ຫາກທ່ານຣັນ ``build`` ໂດຍບໍ່ໃສ່ ``--wheel`` ຫຼື ``--sdist``, ມັນຈະບິວທັງສອງ ໄຟລ໌ໃຫ້ທ່ານ; " +"ສິ່ງນີ້ມີປະໂຫຍດເມື່ອທ່ານບໍ່ຕ້ອງການ wheel ຫຼາຍໆຮູບແບບ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:464 +msgid "Platform Wheels" +msgstr "Platform Wheels" + +#: ../source/guides/distributing-packages-using-setuptools.rst:466 +msgid "" +"*Platform Wheels* are wheels that are specific to a certain platform like " +"Linux, macOS, or Windows, usually due to containing compiled extensions." +msgstr "" +"*Platform Wheels* ແມ່ນ wheel ທີ່ສະເພາະເຈາະຈົງກັບບາງແພລັດຟອມ ເຊັ່ນ Linux, macOS, ຫຼື " +"Windows, ເຊິ່ງມັກຈະເປັນເພາະມັນມີສ່ວນຂະຫຍາຍທີ່ຖືກຄອມໄພລ໌." + +#: ../source/guides/distributing-packages-using-setuptools.rst:484 +msgid "" +"The ``wheel`` package will detect that the code is not pure Python, and " +"build a wheel that's named such that it's only usable on the platform that " +"it was built on. For details on the naming of wheel files, see :pep:`425`." +msgstr "" +"ແພັກເກດ ``wheel`` ຈະກວດສອບວ່າໂຄ້ດບໍ່ແມ່ນ Python ລ້ວນໆ, ແລະ ຈະ ບິວ wheel " +"ທີ່ຖືກຕັ້ງຊື່ໃຫ້ສາມາດໃຊ້ໄດ້ສະເພາະໃນແພລັດຟອມທີ່ມັນຖືກບິວຂຶ້ນມາເທົ່ານັ້ນ. ສຳລັບລາຍລະອຽດກ່ຽວກັບການຕັ້ງຊື່ໄຟລ໌ " +"wheel, ເບິ່ງ :pep:`425`." + +#: ../source/guides/distributing-packages-using-setuptools.rst:490 +msgid "" +":term:`PyPI ` currently supports uploads of " +"platform wheels for Windows, macOS, and the multi-distro ``manylinux*`` ABI. " +"Details of the latter are defined in :pep:`513`." +msgstr "" +"ປັດຈຸບັນ :term:`PyPI ` ຮອງຮັບການອັບໂຫຼດ platform " +"wheels ສຳລັບ Windows, macOS, ແລະ ``manylinux*`` ABI ທີ່ໃຊ້ໄດ້ກັບຫຼາຍດິສໂຕຣ. " +"ລາຍລະອຽດຂອງ manylinux ແມ່ນຖືກກຳນົດໄວ້ໃນ :pep:`513`." + +#: ../source/guides/distributing-packages-using-setuptools.rst:498 +msgid "Uploading your Project to PyPI" +msgstr "ການອັບໂຫຼດໂຄງການຂອງທ່ານຂຶ້ນ PyPI" + +#: ../source/guides/distributing-packages-using-setuptools.rst:500 +msgid "" +"When you ran the command to create your distribution, a new directory ``dist/" +"`` was created under your project's root directory. That's where you'll find " +"your distribution file(s) to upload." +msgstr "" +"ເມື່ອທ່ານຣັນຄຳສັ່ງເພື່ອສ້າງ distribution, ໂຟນເດີໃໝ່ຊື່ ``dist/`` " +"ຈະຖືກສ້າງຂຶ້ນພາຍໃຕ້ໂຟນເດີຫຼັກຂອງໂຄງການ. ນັ້ນຄືບ່ອນທີ່ທ່ານຈະພົບ ໄຟລ໌ distribution ທີ່ຈະໃຊ້ອັບໂຫຼດ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:504 +msgid "" +"These files are only created when you run the command to create your " +"distribution. This means that any time you change the source of your project " +"or the configuration in your :file:`setup.py` file, you will need to rebuild " +"these files again before you can distribute the changes to PyPI." +msgstr "" +"ໄຟລ໌ເຫຼົ່ານີ້ຈະຖືກສ້າງຂຶ້ນເມື່ອທ່ານຣັນຄຳສັ່ງສ້າງ distribution ເທົ່ານັ້ນ. " +"ໝາຍຄວາມວ່າທຸກໆຄັ້ງທີ່ທ່ານມີການປ່ຽນແປງໂຄ້ດ ຫຼື ການຕັ້ງຄ່າໃນ :file:`setup.py`, " +"ທ່ານຈະຕ້ອງບິວໄຟລ໌ເຫຼົ່ານີ້ໃໝ່ອີກຄັ້ງ ກ່ອນທີ່ຈະເຜີຍແຜ່ ການປ່ຽນແປງໄປຍັງ PyPI." + +#: ../source/guides/distributing-packages-using-setuptools.rst:509 +msgid "" +"Before releasing on main PyPI repo, you might prefer training with the `PyPI " +"test site `_ which is cleaned on a semi regular " +"basis. See :ref:`using-test-pypi` on how to setup your configuration in " +"order to use it." +msgstr "" +"ກ່ອນທີ່ຈະເຜີຍແຜ່ໃນ PyPI ຫຼັກ, ທ່ານອາດຈະຢາກທົດລອງກັບ `ເວັບໄຊທົດສອບ PyPI `_ ເຊິ່ງຈະຖືກລ້າງຂໍ້ມູນເປັນໄລຍະ. ເບິ່ງ :ref:`using-test-pypi` " +"ກ່ຽວກັບວິທີການ ຕັ້ງຄ່າເພື່ອໃຊ້ມັນ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:514 +msgid "" +"In other resources you may encounter references to using ``python setup.py " +"register`` and ``python setup.py upload``. These methods of registering and " +"uploading a package are **strongly discouraged** as it may use a plaintext " +"HTTP or unverified HTTPS connection on some Python versions, allowing your " +"username and password to be intercepted during transmission." +msgstr "" +"ໃນແຫຼ່ງຂໍ້ມູນອື່ນໆ ທ່ານອາດຈະເຫັນການອ້າງອີງເຖິງການໃຊ້ ``python setup.py register`` ແລະ " +"``python setup.py upload``. ວິທີການລົງທະບຽນ ແລະ ອັບໂຫຼດແພັກເກດແບບນີ້ " +"**ບໍ່ແນະນຳຢ່າງເດັດຂາດ** ເພາະມັນອາດຈະໃຊ້ການເຊື່ອມຕໍ່ແບບ HTTP ທຳມະດາ ຫຼື HTTPS " +"ທີ່ບໍ່ໄດ້ຮັບການຢືນຢັນໃນບາງເວີຊັນຂອງ Python, ເຮັດໃຫ້ຊື່ຜູ້ໃຊ້ ແລະ ລະຫັດຜ່ານ " +"ຂອງທ່ານຖືກດັກຈັບໄດ້ໃນລະຫວ່າງການສົ່ງຂໍ້ມູນ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:520 +msgid "" +"The reStructuredText parser used on PyPI is **not** Sphinx! Furthermore, to " +"ensure safety of all users, certain kinds of URLs and directives are " +"forbidden or stripped out (e.g., the ``.. raw::`` directive). **Before** " +"trying to upload your distribution, you should check to see if your brief / " +"long descriptions provided in :file:`setup.py` are valid. You can do this " +"by running :std:doc:`twine check ` on your package files:" +msgstr "" +"ຕົວແປພາສາ reStructuredText ທີ່ໃຊ້ໃນ PyPI **ບໍ່ແມ່ນ** Sphinx! ນອກຈາກນັ້ນ, " +"ເພື່ອຄວາມປອດໄພຂອງຜູ້ໃຊ້ທຸກຄົນ, URL ແລະ ຄຳສັ່ງບາງປະເພດແມ່ນຖືກຫ້າມ ຫຼື ຖືກຕັດອອກ (ເຊັ່ນ ຄຳສັ່ງ " +"``.. raw::``). **ກ່ອນ** ທີ່ຈະພະຍາຍາມ ອັບໂຫຼດ distribution, ທ່ານຄວນກວດສອບເບິ່ງວ່າ " +"ຄຳອະທິບາຍສັ້ນ / ຍາວ ທີ່ລະບຸໃນ :file:`setup.py` ນັ້ນຖືກຕ້ອງຫຼືບໍ່. " +"ທ່ານສາມາດເຮັດໄດ້ໂດຍການຣັນ :std:doc:`twine check ` ກັບໄຟລ໌ແພັກເກດຂອງທ່ານ:" + +#: ../source/guides/distributing-packages-using-setuptools.rst:533 +msgid "Create an account" +msgstr "ສ້າງບັນຊີ" + +#: ../source/guides/distributing-packages-using-setuptools.rst:535 +msgid "" +"First, you need a :term:`PyPI ` user account. " +"You can create an account `using the form on the PyPI website `_." +msgstr "" +"ກ່ອນອື່ນ, ທ່ານຕ້ອງມີບັນຊີຜູ້ໃຊ້ :term:`PyPI `. " +"ທ່ານສາມາດສ້າງບັນຊີໄດ້ `ໂດຍໃຊ້ແບບຟອມໃນເວັບໄຊ PyPI `_." + +#: ../source/guides/distributing-packages-using-setuptools.rst:539 +msgid "" +"Now you'll create a PyPI `API token`_ so you will be able to securely upload " +"your project." +msgstr "" +"ຕອນນີ້ທ່ານຈະຕ້ອງສ້າງ PyPI `API token`_ ເພື່ອໃຫ້ສາມາດອັບໂຫຼດໂຄງການ ຂອງທ່ານໄດ້ຢ່າງປອດໄພ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:542 +msgid "" +"Go to https://pypi.org/manage/account/#api-tokens and create a new `API " +"token`_; don't limit its scope to a particular project, since you are " +"creating a new project." +msgstr "" +"ໄປທີ່ https://pypi.org/manage/account/#api-tokens ແລະ ສ້າງ `API token`_ ໃໝ່; " +"ຢ່າຈຳກັດຂອບເຂດຂອງມັນໄວ້ກັບໂຄງການໃດໜຶ່ງໂດຍສະເພາະ, ເພາະວ່າທ່ານກຳລັງສ້າງໂຄງການໃໝ່." + +#: ../source/guides/distributing-packages-using-setuptools.rst:546 +msgid "" +"**Don't close the page until you have copied and saved the token — you won't " +"see that token again.**" +msgstr "" +"**ຢ່າປິດໜ້າເວັບຈົນກວ່າທ່ານຈະໄດ້ສຳເນົາ ແລະ ບັນທຶກ token ໄວ້ — ທ່ານຈະບໍ່ເຫັນ token ນັ້ນອີກ.**" + +#: ../source/guides/distributing-packages-using-setuptools.rst:549 +msgid "" +"To avoid having to copy and paste the token every time you upload, you can " +"create a :file:`$HOME/.pypirc` file:" +msgstr "" +"ເພື່ອຫຼີກເວັ້ນການຕ້ອງສຳເນົາ ແລະ ວາງ token ທຸກຄັ້ງທີ່ອັບໂຫຼດ, ທ່ານສາມາດສ້າງ " +"ໄຟລ໌ :file:`$HOME/.pypirc` ໄດ້:" + +#: ../source/guides/distributing-packages-using-setuptools.rst:558 +msgid "**Be aware that this stores your token in plaintext.**" +msgstr "**ຈົ່ງລະວັງວ່າສິ່ງນີ້ຈະເກັບ token ຂອງທ່ານໃນຮູບແບບຂໍ້ຄວາມທຳມະດາ (plaintext).**" + +#: ../source/guides/distributing-packages-using-setuptools.rst:560 +#: ../source/guides/migrating-to-pypi-org.rst:74 +#: ../source/guides/migrating-to-pypi-org.rst:113 +#: ../source/guides/using-testpypi.rst:84 +msgid "" +"For more details, see the :ref:`specification ` for :file:`.pypirc`." +msgstr "" +"ສຳລັບລາຍລະອຽດເພີ່ມເຕີມ, ເບິ່ງ :ref:`specification ` ສຳລັບ :file:`.pypirc`." + +#: ../source/guides/distributing-packages-using-setuptools.rst:566 +msgid "Upload your distributions" +msgstr "ອັບໂຫຼດ distributions ຂອງທ່ານ" + +#: ../source/guides/distributing-packages-using-setuptools.rst:568 +msgid "" +"Once you have an account you can upload your distributions to :term:`PyPI " +"` using :ref:`twine`." +msgstr "" +"ເມື່ອທ່ານມີບັນຊີແລ້ວ ທ່ານສາມາດອັບໂຫຼດ distributions ຂອງທ່ານໄປຍັງ :term:`PyPI ` ໂດຍໃຊ້ :ref:`twine`." + +#: ../source/guides/distributing-packages-using-setuptools.rst:571 +msgid "" +"The process for uploading a release is the same regardless of whether or not " +"the project already exists on PyPI - if it doesn't exist yet, it will be " +"automatically created when the first release is uploaded." +msgstr "" +"ຂັ້ນຕອນການອັບໂຫຼດການເຜີຍແຜ່ (release) ແມ່ນຄືກັນ ບໍ່ວ່າໂຄງການນັ້ນຈະມີຢູ່ໃນ PyPI ແລ້ວຫຼືບໍ່ - " +"ຖ້າຍັງບໍ່ມີ, ມັນຈະຖືກສ້າງຂຶ້ນໂດຍອັດຕະໂນມັດເມື່ອມີການອັບໂຫຼດ release ທຳອິດ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:575 +msgid "" +"For the second and subsequent releases, PyPI only requires that the version " +"number of the new release differ from any previous releases." +msgstr "" +"ສຳລັບ release ທີສອງ ແລະ ຕໍ່ໆໄປ, PyPI ພຽງແຕ່ກຳນົດວ່າ ເລກເວີຊັນ ຂອງ release " +"ໃໝ່ຕ້ອງແຕກຕ່າງຈາກເວີຊັນກ່ອນໜ້ານີ້ທັງໝົດ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:582 +msgid "" +"You can see if your package has successfully uploaded by navigating to the " +"URL ``https://pypi.org/project/`` where ``sampleproject`` is " +"the name of your project that you uploaded. It may take a minute or two for " +"your project to appear on the site." +msgstr "" +"ທ່ານສາມາດກວດສອບໄດ້ວ່າແພັກເກດຂອງທ່ານຖືກອັບໂຫຼດສຳເລັດຫຼືບໍ່ ໂດຍເຂົ້າໄປທີ່ URL ``https://" +"pypi.org/project/`` ເຊິ່ງ ``sampleproject`` ແມ່ນ " +"ຊື່ໂຄງການຂອງທ່ານທີ່ໄດ້ອັບໂຫຼດໄປ. ອາດຈະໃຊ້ເວລາໜຶ່ງ ຫຼື ສອງນາທີເພື່ອໃຫ້ໂຄງການ ປະກົດຂຶ້ນໃນເວັບໄຊ." + +#: ../source/guides/distributing-packages-using-setuptools.rst:589 +#: ../source/tutorials/installing-packages.rst:669 +msgid "" +"Depending on your platform, this may require root or Administrator " +"access. :ref:`pip` is currently considering changing this by `making user " +"installs the default behavior `_." +msgstr "" +"ຂຶ້ນກັບແພລັດຟອມຂອງທ່ານ, ສິ່ງນີ້ອາດຈະຕ້ອງໃຊ້ສິດ root ຫຼື Administrator. ປັດຈຸບັນ :ref:`pip` " +"ກຳລັງພິຈາລະນາປ່ຽນແປງສິ່ງນີ້ໂດຍ `ການເຮັດໃຫ້ການຕິດຕັ້ງໂດຍຜູ້ໃຊ້ ເປັນຄ່າເລີ່ມຕົ້ນ `_." + +#: ../source/guides/dropping-older-python-versions.rst:5 +msgid "Dropping support for older Python versions" +msgstr "ການຍົກເລີກການຮອງຮັບ Python ເວີຊັນເກົ່າ" + +#: ../source/guides/dropping-older-python-versions.rst:7 +msgid "" +"The ability to drop support for older Python versions is enabled by the " +"standard :ref:`core-metadata` 1.2 specification via the :ref:`\"Requires-" +"Python\" ` attribute." +msgstr "" +"ຄວາມສາມາດໃນການຍົກເລີກການຮອງຮັບ Python ເວີຊັນເກົ່າແມ່ນເຮັດໄດ້ຜ່ານ " +"ຂໍ້ກຳນົດມາດຕະຖານ :ref:`core-metadata` 1.2 ຜ່ານຄຸນລັກສະນະ :ref:`\"Requires-Python\" " +"`." + +#: ../source/guides/dropping-older-python-versions.rst:9 +msgid "" +"Metadata 1.2+ installers, such as Pip, will adhere to this specification by " +"matching the current Python runtime and comparing it with the required " +"version in the package metadata. If they do not match, it will attempt to " +"install the last package distribution that supported that Python runtime." +msgstr "" +"ເຄື່ອງມືຕິດຕັ້ງ Metadata 1.2+ ເຊັ່ນ Pip, ຈະປະຕິບັດຕາມຂໍ້ກຳນົດນີ້ໂດຍ ການກວດສອບ Python " +"runtime ປັດຈຸບັນ ແລະ ສົມທຽບກັບເວີຊັນທີ່ຕ້ອງການໃນ metadata ຂອງແພັກເກດ. ຫາກພວກມັນບໍ່ກົງກັນ, " +"ມັນຈະພະຍາຍາມຕິດຕັ້ງ distribution ຂອງແພັກເກດລຸ້ນສຸດທ້າຍທີ່ຍັງຮອງຮັບ Python runtime ນັ້ນຢູ່." + +#: ../source/guides/dropping-older-python-versions.rst:12 +msgid "" +"This mechanism can be used to drop support for older Python versions, by " +"amending the ``Requires-Python`` attribute in the package metadata." +msgstr "" +"ກົນໄກນີ້ສາມາດໃຊ້ເພື່ອຍົກເລີກການຮອງຮັບ Python ເວີຊັນເກົ່າໄດ້ ໂດຍການ ແກ້ໄຂຄຸນລັກສະນະ ``Requires-" +"Python`` ໃນ metadata ຂອງແພັກເກດ." + +#: ../source/guides/dropping-older-python-versions.rst:15 +msgid "Requirements" +msgstr "ສິ່ງທີ່ຈຳເປັນຕ້ອງມີ" + +#: ../source/guides/dropping-older-python-versions.rst:17 +msgid "" +"This workflow requires that the user installing the package uses Pip [#]_, " +"or another installer that supports the Metadata 1.2 specification." +msgstr "" +"ຂັ້ນຕອນການເຮັດວຽກນີ້ກຳນົດໃຫ້ຜູ້ທີ່ຕິດຕັ້ງແພັກເກດຕ້ອງໃຊ້ Pip [#]_, ຫຼື ເຄື່ອງມືຕິດຕັ້ງອື່ນໆທີ່ຮອງຮັບຂໍ້ກຳນົດ " +"Metadata 1.2." + +#: ../source/guides/dropping-older-python-versions.rst:20 +msgid "Dealing with the universal wheels" +msgstr "ການຈັດການກັບ universal wheels" + +#: ../source/guides/dropping-older-python-versions.rst:22 +msgid "" +"Traditionally, :ref:`setuptools` projects providing Python code that is " +"semantically compatible with both Python 2 and Python 3, " +"produce :term:`wheels ` that have a ``py2.py3`` tag in their names. " +"When dropping support for Python 2, it is important not to forget to change " +"this tag to just ``py3``. It is often configured within :file:`setup.cfg` " +"under the ``[bdist_wheel]`` section by setting ``universal = 1``." +msgstr "" +"ໂດຍປົກກະຕິແລ້ວ, ໂຄງການ :ref:`setuptools` ທີ່ໃຫ້ໂຄ້ດ Python ເຊິ່ງ ສາມາດເຮັດວຽກໄດ້ກັບທັງ " +"Python 2 ແລະ Python 3 ຈະສ້າງ :term:`wheels ` ທີ່ມີແທັກ ``py2.py3`` ໃນຊື່ໄຟລ໌. " +"ເມື່ອຍົກເລີກການຮອງຮັບ Python 2, ມັນເປັນສິ່ງສຳຄັນທີ່ຈະຕ້ອງບໍ່ລືມປ່ຽນແທັກນີ້ໃຫ້ເປັນພຽງແຕ່ ``py3``. " +"ມັນມັກຈະ ຖືກຕັ້ງຄ່າພາຍໃນ :file:`setup.cfg` ພາຍໃຕ້ຫົວຂໍ້ ``[bdist_wheel]`` ໂດຍການກຳນົດ " +"``universal = 1``." + +#: ../source/guides/dropping-older-python-versions.rst:29 +msgid "" +"If you use this method, either remove this option or section, or explicitly " +"set ``universal`` to ``0``:" +msgstr "" +"ຫາກທ່ານໃຊ້ວິທີນີ້, ໃຫ້ລຶບຕົວເລືອກ ຫຼື ຫົວຂໍ້ນີ້ອອກ, ຫຼື ກຳນົດ ``universal`` ເປັນ ``0`` ຢ່າງຊັດເຈນ:" + +#: ../source/guides/dropping-older-python-versions.rst:41 +msgid "" +"Regarding :ref:`deprecated ` direct ``setup.py`` " +"invocations, passing the ``--universal`` flag on the command line could " +"override this setting." +msgstr "" +"ກ່ຽວກັບການໃຊ້ຄຳສັ່ງ ``setup.py`` ໂດຍກົງທີ່ :ref:`ບໍ່ແນະນຳໃຫ້ໃຊ້ແລ້ວ `, ການສົ່ງແຟລັກ ``--universal`` ໃນຄຳສັ່ງ (command line) " +"ອາດຈະໄປຂຽນທັບການຕັ້ງຄ່ານີ້." + +#: ../source/guides/dropping-older-python-versions.rst:45 +msgid "Defining the Python version required" +msgstr "ການກຳນົດເວີຊັນ Python ທີ່ຕ້ອງການ" + +#: ../source/guides/dropping-older-python-versions.rst:48 +msgid "1. Install twine" +msgstr "1. ຕິດຕັ້ງ twine" + +#: ../source/guides/dropping-older-python-versions.rst:50 +msgid "Ensure that you have twine available at its latest version. Steps:" +msgstr "ກວດສອບໃຫ້ແນ່ໃຈວ່າທ່ານມີ twine ເວີຊັນຫຼ້າສຸດ. ຂັ້ນຕອນ:" + +#: ../source/guides/dropping-older-python-versions.rst:66 +msgid "2. Specify the version ranges for supported Python distributions" +msgstr "2. ລະບຸຊ່ວງເວີຊັນສຳລັບ Python ທີ່ຮອງຮັບ" + +#: ../source/guides/dropping-older-python-versions.rst:68 +msgid "" +"Set the version ranges declaring which Python distributions are supported " +"within your project's :file:`pyproject.toml`. The :ref:`requires-python` " +"configuration field corresponds to the :ref:`Requires-Python ` core metadata field:" +msgstr "" +"ກຳນົດຊ່ວງເວີຊັນເພື່ອປະກາດວ່າ Python ເວີຊັນໃດແດ່ທີ່ຮອງຮັບ ພາຍໃນໄຟລ໌ :file:`pyproject.toml` " +"ຂອງໂຄງການ. ຫ້ອງຂໍ້ມູນການຕັ້ງຄ່າ :ref:`requires-python` ຈະກົງກັບຫ້ອງຂໍ້ມູນ metadata " +"ຫຼັກ :ref:`Requires-Python `:" + +#: ../source/guides/dropping-older-python-versions.rst:80 +msgid "" +"You can specify version ranges and exclusion rules (complying with " +"the :ref:`version-specifiers` specification), such as at least Python 3.9. " +"Or, at least Python 3.7 and beyond, skipping the 3.7.0 and 3.7.1 point " +"releases:" +msgstr "" +"ທ່ານສາມາດລະບຸຊ່ວງເວີຊັນ ແລະ ກົດການຍົກເວັ້ນ (ຕາມຂໍ້ກຳນົດ :ref:`version-specifiers`), ເຊັ່ນ " +"ຢ່າງໜ້ອຍ Python 3.9. ຫຼື ຢ່າງໜ້ອຍ Python 3.7 ຂຶ້ນໄປ, ໂດຍຂ້າມເວີຊັນຍ່ອຍ 3.7.0 ແລະ 3.7.1:" + +#: ../source/guides/dropping-older-python-versions.rst:89 +msgid "" +"If using the :ref:`setuptools` build backend, consult the `dependency-" +"management`_ documentation for more options." +msgstr "" +"ຫາກໃຊ້ :ref:`setuptools` ເປັນ build backend, ໃຫ້ເບິ່ງເອກະສານ `dependency-" +"management`_ ສຳລັບຕົວເລືອກເພີ່ມເຕີມ." + +#: ../source/guides/dropping-older-python-versions.rst:92 +msgid "" +"Avoid adding upper bounds to the version ranges, e.g. ``\">= 3.8, < " +"3.10\"``. Doing so can cause different errors and version conflicts. See the " +"`discourse-discussion`_ for more information." +msgstr "" +"ຫຼີກເວັ້ນການເພີ່ມຂີດຈຳກັດສູງສຸດໃຫ້ກັບຊ່ວງເວີຊັນ, ເຊັ່ນ ``\">= 3.8, < 3.10\"``. " +"ການເຮັດແບບນັ້ນອາດຈະເຮັດໃຫ້ເກີດຂໍ້ຜິດພາດ ແລະ ການຂັດແຍ້ງຂອງເວີຊັນ. ເບິ່ງ `discourse-" +"discussion`_ ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ." + +#: ../source/guides/dropping-older-python-versions.rst:96 +msgid "3. Validating the Metadata before publishing" +msgstr "3. ການກວດສອບ Metadata ກ່ອນການເຜີຍແຜ່" + +#: ../source/guides/dropping-older-python-versions.rst:98 +msgid "" +"Within a Python source package (the zip or the tar-gz file you download) is " +"a text file called PKG-INFO." +msgstr "" +"ພາຍໃນແພັກເກດແຫຼ່ງກຳເນີດ Python (ໄຟລ໌ zip ຫຼື tar-gz ທີ່ທ່ານດາວໂຫຼດ) ຈະມີໄຟລ໌ຂໍ້ຄວາມທີ່ຊື່ວ່າ PKG-" +"INFO." + +#: ../source/guides/dropping-older-python-versions.rst:100 +msgid "" +"This file is generated by the :term:`build backend ` when it " +"generates the source package. The file contains a set of keys and values, " +"the list of keys is part of the PyPA standard metadata format." +msgstr "" +"ໄຟລ໌ນີ້ຖືກສ້າງຂຶ້ນໂດຍ :term:`build backend ` ເມື່ອມັນ " +"ສ້າງແພັກເກດແຫຼ່ງກຳເນີດ. ໄຟລ໌ນີ້ປະກອບດ້ວຍຊຸດຂອງ keys ແລະ values, ເຊິ່ງລາຍຊື່ຂອງ keys " +"ແມ່ນສ່ວນໜຶ່ງຂອງຮູບແບບ metadata ມາດຕະຖານຂອງ PyPA." + +#: ../source/guides/dropping-older-python-versions.rst:103 +msgid "You can see the contents of the generated file like this:" +msgstr "ທ່ານສາມາດເບິ່ງເນື້ອໃນຂອງໄຟລ໌ທີ່ຖືກສ້າງຂຶ້ນໄດ້ດັ່ງນີ້:" + +#: ../source/guides/dropping-older-python-versions.rst:109 +msgid "Validate that the following is in place, before publishing the package:" +msgstr "ກວດສອບໃຫ້ແນ່ໃຈວ່າສິ່ງຕໍ່ໄປນີ້ຖືກຕ້ອງ ກ່ອນທີ່ຈະເຜີຍແຜ່ແພັກເກດ:" + +#: ../source/guides/dropping-older-python-versions.rst:111 +msgid "" +"If you have upgraded correctly, the ``Metadata-Version`` value should be 1.2 " +"or higher." +msgstr "ຫາກທ່ານໄດ້ອັບເກຣດຢ່າງຖືກຕ້ອງ, ຄ່າ ``Metadata-Version`` ຄວນຈະເປັນ 1.2 ຫຼື ສູງກວ່າ." + +#: ../source/guides/dropping-older-python-versions.rst:112 +msgid "" +"The ``Requires-Python`` field is set and matches your specification in the " +"configuration file." +msgstr "ຫ້ອງຂໍ້ມູນ ``Requires-Python`` ຖືກກຳນົດໄວ້ ແລະ ກົງກັບທີ່ທ່ານລະບຸໃນ ໄຟລ໌ການຕັ້ງຄ່າ." + +#: ../source/guides/dropping-older-python-versions.rst:115 +msgid "4. Publishing the package" +msgstr "4. ການເຜີຍແຜ່ແພັກເກດ" + +#: ../source/guides/dropping-older-python-versions.rst:117 +msgid "Proceed as suggested in :ref:`Uploading your Project to PyPI`." +msgstr "ດຳເນີນການຕາມທີ່ແນະນຳໃນ :ref:`Uploading your Project to PyPI`." + +#: ../source/guides/dropping-older-python-versions.rst:120 +msgid "Dropping a Python version" +msgstr "ການຍົກເລີກການຮອງຮັບ Python ເວີຊັນໃດໜຶ່ງ" + +#: ../source/guides/dropping-older-python-versions.rst:122 +msgid "" +"In principle, at least metadata support for Python versions should be kept " +"as long as possible, because once that has been dropped, people still " +"depending on a version will be forced to downgrade. If however supporting a " +"specific version becomes a blocker for a new feature or other issues occur, " +"the metadata ``Requires-Python`` should be amended. Of course this also " +"depends on whether the project needs to be stable and well-covered for a " +"wider range of users." +msgstr "" +"ຕາມຫຼັກການແລ້ວ, ຢ່າງໜ້ອຍຄວນຮັກສາການຮອງຮັບ metadata ສຳລັບ Python ເວີຊັນຕ່າງໆ " +"ໄວ້ໃຫ້ດົນທີ່ສຸດເທົ່າທີ່ຈະເຮັດໄດ້, ເພາະວ່າເມື່ອຖືກຍົກເລີກແລ້ວ, ຄົນທີ່ຍັງ " +"ຕ້ອງໃຊ້ເວີຊັນນັ້ນຢູ່ຈະຖືກບັງຄັບໃຫ້ຫຼຸດເວີຊັນ (downgrade). ຢ່າງໃດກໍ່ຕາມ, ຫາກ " +"ການຮອງຮັບເວີຊັນໃດໜຶ່ງກາຍເປັນອຸປະສັກສຳລັບຟີເຈີໃໝ່ ຫຼື ເກີດບັນຫາອື່ນໆ, metadata ``Requires-" +"Python`` ກໍ່ຄວນຈະຖືກແກ້ໄຂ. ແນ່ນອນວ່າສິ່ງນີ້ຍັງ ຂຶ້ນກັບວ່າໂຄງການຕ້ອງການຄວາມສະຖຽນ ແລະ " +"ຄອບຄຸມຜູ້ໃຊ້ໃນວົງກວ້າງຫຼືບໍ່." + +#: ../source/guides/dropping-older-python-versions.rst:128 +msgid "Each version compatibility change should have its own release." +msgstr "ການປ່ຽນແປງຄວາມເຂົ້າກັນໄດ້ຂອງແຕ່ລະເວີຊັນຄວນຈະມີການເຜີຍແຜ່ (release) ແຍກຕ່າງຫາກ." + +#: ../source/guides/dropping-older-python-versions.rst:132 +msgid "" +"When dropping a Python version, it might also be rewarding to upgrade the " +"project's code syntax generally, apart from updating the versions used in " +"visible places (like the testing environment). Tools like pyupgrade_ or " +"`ruff `_ can automate some of this work." +msgstr "" +"ເມື່ອຍົກເລີກການຮອງຮັບ Python ເວີຊັນໃດໜຶ່ງ, ມັນອາດຈະເປັນການດີທີ່ຈະອັບເກຣດ ໄວຍາກອນໂຄ້ດ " +"(syntax) ຂອງໂຄງການໂດຍທົ່ວໄປນຳ, ນອກເໜືອຈາກການອັບເດດເວີຊັນທີ່ໃຊ້ໃນ ບ່ອນທີ່ເຫັນໄດ້ຊັດເຈນ (ເຊັ່ນ " +"ສະພາບແວດລ້ອມການທົດສອບ). ເຄື່ອງມືເຊັ່ນ pyupgrade_ ຫຼື `ruff `_ ສາມາດຊ່ວຍເຮັດວຽກບາງສ່ວນນີ້ແບບອັດຕະໂນມັດໄດ້." + +#: ../source/guides/dropping-older-python-versions.rst:138 +msgid "Support for the Metadata 1.2 specification has been added in Pip 9.0." +msgstr "ການຮອງຮັບຂໍ້ກຳນົດ Metadata 1.2 ໄດ້ຖືກເພີ່ມເຂົ້າມາໃນ Pip 9.0." + +#: ../source/guides/hosting-your-own-index.rst:5 +msgid "Hosting your own simple repository" +msgstr "ການໂຮສຄັງເກັບ (repository) ແບບງ່າຍໆຂອງທ່ານເອງ" + +#: ../source/guides/hosting-your-own-index.rst:8 +msgid "" +"If you wish to host your own simple repository [1]_, you can either use a " +"software package like :doc:`devpi ` or you can simply create " +"the proper directory structure and use any web server that can serve static " +"files and generate an autoindex." +msgstr "" +"ຫາກທ່ານຕ້ອງການໂຮສຄັງເກັບແບບງ່າຍໆຂອງທ່ານເອງ [1]_, ທ່ານສາມາດໃຊ້ " +"ແພັກເກດຊອບແວເຊັ່ນ :doc:`devpi ` ຫຼື ທ່ານສາມາດສ້າງ ໂຄງສ້າງໂຟນເດີທີ່ຖືກຕ້ອງ " +"ແລະ ໃຊ້ເວັບເຊີເວີໃດກໍ່ໄດ້ທີ່ສາມາດໃຫ້ບໍລິການໄຟລ໌ຄົງທີ່ (static files) ແລະ " +"ສ້າງລາຍຊື່ໄຟລ໌ແບບອັດຕະໂນມັດ (autoindex)." + +#: ../source/guides/hosting-your-own-index.rst:13 +msgid "" +"In either case, since you'll be hosting a repository that is likely not in " +"your user's default repositories, you should instruct them in your project's " +"description to configure their installer appropriately. For example with pip:" +msgstr "" +"ບໍ່ວ່າຈະໃຊ້ວິທີໃດ, ເນື່ອງຈາກທ່ານຈະໂຮສຄັງເກັບທີ່ອາດຈະບໍ່ໄດ້ຢູ່ໃນລາຍຊື່ ຄັງເກັບເລີ່ມຕົ້ນຂອງຜູ້ໃຊ້, " +"ທ່ານຄວນແນະນຳພວກເຂົາໃນຄຳອະທິບາຍໂຄງການ ໃຫ້ຕັ້ງຄ່າເຄື່ອງມືຕິດຕັ້ງໃຫ້ເໝາະສົມ. ຕົວຢ່າງສຳລັບ pip:" + +#: ../source/guides/hosting-your-own-index.rst:29 +msgid "" +"In addition, it is **highly** recommended that you serve your repository " +"with valid HTTPS. At this time, the security of your user's installations " +"depends on all repositories using a valid HTTPS setup." +msgstr "" +"ນອກຈາກນັ້ນ, ຂໍແນະນຳ **ຢ່າງຍິ່ງ** ໃຫ້ທ່ານໃຫ້ບໍລິການຄັງເກັບຂອງທ່ານ ຜ່ານ HTTPS ທີ່ຖືກຕ້ອງ. " +"ໃນປັດຈຸບັນ, ຄວາມປອດໄພໃນການຕິດຕັ້ງຂອງຜູ້ໃຊ້ ແມ່ນຂຶ້ນກັບທຸກໆຄັງເກັບທີ່ຕ້ອງໃຊ້ການຕັ້ງຄ່າ HTTPS ທີ່ຖືກຕ້ອງ." + +#: ../source/guides/hosting-your-own-index.rst:35 +msgid "\"Manual\" repository" +msgstr "ຄັງເກັບແບບ \"ຈັດການເອງ\"" + +#: ../source/guides/hosting-your-own-index.rst:37 +msgid "" +"The directory layout is fairly simple, within a root directory you need to " +"create a directory for each project. This directory should be " +"the :ref:`normalized name ` of the project. Within each " +"of these directories simply place each of the downloadable files. If you " +"have the projects \"Foo\" (with the versions 1.0 and 2.0) and \"bar\" (with " +"the version 0.1) You should end up with a structure that looks like::" +msgstr "" +"ຮູບແບບໂຟນເດີແມ່ນຂ້ອນຂ້າງງ່າຍດາຍ, ພາຍໃນໂຟນເດີຫຼັກທ່ານຈຳເປັນຕ້ອງ ສ້າງໂຟນເດີສຳລັບແຕ່ລະໂຄງການ. " +"ໂຟນເດີນີ້ຄວນຈະເປັນ :ref:`normalized name ` ຂອງໂຄງການ. " +"ພາຍໃນແຕ່ລະໂຟນເດີເຫຼົ່ານີ້ ພຽງແຕ່ວາງໄຟລ໌ທີ່ສາມາດດາວໂຫຼດໄດ້ລົງໄປ. ຫາກທ່ານມີໂຄງການ \"Foo\" " +"(ທີ່ມີເວີຊັນ 1.0 ແລະ 2.0) ແລະ \"bar\" (ທີ່ມີ ເວີຊັນ 0.1) ທ່ານຈະໄດ້ໂຄງສ້າງທີ່ເປັນແບບນີ້::" + +#: ../source/guides/hosting-your-own-index.rst:50 +msgid "" +"Once you have this layout, simply configure your webserver to serve the root " +"directory with autoindex enabled. For an example using the built in Web " +"server in `Twisted`_, you would simply run ``twistd -n web --path .`` and " +"then instruct users to add the URL to their installer's configuration." +msgstr "" +"ເມື່ອທ່ານມີຮູບແບບນີ້ແລ້ວ, ພຽງແຕ່ຕັ້ງຄ່າເວັບເຊີເວີຂອງທ່ານໃຫ້ບໍລິການໂຟນເດີຫຼັກ ໂດຍເປີດໃຊ້ autoindex. " +"ຕົວຢ່າງຫາກໃຊ້ເວັບເຊີເວີທີ່ມາພ້ອມກັບ `Twisted`_, ທ່ານພຽງແຕ່ຣັນ ``twistd -n web --path .`` " +"ແລະ ຈາກນັ້ນແນະນຳໃຫ້ຜູ້ໃຊ້ ເພີ່ມ URL ເຂົ້າໄປໃນການຕັ້ງຄ່າເຄື່ອງມືຕິດຕັ້ງຂອງພວກເຂົາ." + +#: ../source/guides/hosting-your-own-index.rst:57 +#: ../source/guides/index-mirrors-and-caches.rst:47 +msgid "Existing projects" +msgstr "ໂຄງການທີ່ມີຢູ່ແລ້ວ" + +#: ../source/guides/hosting-your-own-index.rst:63 +msgid "Package upload" +msgstr "ການອັບໂຫຼດແພັກເກດ" + +#: ../source/guides/hosting-your-own-index.rst:64 +msgid "PyPI fall-through [2]_" +msgstr "ການດຶງຂໍ້ມູນຈາກ PyPI ຫາກບໍ່ພົບ [2]_" + +#: ../source/guides/hosting-your-own-index.rst:65 +#: ../source/guides/index-mirrors-and-caches.rst:56 +#: ../source/guides/supporting-windows-using-appveyor.rst:139 +msgid "Additional notes" +msgstr "ໝາຍເຫດເພີ່ມເຕີມ" + +#: ../source/guides/hosting-your-own-index.rst:67 +#: ../source/guides/index-mirrors-and-caches.rst:58 +msgid ":ref:`devpi`" +msgstr ":ref:`devpi`" + +#: ../source/guides/hosting-your-own-index.rst:68 +#: ../source/guides/hosting-your-own-index.rst:69 +#: ../source/guides/hosting-your-own-index.rst:75 +#: ../source/guides/hosting-your-own-index.rst:79 +#: ../source/guides/hosting-your-own-index.rst:99 +#: ../source/guides/hosting-your-own-index.rst:120 +#: ../source/guides/index-mirrors-and-caches.rst:59 +#: ../source/guides/index-mirrors-and-caches.rst:60 +#: ../source/guides/index-mirrors-and-caches.rst:66 +#: ../source/guides/index-mirrors-and-caches.rst:67 +#: ../source/guides/index-mirrors-and-caches.rst:74 +#: ../source/guides/index-mirrors-and-caches.rst:78 +#: ../source/guides/index-mirrors-and-caches.rst:80 +#: ../source/guides/index-mirrors-and-caches.rst:85 +#: ../source/guides/index-mirrors-and-caches.rst:86 +#: ../source/guides/index-mirrors-and-caches.rst:90 +#: ../source/guides/index-mirrors-and-caches.rst:92 +#: ../source/guides/index-mirrors-and-caches.rst:96 +#: ../source/guides/index-mirrors-and-caches.rst:98 +#: ../source/guides/index-mirrors-and-caches.rst:102 +#: ../source/guides/index-mirrors-and-caches.rst:104 +#: ../source/guides/index-mirrors-and-caches.rst:108 +#: ../source/guides/index-mirrors-and-caches.rst:110 +msgid "✔" +msgstr "✔" + +#: ../source/guides/hosting-your-own-index.rst:70 +msgid "" +"multiple indexes with inheritance, with syncing, replication, fail-over; " +"mirroring" +msgstr "" +"ຮອງຮັບຫຼາຍ index ແບບສືບທອດ, ມີການຊິງຄ໌ຂໍ້ມູນ, ການເຮັດສຳເນົາ, ລະບົບສຳຮອງ; ການເຮັດ mirror" + +#: ../source/guides/hosting-your-own-index.rst:73 +#: ../source/guides/index-mirrors-and-caches.rst:71 +msgid ":ref:`simpleindex`" +msgstr ":ref:`simpleindex`" + +#: ../source/guides/hosting-your-own-index.rst:78 +msgid ":ref:`pypiserver`" +msgstr ":ref:`pypiserver`" + +#: ../source/guides/hosting-your-own-index.rst:83 +msgid ":ref:`pypiprivate`" +msgstr ":ref:`pypiprivate`" + +#: ../source/guides/hosting-your-own-index.rst:88 +#: ../source/guides/index-mirrors-and-caches.rst:77 +msgid ":ref:`pypicloud`" +msgstr ":ref:`pypicloud`" + +#: ../source/guides/hosting-your-own-index.rst:91 +msgid "unmaintained; also cached proxying; authentication, authorisation" +msgstr "ບໍ່ໄດ້ຮັບການເບິ່ງແຍງແລ້ວ; ຮອງຮັບການເຮັດແຄຊ໌ພຣັອກຊີ; ການຢືນຢັນຕົວຕົນ, ການກຳນົດສິດ" + +#: ../source/guides/hosting-your-own-index.rst:93 +msgid ":ref:`pywharf`" +msgstr ":ref:`pywharf`" + +#: ../source/guides/hosting-your-own-index.rst:96 +msgid "unmaintained; serve files in GitHub" +msgstr "ບໍ່ໄດ້ຮັບການເບິ່ງແຍງແລ້ວ; ໃຫ້ບໍລິການໄຟລ໌ໃນ GitHub" + +#: ../source/guides/hosting-your-own-index.rst:98 +#: ../source/guides/index-mirrors-and-caches.rst:83 +msgid ":ref:`pulppython`" +msgstr ":ref:`pulppython`" + +#: ../source/guides/hosting-your-own-index.rst:101 +msgid "also mirroring, proxying; plugin for Pulp" +msgstr "ຮອງຮັບການເຮັດ mirror, proxy; ເປັນປລັກອິນສຳລັບ Pulp" + +#: ../source/guides/hosting-your-own-index.rst:103 +msgid ":ref:`pip2pi`" +msgstr ":ref:`pip2pi`" + +#: ../source/guides/hosting-your-own-index.rst:106 +msgid "also mirroring; manual synchronisation" +msgstr "ຮອງຮັບການເຮັດ mirror; ການຊິງຄ໌ຂໍ້ມູນດ້ວຍຕົນເອງ" + +#: ../source/guides/hosting-your-own-index.rst:108 +msgid ":ref:`dumb-pypi`" +msgstr ":ref:`dumb-pypi`" + +#: ../source/guides/hosting-your-own-index.rst:111 +msgid "not a server, but a static file site generator" +msgstr "ບໍ່ແມ່ນເຊີເວີ, ແຕ່ເປັນເຄື່ອງມືສ້າງເວັບໄຊໄຟລ໌ຄົງທີ່ (static file)" + +#: ../source/guides/hosting-your-own-index.rst:113 +msgid ":ref:`httpserver`" +msgstr ":ref:`httpserver`" + +#: ../source/guides/hosting-your-own-index.rst:116 +msgid "standard-library" +msgstr "standard-library" + +#: ../source/guides/hosting-your-own-index.rst:118 +#: ../source/guides/index-mirrors-and-caches.rst:107 +msgid "`Apache `_" +msgstr "`Apache `_" + +#: ../source/guides/hosting-your-own-index.rst:121 +#: ../source/guides/index-mirrors-and-caches.rst:111 +msgid "" +"using `mod_rewrite `_ and `mod_cache_disk `_, you can cache requests to package " +"indexes through an Apache server" +msgstr "" +"ການນຳໃຊ້ `mod_rewrite `_ ແລະ `mod_cache_disk `_ ຈະຊ່ວຍໃຫ້ທ່ານສາມາດເຮັດແຄຊ໌ຄຳຮ້ອງຂໍໄປຍັງ package " +"indexes ຜ່ານເຊີເວີ Apache ໄດ້" + +#: ../source/guides/hosting-your-own-index.rst:131 +msgid "" +"For complete documentation of the simple repository protocol, " +"see :ref:`simple repository API `." +msgstr "" +"ສຳລັບເອກະສານທີ່ສົມບູນຂອງ simple repository protocol, ເບິ່ງທີ່ :ref:`simple repository " +"API `." + +#: ../source/guides/hosting-your-own-index.rst:134 +msgid "" +"Can be configured to fall back to PyPI (or another package index) if a " +"requested package is missing." +msgstr "ສາມາດຕັ້ງຄ່າໃຫ້ກັບໄປດຶງຂໍ້ມູນຈາກ PyPI (ຫຼື package index ອື່ນ) ຫາກບໍ່ພົບແພັກເກດທີ່ຕ້ອງການ." + +#: ../source/guides/index.rst:4 +msgid "" +"**Guides** are focused on accomplishing a specific task and assume that you " +"are already familiar with the basics of Python packaging. If you're looking " +"for an introduction to packaging, see :doc:`/tutorials/index`." +msgstr "" +"**ຄຳແນະນຳ (Guides)** ແມ່ນເນັ້ນໃສ່ການເຮັດວຽກໃດໜຶ່ງໃຫ້ສຳເລັດ ແລະ ສົມມຸດວ່າທ່ານ " +"ຄຸ້ນເຄີຍກັບພື້ນຖານຂອງການເຮັດແພັກເກດ Python ຢູ່ແລ້ວ. ຫາກທ່ານກຳລັງຊອກຫາ ບົດຮຽນພື້ນຖານ, " +"ເບິ່ງໄດ້ທີ່ :doc:`/tutorials/index`." + +#: ../source/guides/index-mirrors-and-caches.rst:5 +msgid "Package index mirrors and caches" +msgstr "ການເຮັດ Mirror ແລະ Cache ຂອງ Package index" + +#: ../source/guides/index-mirrors-and-caches.rst:8 +msgid "2023-11-08" +msgstr "2023-11-08" + +#: ../source/guides/index-mirrors-and-caches.rst:10 +msgid "" +"Mirroring or caching of PyPI (and other :term:`package indexes `) can be used to speed up local package installation, allow offline " +"work, handle corporate firewalls or just plain Internet flakiness." +msgstr "" +"ການເຮັດ Mirroring ຫຼື caching ຂອງ PyPI (ແລະ :term:`package indexes ` ອື່ນໆ) ສາມາດໃຊ້ເພື່ອເລັ່ງຄວາມໄວໃນການຕິດຕັ້ງແພັກເກດພາຍໃນ, " +"ຊ່ວຍໃຫ້ເຮັດວຽກແບບອອຟລາຍໄດ້, ຈັດການກັບໄຟວໍຂອງອົງກອນ ຫຼື ບັນຫາອິນເຕີເນັດທີ່ບໍ່ສະຖຽນ." + +#: ../source/guides/index-mirrors-and-caches.rst:15 +msgid "There are multiple classes of options in this area:" +msgstr "ມີຕົວເລືອກຫຼາຍປະເພດໃນສ່ວນນີ້:" + +#: ../source/guides/index-mirrors-and-caches.rst:17 +msgid "local/hosted caching of package indexes." +msgstr "ການເຮັດ caching ຂອງ package indexes ແບບພາຍໃນ ຫຼື ແບບໂຮສ." + +#: ../source/guides/index-mirrors-and-caches.rst:19 +msgid "" +"local/hosted mirroring of a package index. A mirror is a (whole or partial) " +"copy of a package index, which can be used in place of the original index." +msgstr "" +"ການເຮັດ mirroring ຂອງ package index ແບບພາຍໃນ ຫຼື ແບບໂຮສ. mirror ແມ່ນການສຳເນົາ ຂໍ້ມູນ " +"(ທັງໝົດ ຫຼື ບາງສ່ວນ) ຂອງ package index, ເຊິ່ງສາມາດໃຊ້ແທນ index ຕົ້ນສະບັບໄດ້." + +#: ../source/guides/index-mirrors-and-caches.rst:23 +msgid "" +"private package index with fall-through to public package indexes (for " +"example, to mitigate dependency confusion attacks), also known as a proxy." +msgstr "" +"package index ສ່ວນຕົວທີ່ສາມາດດຶງຂໍ້ມູນຈາກ package index ສາທາລະນະຫາກບໍ່ພົບ (ຕົວຢ່າງ: " +"ເພື່ອປ້ອງກັນການໂຈມຕີແບບ dependency confusion), ເຊິ່ງເອີ້ນກັນວ່າ ພຣັອກຊີ (proxy)." + +#: ../source/guides/index-mirrors-and-caches.rst:29 +msgid "Caching with pip" +msgstr "ການເຮັດ Caching ດ້ວຍ pip" + +#: ../source/guides/index-mirrors-and-caches.rst:31 +msgid "" +"pip provides a number of facilities for speeding up installation by using " +"local cached copies of :term:`packages `:" +msgstr "" +"pip ມີເຄື່ອງມືຫຼາຍຢ່າງເພື່ອເລັ່ງຄວາມໄວໃນການຕິດຕັ້ງໂດຍການໃຊ້ແຄຊ໌ ຂອງ :term:`ແພັກເກດ " +"` ພາຍໃນເຄື່ອງ:" + +#: ../source/guides/index-mirrors-and-caches.rst:34 +msgid "" +":ref:`Fast & local installs ` by " +"downloading all the requirements for a project and then pointing pip at " +"those downloaded files instead of going to PyPI." +msgstr "" +":ref:`ການຕິດຕັ້ງແບບໄວ ແລະ ພາຍໃນ ` ໂດຍ " +"ການດາວໂຫຼດສິ່ງທີ່ຕ້ອງການທັງໝົດຂອງໂຄງການມາກ່ອນ ແລ້ວຊີ້ pip ໄປຫາ ໄຟລ໌ເຫຼົ່ານັ້ນແທນທີ່ຈະໄປທີ່ PyPI." + +#: ../source/guides/index-mirrors-and-caches.rst:37 +msgid "" +"A variation on the above which pre-builds the installation files for the " +"requirements using :ref:`python3 -m pip wheel `:" +msgstr "" +"ອີກຮູບແບບໜຶ່ງຂອງຂ້າງເທິງແມ່ນການບິວໄຟລ໌ຕິດຕັ້ງສຳລັບສິ່ງທີ່ຕ້ອງການລ່ວງໜ້າ ໂດຍໃຊ້ :ref:`python3 -m " +"pip wheel `:" + +#: ../source/guides/index-mirrors-and-caches.rst:53 +msgid "Cache" +msgstr "Cache" + +#: ../source/guides/index-mirrors-and-caches.rst:54 +msgid "Mirror" +msgstr "Mirror" + +#: ../source/guides/index-mirrors-and-caches.rst:55 +msgid "Proxy" +msgstr "Proxy" + +#: ../source/guides/index-mirrors-and-caches.rst:62 +msgid "" +"multiple indexes with inheritance; syncing, replication, fail-over; package " +"upload" +msgstr "" +"ຮອງຮັບຫຼາຍ index ແບບສືບທອດ; ການຊິງຄ໌ຂໍ້ມູນ, ການເຮັດສຳເນົາ, ລະບົບສຳຮອງ; ການອັບໂຫຼດແພັກເກດ" + +#: ../source/guides/index-mirrors-and-caches.rst:65 +msgid ":ref:`bandersnatch`" +msgstr ":ref:`bandersnatch`" + +#: ../source/guides/index-mirrors-and-caches.rst:75 +msgid "custom plugin enables caching; re-routing to other package indexes" +msgstr "ປລັກອິນທີ່ປັບແຕ່ງເອງຊ່ວຍໃຫ້ໃຊ້ແຄຊ໌ໄດ້; ການປ່ຽນເສັ້ນທາງໄປຫາ package indexes ອື່ນ" + +#: ../source/guides/index-mirrors-and-caches.rst:81 +msgid "unmaintained; authentication, authorisation" +msgstr "ບໍ່ໄດ້ຮັບການເບິ່ງແຍງແລ້ວ; ການຢືນຢັນຕົວຕົນ, ການກຳນົດສິດ" + +#: ../source/guides/index-mirrors-and-caches.rst:87 +msgid "plugin for Pulp; multiple proxied indexes; package upload" +msgstr "ປລັກອິນສຳລັບ Pulp; ຮອງຮັບຫຼາຍ proxied indexes; ການອັບໂຫຼດແພັກເກດ" + +#: ../source/guides/index-mirrors-and-caches.rst:89 +msgid ":ref:`proxpi`" +msgstr ":ref:`proxpi`" + +#: ../source/guides/index-mirrors-and-caches.rst:93 +#: ../source/guides/index-mirrors-and-caches.rst:99 +msgid "multiple proxied indexes" +msgstr "ຮອງຮັບຫຼາຍ proxied indexes" + +#: ../source/guides/index-mirrors-and-caches.rst:95 +msgid ":ref:`nginx_pypi_cache`" +msgstr ":ref:`nginx_pypi_cache`" + +#: ../source/guides/index-mirrors-and-caches.rst:101 +msgid ":ref:`flaskpypiproxy`" +msgstr ":ref:`flaskpypiproxy`" + +#: ../source/guides/index-mirrors-and-caches.rst:105 +msgid "unmaintained" +msgstr "ບໍ່ໄດ້ຮັບການເບິ່ງແຍງແລ້ວ" + +#: ../source/guides/installing-scientific-packages.rst:5 +msgid "Installing scientific packages" +msgstr "ການຕິດຕັ້ງແພັກເກດດ້ານວິທະຍາສາດ" + +#: ../source/guides/installing-scientific-packages.rst:8 +msgid "" +"Scientific software tends to have more complex dependencies than most, and " +"it will often have multiple build options to take advantage of different " +"kinds of hardware, or to interoperate with different pieces of external " +"software." +msgstr "" +"ຊອບແວດ້ານວິທະຍາສາດມັກຈະມີ dependencies ທີ່ຊັບຊ້ອນກວ່າທົ່ວໄປ, ແລະ " +"ມັນມັກຈະມີຕົວເລືອກການບິວຫຼາຍຮູບແບບເພື່ອດຶງປະສິດທິພາບຂອງຮາດແວແຕ່ລະປະເພດ, ຫຼື " +"ເພື່ອເຮັດວຽກຮ່ວມກັບຊອບແວພາຍນອກອື່ນໆ." + +#: ../source/guides/installing-scientific-packages.rst:13 +msgid "" +"In particular, `NumPy `__, which provides the basis for " +"most of the software in the `scientific Python stack `_ can be configured to interoperate with different FORTRAN " +"libraries, and can take advantage of different levels of vectorized " +"instructions available in modern CPUs." +msgstr "" +"ໂດຍສະເພາະ, `NumPy `__, ເຊິ່ງເປັນພື້ນຖານໃຫ້ກັບຊອບແວສ່ວນໃຫຍ່ໃນ " +"`scientific Python stack `_ ສາມາດຖືກຕັ້ງຄ່າໃຫ້ " +"ເຮັດວຽກຮ່ວມກັບໄລບຣາຣີ FORTRAN ທີ່ແຕກຕ່າງກັນ, ແລະ ສາມາດນຳໃຊ້ຄຳສັ່ງ vectorized " +"ໃນລະດັບຕ່າງໆທີ່ມີຢູ່ໃນ CPU ສະໄໝໃໝ່." + +#: ../source/guides/installing-scientific-packages.rst:19 +msgid "" +"Starting with version 1.10.4 of NumPy and version 1.0.0 of SciPy, pre-built " +"32-bit and 64-bit binaries in the ``wheel`` format are available for all " +"major operating systems (Windows, macOS, and Linux) on PyPI. Note, however, " +"that on Windows, NumPy binaries are linked against the `ATLAS `__ BLAS/LAPACK library, restricted to SSE2 " +"instructions, so they may not provide optimal linear algebra performance." +msgstr "" +"ເລີ່ມແຕ່ NumPy ເວີຊັນ 1.10.4 ແລະ SciPy ເວີຊັນ 1.0.0 ເປັນຕົ້ນມາ, ໄຟລ໌ binary ແບບ 32-bit " +"ແລະ 64-bit ທີ່ບິວໄວ້ແລ້ວໃນຮູບແບບ ``wheel`` ແມ່ນມີໃຫ້ ສຳລັບທຸກລະບົບປະຕິບັດການຫຼັກ (Windows, " +"macOS, ແລະ Linux) ໃນ PyPI. ຢ່າງໃດກໍ່ຕາມ, ໃນ Windows, binary ຂອງ NumPy " +"ແມ່ນຖືກເຊື່ອມໂຍງກັບໄລບຣາຣີ `ATLAS `__ BLAS/" +"LAPACK, ເຊິ່ງຈຳກັດຢູ່ທີ່ຄຳສັ່ງ SSE2, ດັ່ງນັ້ນພວກມັນອາດຈະບໍ່ໄດ້ໃຫ້ປະສິດທິພາບ ສູງສຸດໃນການຄຳນວນ " +"linear algebra." + +#: ../source/guides/installing-scientific-packages.rst:26 +msgid "" +"There are a number of alternative options for obtaining scientific Python " +"libraries (or any other Python libraries that require a compilation " +"environment to install from source and don't provide pre-built wheel files " +"on PyPI)." +msgstr "" +"ມີທາງເລືອກອື່ນໆໃນການຕິດຕັ້ງໄລບຣາຣີ Python ດ້ານວິທະຍາສາດ (ຫຼື ໄລບຣາຣີ Python ອື່ນໆ " +"ທີ່ຕ້ອງໃຊ້ສະພາບແວດລ້ອມໃນການຄອມໄພລ໌ເພື່ອຕິດຕັ້ງຈາກ source ແລະ ບໍ່ມີໄຟລ໌ wheel ທີ່ບິວໄວ້ແລ້ວໃນ " +"PyPI)." + +#: ../source/guides/installing-scientific-packages.rst:32 +msgid "Building from source" +msgstr "ການບິວຈາກ source" + +#: ../source/guides/installing-scientific-packages.rst:34 +msgid "" +"The same complexity which makes it difficult to distribute NumPy (and many " +"of the projects that depend on it) as wheel files also make them difficult " +"to build from source yourself. However, for intrepid folks that are willing " +"to spend the time wrangling compilers and linkers for both C and FORTRAN, " +"building from source is always an option." +msgstr "" +"ຄວາມຊັບຊ້ອນແບບດຽວກັນທີ່ເຮັດໃຫ້ການແຈກຢາຍ NumPy (ແລະ ຫຼາຍໂຄງການທີ່ຕ້ອງໃຊ້ມັນ) ໃນຮູບແບບໄຟລ໌ " +"wheel ເປັນເລື່ອງຍາກ ກໍ່ເຮັດໃຫ້ການບິວຈາກ source ດ້ວຍຕົນເອງເປັນເລື່ອງຍາກຄືກັນ. ຢ່າງໃດກໍ່ຕາມ, " +"ສຳລັບຜູ້ທີ່ກ້າຫານ ແລະ ເຕັມໃຈທີ່ຈະໃຊ້ເວລາກັບ compilers ແລະ linkers ສຳລັບທັງ C ແລະ FORTRAN, " +"ການບິວຈາກ source ກໍ່ເປັນທາງເລືອກສະເໝີ." + +#: ../source/guides/installing-scientific-packages.rst:42 +msgid "Linux distribution packages" +msgstr "ແພັກເກດຈາກລະບົບ Linux (Linux distribution packages)" + +#: ../source/guides/installing-scientific-packages.rst:44 +msgid "" +"For Linux users, the system package manager will often have pre-compiled " +"versions of various pieces of scientific software, including NumPy and other " +"parts of the scientific Python stack." +msgstr "" +"ສຳລັບຜູ້ໃຊ້ Linux, ຕົວຈັດການແພັກເກດຂອງລະບົບມັກຈະມີເວີຊັນທີ່ຄອມໄພລ໌ໄວ້ແລ້ວ " +"ສຳລັບຊອບແວວິທະຍາສາດຕ່າງໆ, ລວມທັງ NumPy ແລະ ສ່ວນອື່ນໆຂອງ scientific Python stack." + +#: ../source/guides/installing-scientific-packages.rst:48 +msgid "" +"If using versions which may be several months old is acceptable, then this " +"is likely to be a good option (just make sure to allow access to " +"distributions installed into the system Python when using virtual " +"environments)." +msgstr "" +"ຫາກການໃຊ້ເວີຊັນທີ່ອາດຈະເກົ່າກວ່າສອງສາມເດືອນເປັນເລື່ອງທີ່ຮັບໄດ້, ວິທີນີ້ ກໍ່ເປັນທາງເລືອກທີ່ດີ " +"(ພຽງແຕ່ກວດສອບໃຫ້ແນ່ໃຈວ່າໄດ້ອະນຸຍາດໃຫ້ເຂົ້າເຖິງ distributions ທີ່ຕິດຕັ້ງໃນ system Python " +"ເມື່ອໃຊ້ virtual environments)." + +#: ../source/guides/installing-scientific-packages.rst:54 +msgid "Windows installers" +msgstr "ຕົວຕິດຕັ້ງສຳລັບ Windows" + +#: ../source/guides/installing-scientific-packages.rst:56 +msgid "" +"Many Python projects that don't (or can't) currently publish wheel files at " +"least publish Windows installers, either on PyPI or on their project " +"download page. Using these installers allows users to avoid the need to set " +"up a suitable environment to build extensions locally." +msgstr "" +"ຫຼາຍໂຄງການ Python ທີ່ຍັງບໍ່ໄດ້ (ຫຼື ບໍ່ສາມາດ) ເຜີຍແຜ່ໄຟລ໌ wheel ໃນປັດຈຸບັນ " +"ຢ່າງໜ້ອຍກໍ່ຈະເຜີຍແຜ່ຕົວຕິດຕັ້ງ Windows, ບໍ່ວ່າຈະໃນ PyPI ຫຼື ໃນໜ້າດາວໂຫຼດ ຂອງໂຄງການ. " +"ການໃຊ້ຕົວຕິດຕັ້ງເຫຼົ່ານີ້ຊ່ວຍໃຫ້ຜູ້ໃຊ້ບໍ່ຈຳເປັນຕ້ອງຕັ້ງຄ່າ ສະພາບແວດລ້ອມທີ່ເໝາະສົມເພື່ອບິວ extensions " +"ພາຍໃນເຄື່ອງ." + +#: ../source/guides/installing-scientific-packages.rst:61 +msgid "" +"The extensions provided in these installers are typically compatible with " +"the CPython Windows installers published on python.org." +msgstr "" +"ສ່ວນເສີມ (extensions) ທີ່ສະໜອງໃຫ້ໃນຕົວຕິດຕັ້ງເຫຼົ່ານີ້ " +"ໂດຍທົ່ວໄປແລ້ວແມ່ນສາມາດໃຊ້ງານຮ່ວມກັນໄດ້ກັບຕົວຕິດຕັ້ງ CPython Windows ທີ່ເຜີຍແຜ່ຢູ່ python.org." + +#: ../source/guides/installing-scientific-packages.rst:64 +msgid "" +"As with Linux system packages, the Windows installers will only install into " +"a system Python installation - they do not support installation in virtual " +"environments. Allowing access to distributions installed into the system " +"Python when using virtual environments is a common approach to working " +"around this limitation." +msgstr "" +"ເຊັ່ນດຽວກັນກັບແພັກເກດລະບົບ Linux, ຕົວຕິດຕັ້ງ Windows ຈະຕິດຕັ້ງລົງໃນ system Python ເທົ່ານັ້ນ - " +"ພວກມັນບໍ່ຮອງຮັບການຕິດຕັ້ງໃນ virtual environments. ການອະນຸຍາດໃຫ້ເຂົ້າເຖິງ distributions " +"ທີ່ຕິດຕັ້ງໃນ system Python ເມື່ອໃຊ້ virtual environments ແມ່ນວິທີທົ່ວໄປໃນການແກ້ໄຂຂໍ້ຈຳກັດນີ້." + +#: ../source/guides/installing-scientific-packages.rst:70 +msgid "" +"The :term:`Wheel` project also provides a :command:`wheel convert` " +"subcommand that can convert a Windows :command:`bdist_wininst` installer to " +"a wheel." +msgstr "" +"ໂຄງການ :term:`Wheel` ຍັງມີຄຳສັ່ງຍ່ອຍ :command:`wheel convert` ທີ່ສາມາດປ່ຽນຕົວຕິດຕັ້ງ " +"Windows :command:`bdist_wininst` ໃຫ້ເປັນ wheel ໄດ້." + +#: ../source/guides/installing-scientific-packages.rst:77 +msgid "macOS installers and package managers" +msgstr "ຕົວຕິດຕັ້ງ ແລະ ຕົວຈັດການແພັກເກດສຳລັບ macOS" + +#: ../source/guides/installing-scientific-packages.rst:79 +msgid "" +"Similar to the situation on Windows, many projects (including NumPy) publish " +"macOS installers that are compatible with the macOS CPython binaries " +"published on python.org." +msgstr "" +"ຄ້າຍຄືກັບໃນ Windows, ຫຼາຍໂຄງການ (ລວມທັງ NumPy) ໄດ້ເຜີຍແຜ່ຕົວຕິດຕັ້ງ macOS ທີ່ເຂົ້າກັນໄດ້ກັບ " +"binary ຂອງ macOS CPython ທີ່ເຜີຍແຜ່ໃນ python.org." + +#: ../source/guides/installing-scientific-packages.rst:83 +msgid "" +"macOS users also have access to Linux distribution style package managers " +"such as ``Homebrew``. The SciPy site has more details on using Homebrew to " +"`install SciPy on macOS `_." +msgstr "" +"ຜູ້ໃຊ້ macOS ຍັງສາມາດເຂົ້າເຖິງຕົວຈັດການແພັກເກດແບບດຽວກັບ Linux ເຊັ່ນ ``Homebrew``. ເວັບໄຊ " +"SciPy ມີລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບການໃຊ້ Homebrew ເພື່ອ `ຕິດຕັ້ງ SciPy ໃນ macOS `_." + +#: ../source/guides/installing-scientific-packages.rst:89 +msgid "SciPy distributions" +msgstr "ການແຈກຢາຍ SciPy" + +#: ../source/guides/installing-scientific-packages.rst:91 +msgid "" +"The SciPy site lists `several distributions `_ " +"that provide the full SciPy stack to end users in an easy to use and update " +"format." +msgstr "" +"ເວັບໄຊ SciPy ໄດ້ລະບຸ `ການແຈກຢາຍຫຼາຍຮູບແບບ `_ ທີ່ໃຫ້ " +"SciPy stack ແບບເຕັມຮູບແບບແກ່ຜູ້ໃຊ້ໃນຮູບແບບທີ່ໃຊ້ງ່າຍ ແລະ ອັບເດດໄດ້ງ່າຍ." + +#: ../source/guides/installing-scientific-packages.rst:96 +msgid "" +"Some of these distributions may not be compatible with the standard ``pip`` " +"and ``virtualenv`` based toolchain." +msgstr "" +"ບາງການແຈກຢາຍເຫຼົ່ານີ້ອາດຈະບໍ່ເຂົ້າກັນໄດ້ກັບເຄື່ອງມືມາດຕະຖານທີ່ອີງຕາມ ``pip`` ແລະ " +"``virtualenv``." + +#: ../source/guides/installing-scientific-packages.rst:100 +#: ../source/key_projects.rst:812 +msgid "Spack" +msgstr "Spack" + +#: ../source/guides/installing-scientific-packages.rst:101 +msgid "" +"`Spack `_ is a flexible package manager " +"designed to support multiple versions, configurations, platforms, and " +"compilers. It was built to support the needs of large supercomputing centers " +"and scientific application teams, who must often build software many " +"different ways. Spack is not limited to Python; it can install packages for " +"``C``, ``C++``, ``Fortran``, ``R``, and other languages. It is non-" +"destructive; installing a new version of one package does not break existing " +"installations, so many configurations can coexist on the same system." +msgstr "" +"`Spack `_ ແມ່ນຕົວຈັດການແພັກເກດທີ່ຢືດຢຸ່ນ " +"ທີ່ຖືກອອກແບບມາເພື່ອຮອງຮັບຫຼາຍເວີຊັນ, ການຕັ້ງຄ່າ, ແພລັດຟອມ, ແລະ compilers. " +"ມັນຖືກສ້າງຂຶ້ນເພື່ອຮອງຮັບຄວາມຕ້ອງການຂອງສູນຊຸບເປີຄອມພິວເຕີຂະໜາດໃຫຍ່ ແລະ " +"ທີມງານພັດທະນາຊອບແວວິທະຍາສາດ, ເຊິ່ງມັກຈະຕ້ອງບິວຊອບແວໃນຫຼາຍວິທີ. Spack ບໍ່ໄດ້ຈຳກັດຢູ່ແຕ່ Python; " +"ມັນສາມາດຕິດຕັ້ງແພັກເກດສຳລັບ ``C``, ``C++``, ``Fortran``, ``R``, ແລະ ພາສາອື່ນໆ. " +"ມັນເປັນລະບົບທີ່ບໍ່ທຳລາຍຂໍ້ມູນເກົ່າ; ການຕິດຕັ້ງເວີຊັນໃໝ່ຂອງແພັກເກດໜຶ່ງ " +"ຈະບໍ່ໄປເຮັດໃຫ້ການຕິດຕັ້ງທີ່ມີຢູ່ກ່ອນແລ້ວເພພັງ, ດັ່ງນັ້ນຫຼາຍການຕັ້ງຄ່າຈຶ່ງສາມາດຢູ່ຮ່ວມກັນໃນລະບົບດຽວກັນໄດ້." + +#: ../source/guides/installing-scientific-packages.rst:110 +msgid "" +"Spack offers a simple but powerful syntax that allows users to specify " +"versions and configuration options concisely. Package files are written in " +"pure Python, and they are templated so that it is easy to swap compilers, " +"dependency implementations (like MPI), versions, and build options with a " +"single package file. Spack also generates *module* files so that packages " +"can be loaded and unloaded from the user's environment." +msgstr "" +"Spack ມີໄວຍາກອນທີ່ງ່າຍດາຍແຕ່ຊົງພະລັງ ເຊິ່ງຊ່ວຍໃຫ້ຜູ້ໃຊ້ລະບຸເວີຊັນ ແລະ " +"ຕົວເລືອກການຕັ້ງຄ່າໄດ້ຢ່າງກະທັດຮັດ. ໄຟລ໌ແພັກເກດຖືກຂຽນດ້ວຍ Python ລ້ວນໆ, ແລະ " +"ພວກມັນເປັນແບບແມ່ແບບ (templated) ເພື່ອໃຫ້ງ່າຍຕໍ່ການສະຫຼັບ compilers, ການນຳໃຊ້ dependency " +"(ເຊັ່ນ MPI), ເວີຊັນ, ແລະ ຕົວເລືອກການບິວ ດ້ວຍໄຟລ໌ ແພັກເກດດຽວ. Spack ຍັງສ້າງໄຟລ໌ *module* " +"ເພື່ອໃຫ້ແພັກເກດ ສາມາດຖືກໂຫຼດເຂົ້າ ຫຼື ຖອນອອກຈາກສະພາບແວດລ້ອມຂອງຜູ້ໃຊ້ໄດ້." + +#: ../source/guides/installing-scientific-packages.rst:119 +msgid "The conda cross-platform package manager" +msgstr "ຕົວຈັດການແພັກເກດແບບຂ້າມແພລັດຟອມ conda" + +#: ../source/guides/installing-scientific-packages.rst:121 +msgid "" +"``conda`` is an open source (BSD licensed) package management system and " +"environment management system that allows users to install multiple versions " +"of binary software packages and their dependencies, and easily switch " +"between them. It is a cross-platform tool working on Windows, MacOS, and " +"Linux. Conda can be used to package up and distribute all kinds of packages, " +"it is not limited to just Python packages. It has full support for native " +"virtual environments. Conda makes environments first-class citizens, making " +"it easy to create independent environments even for C libraries. It is " +"written in Python, but is Python-agnostic. Conda manages Python itself as a " +"package, so that :command:`conda update python` is possible, in contrast to " +"pip, which only manages Python packages." +msgstr "" +"``conda`` ແມ່ນລະບົບຈັດການແພັກເກດ ແລະ ລະບົບຈັດການສະພາບແວດລ້ອມແບບໂອເພນຊອດ (ລິຂະສິດ BSD) " +"ທີ່ຊ່ວຍໃຫ້ຜູ້ໃຊ້ຕິດຕັ້ງຊອບແວ binary ຫຼາຍເວີຊັນ ແລະ dependencies ຂອງພວກມັນ, ແລະ " +"ສາມາດສະຫຼັບລະຫວ່າງພວກມັນໄດ້ຢ່າງງ່າຍດາຍ. ມັນເປັນເຄື່ອງມື ແບບຂ້າມແພລັດຟອມທີ່ເຮັດວຽກໄດ້ໃນ " +"Windows, MacOS, ແລະ Linux. Conda ສາມາດ ໃຊ້ເພື່ອເຮັດແພັກເກດ ແລະ " +"ແຈກຢາຍແພັກເກດທຸກປະເພດ, ບໍ່ໄດ້ຈຳກັດພຽງແຕ່ ແພັກເກດ Python. ມັນຮອງຮັບ virtual " +"environments ຢ່າງເຕັມຮູບແບບ. Conda ໃຫ້ ຄວາມສຳຄັນກັບ environments ເປັນອັນດັບທຳອິດ, " +"ເຮັດໃຫ້ງ່າຍຕໍ່ການສ້າງ environments ທີ່ເປັນອິດສະຫຼະເຖິງແມ່ນວ່າຈະເປັນໄລບຣາຣີ C. ມັນຖືກຂຽນດ້ວຍ " +"Python, ແຕ່ ບໍ່ໄດ້ຍຶດຕິດກັບ Python ເທົ່ານັ້ນ. Conda ຈັດການ Python ເອງໃນຮູບແບບແພັກເກດ, " +"ດັ່ງນັ້ນ :command:`conda update python` ຈຶ່ງສາມາດເຮັດໄດ້, ເຊິ່ງຕ່າງຈາກ pip " +"ທີ່ຈັດການພຽງແຕ່ແພັກເກດ Python." + +#: ../source/guides/installing-scientific-packages.rst:133 +msgid "" +"Anaconda `Anaconda `_ is a Python " +"distribution published by Anaconda, Inc. It is a stable collection of Open " +"Source packages for big data and scientific use, and a collection of " +"Graphical Interface utilities for managing conda environments." +msgstr "" +"Anaconda `Anaconda `_ ແມ່ນການແຈກຢາຍ " +"Python ທີ່ເຜີຍແຜ່ໂດຍ Anaconda, Inc. ມັນແມ່ນການລວບລວມແພັກເກດໂອເພນຊອດ " +"ທີ່ສະຖຽນສຳລັບການໃຊ້ງານດ້ານ big data ແລະ ວິທະຍາສາດ, ແລະ ເປັນການລວບລວມ ເຄື່ອງມືແບບກຣາຟິກ " +"(GUI) ສຳລັບການຈັດການ conda environments." + +#: ../source/guides/installing-scientific-packages.rst:135 +msgid "" +"In addition to the full distribution provided by Anaconda, the conda package " +"manager itself is available in `miniconda `_, `miniforge `_, and " +"`pixi `_." +msgstr "" +"ນອກເໜືອຈາກການແຈກຢາຍແບບເຕັມຮູບແບບຂອງ Anaconda ແລ້ວ, ຕົວຈັດການແພັກເກດ conda " +"ເອງກໍ່ມີໃຫ້ໃຊ້ໃນ `miniconda `_, `miniforge " +"`_, ແລະ `pixi `_." + +#: ../source/guides/installing-scientific-packages.rst:138 +msgid "" +"Conda packages are available on multiple channels on Anaconda.org, including " +"the default channel supported by Anaconda, Inc, the community supported " +"conda-forge channel, which provides a wide variety of pre-built packages, " +"and some domain-specific package collections." +msgstr "" +"ແພັກເກດ Conda ມີໃຫ້ໃຊ້ໃນຫຼາຍຊ່ອງທາງ (channels) ໃນ Anaconda.org, ລວມທັງ " +"ຊ່ອງທາງເລີ່ມຕົ້ນທີ່ສະໜັບສະໜູນໂດຍ Anaconda, Inc, ຊ່ອງທາງ conda-forge ທີ່ ສະໜັບສະໜູນໂດຍຊຸມຊົນ, " +"ເຊິ່ງມີແພັກເກດທີ່ບິວໄວ້ແລ້ວຫຼາກຫຼາຍຊະນິດ, ແລະ ການລວບລວມແພັກເກດສະເພາະທາງບາງຢ່າງ." + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:4 +msgid "Installing stand alone command line tools" +msgstr "ການຕິດຕັ້ງເຄື່ອງມືຄຳສັ່ງ (command line) ແບບສະແຕນອາໂລນ" + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:6 +msgid "" +"Many packages provide command line applications. Examples of such packages " +"are `mypy `_, `flake8 `_, `black `_, and :ref:`pipenv`." +msgstr "" +"ຫຼາຍແພັກເກດມີແອັບພລິເຄຊັນແບບຄຳສັ່ງ (command line). ຕົວຢ່າງຂອງແພັກເກດເຫຼົ່ານັ້ນ ແມ່ນ `mypy " +"`_, `flake8 `_, `black `_, ແລະ :ref:`pipenv`." + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:12 +msgid "" +"Usually you want to be able to access these applications from anywhere on " +"your system, but installing packages and their dependencies to the same " +"global environment can cause version conflicts and break dependencies the " +"operating system has on Python packages." +msgstr "" +"ໂດຍປົກກະຕິແລ້ວ ທ່ານຕ້ອງການເຂົ້າເຖິງແອັບພລິເຄຊັນເຫຼົ່ານີ້ໄດ້ຈາກທຸກບ່ອນໃນລະບົບ ຂອງທ່ານ, " +"ແຕ່ການຕິດຕັ້ງແພັກເກດ ແລະ dependencies ຂອງພວກມັນລົງໃນ global environment ດຽວກັນ " +"ອາດຈະເຮັດໃຫ້ເກີດການຂັດແຍ້ງຂອງເວີຊັນ ແລະ ເຮັດໃຫ້ dependencies " +"ທີ່ລະບົບປະຕິບັດການໃຊ້ງານຢູ່ເພພັງໄດ້." + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:17 +msgid "" +":ref:`pipx` solves this by creating a virtual environment for each package, " +"while also ensuring that its applications are accessible through a directory " +"that is on your ``$PATH``. This allows each package to be upgraded or " +"uninstalled without causing conflicts with other packages, and allows you to " +"safely run the applications from anywhere." +msgstr "" +":ref:`pipx` ແກ້ໄຂບັນຫານີ້ໂດຍການສ້າງ virtual environment ໃຫ້ກັບແຕ່ລະແພັກເກດ, " +"ພ້ອມທັງຮັບປະກັນວ່າແອັບພລິເຄຊັນຂອງມັນສາມາດເຂົ້າເຖິງໄດ້ຜ່ານໂຟນເດີທີ່ຢູ່ໃນ ``$PATH`` ຂອງທ່ານ. " +"ສິ່ງນີ້ຊ່ວຍໃຫ້ແຕ່ລະແພັກເກດສາມາດອັບເກຣດ ຫຼື ຖອນການຕິດຕັ້ງ ໄດ້ໂດຍບໍ່ເຮັດໃຫ້ເກີດການຂັດແຍ້ງກັບແພັກເກດອື່ນ, " +"ແລະ ຊ່ວຍໃຫ້ທ່ານ ຣັນແອັບພລິເຄຊັນໄດ້ຢ່າງປອດໄພຈາກທຸກບ່ອນ." + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:23 +msgid "pipx only works with Python 3.6+." +msgstr "pipx ເຮັດວຽກໄດ້ກັບ Python 3.6 ຂຶ້ນໄປເທົ່ານັ້ນ." + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:25 +msgid "pipx is installed with pip:" +msgstr "pipx ຖືກຕິດຕັ້ງດ້ວຍ pip:" + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:43 +msgid "" +"``ensurepath`` ensures that the application directory is on your ``$PATH``. " +"You may need to restart your terminal for this update to take effect." +msgstr "" +"``ensurepath`` ຈະຮັບປະກັນວ່າໂຟນເດີແອັບພລິເຄຊັນຢູ່ໃນ ``$PATH`` ຂອງທ່ານ. " +"ທ່ານອາດຈະຕ້ອງເລີ່ມຕົ້ນເທີມິນໍ (terminal) ໃໝ່ເພື່ອໃຫ້ການປ່ຽນແປງນີ້ມີຜົນ." + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:46 +msgid "" +"Now you can install packages with ``pipx install`` and run the package's " +"applications(s) from anywhere." +msgstr "" +"ຕອນນີ້ທ່ານສາມາດຕິດຕັ້ງແພັກເກດດ້ວຍ ``pipx install`` ແລະ ຣັນ " +"ແອັບພລິເຄຊັນຂອງແພັກເກດໄດ້ຈາກທຸກບ່ອນ." + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:54 +#: ../source/specifications/entry-points.rst:113 +msgid "For example:" +msgstr "ຕົວຢ່າງ:" + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:76 +msgid "" +"To see a list of packages installed with pipx and which applications are " +"available, use ``pipx list``:" +msgstr "" +"ເພື່ອເບິ່ງລາຍຊື່ແພັກເກດທີ່ຕິດຕັ້ງດ້ວຍ pipx ແລະ ເບິ່ງວ່າແອັບພລິເຄຊັນໃດແດ່ທີ່ ສາມາດໃຊ້ໄດ້, ໃຫ້ໃຊ້ຄຳສັ່ງ " +"``pipx list``:" + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:100 +msgid "To upgrade or uninstall a package:" +msgstr "ເພື່ອອັບເກຣດ ຫຼື ຖອນການຕິດຕັ້ງແພັກເກດ:" + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:107 +msgid "pipx can be upgraded or uninstalled with pip:" +msgstr "pipx ສາມາດອັບເກຣດ ຫຼື ຖອນການຕິດຕັ້ງໄດ້ດ້ວຍ pip:" + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:123 +msgid "" +"pipx also allows you to install and run the latest version of an application " +"in a temporary, ephemeral environment. For example:" +msgstr "" +"pipx ຍັງຊ່ວຍໃຫ້ທ່ານຕິດຕັ້ງ ແລະ ຣັນແອັບພລິເຄຊັນເວີຊັນຫຼ້າສຸດ ໃນສະພາບແວດລ້ອມຊົ່ວຄາວໄດ້. ຕົວຢ່າງ:" + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:130 +msgid "To see the full list of commands pipx offers, run:" +msgstr "ເພື່ອເບິ່ງລາຍຊື່ຄຳສັ່ງທັງໝົດທີ່ pipx ມີໃຫ້, ຣັນຄຳສັ່ງ:" + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:136 +msgid "You can learn more about pipx at https://pipx.pypa.io/." +msgstr "ທ່ານສາມາດຮຽນຮູ້ເພີ່ມເຕີມກ່ຽວກັບ pipx ໄດ້ທີ່ https://pipx.pypa.io/." + +#: ../source/guides/installing-using-linux-tools.rst:5 +msgid "Installing pip/setuptools/wheel with Linux Package Managers" +msgstr "ການຕິດຕັ້ງ pip/setuptools/wheel ດ້ວຍຕົວຈັດການແພັກເກດຂອງ Linux" + +#: ../source/guides/installing-using-linux-tools.rst:8 +msgid "2021-07-26" +msgstr "2021-07-26" + +#: ../source/guides/installing-using-linux-tools.rst:10 +msgid "" +"This section covers how to install :ref:`pip`, :ref:`setuptools`, " +"and :ref:`wheel` using Linux package managers." +msgstr "" +"ພາກນີ້ຈະເວົ້າເຖິງວິທີການຕິດຕັ້ງ :ref:`pip`, :ref:`setuptools`, ແລະ :ref:`wheel` " +"ໂດຍໃຊ້ຕົວຈັດການແພັກເກດຂອງ Linux." + +#: ../source/guides/installing-using-linux-tools.rst:13 +msgid "" +"If you're using a Python that was downloaded from `python.org `_, then this section does not apply. See " +"the :ref:`installing_requirements` section instead." +msgstr "" +"ຫາກທ່ານກຳລັງໃຊ້ Python ທີ່ດາວໂຫຼດມາຈາກ `python.org `_, " +"ພາກນີ້ຈະບໍ່ກ່ຽວຂ້ອງ. ໃຫ້ເບິ່ງທີ່ພາກ :ref:`installing_requirements` ແທນ." + +#: ../source/guides/installing-using-linux-tools.rst:17 +msgid "" +"Note that it's common for the versions of :ref:`pip`, :ref:`setuptools`, " +"and :ref:`wheel` supported by a specific Linux Distribution to be outdated " +"by the time it's released to the public, and updates generally only occur " +"for security reasons, not for feature updates. For certain Distributions, " +"there are additional repositories that can be enabled to provide newer " +"versions. The repositories we know about are explained below." +msgstr "" +"ໃຫ້ສັງເກດວ່າເວີຊັນຂອງ :ref:`pip`, :ref:`setuptools`, ແລະ :ref:`wheel` ທີ່ ຮອງຮັບໂດຍ " +"Linux Distribution ໃດໜຶ່ງ ມັກຈະເກົ່າກວ່າປົກກະຕິເມື່ອ ເຜີຍແຜ່ສູ່ສາທາລະນະ, ແລະ " +"ການອັບເດດໂດຍທົ່ວໄປຈະເກີດຂຶ້ນສະເພາະເຫດຜົນ ດ້ານຄວາມປອດໄພ, ບໍ່ແມ່ນການອັບເດດຟີເຈີໃໝ່. ສຳລັບບາງ " +"Distribution, ຈະມີ repositories ເພີ່ມເຕີມທີ່ສາມາດເປີດໃຊ້ເພື່ອໃຫ້ໄດ້ເວີຊັນໃໝ່ກວ່າ. " +"ພວກເຮົາຈະອະທິບາຍ repositories ທີ່ພວກເຮົາຮູ້ຈັກໄວ້ດ້ານລຸ່ມນີ້." + +#: ../source/guides/installing-using-linux-tools.rst:24 +msgid "" +"Also note that it's somewhat common for Distributions to apply patches for " +"the sake of security and normalization to their own standards. In some " +"cases, this can lead to bugs or unexpected behaviors that vary from the " +"original unpatched versions. When this is known, we will make note of it " +"below." +msgstr "" +"ນອກຈາກນັ້ນ, ມັນເປັນເລື່ອງປົກກະຕິທີ່ Distribution ຈະມີການແກ້ໄຂ (patch) ເພື່ອຄວາມປອດໄພ ແລະ " +"ຄວາມເປັນມາດຕະຖານຂອງພວກເຂົາເອງ. ໃນບາງ ກໍລະນີ, ສິ່ງນີ້ອາດຈະເຮັດໃຫ້ເກີດບັກ ຫຼື ພຶດຕິກຳທີ່ບໍ່ຄາດຄິດ " +"ເຊິ່ງແຕກຕ່າງ ຈາກເວີຊັນຕົ້ນສະບັບທີ່ບໍ່ໄດ້ແກ້ໄຂ. ຫາກມີຂໍ້ມູນສ່ວນນີ້, ພວກເຮົາຈະ ໝາຍເຫດໄວ້ໃຫ້." + +#: ../source/guides/installing-using-linux-tools.rst:31 +msgid "Fedora" +msgstr "Fedora" + +#: ../source/guides/installing-using-linux-tools.rst:37 +msgid "" +"To learn more about Python in Fedora, please visit the `official Fedora " +"docs`_, `Python Classroom`_ or `Fedora Loves Python`_." +msgstr "" +"ເພື່ອຮຽນຮູ້ເພີ່ມເຕີມກ່ຽວກັບ Python ໃນ Fedora, ໃຫ້ໄປທີ່ `official Fedora docs`_, `Python " +"Classroom`_ ຫຼື `Fedora Loves Python`_." + +#: ../source/guides/installing-using-linux-tools.rst:45 +msgid "CentOS/RHEL" +msgstr "CentOS/RHEL" + +#: ../source/guides/installing-using-linux-tools.rst:47 +msgid "" +"CentOS and RHEL don't offer :ref:`pip` or :ref:`wheel` in their core " +"repositories, although :ref:`setuptools` is installed by default." +msgstr "" +"CentOS ແລະ RHEL ບໍ່ມີ :ref:`pip` ຫຼື :ref:`wheel` ໃນ repositories ຫຼັກ, " +"ເຖິງແມ່ນວ່າ :ref:`setuptools` ຈະຖືກຕິດຕັ້ງມາໃຫ້ເປັນຄ່າເລີ່ມຕົ້ນກໍ່ຕາມ." + +#: ../source/guides/installing-using-linux-tools.rst:50 +msgid "To install pip and wheel for the system Python, there are two options:" +msgstr "ເພື່ອຕິດຕັ້ງ pip ແລະ wheel ສຳລັບ system Python, ມີສອງທາງເລືອກ:" + +#: ../source/guides/installing-using-linux-tools.rst:52 +msgid "" +"Enable the `EPEL repository `_ using " +"`these instructions `__. On EPEL 7, you can install pip and wheel like so:" +msgstr "" +"ເປີດໃຊ້ `EPEL repository `_ ໂດຍໃຊ້ " +"`ຄຳແນະນຳເຫຼົ່ານີ້ `__. ໃນ EPEL 7, ທ່ານສາມາດຕິດຕັ້ງ pip ແລະ wheel ໄດ້ດັ່ງນີ້:" + +#: ../source/guides/installing-using-linux-tools.rst:61 +msgid "" +"Since EPEL only offers extra, non-conflicting packages, EPEL does not offer " +"setuptools, since it's in the core repository." +msgstr "" +"ເນື່ອງຈາກ EPEL ໃຫ້ບໍລິການສະເພາະແພັກເກດເສີມທີ່ບໍ່ຂັດແຍ້ງກັບລະບົບ, EPEL ຈຶ່ງບໍ່ມີ setuptools ໃຫ້, " +"ເພາະມັນມີຢູ່ໃນ repository ຫຼັກຢູ່ແລ້ວ." + +#: ../source/guides/installing-using-linux-tools.rst:65 +msgid "" +"Enable the `PyPA Copr Repo `_ using `these instructions `__ [1]_. You can install pip and " +"wheel like so:" +msgstr "" +"ເປີດໃຊ້ `PyPA Copr Repo `_ " +"ໂດຍໃຊ້ `ຄຳແນະນຳເຫຼົ່ານີ້ `__ [1]_. ທ່ານສາມາດຕິດຕັ້ງ pip ແລະ wheel ໄດ້ດັ່ງນີ້:" + +#: ../source/guides/installing-using-linux-tools.rst:74 +msgid "To additionally upgrade setuptools, run:" +msgstr "ເພື່ອອັບເກຣດ setuptools ເພີ່ມເຕີມ, ຣັນຄຳສັ່ງ:" + +#: ../source/guides/installing-using-linux-tools.rst:81 +msgid "" +"To install pip, wheel, and setuptools, in a parallel, non-system environment " +"(using yum) then there are two options:" +msgstr "" +"ເພື່ອຕິດຕັ້ງ pip, wheel, ແລະ setuptools ໃນສະພາບແວດລ້ອມຂະໜານທີ່ບໍ່ແມ່ນ ຂອງລະບົບ (ໂດຍໃຊ້ " +"yum), ມີສອງທາງເລືອກ:" + +#: ../source/guides/installing-using-linux-tools.rst:85 +msgid "" +"Use the \"Software Collections\" feature to enable a parallel collection " +"that includes pip, setuptools, and wheel." +msgstr "" +"ໃຊ້ຟີເຈີ \"Software Collections\" ເພື່ອເປີດໃຊ້ຄໍເລັກຊັນຂະໜານ ເຊິ່ງລວມມີ pip, setuptools, " +"ແລະ wheel." + +#: ../source/guides/installing-using-linux-tools.rst:88 +msgid "" +"For Redhat, see here: https://developers.redhat.com/products/" +"softwarecollections/overview" +msgstr "" +"ສຳລັບ Redhat, ເບິ່ງທີ່ນີ້: https://developers.redhat.com/products/" +"softwarecollections/overview" + +#: ../source/guides/installing-using-linux-tools.rst:90 +msgid "For CentOS, see here: https://github.com/sclorg" +msgstr "ສຳລັບ CentOS, ເບິ່ງທີ່ນີ້: https://github.com/sclorg" + +#: ../source/guides/installing-using-linux-tools.rst:92 +msgid "Be aware that collections may not contain the most recent versions." +msgstr "ຈົ່ງລະວັງວ່າ collections ອາດຈະບໍ່ມີເວີຊັນຫຼ້າສຸດ." + +#: ../source/guides/installing-using-linux-tools.rst:94 +msgid "" +"Enable the `IUS repository `_ and install one of the " +"`parallel-installable `_ " +"Pythons, along with pip, setuptools, and wheel, which are kept fairly up to " +"date." +msgstr "" +"ເປີດໃຊ້ `IUS repository `_ ແລະ ຕິດຕັ້ງ Python ທີ່ " +"`ຕິດຕັ້ງແບບຂະໜານໄດ້ `_ ພ້ອມກັບ " +"pip, setuptools, ແລະ wheel ເຊິ່ງມີການອັບເດດຢູ່ສະເໝີ." + +#: ../source/guides/installing-using-linux-tools.rst:100 +msgid "For example, for Python 3.4 on CentOS7/RHEL7:" +msgstr "ຕົວຢ່າງ, ສຳລັບ Python 3.4 ໃນ CentOS7/RHEL7:" + +#: ../source/guides/installing-using-linux-tools.rst:108 +msgid "openSUSE" +msgstr "openSUSE" + +#: ../source/guides/installing-using-linux-tools.rst:118 +msgid "Debian/Ubuntu and derivatives" +msgstr "Debian/Ubuntu ແລະ ລະບົບທີ່ກ່ຽວຂ້ອງ" + +#: ../source/guides/installing-using-linux-tools.rst:120 +msgid "Firstly, update and refresh repository lists by running this command:" +msgstr "ກ່ອນອື່ນ, ໃຫ້ອັບເດດ ແລະ ຣີເຟຣຊລາຍຊື່ repository ໂດຍຣັນຄຳສັ່ງ:" + +#: ../source/guides/installing-using-linux-tools.rst:129 +msgid "" +"Recent Debian/Ubuntu versions have modified pip to use the `\"User Scheme\" " +"`_ by default, " +"which is a significant behavior change that can be surprising to some users." +msgstr "" +"Debian/Ubuntu ເວີຊັນຫຼ້າສຸດໄດ້ມີການປັບປ່ຽນ pip ໃຫ້ໃຊ້ `\"User Scheme\" `_ ເປັນຄ່າເລີ່ມຕົ້ນ, " +"ເຊິ່ງເປັນການປ່ຽນແປງພຶດຕິກຳທີ່ສຳຄັນ ແລະ ອາດຈະເຮັດໃຫ້ຜູ້ໃຊ້ບາງຄົນແປກໃຈ." + +#: ../source/guides/installing-using-linux-tools.rst:135 +msgid "Arch Linux" +msgstr "Arch Linux" + +#: ../source/guides/installing-using-linux-tools.rst:143 +msgid "" +"Currently, there is no \"copr\" yum plugin available for CentOS/RHEL, so the " +"only option is to manually place the repo files as described." +msgstr "" +"ປັດຈຸບັນ, ຍັງບໍ່ມີປລັກອິນ yum \"copr\" ສຳລັບ CentOS/RHEL, ດັ່ງນັ້ນທາງເລືອກດຽວ ແມ່ນການວາງໄຟລ໌ " +"repo ດ້ວຍຕົນເອງຕາມທີ່ໄດ້ອະທິບາຍໄວ້." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:2 +msgid "Install packages in a virtual environment using pip and venv" +msgstr "ການຕິດຕັ້ງແພັກເກດໃນ virtual environment ໂດຍໃຊ້ pip ແລະ venv" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:4 +msgid "" +"This guide discusses how to create and activate a virtual environment using " +"the standard library's virtual environment tool :ref:`venv` and install " +"packages. The guide covers how to:" +msgstr "" +"ຄຳແນະນຳນີ້ຈະເວົ້າເຖິງວິທີການສ້າງ ແລະ ເປີດໃຊ້ virtual environment ໂດຍໃຊ້ " +"ເຄື່ອງມືມາດຕະຖານ :ref:`venv` ແລະ ການຕິດຕັ້ງແພັກເກດ. ຄຳແນະນຳນີ້ຄອບຄຸມ:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:8 +msgid "Create and activate a virtual environment" +msgstr "ການສ້າງ ແລະ ເປີດໃຊ້ virtual environment" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:9 +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:153 +msgid "Prepare pip" +msgstr "ການກຽມ pip ໃຫ້ພ້ອມ" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:10 +msgid "Install packages into a virtual environment using the ``pip`` command" +msgstr "ການຕິດຕັ້ງແພັກເກດລົງໃນ virtual environment ໂດຍໃຊ້ຄຳສັ່ງ ``pip``" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:11 +msgid "Use and create a requirements file" +msgstr "ການໃຊ້ ແລະ ສ້າງໄຟລ໌ requirements" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:14 +msgid "" +"This guide applies to supported versions of Python, currently 3.8 and higher." +msgstr "ຄຳແນະນຳນີ້ໃຊ້ໄດ້ກັບ Python ເວີຊັນທີ່ໄດ້ຮັບການຮອງຮັບ, ປັດຈຸບັນແມ່ນ 3.8 ຂຶ້ນໄປ." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:18 +msgid "" +"This guide uses the term **package** to refer to a :term:`Distribution " +"Package`, which commonly is installed from an external host. This differs " +"from the term :term:`Import Package` which refers to import modules in your " +"Python source code." +msgstr "" +"ຄຳແນະນຳນີ້ໃຊ້ຄຳວ່າ **ແພັກເກດ (package)** ເພື່ອໝາຍເຖິງ :term:`Distribution Package`, " +"ເຊິ່ງປົກກະຕິແລ້ວຈະຖືກຕິດຕັ້ງຈາກແຫຼ່ງພາຍນອກ. ສິ່ງນີ້ແຕກຕ່າງຈາກຄຳວ່າ :term:`Import Package` " +"ເຊິ່ງໝາຍເຖິງໂມດູນທີ່ທ່ານ import ໃນໂຄ້ດ Python ຂອງທ່ານ." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:25 +msgid "" +"This guide has the prerequisite that you are using an official Python " +"version obtained from . If you are using " +"your operating system's package manager to install Python, please ensure " +"that Python is installed before proceeding with these steps." +msgstr "" +"ຄຳແນະນຳນີ້ມີເງື່ອນໄຂເບື້ອງຕົ້ນວ່າທ່ານກຳລັງໃຊ້ Python ເວີຊັນທາງການຈາກ . ຫາກທ່ານໃຊ້ຕົວຈັດການແພັກເກດຂອງ ລະບົບປະຕິບັດການເພື່ອຕິດຕັ້ງ " +"Python, ກະລຸນາກວດສອບໃຫ້ແນ່ໃຈວ່າ Python ຖືກຕິດຕັ້ງແລ້ວ ກ່ອນທີ່ຈະດຳເນີນການຕາມຂັ້ນຕອນເຫຼົ່ານີ້." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:32 +msgid "Create and Use Virtual Environments" +msgstr "ການສ້າງ ແລະ ນຳໃຊ້ Virtual Environments" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:35 +msgid "Create a new virtual environment" +msgstr "ສ້າງ virtual environment ໃໝ່" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:37 +msgid "" +":ref:`venv` (for Python 3) allows you to manage separate package " +"installations for different projects. It creates a \"virtual\" isolated " +"Python installation. When you switch projects, you can create a new virtual " +"environment which is isolated from other virtual environments. You benefit " +"from the virtual environment since packages can be installed confidently and " +"will not interfere with another project's environment." +msgstr "" +":ref:`venv` (ສຳລັບ Python 3) ຊ່ວຍໃຫ້ທ່ານຈັດການການຕິດຕັ້ງແພັກເກດແຍກກັນ ສຳລັບແຕ່ລະໂຄງການ. " +"ມັນຈະສ້າງການຕິດຕັ້ງ Python ແບບ \"ຈຳລອງ\" ທີ່ແຍກຕ່າງຫາກ. ເມື່ອທ່ານສະຫຼັບໂຄງການ, " +"ທ່ານສາມາດສ້າງ virtual environment ໃໝ່ທີ່ ແຍກອອກຈາກ virtual environment ອື່ນໆ. " +"ທ່ານຈະໄດ້ຮັບປະໂຫຍດຈາກ virtual environment ເນື່ອງຈາກສາມາດຕິດຕັ້ງແພັກເກດໄດ້ຢ່າງໝັ້ນໃຈ ແລະ " +"ມັນຈະບໍ່ໄປລົບກວນ ສະພາບແວດລ້ອມຂອງໂຄງການອື່ນ." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:45 +msgid "" +"It is recommended to use a virtual environment when working with third party " +"packages." +msgstr "" +"ຂໍແນະນຳໃຫ້ໃຊ້ virtual environment ເມື່ອເຮັດວຽກກັບແພັກເກດຈາກພາຍນອກ (third party)." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:48 +msgid "" +"To create a virtual environment, go to your project's directory and run the " +"following command. This will create a new virtual environment in a local " +"folder named ``.venv``:" +msgstr "" +"ເພື່ອສ້າງ virtual environment, ໃຫ້ໄປທີ່ໂຟນເດີໂຄງການຂອງທ່ານ ແລະ ຣັນ ຄຳສັ່ງຕໍ່ໄປນີ້. ສິ່ງນີ້ຈະສ້າງ " +"virtual environment ໃໝ່ໃນໂຟນເດີພາຍໃນ ທີ່ຊື່ວ່າ ``.venv``:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:64 +msgid "" +"The second argument is the location to create the virtual environment. " +"Generally, you can just create this in your project and call it ``.venv``." +msgstr "" +"ຄ່າທີສອງແມ່ນສະຖານທີ່ທີ່ຈະສ້າງ virtual environment. ໂດຍທົ່ວໄປແລ້ວ, " +"ທ່ານພຽງແຕ່ສ້າງມັນໄວ້ໃນໂຄງການຂອງທ່ານ ແລະ ຕັ້ງຊື່ວ່າ ``.venv``." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:67 +msgid "" +"``venv`` will create a virtual Python installation in the ``.venv`` folder." +msgstr "``venv`` ຈະສ້າງການຕິດຕັ້ງ Python ແບບຈຳລອງໄວ້ໃນໂຟນເດີ ``.venv``." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:69 +msgid "" +"You should exclude your virtual environment directory from your version " +"control system using ``.gitignore`` or similar." +msgstr "" +"ທ່ານຄວນຍົກເວັ້ນໂຟນເດີ virtual environment ຂອງທ່ານອອກຈາກລະບົບຄວບຄຸມເວີຊັນ (VCS) ໂດຍໃຊ້ " +"``.gitignore`` ຫຼື ສິ່ງທີ່ຄ້າຍຄືກັນ." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:74 +msgid "Activate a virtual environment" +msgstr "ເປີດໃຊ້ virtual environment" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:76 +msgid "" +"Before you can start installing or using packages in your virtual " +"environment you'll need to ``activate`` it. Activating a virtual environment " +"will put the virtual environment-specific ``python`` and ``pip`` executables " +"into your shell's ``PATH``." +msgstr "" +"ກ່ອນທີ່ທ່ານຈະເລີ່ມຕິດຕັ້ງ ຫຼື ໃຊ້ແພັກເກດໃນ virtual environment, ທ່ານ ຈຳເປັນຕ້ອງ ``activate`` " +"(ເປີດໃຊ້) ມັນກ່ອນ. ການເປີດໃຊ້ virtual environment ຈະນຳເອົາໄຟລ໌ຣັນ ``python`` ແລະ " +"``pip`` ສະເພາະຂອງ environment ນັ້ນ ເຂົ້າໄປໃນ ``PATH`` ຂອງ shell ຂອງທ່ານ." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:93 +msgid "" +"To confirm the virtual environment is activated, check the location of your " +"Python interpreter:" +msgstr "" +"ເພື່ອຢືນຢັນວ່າ virtual environment ຖືກເປີດໃຊ້ແລ້ວ, ໃຫ້ກວດສອບສະຖານທີ່ຂອງ Python " +"interpreter ຂອງທ່ານ:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:108 +msgid "" +"While the virtual environment is active, the above command will output a " +"filepath that includes the ``.venv`` directory, by ending with the following:" +msgstr "" +"ໃນຂະນະທີ່ virtual environment ກຳລັງເຮັດວຽກຢູ່, ຄຳສັ່ງຂ້າງເທິງຈະສະແດງ ເສັ້ນທາງໄຟລ໌ທີ່ມີໂຟນເດີ " +"``.venv`` ຢູ່ດ້ວຍ, ໂດຍຈະລົງທ້າຍດັ່ງນີ້:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:124 +msgid "" +"While a virtual environment is activated, pip will install packages into " +"that specific environment. This enables you to import and use packages in " +"your Python application." +msgstr "" +"ໃນຂະນະທີ່ virtual environment ຖືກເປີດໃຊ້, pip ຈະຕິດຕັ້ງແພັກເກດລົງໃນ environment " +"ນັ້ນໂດຍສະເພາະ. ສິ່ງນີ້ຊ່ວຍໃຫ້ທ່ານສາມາດ import ແລະ ໃຊ້ແພັກເກດ ໃນແອັບພລິເຄຊັນ Python " +"ຂອງທ່ານໄດ້." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:130 +msgid "Deactivate a virtual environment" +msgstr "ປິດການໃຊ້ virtual environment" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:132 +msgid "" +"If you want to switch projects or leave your virtual environment, " +"``deactivate`` the environment:" +msgstr "" +"ຫາກທ່ານຕ້ອງການສະຫຼັບໂຄງການ ຫຼື ອອກຈາກ virtual environment, ໃຫ້ ``deactivate`` " +"(ປິດການໃຊ້) environment ນັ້ນ:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:140 +msgid "" +"Closing your shell will deactivate the virtual environment. If you open a " +"new shell window and want to use the virtual environment, reactivate it." +msgstr "" +"ການປິດ shell ຈະເປັນການປິດການໃຊ້ virtual environment ໂດຍອັດຕະໂນມັດ. ຫາກທ່ານເປີດ ໜ້າຕ່າງ " +"shell ໃໝ່ ແລະ ຕ້ອງການໃຊ້ virtual environment, ໃຫ້ເປີດໃຊ້ມັນຄືນໃໝ່." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:145 +msgid "Reactivate a virtual environment" +msgstr "ເປີດໃຊ້ virtual environment ຄືນໃໝ່" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:147 +msgid "" +"If you want to reactivate an existing virtual environment, follow the same " +"instructions about activating a virtual environment. There's no need to " +"create a new virtual environment." +msgstr "" +"ຫາກທ່ານຕ້ອງການເປີດໃຊ້ virtual environment ທີ່ມີຢູ່ແລ້ວຄືນໃໝ່, ໃຫ້ປະຕິບັດຕາມ ຂັ້ນຕອນການເປີດໃຊ້ " +"virtual environment ແບບເກົ່າ. ບໍ່ຈຳເປັນຕ້ອງສ້າງ virtual environment ໃໝ່." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:155 +msgid "" +":ref:`pip` is the reference Python package manager. It's used to install and " +"update packages into a virtual environment." +msgstr "" +":ref:`pip` ແມ່ນຕົວຈັດການແພັກເກດມາດຕະຖານຂອງ Python. ມັນຖືກໃຊ້ເພື່ອຕິດຕັ້ງ ແລະ " +"ອັບເດດແພັກເກດລົງໃນ virtual environment." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:161 +msgid "" +"The Python installers for macOS include pip. On Linux, you may have to " +"install an additional package such as ``python3-pip``. You can make sure " +"that pip is up-to-date by running:" +msgstr "" +"ຕົວຕິດຕັ້ງ Python ສຳລັບ macOS ຈະລວມມີ pip ມາໃຫ້ແລ້ວ. ໃນ Linux, ທ່ານອາດຈະຕ້ອງ " +"ຕິດຕັ້ງແພັກເກດເພີ່ມເຕີມເຊັ່ນ ``python3-pip``. ທ່ານສາມາດກວດສອບໃຫ້ແນ່ໃຈ ວ່າ pip " +"ເປັນເວີຊັນຫຼ້າສຸດໄດ້ໂດຍຣັນຄຳສັ່ງ:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:170 +msgid "" +"Afterwards, you should have the latest version of pip installed in your user " +"site:" +msgstr "ຫຼັງຈາກນັ້ນ, ທ່ານຈະມີ pip ເວີຊັນຫຼ້າສຸດຖືກຕິດຕັ້ງຢູ່ໃນ user site ຂອງທ່ານ:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:179 +msgid "" +"The Python installers for Windows include pip. You can make sure that pip is " +"up-to-date by running:" +msgstr "" +"ຕົວຕິດຕັ້ງ Python ສຳລັບ Windows ຈະລວມມີ pip ມາໃຫ້ແລ້ວ. ທ່ານສາມາດກວດສອບໃຫ້ແນ່ໃຈ ວ່າ pip " +"ເປັນເວີຊັນຫຼ້າສຸດໄດ້ໂດຍຣັນຄຳສັ່ງ:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:187 +msgid "Afterwards, you should have the latest version of pip:" +msgstr "ຫຼັງຈາກນັ້ນ, ທ່ານຈະມີ pip ເວີຊັນຫຼ້າສຸດ:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:195 +msgid "Install packages using pip" +msgstr "ການຕິດຕັ້ງແພັກເກດໂດຍໃຊ້ pip" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:197 +msgid "" +"When your virtual environment is activated, you can install packages. Use " +"the ``pip install`` command to install packages." +msgstr "" +"ເມື່ອ virtual environment ຂອງທ່ານຖືກເປີດໃຊ້ແລ້ວ, ທ່ານສາມາດຕິດຕັ້ງແພັກເກດໄດ້. ໃຫ້ໃຊ້ຄຳສັ່ງ " +"``pip install`` ເພື່ອຕິດຕັ້ງແພັກເກດ." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:201 +msgid "Install a package" +msgstr "ຕິດຕັ້ງແພັກເກດ" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:203 +msgid "" +"For example, let's install the `Requests`_ library from the :term:`Python " +"Package Index (PyPI)`:" +msgstr "" +"ຕົວຢ່າງ, ລອງຕິດຕັ້ງໄລບຣາຣີ `Requests`_ ຈາກ :term:`Python Package Index (PyPI)`:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:218 +msgid "" +"pip should download requests and all of its dependencies and install them:" +msgstr "pip ຈະດາວໂຫຼດ requests ແລະ dependencies ທັງໝົດຂອງມັນ ແລ້ວຕິດຕັ້ງພວກມັນ:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:239 +msgid "Install a specific package version" +msgstr "ຕິດຕັ້ງແພັກເກດເວີຊັນທີ່ລະບຸ" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:241 +msgid "" +"pip allows you to specify which version of a package to install " +"using :term:`version specifiers `. For example, to " +"install a specific version of ``requests``:" +msgstr "" +"pip ຊ່ວຍໃຫ້ທ່ານລະບຸເວີຊັນຂອງແພັກເກດທີ່ຈະຕິດຕັ້ງໄດ້ ໂດຍໃຊ້ :term:`version specifiers " +"`. ຕົວຢ່າງ, ເພື່ອຕິດຕັ້ງ ``requests`` ເວີຊັນທີ່ລະບຸ:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:257 +msgid "To install the latest ``2.x`` release of requests:" +msgstr "ເພື່ອຕິດຕັ້ງ requests ເວີຊັນຫຼ້າສຸດໃນຕະກູນ ``2.x``:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:271 +msgid "To install pre-release versions of packages, use the ``--pre`` flag:" +msgstr "ເພື່ອຕິດຕັ້ງແພັກເກດເວີຊັນທົດລອງ (pre-release), ໃຫ້ໃຊ້ແຟລັກ ``--pre``:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:287 +msgid "Install extras" +msgstr "ຕິດຕັ້ງສ່ວນເສີມ (extras)" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:289 +msgid "" +"Some packages have optional `extras`_. You can tell pip to install these by " +"specifying the extra in brackets:" +msgstr "" +"ບາງແພັກເກດມີ `ສ່ວນເສີມ`_ ໃຫ້ເລືອກ. ທ່ານສາມາດບອກໃຫ້ pip ຕິດຕັ້ງສິ່ງເຫຼົ່ານີ້ໄດ້ " +"ໂດຍການລະບຸສ່ວນເສີມໃນວົງຂໍ:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:309 +msgid "Install a package from source" +msgstr "ຕິດຕັ້ງແພັກເກດຈາກ source" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:311 +msgid "" +"pip can install a package directly from its source code. For example, to " +"install the source code in the ``google-auth`` directory:" +msgstr "" +"pip ສາມາດຕິດຕັ້ງແພັກເກດໄດ້ໂດຍກົງຈາກ source code ຂອງມັນ. ຕົວຢ່າງ, ເພື່ອຕິດຕັ້ງ source code " +"ໃນໂຟນເດີ ``google-auth``:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:328 +msgid "" +"Additionally, pip can install packages from source in :doc:`development mode " +"`, meaning that changes to the source " +"directory will immediately affect the installed package without needing to " +"re-install:" +msgstr "" +"ນອກຈາກນັ້ນ, pip ຍັງສາມາດຕິດຕັ້ງແພັກເກດຈາກ source ໃນ :doc:`ໂໝດນັກພັດທະນາ " +"`, ເຊິ່ງໝາຍຄວາມວ່າການປ່ຽນແປງໃດໆໃນ ໂຟນເດີ " +"source ຈະມີຜົນກັບແພັກເກດທີ່ຕິດຕັ້ງແລ້ວທັນທີ ໂດຍບໍ່ຕ້ອງ ຕິດຕັ້ງໃໝ່:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:347 +msgid "Install from version control systems" +msgstr "ຕິດຕັ້ງຈາກລະບົບຄວບຄຸມເວີຊັນ (VCS)" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:349 +msgid "" +"pip can install packages directly from their version control system. For " +"example, you can install directly from a git repository:" +msgstr "" +"pip ສາມາດຕິດຕັ້ງແພັກເກດໄດ້ໂດຍກົງຈາກລະບົບຄວບຄຸມເວີຊັນ. ຕົວຢ່າງ, ທ່ານສາມາດຕິດຕັ້ງໂດຍກົງຈາກ git " +"repository:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:356 +msgid "" +"For more information on supported version control systems and syntax, see " +"pip's documentation on :ref:`VCS Support `." +msgstr "" +"ສຳລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບລະບົບຄວບຄຸມເວີຊັນທີ່ຮອງຮັບ ແລະ ໄວຍາກອນ, ເບິ່ງ ເອກະສານຂອງ pip " +"ໃນສ່ວນ :ref:`VCS Support `." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:361 +msgid "Install from local archives" +msgstr "ຕິດຕັ້ງຈາກໄຟລ໌ບີບອັດພາຍໃນເຄື່ອງ" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:363 +msgid "" +"If you have a local copy of a :term:`Distribution Package`'s archive (a zip, " +"wheel, or tar file) you can install it directly with pip:" +msgstr "" +"ຫາກທ່ານມີໄຟລ໌ບີບອັດຂອງ :term:`Distribution Package` ຢູ່ໃນເຄື່ອງ (ໄຟລ໌ zip, wheel, ຫຼື " +"tar) ທ່ານສາມາດຕິດຕັ້ງມັນໄດ້ໂດຍກົງດ້ວຍ pip:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:378 +msgid "" +"If you have a directory containing archives of multiple packages, you can " +"tell pip to look for packages there and not to use the :term:`Python Package " +"Index (PyPI)` at all:" +msgstr "" +"ຫາກທ່ານມີໂຟນເດີທີ່ບັນຈຸໄຟລ໌ບີບອັດຂອງຫຼາຍໆແພັກເກດ, ທ່ານສາມາດບອກໃຫ້ pip ໄປຊອກຫາແພັກເກດຢູ່ທີ່ນັ້ນ " +"ແລະ ບໍ່ໃຫ້ໃຊ້ :term:`Python Package Index (PyPI)` ເລີຍ:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:394 +msgid "" +"This is useful if you are installing packages on a system with limited " +"connectivity or if you want to strictly control the origin of distribution " +"packages." +msgstr "" +"ສິ່ງນີ້ມີປະໂຫຍດຫາກທ່ານກຳລັງຕິດຕັ້ງແພັກເກດໃນລະບົບທີ່ມີການເຊື່ອມຕໍ່ຈຳກັດ ຫຼື " +"ຫາກທ່ານຕ້ອງການຄວບຄຸມແຫຼ່ງທີ່ມາຂອງແພັກເກດຢ່າງເຂັ້ມງວດ." + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:400 +msgid "Install from other package indexes" +msgstr "ຕິດຕັ້ງຈາກ package indexes ອື່ນໆ" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:402 +msgid "" +"If you want to download packages from a different index than " +"the :term:`Python Package Index (PyPI)`, you can use the ``--index-url`` " +"flag:" +msgstr "" +"ຫາກທ່ານຕ້ອງການດາວໂຫຼດແພັກເກດຈາກ index ອື່ນທີ່ບໍ່ແມ່ນ :term:`Python Package Index " +"(PyPI)`, ທ່ານສາມາດໃຊ້ແຟລັກ ``--index-url``:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:417 +msgid "" +"If you want to allow packages from both the :term:`Python Package Index " +"(PyPI)` and a separate index, you can use the ``--extra-index-url`` flag " +"instead:" +msgstr "" +"ຫາກທ່ານຕ້ອງການອະນຸຍາດໃຫ້ຕິດຕັ້ງແພັກເກດໄດ້ຈາກທັງ :term:`Python Package Index (PyPI)` " +"ແລະ index ອື່ນ, ທ່ານສາມາດໃຊ້ແຟລັກ ``--extra-index-url`` ແທນ:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:434 +#: ../source/tutorials/installing-packages.rst:392 +msgid "Upgrading packages" +msgstr "ການອັບເກຣດແພັກເກດ" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:436 +msgid "" +"pip can upgrade packages in-place using the ``--upgrade`` flag. For example, " +"to install the latest version of ``requests`` and all of its dependencies:" +msgstr "" +"pip ສາມາດອັບເກຣດແພັກເກດໄດ້ໂດຍໃຊ້ແຟລັກ ``--upgrade``. ຕົວຢ່າງ, ເພື່ອຕິດຕັ້ງ ``requests`` " +"ເວີຊັນຫຼ້າສຸດ ພ້ອມກັບ dependencies ທັງໝົດຂອງມັນ:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:452 +msgid "Using a requirements file" +msgstr "ການໃຊ້ໄຟລ໌ requirements" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:454 +msgid "" +"Instead of installing packages individually, pip allows you to declare all " +"dependencies in a :ref:`Requirements File `. For " +"example you could create a :file:`requirements.txt` file containing:" +msgstr "" +"ແທນທີ່ຈະຕິດຕັ້ງແພັກເກດເທື່ອລະອັນ, pip ຊ່ວຍໃຫ້ທ່ານປະກາດ dependencies ທັງໝົດ " +"ໄວ້ໃນ :ref:`Requirements File `. ຕົວຢ່າງ ທ່ານສາມາດ " +"ສ້າງໄຟລ໌ :file:`requirements.txt` ທີ່ມີເນື້ອໃນດັ່ງນີ້:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:463 +msgid "" +"And tell pip to install all of the packages in this file using the ``-r`` " +"flag:" +msgstr "ແລະ ບອກໃຫ້ pip ຕິດຕັ້ງທຸກແພັກເກດທີ່ມີໃນໄຟລ໌ນີ້ ໂດຍໃຊ້ແຟລັກ ``-r``:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:478 +msgid "Freezing dependencies" +msgstr "ການເກັບລາຍຊື່ dependencies (Freezing)" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:480 +msgid "" +"Pip can export a list of all installed packages and their versions using the " +"``freeze`` command:" +msgstr "" +"Pip ສາມາດສົ່ງອອກລາຍຊື່ຂອງທຸກແພັກເກດທີ່ຕິດຕັ້ງແລ້ວ ພ້ອມກັບເວີຊັນຂອງພວກມັນ ໂດຍໃຊ້ຄຳສັ່ງ ``freeze``:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:495 +msgid "Which will output a list of package specifiers such as:" +msgstr "ເຊິ່ງຈະສະແດງລາຍຊື່ແພັກເກດອອກມາ ເຊັ່ນ:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:511 +msgid "" +"The ``pip freeze`` command is useful for creating :ref:`pip:Requirements " +"Files` that can re-create the exact versions of all packages installed in an " +"environment." +msgstr "" +"ຄຳສັ່ງ ``pip freeze`` ມີປະໂຫຍດໃນການສ້າງ :ref:`pip:Requirements Files` " +"ເພື່ອໃຫ້ສາມາດຈຳລອງເວີຊັນທີ່ແນ່ນອນຂອງທຸກແພັກເກດທີ່ຕິດຕັ້ງໃນ environment ນັ້ນ." + +#: ../source/guides/installing-using-virtualenv.rst:2 +msgid "Installing packages using virtualenv" +msgstr "ການຕິດຕັ້ງແພັກເກດໂດຍໃຊ້ virtualenv" + +#: ../source/guides/installing-using-virtualenv.rst:4 +msgid "" +"This guide discusses how to install packages using :ref:`pip` " +"and :ref:`virtualenv`, a tool to create isolated Python environments." +msgstr "" +"ຄຳແນະນຳນີ້ຈະເວົ້າເຖິງວິທີການຕິດຕັ້ງແພັກເກດໂດຍໃຊ້ :ref:`pip` ແລະ :ref:`virtualenv`, " +"ເຊິ່ງເປັນເຄື່ອງມືສ້າງ Python environments ແບບແຍກຕ່າງຫາກ." + +#: ../source/guides/installing-using-virtualenv.rst:8 +msgid "" +"This \"how to\" guide on installing packages and using :ref:`virtualenv` is " +"under development. Please refer to the :ref:`virtualenv` documentation for " +"details on installation and usage." +msgstr "" +"ຄຳແນະນຳ \"ວິທີການ\" ນີ້ກ່ຽວກັບການຕິດຕັ້ງແພັກເກດ ແລະ ການໃຊ້ :ref:`virtualenv` " +"ແມ່ນກຳລັງຢູ່ໃນຂັ້ນຕອນພັດທະນາ. ກະລຸນາເບິ່ງເອກະສານຂອງ :ref:`virtualenv` ສຳລັບ " +"ລາຍລະອຽດກ່ຽວກັບການຕິດຕັ້ງ ແລະ ການໃຊ້ງານ." + +#: ../source/guides/installing-using-virtualenv.rst:13 +msgid "" +"This doc uses the term **package** to refer to a :term:`Distribution " +"Package` which is different from an :term:`Import Package` that which is " +"used to import modules in your Python source code." +msgstr "" +"ເອກະສານນີ້ໃຊ້ຄຳວ່າ **ແພັກເກດ (package)** ເພື່ອໝາຍເຖິງ :term:`Distribution Package` " +"ເຊິ່ງແຕກຕ່າງຈາກ :term:`Import Package` ທີ່ໃຊ້ ເພື່ອ import ໂມດູນໃນໂຄ້ດ Python ຂອງທ່ານ." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:6 +msgid "Licensing examples and user scenarios" +msgstr "ຕົວຢ່າງລິຂະສິດ ແລະ ສະຖານະການຂອງຜູ້ໃຊ້" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:9 +msgid "" +":pep:`639` has specified the way to declare a :term:`Distribution Archive`'s " +"license and paths to license files and other legally required information. " +"This document aims to provide clear guidance how to migrate from the legacy " +"to the standardized way of declaring licenses. Make sure your preferred " +"build backend supports :pep:`639` before trying to apply the newer " +"guidelines." +msgstr "" +":pep:`639` ໄດ້ກຳນົດວິທີການປະກາດລິຂະສິດຂອງ :term:`Distribution Archive` ແລະ " +"ເສັ້ນທາງໄປຫາໄຟລ໌ລິຂະສິດ ລວມທັງຂໍ້ມູນອື່ນໆທີ່ກົດໝາຍກຳນົດ. " +"ເອກະສານນີ້ມີຈຸດປະສົງເພື່ອໃຫ້ຄຳແນະນຳທີ່ຊັດເຈນກ່ຽວກັບການຍ້າຍຈາກວິທີເກົ່າ " +"ໄປຫາວິທີມາດຕະຖານໃນການປະກາດລິຂະສິດ. ກວດສອບໃຫ້ແນ່ໃຈວ່າ build backend " +"ທີ່ທ່ານໃຊ້ຮອງຮັບ :pep:`639` ກ່ອນທີ່ຈະນຳໃຊ້ຄຳແນະນຳໃໝ່ນີ້." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:18 +msgid "Licensing Examples" +msgstr "ຕົວຢ່າງການກຳນົດລິຂະສິດ" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:23 +msgid "Basic example" +msgstr "ຕົວຢ່າງພື້ນຖານ" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "" +"The Setuptools project itself, as of `version 75.6.0 `__, " +"does not use the ``License`` field in its own project source metadata. " +"Further, it no longer explicitly specifies ``license_file``/" +"``license_files`` as it did previously, since Setuptools relies on its own " +"automatic inclusion of license-related files matching common patterns, such " +"as the :file:`LICENSE` file it uses." +msgstr "" +"ໂຄງການ Setuptools ເອງ, ນັບຕັ້ງແຕ່ `ເວີຊັນ 75.6.0 `__, ບໍ່ໄດ້ໃຊ້ຫ້ອງຂໍ້ມູນ " +"``License`` ໃນ metadata ຂອງໂຄງການເອງແລ້ວ. ນອກຈາກນັ້ນ, ມັນຍັງບໍ່ໄດ້ລະບຸ " +"``license_file``/``license_files`` ຢ່າງຊັດເຈນ ຄືກັບທີ່ເຄີຍເຮັດມາກ່ອນ, ເພາະວ່າ " +"Setuptools ຈະດຶງເອົາໄຟລ໌ທີ່ກ່ຽວຂ້ອງກັບ ລິຂະສິດທີ່ກົງກັບຮູບແບບທົ່ວໄປມາໃຫ້ໂດຍອັດຕະໂນມັດ, " +"ເຊັ່ນໄຟລ໌ :file:`LICENSE` ທີ່ມັນໃຊ້." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:32 +msgid "" +"It includes the following license-related metadata in " +"its :file:`pyproject.toml`:" +msgstr "ມັນລວມມີ metadata ທີ່ກ່ຽວຂ້ອງກັບລິຂະສິດຕໍ່ໄປນີ້ໃນໄຟລ໌ :file:`pyproject.toml`:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:42 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "ການຍ້າຍໄປໃຊ້ PEP 639 ທີ່ງ່າຍທີ່ສຸດແມ່ນການໃຊ້ສິ່ງນີ້ແທນ:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:49 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "ຫຼື, ຫາກໂຄງການໃຊ້ :file:`setup.cfg`, ໃນຕາຕະລາງ ``[metadata]``:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:56 +msgid "" +"The output Core Metadata for the :term:`Distribution Package` would then be:" +msgstr "Core Metadata ທີ່ໄດ້ສຳລັບ :term:`Distribution Package` ກໍ່ຈະເປັນ:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:63 +msgid "" +"The :file:`LICENSE` file would be stored at :file:`/setuptools-{VERSION}/" +"LICENSE` in the sdist and :file:`/setuptools-{VERSION}.dist-info/licenses/" +"LICENSE` in the wheel, and unpacked from there into the site directory " +"(e.g. :file:`site-packages/`) on installation; :file:`/` is the root of the " +"respective archive and ``{VERSION}`` the version of the Setuptools release " +"in the Core Metadata." +msgstr "" +"ໄຟລ໌ :file:`LICENSE` ຈະຖືກເກັບໄວ້ທີ່ :file:`/setuptools-{VERSION}/LICENSE` ໃນ " +"sdist ແລະ :file:`/setuptools-{VERSION}.dist-info/licenses/LICENSE` ໃນ wheel, " +"ແລະ ຈະຖືກແຕກອອກຈາກບ່ອນນັ້ນລົງໃນ site directory (ເຊັ່ນ :file:`site-packages/`) " +"ເມື່ອມີການຕິດຕັ້ງ; :file:`/` ແມ່ນ root ຂອງແຕ່ລະ ໄຟລ໌ບີບອັດ ແລະ ``{VERSION}`` ແມ່ນເວີຊັນຂອງ " +"Setuptools ທີ່ລະບຸໃນ Core Metadata." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:74 +msgid "Advanced example" +msgstr "ຕົວຢ່າງຂັ້ນສູງ" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:76 +msgid "" +"Suppose Setuptools were to include the licenses of the third-party projects " +"that are vendored in the :file:`setuptools/_vendor/` " +"and :file:`pkg_resources/_vendor/` directories; specifically:" +msgstr "" +"ສົມມຸດວ່າ Setuptools ຈະຕ້ອງລວມເອົາລິຂະສິດຂອງໂຄງການພາຍນອກ " +"ທີ່ຖືກລວມໄວ້ໃນໂຟນເດີ :file:`setuptools/_vendor/` ແລະ :file:`pkg_resources/_vendor/" +"`; ໂດຍສະເພາະແມ່ນ:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:87 +msgid "The appropriate license expressions are:" +msgstr "ຂໍ້ຄວາມລະບຸລິຂະສິດທີ່ເໝາະສົມແມ່ນ:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:96 +msgid "" +"A comprehensive license expression covering both Setuptools proper and its " +"vendored dependencies would contain these metadata, combining all the " +"license expressions into one. Such an expression might be:" +msgstr "" +"ຂໍ້ຄວາມລະບຸລິຂະສິດທີ່ຄອບຄຸມທັງ Setuptools ເອງ ແລະ dependencies ທີ່ຖືກລວມໄວ້ ຈະປະກອບດ້ວຍ " +"metadata ເຫຼົ່ານີ້, ໂດຍລວມເອົາທຸກລິຂະສິດເຂົ້າເປັນອັນດຽວ. ຂໍ້ຄວາມນັ້ນອາດຈະເປັນ:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:104 +msgid "" +"In addition, per the requirements of the licenses, the relevant license " +"files must be included in the package. Suppose the :file:`LICENSE` file " +"contains the text of the MIT license and the copyrights used by Setuptools, " +"``pyparsing``, ``more_itertools`` and ``ordered-set``; and " +"the :file:`LICENSE*` files in the :file:`setuptools/_vendor/packaging/` " +"directory contain the Apache 2.0 and 2-clause BSD license text, and the " +"Packaging copyright statement and `license choice notice " +"`__." +msgstr "" +"ນອກຈາກນັ້ນ, ຕາມຂໍ້ກຳນົດຂອງລິຂະສິດ, ໄຟລ໌ລິຂະສິດທີ່ກ່ຽວຂ້ອງ ຕ້ອງຖືກລວມໄວ້ໃນແພັກເກດນຳ. " +"ສົມມຸດວ່າໄຟລ໌ :file:`LICENSE` ປະກອບດ້ວຍເນື້ອໃນຂອງລິຂະສິດ MIT ແລະ ຂໍ້ມູນລິຂະສິດທີ່ໃຊ້ໂດຍ " +"Setuptools, ``pyparsing``, ``more_itertools`` ແລະ ``ordered-set``; ແລະ " +"ໄຟລ໌ :file:`LICENSE*` ໃນໂຟນເດີ :file:`setuptools/_vendor/packaging/` " +"ປະກອບດ້ວຍເນື້ອໃນລິຂະສິດ Apache 2.0 ແລະ BSD 2-clause, ລວມທັງຂໍ້ຄວາມລິຂະສິດຂອງ Packaging " +"ແລະ `ແຈ້ງການການເລືອກລິຂະສິດ `__." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:112 +msgid "" +"Specifically, we assume the license files are located at the following paths " +"in the project source tree (relative to the project root " +"and :file:`pyproject.toml`):" +msgstr "" +"ໂດຍສະເພາະ, ພວກເຮົາສົມມຸດວ່າໄຟລ໌ລິຂະສິດແມ່ນຕັ້ງຢູ່ຕາມເສັ້ນທາງຕໍ່ໄປນີ້ ໃນໂຄງສ້າງ source ຂອງໂຄງການ " +"(ທຽບກັບ root ຂອງໂຄງການ ແລະ :file:`pyproject.toml`):" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:123 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "ເມື່ອລວມທັງໝົດເຂົ້າກັນ, ໄຟລ໌ :file:`pyproject.toml` ຂອງພວກເຮົາຈະເປັນ:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:134 +msgid "" +"Or alternatively, the license files can be specified explicitly (paths will " +"be interpreted as glob patterns):" +msgstr "" +"ຫຼື ອີກທາງເລືອກໜຶ່ງ, ໄຟລ໌ລິຂະສິດສາມາດລະບຸໄດ້ຢ່າງຊັດເຈນ (ເສັ້ນທາງຈະຖືກຕີຄວາມໝາຍເປັນຮູບແບບ glob):" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:148 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "ຫາກໂຄງການຂອງພວກເຮົາໃຊ້ :file:`setup.cfg`, ພວກເຮົາສາມາດກຳນົດສິ່ງນີ້ໄດ້ໃນ:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:160 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "ບໍ່ວ່າຈະໃຊ້ວິທີໃດ, Core Metadata ທີ່ໄດ້ໃນ distribution ຈະເປັນ:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:171 +msgid "" +"In the resulting sdist, with :file:`/` as the root of the archive and " +"``{VERSION}`` the version of the Setuptools release specified in the Core " +"Metadata, the license files would be located at the paths:" +msgstr "" +"ໃນ sdist ທີ່ໄດ້, ໂດຍມີ :file:`/` ເປັນ root ແລະ ``{VERSION}`` ເປັນເວີຊັນຂອງ " +"Setuptools ທີ່ລະບຸໃນ Core Metadata, ໄຟລ໌ລິຂະສິດຈະຕັ້ງຢູ່ທີ່:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:182 +msgid "" +"In the built wheel, with :file:`/` being the root of the archive and " +"``{VERSION}`` as the previous, the license files would be stored at:" +msgstr "" +"ໃນ wheel ທີ່ບິວແລ້ວ, ໂດຍມີ :file:`/` ເປັນ root ແລະ ``{VERSION}`` ຄືກັບຂ້າງເທິງ, " +"ໄຟລ໌ລິຂະສິດຈະຖືກເກັບໄວ້ທີ່:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:192 +msgid "" +"Finally, in the installed project, with :file:`site-packages/` being the " +"site dir and ``{VERSION}`` as the previous, the license files would be " +"installed to:" +msgstr "" +"ສຸດທ້າຍ, ໃນໂຄງການທີ່ຕິດຕັ້ງແລ້ວ, ໂດຍມີ :file:`site-packages/` ເປັນ site dir ແລະ " +"``{VERSION}`` ຄືກັບຂ້າງເທິງ, ໄຟລ໌ລິຂະສິດຈະຖືກຕິດຕັ້ງລົງທີ່:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:204 +msgid "Expression examples" +msgstr "ຕົວຢ່າງຂໍ້ຄວາມລະບຸລິຂະສິດ" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:206 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "ຕົວຢ່າງເພີ່ມເຕີມຂອງຄ່າ ``License-Expression`` ທີ່ຖືກຕ້ອງ:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:221 +msgid "User Scenarios" +msgstr "ສະຖານະການຂອງຜູ້ໃຊ້" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:223 +msgid "" +"The following covers the range of common use cases from a user perspective, " +"providing guidance for each. Do note that the following should **not** be " +"considered legal advice, and readers should consult a licensed legal " +"practitioner in their jurisdiction if they are unsure about the specifics " +"for their situation." +msgstr "" +"ຂໍ້ມູນຕໍ່ໄປນີ້ຄອບຄຸມກໍລະນີການໃຊ້ງານທົ່ວໄປຈາກມຸມມອງຂອງຜູ້ໃຊ້, ພ້ອມທັງ ໃຫ້ຄຳແນະນຳໃນແຕ່ລະກໍລະນີ. " +"ຂໍໃຫ້ສັງເກດວ່າສິ່ງຕໍ່ໄປນີ້ **ບໍ່ແມ່ນ** ຄຳແນະນຳດ້ານກົດໝາຍ, ແລະ ຜູ້ອ່ານຄວນປຶກສາທີ່ປຶກສາດ້ານກົດໝາຍໃນ " +"ທ້ອງຖິ່ນຂອງທ່ານ ຫາກທ່ານບໍ່ໝັ້ນໃຈກ່ຽວກັບລາຍລະອຽດສະເພາະສຳລັບສະຖານະການຂອງທ່ານ." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:231 +msgid "I have a private package that won't be distributed" +msgstr "ຂ້ອຍມີແພັກເກດສ່ວນຕົວທີ່ຈະບໍ່ມີການແຈກຢາຍ" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:233 +msgid "" +"If your package isn't shared publicly, i.e. outside your company, " +"organization or household, it *usually* isn't strictly necessary to include " +"a formal license, so you wouldn't necessarily have to do anything extra here." +msgstr "" +"ຫາກແພັກເກດຂອງທ່ານບໍ່ໄດ້ຖືກແບ່ງປັນສູ່ສາທາລະນະ, ເຊັ່ນ ພາຍນອກບໍລິສັດ, ອົງກອນ ຫຼື ຄອບຄົວຂອງທ່ານ, ມັນ " +"*ປົກກະຕິ* ແລ້ວແມ່ນບໍ່ຈຳເປັນຕ້ອງ ລະບຸລິຂະສິດຢ່າງເປັນທາງການ, " +"ດັ່ງນັ້ນທ່ານຈຶ່ງບໍ່ຈຳເປັນຕ້ອງເຮັດຫຍັງເພີ່ມເຕີມໃນສ່ວນນີ້." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:237 +msgid "" +"However, it is still a good idea to include ``LicenseRef-Proprietary`` as a " +"license expression in your package configuration, and/or a copyright " +"statement and any legal notices in a :file:`LICENSE.txt` file in the root of " +"your project directory, which will be automatically included by packaging " +"tools." +msgstr "" +"ຢ່າງໃດກໍ່ຕາມ, ມັນຍັງເປັນການດີທີ່ຈະລະບຸ ``LicenseRef-Proprietary`` ເປັນ " +"ຂໍ້ຄວາມລິຂະສິດໃນການຕັ້ງຄ່າແພັກເກດຂອງທ່ານ, ແລະ/ຫຼື ລະບຸຂໍ້ຄວາມລິຂະສິດ ແລະ " +"ແຈ້ງການທາງກົດໝາຍຕ່າງໆໃນໄຟລ໌ :file:`LICENSE.txt` ທີ່ root ຂອງ ໂຟນເດີໂຄງການ, " +"ເຊິ່ງຈະຖືກລວມເຂົ້າໄປໂດຍເຄື່ອງມືເຮັດແພັກເກດແບບອັດຕະໂນມັດ." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:245 +msgid "I just want to share my own work without legal restrictions" +msgstr "ຂ້ອຍຢາກແບ່ງປັນຜົນງານຂອງຂ້ອຍໂດຍບໍ່ມີຂໍ້ຈຳກັດທາງກົດໝາຍ" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:247 +msgid "" +"While you aren't required to include a license, if you don't, no one has " +"`any permission to download, use or improve your work " +"`__, so that's probably the *opposite* of what you " +"actually want. The `MIT license `__ is a great choice " +"instead, as it's simple, widely used and allows anyone to do whatever they " +"want with your work (other than sue you, which you probably also don't want)." +msgstr "" +"ເຖິງແມ່ນວ່າທ່ານຈະບໍ່ໄດ້ຖືກບັງຄັບໃຫ້ລະບຸລິຂະສິດ, ແຕ່ຫາກທ່ານບໍ່ເຮັດ, ຈະບໍ່ມີໃຜ `ມີສິດໃນການດາວໂຫຼດ, ນຳໃຊ້ " +"ຫຼື ປັບປຸງຜົນງານຂອງທ່ານ `__, ເຊິ່ງນັ້ນອາດຈະເປັນສິ່ງທີ່ *ກົງກັນຂ້າມ* " +"ກັບສິ່ງທີ່ທ່ານຕ້ອງການແທ້ໆ. ດັ່ງນັ້ນ `ລິຂະສິດ MIT `__ " +"ຈຶ່ງເປັນທາງເລືອກທີ່ດີເລີດ, ເພາະມັນງ່າຍດາຍ, ຖືກໃຊ້ຢ່າງແຜ່ຫຼາຍ ແລະ " +"ອະນຸຍາດໃຫ້ໃຜກໍ່ຕາມເຮັດຫຍັງກໍ່ໄດ້ກັບຜົນງານຂອງທ່ານ (ຍົກເວັ້ນການຟ້ອງຮ້ອງທ່ານ, " +"ເຊິ່ງທ່ານເອງກໍ່ຄົງບໍ່ຕ້ອງການແບບນັ້ນ)." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:254 +msgid "" +"To apply it, just paste `the text `__ into a file " +"named :file:`LICENSE.txt` at the root of your repo, and add the year and " +"your name to the copyright line. Then, just add ``license = \"MIT\"`` under " +"``[project]`` in your :file:`pyproject.toml` if your packaging tool supports " +"it, or in its config file/section. You're done!" +msgstr "" +"ເພື່ອເລີ່ມໃຊ້ງານ, ພຽງແຕ່ວາງ `ຂໍ້ຄວາມ `__ " +"ລົງໃນໄຟລ໌ທີ່ຊື່ວ່າ :file:`LICENSE.txt` ທີ່ root ຂອງຄັງເກັບໂຄ້ດ, ແລະ ເພີ່ມປີພ້ອມກັບຊື່ຂອງທ່ານ " +"ໃນແຖວລິຂະສິດ. ຈາກນັ້ນ, ພຽງແຕ່ເພີ່ມ ``license = \"MIT\"`` ພາຍໃຕ້ ``[project]`` " +"ໃນໄຟລ໌ :file:`pyproject.toml` ຂອງທ່ານ (ຫາກເຄື່ອງມືເຮັດແພັກເກດຮອງຮັບ), ຫຼື " +"ໃນສ່ວນການຕັ້ງຄ່າຂອງມັນ. ເທົ່ານີ້ກໍ່ສຳເລັດແລ້ວ!" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:262 +msgid "I want to distribute my project under a specific license" +msgstr "ຂ້ອຍຕ້ອງການແຈກຢາຍໂຄງການຂອງຂ້ອຍພາຍໃຕ້ລິຂະສິດສະເພາະ" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:264 +msgid "" +"To use a particular license, simply paste its text into " +"a :file:`LICENSE.txt` file at the root of your repo, if you don't have it in " +"a file starting with :file:`LICENSE` or :file:`COPYING` already, and add " +"``license = \"LICENSE-ID\"`` under ``[project]`` in " +"your :file:`pyproject.toml` if your packaging tool supports it, or else in " +"its config file. You can find the ``LICENSE-ID`` and copyable license text " +"on sites like `ChooseALicense `__ or `SPDX " +"`__." +msgstr "" +"ເພື່ອໃຊ້ລິຂະສິດໃດໜຶ່ງ, ພຽງແຕ່ວາງເນື້ອໃນຂອງມັນລົງໃນໄຟລ໌ :file:`LICENSE.txt` ທີ່ root " +"ຂອງຄັງເກັບໂຄ້ດ (ຫາກຍັງບໍ່ມີໄຟລ໌ທີ່ຂຶ້ນຕົ້ນດ້ວຍ :file:`LICENSE` ຫຼື :file:`COPYING`), ແລະ ເພີ່ມ " +"``license = \"LICENSE-ID\"`` ພາຍໃຕ້ ``[project]`` ໃນ :file:`pyproject.toml` " +"(ຫາກເຄື່ອງມືເຮັດແພັກເກດຮອງຮັບ). ທ່ານສາມາດຊອກຫາ ``LICENSE-ID`` ແລະ " +"ເນື້ອໃນລິຂະສິດທີ່ສຳເນົາໄດ້ຈາກເວັບໄຊເຊັ່ນ `ChooseALicense `__ ຫຼື " +"`SPDX `__." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:273 +msgid "" +"Many popular code hosts, project templates and packaging tools can add the " +"license file for you, and may support the expression as well in the future." +msgstr "" +"ຜູ້ໃຫ້ບໍລິການຝາກໂຄ້ດຍອດນິຍົມ, ແບບແມ່ແບບໂຄງການ ແລະ ເຄື່ອງມືເຮັດແພັກເກດຫຼາຍຢ່າງ " +"ສາມາດເພີ່ມໄຟລ໌ລິຂະສິດໃຫ້ທ່ານໄດ້, ແລະ ອາດຈະຮອງຮັບການໃຊ້ຂໍ້ຄວາມລິຂະສິດ ໃນອະນາຄົດນຳ." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:278 +msgid "I maintain an existing package that's already licensed" +msgstr "ຂ້ອຍເບິ່ງແຍງແພັກເກດທີ່ມີຢູ່ແລ້ວ ແລະ ມີລິຂະສິດຢູ່ແລ້ວ" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:280 +msgid "" +"If you already have license files and metadata in your project, you should " +"only need to make a couple of tweaks to take advantage of the new " +"functionality." +msgstr "" +"ຫາກທ່ານມີໄຟລ໌ລິຂະສິດ ແລະ metadata ໃນໂຄງການຂອງທ່ານຢູ່ແລ້ວ, ທ່ານພຽງແຕ່ " +"ຕ້ອງປັບປ່ຽນເລັກນ້ອຍເພື່ອໃຊ້ປະໂຫຍດຈາກຟັງຊັນໃໝ່ນີ້." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:284 +msgid "" +"In your project config file, enter your license expression under ``license`` " +"(``[project]`` table in :file:`pyproject.toml`), or the equivalent for your " +"packaging tool, and make sure to remove any legacy ``license`` table subkeys " +"or ``License ::`` classifiers. Your existing ``license`` value may already " +"be valid as one (e.g. ``MIT``, ``Apache-2.0 OR BSD-2-Clause``, etc); " +"otherwise, check the `SPDX license list `__ for the identifier " +"that matches the license used." +msgstr "" +"ໃນໄຟລ໌ຕັ້ງຄ່າໂຄງການ, ໃຫ້ໃສ່ຂໍ້ຄວາມລິຂະສິດພາຍໃຕ້ ``license`` (ຕາຕະລາງ ``[project]`` " +"ໃນ :file:`pyproject.toml`), ແລະ ກວດສອບໃຫ້ແນ່ໃຈວ່າ ໄດ້ລຶບ subkeys ຂອງຕາຕະລາງ " +"``license`` ແບບເກົ່າ ຫຼື ``License ::`` classifiers ອອກ. ຄ່າ ``license`` " +"ທີ່ມີຢູ່ຂອງທ່ານອາດຈະຖືກຕ້ອງຢູ່ແລ້ວ (ເຊັ່ນ ``MIT``, ``Apache-2.0 OR BSD-2-Clause``, ແລະ " +"ອື່ນໆ); ຖ້າບໍ່ດັ່ງນັ້ນ, ໃຫ້ກວດສອບ `ລາຍຊື່ລິຂະສິດ SPDX `__ ເພື່ອຫາຊື່ທີ່ກົງກັບລິຂະສິດທີ່ໃຊ້." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:293 +msgid "" +"Make sure to list your license files under ``license-files`` under " +"``[project]`` in :file:`pyproject.toml` or else in your tool's configuration " +"file." +msgstr "" +"ກວດສອບໃຫ້ແນ່ໃຈວ່າໄດ້ລະບຸລາຍຊື່ໄຟລ໌ລິຂະສິດພາຍໃຕ້ ``license-files`` ພາຍໃຕ້ ``[project]`` " +"ໃນ :file:`pyproject.toml` ຫຼື ໃນໄຟລ໌ຕັ້ງຄ່າເຄື່ອງມືຂອງທ່ານ." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:297 +msgid "" +"See the :ref:`licensing-example-basic` for a simple but complete real-world " +"demo of how this works in practice. See also the best-effort guidance on how " +"to translate license classifiers into license expression provided by " +"the :pep:`639` authors: `Mapping License Classifiers to SPDX Identifiers " +"`__. Packaging tools may support automatically " +"converting legacy licensing metadata; check your tool's documentation for " +"more information." +msgstr "" +"ເບິ່ງ :ref:`licensing-example-basic` ສຳລັບການສາທິດທີ່ງ່າຍດາຍແຕ່ສົມບູນ " +"ກ່ຽວກັບວິທີການເຮັດວຽກຕົວຈິງ. ນອກຈາກນັ້ນ ຍັງສາມາດເບິ່ງຄຳແນະນຳໃນການ ປ່ຽນ license " +"classifiers ໃຫ້ເປັນ license expression ທີ່ຈັດທຳໂດຍຜູ້ຂຽນ :pep:`639`: `Mapping " +"License Classifiers to SPDX Identifiers `__. " +"ເຄື່ອງມືເຮັດແພັກເກດບາງຢ່າງອາດຈະຮອງຮັບການປ່ຽນ metadata ລິຂະສິດແບບເກົ່າ ໂດຍອັດຕະໂນມັດ; " +"ໃຫ້ກວດສອບເອກະສານຂອງເຄື່ອງມືຂອງທ່ານ ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:307 +msgid "My package includes other code under different licenses" +msgstr "ແພັກເກດຂອງຂ້ອຍລວມມີໂຄ້ດອື່ນພາຍໃຕ້ລິຂະສິດທີ່ແຕກຕ່າງກັນ" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:309 +msgid "" +"If your project includes code from others covered by different licenses, " +"such as vendored dependencies or files copied from other open source " +"software, you can construct a license expression to describe the licenses " +"involved and the relationship between them." +msgstr "" +"ຫາກໂຄງການຂອງທ່ານລວມມີໂໂຄ້ດຈາກບ່ອນອື່ນທີ່ຢູ່ພາຍໃຕ້ລິຂະສິດທີ່ຕ່າງກັນ, ເຊັ່ນ dependencies " +"ທີ່ຖືກລວມມາໃນຕົວ ຫຼື ໄຟລ໌ທີ່ສຳເນົາມາຈາກຊອບແວໂອເພນຊອດ ອື່ນໆ, " +"ທ່ານສາມາດສ້າງຂໍ້ຄວາມລິຂະສິດເພື່ອອະທິບາຍລິຂະສິດທີ່ກ່ຽວຂ້ອງ ແລະ ຄວາມສຳພັນລະຫວ່າງພວກມັນໄດ້." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:315 +msgid "" +"In short, ``License-1 AND License-2`` mean that *both* licenses apply (for " +"example, you included a file under another license), and ``License-1 OR " +"License-2`` means that *either* of the licenses can be used, at the user's " +"option (for example, you want to allow users a choice of multiple licenses). " +"You can use parenthesis (``()``) for grouping to form expressions that cover " +"even the most complex situations." +msgstr "" +"ສະຫຼຸບສັ້ນໆ, ``License-1 AND License-2`` ໝາຍຄວາມວ່າ *ທັງສອງ* ລິຂະສິດມີຜົນ ບັງຄັບໃຊ້ " +"(ຕົວຢ່າງ: ທ່ານລວມເອົາໄຟລ໌ທີ່ຢູ່ພາຍໃຕ້ລິຂະສິດອື່ນເຂົ້າມາ), ແລະ ``License-1 OR License-2`` " +"ໝາຍຄວາມວ່າ ສາມາດເລືອກໃຊ້ລິຂະສິດ *ໃດໜຶ່ງ* ກໍ່ໄດ້ (ຕົວຢ່າງ: " +"ທ່ານຕ້ອງການໃຫ້ຜູ້ໃຊ້ເລືອກລະຫວ່າງຫຼາຍລິຂະສິດ). ທ່ານສາມາດໃຊ້ ວົງເລັບ (``()``) " +"ເພື່ອຈັດກຸ່ມຂໍ້ຄວາມໃຫ້ຄອບຄຸມສະຖານະການທີ່ຊັບຊ້ອນໄດ້." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:322 +msgid "" +"In your project config file, enter your license expression under ``license`` " +"(``[project]`` table of :file:`pyproject.toml`), or the equivalent for your " +"packaging tool, and make sure to remove any legacy ``license`` table subkeys " +"or ``License ::`` classifiers." +msgstr "" +"ໃນໄຟລ໌ຕັ້ງຄ່າໂຄງການ, ໃຫ້ໃສ່ຂໍ້ຄວາມລິຂະສິດພາຍໃຕ້ ``license`` (ຕາຕະລາງ ``[project]`` " +"ຂອງ :file:`pyproject.toml`), ແລະ ກວດສອບໃຫ້ແນ່ໃຈວ່າ ໄດ້ລຶບ subkeys ຂອງຕາຕະລາງ " +"``license`` ແບບເກົ່າ ຫຼື ``License ::`` classifiers ອອກ." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:328 +msgid "" +"Also, make sure you add the full license text of all the licenses as files " +"somewhere in your project repository. List the relative path or glob " +"patterns to each of them under ``license-files`` under ``[project]`` " +"in :file:`pyproject.toml` (if your tool supports it), or else in your tool's " +"configuration file." +msgstr "" +"ນອກຈາກນັ້ນ, ກວດສອບໃຫ້ແນ່ໃຈວ່າທ່ານໄດ້ເພີ່ມເນື້ອໃນລິຂະສິດສະບັບເຕັມຂອງທຸກໆ " +"ລິຂະສິດເປັນໄຟລ໌ໄວ້ບ່ອນໃດບ່ອນໜຶ່ງໃນຄັງເກັບໂຄງການ. ລະບຸເສັ້ນທາງທີ່ກ່ຽວຂ້ອງ ຫຼື ຮູບແບບ glob " +"ໄປຫາແຕ່ລະໄຟລ໌ພາຍໃຕ້ ``license-files`` ພາຍໃຕ້ ``[project]`` " +"ໃນ :file:`pyproject.toml` (ຫາກເຄື່ອງມືຂອງທ່ານຮອງຮັບ)." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:334 +msgid "" +"As an example, if your project was licensed MIT but incorporated a vendored " +"dependency (say, ``packaging``) that was licensed under either Apache 2.0 or " +"the 2-clause BSD, your license expression would be ``MIT AND (Apache-2.0 OR " +"BSD-2-Clause)``. You might have a :file:`LICENSE.txt` in your repo root, and " +"a :file:`LICENSE-APACHE.txt` and :file:`LICENSE-BSD.txt` in " +"the :file:`_vendor/` subdirectory, so to include all of them, you'd specify " +"``[\"LICENSE.txt\", \"_vendor/packaging/LICENSE*\"]`` as glob patterns, or " +"``[\"LICENSE.txt\", \"_vendor/LICENSE-APACHE.txt\", \"_vendor/LICENSE-" +"BSD.txt\"]`` as literal file paths." +msgstr "" +"ຕົວຢ່າງ: ຫາກໂຄງການຂອງທ່ານໃຊ້ລິຂະສິດ MIT ແຕ່ລວມເອົາ dependency ພາຍໃນ (ສົມມຸດວ່າແມ່ນ " +"``packaging``) ທີ່ໃຊ້ລິຂະສິດ Apache 2.0 ຫຼື BSD 2-clause, ຂໍ້ຄວາມລິຂະສິດຂອງທ່ານກໍ່ຈະເປັນ " +"``MIT AND (Apache-2.0 OR BSD-2-Clause)``. ທ່ານອາດຈະມີໄຟລ໌ :file:`LICENSE.txt` " +"ໃນ root ຂອງຄັງເກັບໂຄ້ດ, ແລະ ມີ :file:`LICENSE-APACHE.txt` ພ້ອມກັບ :file:`LICENSE-" +"BSD.txt` ໃນໂຟນເດີຍ່ອຍ :file:`_vendor/`. ເພື່ອລວມເອົາທັງໝົດ, ທ່ານກໍ່ລະບຸ " +"``[\"LICENSE.txt\", \"_vendor/packaging/LICENSE*\"]`` ເປັນຮູບແບບ glob, ຫຼື " +"``[\"LICENSE.txt\", \"_vendor/LICENSE-APACHE.txt\", \"_vendor/LICENSE-" +"BSD.txt\"]`` ເປັນເສັ້ນທາງໄຟລ໌ໂດຍກົງ." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:345 +msgid "" +"See a fully worked out :ref:`licensing-example-advanced` for an end-to-end " +"application of this to a real-world complex project, with many technical " +"details, and consult a `tutorial `__ for more help and " +"examples using SPDX identifiers and expressions." +msgstr "" +"ເບິ່ງ :ref:`licensing-example-advanced` ສຳລັບການນຳໃຊ້ແບບຄົບວົງຈອນ " +"ກັບໂຄງການທີ່ມີຄວາມຊັບຊ້ອນໃນໂລກຕົວຈິງ, ພ້ອມກັບລາຍລະອຽດທາງເຕັກນິກ ແລະ ສາມາດເບິ່ງ `ບົດຮຽນ " +"`__ ສຳລັບຄວາມຊ່ວຍເຫຼືອເພີ່ມເຕີມ ແລະ ຕົວຢ່າງການໃຊ້ SPDX identifiers ແລະ " +"expressions." + +#: ../source/guides/making-a-pypi-friendly-readme.rst:2 +msgid "Making a PyPI-friendly README" +msgstr "ການສ້າງ README ໃຫ້ເໝາະສຳລັບ PyPI" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:4 +msgid "" +"README files can help your users understand your project and can be used to " +"set your project's description on PyPI. This guide helps you create a README " +"in a PyPI-friendly format and include your README in your package so it " +"appears on PyPI." +msgstr "" +"ໄຟລ໌ README ສາມາດຊ່ວຍໃຫ້ຜູ້ໃຊ້ເຂົ້າໃຈໂຄງການຂອງທ່ານ ແລະ ສາມາດໃຊ້ " +"ເພື່ອກຳນົດຄຳອະທິບາຍໂຄງການຂອງທ່ານໃນ PyPI. ຄຳແນະນຳນີ້ຈະຊ່ວຍໃຫ້ທ່ານ ສ້າງ README " +"ໃນຮູບແບບທີ່ເໝາະສຳລັບ PyPI ແລະ ລວມ README ເຂົ້າໃນແພັກເກດ ເພື່ອໃຫ້ມັນສະແດງຜົນໃນ PyPI." + +#: ../source/guides/making-a-pypi-friendly-readme.rst:9 +msgid "Creating a README file" +msgstr "ການສ້າງໄຟລ໌ README" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:11 +msgid "" +"README files for Python projects are often named ``README``, ``README.txt``, " +"``README.rst``, or ``README.md``." +msgstr "" +"ໄຟລ໌ README ສຳລັບໂຄງການ Python ມັກຈະຖືກຕັ້ງຊື່ວ່າ ``README``, ``README.txt``, " +"``README.rst``, ຫຼື ``README.md``." + +#: ../source/guides/making-a-pypi-friendly-readme.rst:13 +msgid "" +"For your README to display properly on PyPI, choose a markup language " +"supported by PyPI. Formats supported by `PyPI's README renderer `_ are:" +msgstr "" +"ເພື່ອໃຫ້ README ຂອງທ່ານສະແດງຜົນຢ່າງຖືກຕ້ອງໃນ PyPI, ໃຫ້ເລືອກພາສາ markup ທີ່ PyPI ຮອງຮັບ. " +"ຮູບແບບທີ່ຮອງຮັບໂດຍ `PyPI's README renderer `_ ແມ່ນ:" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:16 +msgid "plain text" +msgstr "ຂໍ້ຄວາມທຳມະດາ (plain text)" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:17 +msgid "" +"`reStructuredText `_ (without " +"Sphinx extensions)" +msgstr "" +"`reStructuredText `_ " +"(ໂດຍບໍ່ມີສ່ວນຂະຫຍາຍຂອງ Sphinx)" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:18 +msgid "" +"Markdown (`GitHub Flavored Markdown `_ by " +"default, or `CommonMark `_)" +msgstr "" +"Markdown (ເລີ່ມຕົ້ນແມ່ນ `GitHub Flavored Markdown `_, ຫຼື `CommonMark `_)" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:21 +msgid "" +"It's customary to save your README file in the root of your project, in the " +"same directory as your :file:`setup.py` file." +msgstr "" +"ໂດຍທົ່ວໄປແລ້ວ ຄວນບັນທຶກໄຟລ໌ README ໄວ້ທີ່ root ຂອງໂຄງການ, " +"ໃນໂຟນເດີດຽວກັນກັບໄຟລ໌ :file:`setup.py` ຂອງທ່ານ." + +#: ../source/guides/making-a-pypi-friendly-readme.rst:25 +msgid "Including your README in your package's metadata" +msgstr "ການລວມ README ເຂົ້າໃນ metadata ຂອງແພັກເກດ" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:27 +msgid "" +"To include your README's contents as your package description, set your " +"project's ``Description`` and ``Description-Content-Type`` metadata, " +"typically in your project's :file:`setup.py` file." +msgstr "" +"ເພື່ອລວມເອົາເນື້ອໃນຂອງ README ເປັນຄຳອະທິບາຍແພັກເກດ, ໃຫ້ກຳນົດ metadata ``Description`` " +"ແລະ ``Description-Content-Type`` ຂອງໂຄງການ, " +"ເຊິ່ງປົກກະຕິແລ້ວຈະຢູ່ໃນໄຟລ໌ :file:`setup.py`." + +#: ../source/guides/making-a-pypi-friendly-readme.rst:33 +msgid ":ref:`description-optional`" +msgstr ":ref:`description-optional`" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:34 +msgid ":ref:`description-content-type-optional`" +msgstr ":ref:`description-content-type-optional`" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:36 +msgid "" +"For example, to set these values in a package's :file:`setup.py` file, use " +"``setup()``'s ``long_description`` and ``long_description_content_type``." +msgstr "" +"ຕົວຢ່າງ: ເພື່ອກຳນົດຄ່າເຫຼົ່ານີ້ໃນໄຟລ໌ :file:`setup.py`, ໃຫ້ໃຊ້ ``long_description`` ແລະ " +"``long_description_content_type`` ໃນ ``setup()``." + +#: ../source/guides/making-a-pypi-friendly-readme.rst:39 +msgid "" +"Set the value of ``long_description`` to the contents (not the path) of the " +"README file itself. Set the ``long_description_content_type`` to an accepted " +"``Content-Type``-style value for your README file's markup, such as ``text/" +"plain``, ``text/x-rst`` (for reStructuredText), or ``text/markdown``." +msgstr "" +"ກຳນົດຄ່າຂອງ ``long_description`` ເປັນເນື້ອໃນ (ບໍ່ແມ່ນເສັ້ນທາງ) ຂອງໄຟລ໌ README. ກຳນົດ " +"``long_description_content_type`` ເປັນຄ່າ ``Content-Type`` ທີ່ຮອງຮັບສຳລັບພາສາ " +"markup ຂອງ README ຂອງທ່ານ, ເຊັ່ນ ``text/plain``, ``text/x-rst`` (ສຳລັບ " +"reStructuredText), ຫຼື ``text/markdown``." + +#: ../source/guides/making-a-pypi-friendly-readme.rst:45 +msgid "" +"If you're using GitHub-flavored Markdown to write a project's description, " +"ensure you upgrade the following tools:" +msgstr "" +"ຫາກທ່ານໃຊ້ GitHub-flavored Markdown ໃນການຂຽນຄຳອະທິບາຍໂຄງການ, " +"ກວດສອບໃຫ້ແນ່ໃຈວ່າໄດ້ອັບເກຣດເຄື່ອງມືຕໍ່ໄປນີ້:" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:60 +msgid "The minimum required versions of the respective tools are:" +msgstr "ເວີຊັນຂັ້ນຕ່ຳທີ່ຕ້ອງການຂອງແຕ່ລະເຄື່ອງມືແມ່ນ:" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:62 +msgid "``setuptools >= 38.6.0``" +msgstr "" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:63 +msgid "``wheel >= 0.31.0``" +msgstr "" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:64 +msgid "``twine >= 1.11.0``" +msgstr "" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:66 +msgid "" +"It's recommended that you use ``twine`` to upload the project's distribution " +"packages:" +msgstr "ຂໍແນະນຳໃຫ້ທ່ານໃຊ້ ``twine`` ໃນການອັບໂຫຼດ distribution packages ຂອງໂຄງການ:" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:72 +msgid "" +"For example, see this :file:`setup.py` file, which reads the contents " +"of :file:`README.md` as ``long_description`` and identifies the markup as " +"GitHub-flavored Markdown:" +msgstr "" +"ຕົວຢ່າງ: ເບິ່ງໄຟລ໌ :file:`setup.py` ນີ້, ເຊິ່ງຈະອ່ານເນື້ອໃນຂອງ :file:`README.md` ເປັນ " +"``long_description`` ແລະ ລະບຸຮູບແບບເປັນ GitHub-flavored Markdown:" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:94 +msgid "Validating reStructuredText markup" +msgstr "ການກວດສອບ reStructuredText markup" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:96 +msgid "" +"If your README is written in reStructuredText, any invalid markup will " +"prevent it from rendering, causing PyPI to instead just show the README's " +"raw source." +msgstr "" +"ຫາກ README ຂອງທ່ານຖືກຂຽນດ້ວຍ reStructuredText, markup ທີ່ບໍ່ຖືກຕ້ອງ " +"ຈະເຮັດໃຫ້ມັນບໍ່ສາມາດສະແດງຜົນໄດ້, ເຮັດໃຫ້ PyPI ສະແດງພຽງແຕ່ ໂຄ້ດຕົ້ນສະບັບ (raw source) ຂອງ " +"README ແທນ." + +#: ../source/guides/making-a-pypi-friendly-readme.rst:99 +msgid "" +"Note that Sphinx extensions used in docstrings, such as :doc:`directives " +"` and :doc:`roles ` (e.g., \"``:py:func:`getattr```\" or \"``:ref:`my-" +"reference-label```\"), are not allowed here and will result in error " +"messages like \"``Error: Unknown interpreted text role \"py:func\".``\"." +msgstr "" +"ສັງເກດວ່າສ່ວນຂະຫຍາຍຂອງ Sphinx ທີ່ໃຊ້ໃນ docstrings, ເຊັ່ນ :doc:`directives " +"` ແລະ :doc:`roles ` (ເຊັ່ນ: \"``:py:func:`getattr```\" ຫຼື \"``:ref:`my-" +"reference-label```\"), ແມ່ນບໍ່ໄດ້ຮັບອະນຸຍາດໃຫ້ໃຊ້ຢູ່ບ່ອນນີ້ ແລະ ຈະເຮັດໃຫ້ເກີດຂໍ້ຄວາມຜິດພາດ ເຊັ່ນ " +"\"``Error: Unknown interpreted text role \"py:func\".``\"." + +#: ../source/guides/making-a-pypi-friendly-readme.rst:104 +msgid "" +"You can check your README for markup errors before uploading as follows:" +msgstr "ທ່ານສາມາດກວດສອບຂໍ້ຜິດພາດຂອງ markup ໃນ README ກ່ອນການອັບໂຫຼດໄດ້ດັ່ງນີ້:" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:106 +msgid "" +"Install the latest version of `twine `_; " +"version 1.12.0 or higher is required:" +msgstr "" +"ຕິດຕັ້ງ `twine `_ ເວີຊັນຫຼ້າສຸດ; ຕ້ອງການເວີຊັນ 1.12.0 ຫຼື " +"ສູງກວ່າ:" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:121 +msgid "" +"Build the sdist and wheel for your project as described " +"under :ref:`Packaging Your Project`." +msgstr "" +"ບິວ sdist ແລະ wheel ສຳລັບໂຄງການຂອງທ່ານຕາມທີ່ໄດ້ອະທິບາຍໄວ້ໃນ :ref:`Packaging Your " +"Project`." + +#: ../source/guides/making-a-pypi-friendly-readme.rst:124 +msgid "Run ``twine check`` on the sdist and wheel:" +msgstr "ຣັນ ``twine check`` ກັບໄຟລ໌ sdist ແລະ wheel:" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:130 +msgid "" +"This command will report any problems rendering your README. If your markup " +"renders fine, the command will output ``Checking distribution FILENAME: " +"Passed``." +msgstr "" +"ຄຳສັ່ງນີ້ຈະລາຍງານທຸກບັນຫາໃນການສະແດງຜົນ README ຂອງທ່ານ. ຫາກ markup ສະແດງຜົນໄດ້ປົກກະຕິ, " +"ຄຳສັ່ງຈະສະແດງຂໍ້ຄວາມວ່າ ``Checking distribution FILENAME: Passed``." + +#: ../source/guides/migrating-to-pypi-org.rst:6 +msgid "Migrating to PyPI.org" +msgstr "ການຍ້າຍໄປໃຊ້ PyPI.org" + +#: ../source/guides/migrating-to-pypi-org.rst:8 +#: ../source/guides/multi-version-installs.rst:8 +#: ../source/guides/supporting-multiple-python-versions.rst:9 +#: ../source/guides/supporting-windows-using-appveyor.rst:7 +msgid "Obsolete" +msgstr "ຍົກເລີກການໃຊ້ແລ້ວ" + +#: ../source/guides/migrating-to-pypi-org.rst:10 +msgid "" +":term:`pypi.org` is the new, rewritten version of PyPI that has replaced the " +"legacy PyPI code base. It is the default version of PyPI that people are " +"expected to use. These are the tools and processes that people will need to " +"interact with ``PyPI.org``." +msgstr "" +":term:`pypi.org` ແມ່ນເວີຊັນໃໝ່ຂອງ PyPI ທີ່ຖືກຂຽນຂຶ້ນມາໃໝ່ເພື່ອແທນທີ່ ລະບົບ PyPI ແບບເກົ່າ. " +"ມັນແມ່ນເວີຊັນມາດຕະຖານທີ່ທຸກຄົນຄວນ ຈະໃຊ້ງານ. ນີ້ຄືເຄື່ອງມື ແລະ " +"ຂັ້ນຕອນຕ່າງໆທີ່ຈຳເປັນໃນການເຮັດວຽກຮ່ວມກັບ ``PyPI.org``." + +#: ../source/guides/migrating-to-pypi-org.rst:16 +msgid "Publishing releases" +msgstr "ການເຜີຍແຜ່ releases" + +#: ../source/guides/migrating-to-pypi-org.rst:18 +msgid "``pypi.org`` is the default upload platform as of September 2016." +msgstr "``pypi.org`` ເປັນແພລັດຟອມອັບໂຫຼດມາດຕະຖານຕັ້ງແຕ່ເດືອນກັນຍາ 2016." + +#: ../source/guides/migrating-to-pypi-org.rst:20 +msgid "" +"Uploads through ``pypi.python.org`` were *switched off* on **July 3, 2017**. " +"As of April 13th, 2018, ``pypi.org`` is the URL for PyPI." +msgstr "" +"ການອັບໂຫຼດຜ່ານ ``pypi.python.org`` ໄດ້ຖືກ *ປິດໃຊ້ງານ* ໃນວັນທີ **3 ກໍລະກົດ 2017**. " +"ນັບຕັ້ງແຕ່ວັນທີ 13 ເມສາ 2018, ``pypi.org`` ແມ່ນ URL ທາງການສຳລັບ PyPI." + +#: ../source/guides/migrating-to-pypi-org.rst:23 +msgid "" +"The recommended way to migrate to PyPI.org for uploading is to ensure that " +"you are using a new enough version of your upload tool." +msgstr "" +"ວິທີທີ່ແນະນຳໃນການຍ້າຍໄປໃຊ້ PyPI.org ສຳລັບການອັບໂຫຼດ ແມ່ນການກວດສອບໃຫ້ແນ່ໃຈ " +"ວ່າທ່ານກຳລັງໃຊ້ເຄື່ອງມືອັບໂຫຼດເວີຊັນໃໝ່ພຽງພໍ." + +#: ../source/guides/migrating-to-pypi-org.rst:26 +msgid "" +"The default upload settings switched to ``pypi.org`` in the following " +"versions:" +msgstr "ການຕັ້ງຄ່າການອັບໂຫຼດມາດຕະຖານໄດ້ປ່ຽນເປັນ ``pypi.org`` ໃນເວີຊັນຕໍ່ໄປນີ້:" + +#: ../source/guides/migrating-to-pypi-org.rst:28 +msgid "``twine`` 1.8.0" +msgstr "" + +#: ../source/guides/migrating-to-pypi-org.rst:29 +msgid "``setuptools`` 27.0.0" +msgstr "" + +#: ../source/guides/migrating-to-pypi-org.rst:30 +msgid "Python 2.7.13 (``distutils`` update)" +msgstr "Python 2.7.13 (ອັບເດດ ``distutils``)" + +#: ../source/guides/migrating-to-pypi-org.rst:31 +msgid "Python 3.4.6 (``distutils`` update)" +msgstr "Python 3.4.6 (ອັບເດດ ``distutils``)" + +#: ../source/guides/migrating-to-pypi-org.rst:32 +msgid "Python 3.5.3 (``distutils`` update)" +msgstr "Python 3.5.3 (ອັບເດດ ``distutils``)" + +#: ../source/guides/migrating-to-pypi-org.rst:33 +msgid "Python 3.6.0 (``distutils`` update)" +msgstr "Python 3.6.0 (ອັບເດດ ``distutils``)" + +#: ../source/guides/migrating-to-pypi-org.rst:35 +msgid "" +"In addition to ensuring you're on a new enough version of the tool for the " +"tool's default to have switched, you must also make sure that you have not " +"configured the tool to override its default upload URL. Typically this is " +"configured in a file located at :file:`$HOME/.pypirc`. If you see a file " +"like:" +msgstr "" +"ນອກຈາກການກວດສອບວ່າທ່ານໃຊ້ເຄື່ອງມືເວີຊັນໃໝ່ແລ້ວ, ທ່ານຍັງຕ້ອງກວດສອບ " +"ໃຫ້ແນ່ໃຈວ່າທ່ານບໍ່ໄດ້ຕັ້ງຄ່າເຄື່ອງມືໃຫ້ໄປຂຽນທັບ URL ການອັບໂຫຼດມາດຕະຖານ. " +"ໂດຍປົກກະຕິແລ້ວສິ່ງນີ້ຈະຖືກຕັ້ງຄ່າໃນໄຟລ໌ທີ່ :file:`$HOME/.pypirc`. ຫາກທ່ານເຫັນ ໄຟລ໌ທີ່ມີຂໍ້ຄວາມແບບນີ້:" + +#: ../source/guides/migrating-to-pypi-org.rst:52 +msgid "" +"Then simply delete the line starting with ``repository`` and you will use " +"your upload tool's default URL." +msgstr "" +"ໃຫ້ລຶບແຖວທີ່ຂຶ້ນຕົ້ນດ້ວຍ ``repository`` ອອກ ແລະ ທ່ານກໍ່ຈະໃຊ້ URL " +"ມາດຕະຖານຂອງເຄື່ອງມືອັບໂຫຼດຂອງທ່ານ." + +#: ../source/guides/migrating-to-pypi-org.rst:55 +msgid "" +"If for some reason you're unable to upgrade the version of your tool to a " +"version that defaults to using PyPI.org, then you may " +"edit :file:`$HOME/.pypirc` and include the ``repository:`` line, but use the " +"value ``https://upload.pypi.org/legacy/`` instead:" +msgstr "" +"ຫາກດ້ວຍເຫດຜົນໃດໜຶ່ງ ທ່ານບໍ່ສາມາດອັບເກຣດເວີຊັນຂອງເຄື່ອງມືໃຫ້ເປັນເວີຊັນ ທີ່ໃຊ້ PyPI.org " +"ເປັນຄ່າເລີ່ມຕົ້ນໄດ້, ທ່ານສາມາດແກ້ໄຂ :file:`$HOME/.pypirc` ແລະ ເພີ່ມແຖວ ``repository:`` " +"ໂດຍໃຊ້ຄ່າ ``https://upload.pypi.org/legacy/`` ແທນ:" + +#: ../source/guides/migrating-to-pypi-org.rst:71 +msgid "" +"(``legacy`` in this URL refers to the fact that this is the new server " +"implementation's emulation of the legacy server implementation's upload API.)" +msgstr "" +"(``legacy`` ໃນ URL ນີ້ໝາຍເຖິງຄວາມຈິງທີ່ວ່າ ນີ້ແມ່ນການຈຳລອງ API ການອັບໂຫຼດ ຂອງເຊີເວີແບບເກົ່າ " +"ໂດຍໃຊ້ລະບົບເຊີເວີໃໝ່.)" + +#: ../source/guides/migrating-to-pypi-org.rst:77 +msgid "Registering package names & metadata" +msgstr "ການລົງທະບຽນຊື່ແພັກເກດ ແລະ metadata" + +#: ../source/guides/migrating-to-pypi-org.rst:79 +msgid "" +"Explicit pre-registration of package names with the ``setup.py register`` " +"command prior to the first upload is no longer required, and is not " +"currently supported by the legacy upload API emulation on PyPI.org." +msgstr "" +"ການລົງທະບຽນຊື່ແພັກເກດລ່ວງໜ້າຢ່າງຊັດເຈນດ້ວຍຄຳສັ່ງ ``setup.py register`` " +"ກ່ອນການອັບໂຫຼດຄັ້ງທຳອິດແມ່ນບໍ່ຈຳເປັນອີກຕໍ່ໄປ, ແລະ ປັດຈຸບັນກໍ່ບໍ່ໄດ້ຮັບ ການຮອງຮັບໂດຍການຈຳລອງ API " +"ການອັບໂຫຼດແບບເກົ່າໃນ PyPI.org." + +#: ../source/guides/migrating-to-pypi-org.rst:83 +msgid "" +"As a result, attempting explicit registration after switching to using " +"PyPI.org for uploads will give the following error message::" +msgstr "" +"ດັ່ງນັ້ນ, ຫາກພະຍາຍາມລົງທະບຽນຢ່າງຊັດເຈນ ຫຼັງຈາກປ່ຽນໄປໃຊ້ PyPI.org ໃນການອັບໂຫຼດ " +"ຈະໄດ້ຮັບຂໍ້ຄວາມຜິດພາດດັ່ງນີ້::" + +#: ../source/guides/migrating-to-pypi-org.rst:88 +msgid "" +"The solution is to skip the registration step, and proceed directly to " +"uploading artifacts." +msgstr "ວິທີແກ້ໄຂແມ່ນໃຫ້ຂ້າມຂັ້ນຕອນການລົງທະບຽນ, ແລະ ດຳເນີນການອັບໂຫຼດ ໄຟລ໌ໂດຍກົງເລີຍ." + +#: ../source/guides/migrating-to-pypi-org.rst:93 +#: ../source/guides/using-testpypi.rst:5 +msgid "Using TestPyPI" +msgstr "ການໃຊ້ TestPyPI" + +#: ../source/guides/migrating-to-pypi-org.rst:95 +msgid "" +"Legacy TestPyPI (testpypi.python.org) is no longer available; use " +"`test.pypi.org `_ instead. If you use TestPyPI, you " +"must update your :file:`$HOME/.pypirc` to handle TestPyPI's new location, by " +"replacing ``https://testpypi.python.org/pypi`` with ``https://test.pypi.org/" +"legacy/``, for example:" +msgstr "" +"TestPyPI ແບບເກົ່າ (testpypi.python.org) ບໍ່ສາມາດໃຊ້ງານໄດ້ແລ້ວ; ໃຫ້ໃຊ້ `test.pypi.org " +"`_ ແທນ. ຫາກທ່ານໃຊ້ TestPyPI, ທ່ານ " +"ຕ້ອງອັບເດດ :file:`$HOME/.pypirc` ຂອງທ່ານເພື່ອໃຫ້ໃຊ້ສະຖານທີ່ໃໝ່ຂອງ TestPyPI, ໂດຍ ປ່ຽນ " +"``https://testpypi.python.org/pypi`` ເປັນ ``https://test.pypi.org/legacy/``, " +"ຕົວຢ່າງ:" + +#: ../source/guides/migrating-to-pypi-org.rst:117 +msgid "Registering new user accounts" +msgstr "ການລົງທະບຽນບັນຊີຜູ້ໃຊ້ໃໝ່" + +#: ../source/guides/migrating-to-pypi-org.rst:119 +msgid "" +"In order to help mitigate spam attacks against PyPI, new user registration " +"through ``pypi.python.org`` was *switched off* on **February 20, 2018**. New " +"user registrations at ``pypi.org`` are open." +msgstr "" +"ເພື່ອຊ່ວຍຫຼຸດຜ່ອນການໂຈມຕີແບບສະແປມ (spam) ຕໍ່ PyPI, ການລົງທະບຽນຜູ້ໃຊ້ໃໝ່ ຜ່ານ " +"``pypi.python.org`` ໄດ້ຖືກ *ປິດໃຊ້ງານ* ໃນວັນທີ **20 ກຸມພາ 2018**. " +"ການລົງທະບຽນຜູ້ໃຊ້ໃໝ່ແມ່ນເປີດໃຫ້ໃຊ້ງານທີ່ ``pypi.org``." + +#: ../source/guides/migrating-to-pypi-org.rst:125 +msgid "Browsing packages" +msgstr "ການເລືອກເບິ່ງແພັກເກດ" + +#: ../source/guides/migrating-to-pypi-org.rst:127 +msgid "" +"While ``pypi.python.org`` is may still be used in links from other PyPA " +"documentation, etc, the default interface for browsing packages is " +"``pypi.org``. The domain pypi.python.org now redirects to pypi.org, and may " +"be disabled sometime in the future." +msgstr "" +"ເຖິງວ່າ ``pypi.python.org`` ອາດຈະຍັງຖືກນຳໃຊ້ໃນລິ້ງຈາກເອກະສານອື່ນໆຂອງ PyPA ແລະ ອື່ນໆ, " +"ແຕ່ສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ມາດຕະຖານສຳລັບການເລືອກເບິ່ງແພັກເກດແມ່ນ ``pypi.org``. ໂດເມນ " +"pypi.python.org ໃນຕອນນີ້ຈະຖືກປ່ຽນເສັ້ນທາງໄປຫາ pypi.org, ແລະ " +"ອາດຈະຖືກປິດການນຳໃຊ້ໃນອະນາຄົດ." + +#: ../source/guides/migrating-to-pypi-org.rst:134 +msgid "Downloading packages" +msgstr "ການດາວໂຫຼດແພັກເກດ" + +#: ../source/guides/migrating-to-pypi-org.rst:136 +msgid "``pypi.org`` is the default host for downloading packages." +msgstr "``pypi.org`` ແມ່ນໂຮສມາດຕະຖານສຳລັບການດາວໂຫຼດແພັກເກດ." + +#: ../source/guides/migrating-to-pypi-org.rst:139 +msgid "Managing published packages and releases" +msgstr "ການຈັດການແພັກເກດ ແລະ ລຸ້ນທີ່ເຜີຍແຜ່ແລ້ວ" + +#: ../source/guides/migrating-to-pypi-org.rst:141 +msgid "" +"``pypi.org`` provides a fully functional interface for logged in users to " +"manage their published packages and releases." +msgstr "" +"``pypi.org`` ມີສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ທີ່ເຮັດວຽກໄດ້ຢ່າງເຕັມຮູບແບບສຳລັບຜູ້ໃຊ້ທີ່ເຂົ້າສູ່ລະບົບ ເພື່ອຈັດການແພັກເກດ " +"ແລະ ລຸ້ນທີ່ເຂົາເຈົ້າເຜີຍແຜ່." + +#: ../source/guides/modernize-setup-py-project.rst:6 +msgid "How to modernize a ``setup.py`` based project?" +msgstr "ວິທີປັບປຸງໂຄງການທີ່ອີງໃສ່ ``setup.py`` ໃຫ້ທັນສະໄໝ?" + +#: ../source/guides/modernize-setup-py-project.rst:10 +msgid "Should ``pyproject.toml`` be added?" +msgstr "ຄວນເພີ່ມ ``pyproject.toml`` ເຂົ້າໄປບໍ່?" + +#: ../source/guides/modernize-setup-py-project.rst:12 +msgid "" +"A :term:`pyproject.toml` file is strongly recommended. The presence of " +"a :file:`pyproject.toml` file itself does not bring much. [#]_ What is " +"actually strongly recommended is the ``[build-system]`` table " +"in :file:`pyproject.toml`." +msgstr "" +"ຂໍແນະນຳຢ່າງຍິ່ງໃຫ້ມີໄຟລ໌ :term:`pyproject.toml`. " +"ການມີພຽງແຕ່ໄຟລ໌ :file:`pyproject.toml` ເອງນັ້ນອາດຈະບໍ່ໄດ້ຊ່ວຍຫຍັງຫຼາຍ. [#]_ " +"ສິ່ງທີ່ແນະນຳຢ່າງຍິ່ງແທ້ໆແມ່ນຕາຕະລາງ ``[build-system]`` ໃນໄຟລ໌ :file:`pyproject.toml`." + +#: ../source/guides/modernize-setup-py-project.rst:16 +msgid "" +"Note that it has influence on the build isolation feature of pip, see below." +msgstr "" +"ໝາຍເຫດ ມັນມີຜົນຕໍ່ຄຸນສົມບັດການແຍກສ່ວນການສ້າງ (build isolation) ຂອງ pip, " +"ເບິ່ງລາຍລະອຽດດ້ານລຸ່ມ." + +#: ../source/guides/modernize-setup-py-project.rst:23 +msgid "" +"No, :file:`setup.py` can exist in a modern :ref:`setuptools` based project. " +"The :term:`setup.py` file is a valid configuration file for setuptools that " +"happens to be written in Python. However, the following commands are " +"deprecated and **MUST NOT** be run anymore, and their recommended " +"replacement commands should be used instead:" +msgstr "" +"ບໍ່, ໄຟລ໌ :file:`setup.py` ຍັງສາມາດມີຢູ່ໃນໂຄງການທີ່ອີງໃສ່ :ref:`setuptools` " +"ແບບທັນສະໄໝໄດ້. ໄຟລ໌ :term:`setup.py` ແມ່ນໄຟລ໌ການຕັ້ງຄ່າທີ່ຖືກຕ້ອງສຳລັບ setuptools " +"ທີ່ຂຽນດ້ວຍພາສາ Python. ເຖິງຢ່າງໃດກໍຕາມ, ຄຳສັ່ງຕໍ່ໄປນີ້ແມ່ນຖືກຍົກເລີກແລ້ວ ແລະ **ຫ້າມ** " +"ນຳໃຊ້ອີກຕໍ່ໄປ, ແລະ ຄວນໃຊ້ຄຳສັ່ງທົດແທນທີ່ແນະນຳແທນ:" + +#: ../source/guides/modernize-setup-py-project.rst:36 +msgid "``python -m build``" +msgstr "``python -m build``" + +#: ../source/guides/modernize-setup-py-project.rst:42 +#: ../source/guides/modernize-setup-py-project.rst:66 +#: ../source/guides/modernize-setup-py-project.rst:111 +#: ../source/guides/modernize-setup-py-project.rst:129 +#: ../source/guides/modernize-setup-py-project.rst:221 +msgid "For more details:" +msgstr "ສຳລັບລາຍລະອຽດເພີ່ມເຕີມ:" + +#: ../source/guides/modernize-setup-py-project.rst:44 +msgid ":ref:`setup-py-deprecated`" +msgstr ":ref:`setup-py-deprecated`" + +#: ../source/guides/modernize-setup-py-project.rst:48 +msgid "Where to start?" +msgstr "ເລີ່ມຕົ້ນຢູ່ໃສ?" + +#: ../source/guides/modernize-setup-py-project.rst:50 +msgid "" +"The :term:`project` must contain a :file:`pyproject.toml` file at the root " +"of its source tree that contains a ``[build-system]`` table like so:" +msgstr "" +"ໃນ :term:`ໂຄງການ (project)` ຈະຕ້ອງມີໄຟລ໌ :file:`pyproject.toml` " +"ຢູ່ທີ່ໂຟນເດີຫຼັກຂອງຊອສໂຄ້ດ ເຊິ່ງມີຕາຕະລາງ ``[build-system]`` ດັ່ງນີ້:" + +#: ../source/guides/modernize-setup-py-project.rst:60 +msgid "" +"This is the standardized method of letting :term:`build frontends ` know that :ref:`setuptools` is the :term:`build backend ` for this project." +msgstr "" +"ນີ້ແມ່ນວິທີມາດຕະຖານໃນການບອກໃຫ້ :term:`ຕົວສ້າງສ່ວນໜ້າ (build frontends)` " +"ຮູ້ວ່າ :ref:`setuptools` ແມ່ນ :term:`ຕົວສ້າງສ່ວນຫຼັງ (build backend)` ສຳລັບໂຄງການນີ້." + +#: ../source/guides/modernize-setup-py-project.rst:63 +msgid "" +"Note that the presence of a :file:`pyproject.toml` file (even if empty) " +"triggers :ref:`pip` to change its default behavior to use *build isolation*." +msgstr "" +"ໝາຍເຫດ ການມີໄຟລ໌ :file:`pyproject.toml` (ເຖິງແມ່ນວ່າຈະເປັນໄຟລ໌ເປົ່າ) " +"ຈະເຮັດໃຫ້ :ref:`pip` ປ່ຽນພຶດຕິກຳມາດຕະຖານໄປໃຊ້ *build isolation*." + +#: ../source/guides/modernize-setup-py-project.rst:68 +msgid ":ref:`distributing-packages`" +msgstr ":ref:`distributing-packages`" + +#: ../source/guides/modernize-setup-py-project.rst:69 +#: ../source/guides/modernize-setup-py-project.rst:113 +msgid ":ref:`pyproject-build-system-table`" +msgstr ":ref:`pyproject-build-system-table`" + +#: ../source/guides/modernize-setup-py-project.rst:70 +#: ../source/guides/modernize-setup-py-project.rst:131 +#: ../source/guides/modernize-setup-py-project.rst:247 +msgid ":doc:`pip:reference/build-system`" +msgstr ":doc:`pip:reference/build-system`" + +#: ../source/guides/modernize-setup-py-project.rst:74 +msgid "How to handle additional build-time dependencies?" +msgstr "ວິທີຈັດການກັບສ່ວນປະກອບທີ່ຈຳເປັນເພີ່ມເຕີມໃນເວລາສ້າງ (build-time dependencies)?" + +#: ../source/guides/modernize-setup-py-project.rst:76 +msgid "" +"On top of setuptools itself, if :file:`setup.py` depends on other third-" +"party libraries (outside of Python's standard library), those must be listed " +"in the ``requires`` list of the ``[build-system]`` table, so that the build " +"frontend knows to install them when building the :term:`distributions " +"`." +msgstr "" +"ນອກຈາກ setuptools ແລ້ວ, ຖ້າ :file:`setup.py` ອີງໃສ່ໄລບຣາຣີອື່ນໆ " +"(ທີ່ບໍ່ແມ່ນໄລບຣາຣີມາດຕະຖານຂອງ Python), ສິ່ງເຫຼົ່ານັ້ນຕ້ອງຖືກລະບຸໄວ້ໃນລາຍການ ``requires`` " +"ຂອງຕາຕະລາງ ``[build-system]`` " +"ເພື່ອໃຫ້ຕົວສ້າງສ່ວນໜ້າຮູ້ວ່າຕ້ອງຕິດຕັ້ງພວກມັນໃນເວລາສ້າງ :term:`ຊຸດແຈກຢາຍ (distributions)`." + +#: ../source/guides/modernize-setup-py-project.rst:82 +#: ../source/guides/modernize-setup-py-project.rst:139 +#: ../source/guides/modernize-setup-py-project.rst:174 +msgid "For example, a :file:`setup.py` file such as this:" +msgstr "ຕົວຢ່າງ, ໄຟລ໌ :file:`setup.py` ຄືດັ່ງນີ້:" + +#: ../source/guides/modernize-setup-py-project.rst:99 +msgid "" +"requires a :file:`pyproject.toml` file like this (:file:`setup.py` stays " +"unchanged):" +msgstr "ຕ້ອງການໄຟລ໌ :file:`pyproject.toml` ແບບນີ້ (ໂດຍທີ່ :file:`setup.py` ຍັງຄືເກົ່າ):" + +#: ../source/guides/modernize-setup-py-project.rst:117 +msgid "What is the build isolation feature?" +msgstr "ຄຸນສົມບັດ build isolation ແມ່ນຫຍັງ?" + +#: ../source/guides/modernize-setup-py-project.rst:119 +msgid "" +"Build frontends typically create an ephemeral virtual environment where they " +"install only the build dependencies (and their dependencies) that are listed " +"under ``build-system.requires`` and trigger the build in that environment." +msgstr "" +"ໂດຍທົ່ວໄປແລ້ວ ຕົວສ້າງສ່ວນໜ້າຈະສ້າງສະພາບແວດລ້ອມສະເໝືອນຊົ່ວຄາວ " +"ເພື່ອຕິດຕັ້ງສະເພາະສິ່ງທີ່ຈຳເປັນໃນການສ້າງທີ່ລະບຸໄວ້ພາຍໃຕ້ ``build-system.requires`` ແລະ " +"ເລີ່ມການສ້າງໃນສະພາບແວດລ້ອມນັ້ນ." + +#: ../source/guides/modernize-setup-py-project.rst:124 +msgid "" +"For some projects this isolation is unwanted and it can be deactivated as " +"follows:" +msgstr "ສຳລັບບາງໂຄງການ ການແຍກສ່ວນແບບນີ້ອາດບໍ່ເປັນທີ່ຕ້ອງການ ແລະ ສາມາດປິດການນຳໃຊ້ໄດ້ດັ່ງນີ້:" + +#: ../source/guides/modernize-setup-py-project.rst:126 +msgid "``python -m build --no-isolation``" +msgstr "``python -m build --no-isolation``" + +#: ../source/guides/modernize-setup-py-project.rst:127 +msgid "``python -m pip install --no-build-isolation``" +msgstr "``python -m pip install --no-build-isolation``" + +#: ../source/guides/modernize-setup-py-project.rst:135 +msgid "How to handle packaging metadata?" +msgstr "ວິທີຈັດການກັບຂໍ້ມູນກ່ຽວກັບແພັກເກດ (packaging metadata)?" + +#: ../source/guides/modernize-setup-py-project.rst:137 +msgid "" +"All static metadata can optionally be moved to a ``[project]`` table " +"in :file:`pyproject.toml`." +msgstr "" +"ຂໍ້ມູນເມຕາເດຕາແບບສະແຕຕິກ (static metadata) ທັງໝົດສາມາດຍ້າຍໄປໄວ້ໃນຕາຕະລາງ " +"``[project]`` ໃນໄຟລ໌ :file:`pyproject.toml` ໄດ້." + +#: ../source/guides/modernize-setup-py-project.rst:151 +msgid "can be entirely replaced by a :file:`pyproject.toml` file like this:" +msgstr "ສາມາດຖືກແທນທີ່ທັງໝົດດ້ວຍໄຟລ໌ :file:`pyproject.toml` ແບບນີ້:" + +#: ../source/guides/modernize-setup-py-project.rst:164 +msgid "" +"Read :ref:`pyproject-project-table` for the full specification of the " +"content allowed in the ``[project]`` table." +msgstr "" +"ອ່ານ :ref:`pyproject-project-table` " +"ສຳລັບລາຍລະອຽດທັງໝົດຂອງເນື້ອຫາທີ່ອະນຸຍາດໃຫ້ມີໃນຕາຕະລາງ ``[project]``." + +#: ../source/guides/modernize-setup-py-project.rst:169 +msgid "How to handle dynamic metadata?" +msgstr "ວິທີຈັດການກັບຂໍ້ມູນເມຕາເດຕາແບບໄດນາມິກ (dynamic metadata)?" + +#: ../source/guides/modernize-setup-py-project.rst:171 +msgid "" +"If some packaging metadata fields are not static they need to be listed as " +"``dynamic`` in this ``[project]`` table." +msgstr "" +"ຖ້າບາງຟີວຂອງຂໍ້ມູນເມຕາເດຕາບໍ່ແມ່ນແບບຄົງທີ່, ພວກມັນຈະຕ້ອງຖືກລະບຸເປັນ ``dynamic`` ໃນຕາຕະລາງ " +"``[project]`` ນີ້." + +#: ../source/guides/modernize-setup-py-project.rst:191 +msgid "can be modernized as follows:" +msgstr "ສາມາດປັບປຸງໃຫ້ທັນສະໄໝໄດ້ດັ່ງນີ້:" + +#: ../source/guides/modernize-setup-py-project.rst:223 +msgid ":ref:`declaring-project-metadata-dynamic`" +msgstr ":ref:`declaring-project-metadata-dynamic`" + +#: ../source/guides/modernize-setup-py-project.rst:227 +msgid "What if something that can not be changed expects a ``setup.py`` file?" +msgstr "ຈະເຮັດແນວໃດ ຖ້າຫາກມີບາງສິ່ງທີ່ປ່ຽນແປງບໍ່ໄດ້ຍັງຕ້ອງການໄຟລ໌ ``setup.py``?" + +#: ../source/guides/modernize-setup-py-project.rst:229 +msgid "" +"For example, a process exists that can not be changed easily and it needs to " +"execute a command such as ``python setup.py --name``." +msgstr "" +"ຕົວຢ່າງ, ມີຂະບວນການທີ່ປ່ຽນແປງບໍ່ໄດ້ງ່າຍ ແລະ ມັນຈຳເປັນຕ້ອງໃຊ້ຄຳສັ່ງເຊັ່ນ ``python setup.py --" +"name``." + +#: ../source/guides/modernize-setup-py-project.rst:232 +msgid "" +"It is perfectly fine to leave a :file:`setup.py` file in the project source " +"tree even after all its content has been moved to :file:`pyproject.toml`. " +"This file can be as minimalistic as this:" +msgstr "" +"ມັນບໍ່ເປັນຫຍັງເລີຍທີ່ຈະປະໄຟລ໌ :file:`setup.py` ໄວ້ໃນຊອສໂຄ້ດຂອງໂຄງການ " +"ເຖິງແມ່ນວ່າເນື້ອຫາທັງໝົດຈະຖືກຍ້າຍໄປທີ່ :file:`pyproject.toml` ແລ້ວກໍຕາມ. " +"ໄຟລ໌ນີ້ສາມາດມີເນື້ອຫາໜ້ອຍທີ່ສຸດດັ່ງນີ້:" + +#: ../source/guides/modernize-setup-py-project.rst:246 +msgid ":ref:`pyproject-toml-spec`" +msgstr ":ref:`pyproject-toml-spec`" + +#: ../source/guides/modernize-setup-py-project.rst:248 +msgid ":doc:`setuptools:build_meta`" +msgstr ":doc:`setuptools:build_meta`" + +#: ../source/guides/multi-version-installs.rst:6 +msgid "Multi-version installs" +msgstr "ການຕິດຕັ້ງຫຼາຍລຸ້ນພ້ອມກັນ" + +#: ../source/guides/multi-version-installs.rst:11 +msgid "" +"easy_install allows simultaneous installation of different versions of the " +"same project into a single environment shared by multiple programs which " +"must ``require`` the appropriate version of the project at run time (using " +"``pkg_resources``)." +msgstr "" +"easy_install " +"ອະນຸຍາດໃຫ້ຕິດຕັ້ງໂຄງການດຽວກັນຫຼາຍລຸ້ນພ້ອມກັນໃນສະພາບແວດລ້ອມດຽວທີ່ໃຊ້ຮ່ວມກັນໂດຍຫຼາຍໂປຣແກຣມ " +"ເຊິ່ງຈະຕ້ອງ ``require`` ລຸ້ນຂອງໂຄງການທີ່ເໝາະສົມໃນເວລາເຮັດວຽກ (ໂດຍໃຊ້ " +"``pkg_resources``)." + +#: ../source/guides/multi-version-installs.rst:16 +msgid "" +"For many use cases, virtual environments address this need without the " +"complication of the ``require`` directive. However, the advantage of " +"parallel installations within the same environment is that it works for an " +"environment shared by multiple applications, such as the system Python in a " +"Linux distribution." +msgstr "" +"ສຳລັບຫຼາຍໆກໍລະນີ, ສະພາບແວດລ້ອມສະເໝືອນ (virtual environments) " +"ສາມາດຕອບໂຈດຄວາມຕ້ອງການນີ້ໄດ້ໂດຍບໍ່ຕ້ອງໃຊ້ຄຳສັ່ງ ``require`` ທີ່ຊັບຊ້ອນ. ເຖິງຢ່າງໃດກໍຕາມ, " +"ຂໍ້ດີຂອງການຕິດຕັ້ງແບບຂະໜານໃນສະພາບແວດລ້ອມດຽວກັນແມ່ນ " +"ມັນສາມາດໃຊ້ໄດ້ກັບສະພາບແວດລ້ອມທີ່ໃຊ້ຮ່ວມກັນໂດຍຫຼາຍແອັບພລິເຄຊັນ ເຊັ່ນ Python ຂອງລະບົບໃນ Linux " +"distribution." + +#: ../source/guides/multi-version-installs.rst:22 +msgid "" +"The major limitation of ``pkg_resources`` based parallel installation is " +"that as soon as you import ``pkg_resources`` it locks in the *default* " +"version of everything which is already available on sys.path. This can cause " +"problems, since ``setuptools`` created command line scripts use " +"``pkg_resources`` to find the entry point to execute. This means that, for " +"example, you can't use ``require`` tests invoked through ``nose`` or a WSGI " +"application invoked through ``gunicorn`` if your application needs a non-" +"default version of anything that is available on the standard ``sys.path`` - " +"the script wrapper for the main application will lock in the version that is " +"available by default, so the subsequent ``require`` call in your own code " +"fails with a spurious version conflict." +msgstr "" +"ຂໍ້ຈຳກັດຫຼັກຂອງການຕິດຕັ້ງແບບຂະໜານທີ່ອີງໃສ່ ``pkg_resources`` ແມ່ນ ທັນທີທີ່ທ່ານ import " +"``pkg_resources`` ມັນຈະລັອກລຸ້ນ *ມາດຕະຖານ* ຂອງທຸກຢ່າງທີ່ມີຢູ່ໃນ sys.path. " +"ສິ່ງນີ້ອາດເຮັດໃຫ້ເກີດບັນຫາ ເພາະວ່າສະຄຣິບຄຳສັ່ງທີ່ສ້າງໂດຍ ``setuptools`` ໃຊ້ " +"``pkg_resources`` ເພື່ອຊອກຫາຈຸດເລີ່ມຕົ້ນ (entry point) ໃນການເຮັດວຽກ. ນີ້ໝາຍຄວາມວ່າ " +"ຕົວຢ່າງ ທ່ານບໍ່ສາມາດໃຊ້ການທົດສອບ ``require`` ທີ່ເອີ້ນຜ່ານ ``nose`` ຫຼື ແອັບພລິເຄຊັນ WSGI " +"ທີ່ເອີ້ນຜ່ານ ``gunicorn`` ໄດ້ ຫາກແອັບພລິເຄຊັນຂອງທ່ານຕ້ອງການລຸ້ນທີ່ບໍ່ແມ່ນມາດຕະຖານຂອງສິ່ງທີ່ມີຢູ່ໃນ " +"``sys.path`` ປົກກະຕິ." + +#: ../source/guides/multi-version-installs.rst:34 +msgid "" +"This can be worked around by setting all dependencies in " +"``__main__.__requires__`` before importing ``pkg_resources`` for the first " +"time, but that approach does mean that standard command line invocations of " +"the affected tools can't be used - it's necessary to write a custom wrapper " +"script or use ``python3 -c ''`` to invoke the application's main " +"entry point directly." +msgstr "" +"ບັນຫານີ້ສາມາດແກ້ໄຂໄດ້ໂດຍການຕັ້ງຄ່າ dependencies ທັງໝົດໃນ ``__main__.__requires__`` " +"ກ່ອນທີ່ຈະ import ``pkg_resources`` ເປັນຄັ້ງທຳອິດ, " +"ແຕ່ວິທີນັ້ນໝາຍຄວາມວ່າການເອີ້ນໃຊ້ເຄື່ອງມືທີ່ໄດ້ຮັບຜົນກະທົບຜ່ານຄຳສັ່ງມາດຕະຖານຈະບໍ່ສາມາດໃຊ້ໄດ້ - " +"ຈຳເປັນຕ້ອງຂຽນສະຄຣິບ wrapper ເອງ ຫຼື ໃຊ້ ``python3 -c ''`` " +"ເພື່ອເອີ້ນໃຊ້ຈຸດເລີ່ມຕົ້ນຂອງແອັບພລິເຄຊັນໂດຍກົງ." + +#: ../source/guides/packaging-binary-extensions.rst:5 +msgid "Packaging binary extensions" +msgstr "ການເຮັດແພັກເກດສ່ວນຂະຫຍາຍໄບນາຣີ (binary extensions)" + +#: ../source/guides/packaging-binary-extensions.rst:8 +msgid "2013-12-08" +msgstr "2013-12-08" + +#: ../source/guides/packaging-binary-extensions.rst:10 +msgid "" +"One of the features of the CPython reference interpreter is that, in " +"addition to allowing the execution of Python code, it also exposes a rich C " +"API for use by other software. One of the most common uses of this C API is " +"to create importable C extensions that allow things which aren't always easy " +"to achieve in pure Python code." +msgstr "" +"ໜຶ່ງໃນຄຸນສົມບັດຂອງຕົວແປພາສາ CPython ແມ່ນ ນອກຈາກຈະອະນຸຍາດໃຫ້ປະມວນຜົນໂຄ້ດ Python ແລ້ວ, " +"ມັນຍັງມີ C API ທີ່ຫຼາກຫຼາຍສຳລັບໃຫ້ຊອບແວອື່ນນຳໃຊ້. ການນຳໃຊ້ C API " +"ທີ່ພົບເລື້ອຍທີ່ສຸດແມ່ນການສ້າງສ່ວນຂະຫຍາຍ C (C extensions) ທີ່ສາມາດ import ໄດ້ " +"ເພື່ອເຮັດໃນສິ່ງທີ່ເຮັດໄດ້ຍາກໃນໂຄ້ດ Python ບໍລິສຸດ." + +#: ../source/guides/packaging-binary-extensions.rst:18 +msgid "An overview of binary extensions" +msgstr "ພາບລວມຂອງສ່ວນຂະຫຍາຍໄບນາຣີ" + +#: ../source/guides/packaging-binary-extensions.rst:21 +msgid "Use cases" +msgstr "ກໍລະນີການນຳໃຊ້" + +#: ../source/guides/packaging-binary-extensions.rst:23 +msgid "" +"The typical use cases for binary extensions break down into just three " +"conventional categories:" +msgstr "ກໍລະນີການນຳໃຊ້ທົ່ວໄປສຳລັບສ່ວນຂະຫຍາຍໄບນາຣີ ສາມາດແບ່ງອອກເປັນສາມປະເພດຫຼັກດັ່ງນີ້:" + +#: ../source/guides/packaging-binary-extensions.rst:26 +msgid "" +"**accelerator modules**: these modules are completely self-contained, and " +"are created solely to run faster than the equivalent pure Python code runs " +"in CPython. Ideally, accelerator modules will always have a pure Python " +"equivalent to use as a fallback if the accelerated version isn't available " +"on a given system. The CPython standard library makes extensive use of " +"accelerator modules. *Example*: When importing ``datetime``, Python falls " +"back to the `datetime.py `_ module if the C implementation ( `_datetimemodule.c `_) is not " +"available." +msgstr "" +"**ໂມດູນເລັ່ງຄວາມໄວ (accelerator modules)**: ໂມດູນເຫຼົ່ານີ້ເຮັດວຽກໄດ້ດ້ວຍຕົວເອງ ແລະ " +"ຖືກສ້າງຂຶ້ນເພື່ອໃຫ້ເຮັດວຽກໄດ້ໄວກວ່າໂຄ້ດ Python ບໍລິສຸດໃນ CPython. ໃນທາງທີ່ດີ, " +"ໂມດູນເລັ່ງຄວາມໄວຄວນມີໂຄ້ດ Python ບໍລິສຸດທີ່ເຮັດວຽກຄືກັນໄວ້ສຳຮອງ " +"ໃນກໍລະນີທີ່ລະບົບບໍໍ່ຮອງຮັບລຸ້ນທີ່ເລັ່ງຄວາມໄວ. ໄລບຣາຣີມາດຕະຖານຂອງ CPython " +"ມີການໃຊ້ໂມດູນເລັ່ງຄວາມໄວຢ່າງຫຼວງຫຼາຍ. *ຕົວຢ່າງ*: ເມື່ອ import ``datetime``, Python " +"ຈະກັບໄປໃຊ້ໂມດູນ `datetime.py` ຖ້າຫາກບໍ່ມີລຸ້ນທີ່ຂຽນດ້ວຍ C." + +#: ../source/guides/packaging-binary-extensions.rst:37 +msgid "" +"**wrapper modules**: these modules are created to expose existing C " +"interfaces to Python code. They may either expose the underlying C interface " +"directly, or else expose a more \"Pythonic\" API that makes use of Python " +"language features to make the API easier to use. The CPython standard " +"library makes extensive use of wrapper modules. *Example*: `functools.py " +"`_ is a Python " +"module wrapper for `_functoolsmodule.c `_." +msgstr "" +"**ໂມດູນຄຸມ (wrapper modules)**: ໂມດູນເຫຼົ່ານີ້ຖືກສ້າງຂຶ້ນເພື່ອເຊື່ອມຕໍ່ C interface ທີ່ມີຢູ່ແລ້ວໃຫ້ " +"Python ສາມາດໃຊ້ໄດ້. ພວກມັນອາດຈະເປີດໃຫ້ໃຊ້ C interface ໂດຍກົງ ຫຼື ສ້າງ API ທີ່ເປັນແບບ " +"\"Pythonic\" ຫຼາຍຂຶ້ນເພື່ອໃຫ້ໃຊ້ງານໄດ້ງ່າຍ." + +#: ../source/guides/packaging-binary-extensions.rst:45 +msgid "" +"**low-level system access**: these modules are created to access lower level " +"features of the CPython runtime, the operating system, or the underlying " +"hardware. Through platform specific code, extension modules may achieve " +"things that aren't possible in pure Python code. A number of CPython " +"standard library modules are written in C in order to access interpreter " +"internals that aren't exposed at the language level. *Example*: ``sys``, " +"which comes from `sysmodule.c `_." +msgstr "" +"**ການເຂົ້າເຖິງລະບົບລະດັບຕ່ຳ (low-level system access)**: " +"ໂມດູນເຫຼົ່ານີ້ສ້າງຂຶ້ນເພື່ອເຂົ້າເຖິງຄຸນສົມບັດລະດັບຕ່ຳຂອງ CPython runtime, ລະບົບປະຕິບັດການ ຫຼື ຮາດແວ. " +"ໂມດູນສ່ວນຂະຫຍາຍສາມາດເຮັດສິ່ງທີ່ Python ບໍລິສຸດເຮັດບໍ່ໄດ້. ຫຼາຍໂມດູນໃນໄລບຣາຣີມາດຕະຖານຖືກຂຽນດ້ວຍ " +"C ເພື່ອເຂົ້າເຖິງພາຍໃນຂອງ interpreter. *ຕົວຢ່າງ*: ``sys``." + +#: ../source/guides/packaging-binary-extensions.rst:54 +msgid "" +"One particularly notable feature of C extensions is that, when they don't " +"need to call back into the interpreter runtime, they can release CPython's " +"global interpreter lock around long-running operations (regardless of " +"whether those operations are CPU or IO bound)." +msgstr "" +"ຄຸນສົມບັດທີ່ໂດດເດັ່ນຂອງສ່ວນຂະຫຍາຍ C ແມ່ນ ເມື່ອພວກມັນບໍ່ຈຳເປັນຕ້ອງຮຽກໃຊ້ interpreter runtime, " +"ພວກມັນສາມາດປ່ອຍ global interpreter lock (GIL) ຂອງ CPython " +"ໄດ້ໃນລະຫວ່າງການເຮັດວຽກທີ່ໃຊ້ເວລາດົນ." + +#: ../source/guides/packaging-binary-extensions.rst:59 +msgid "" +"Not all extension modules will fit neatly into the above categories. The " +"extension modules included with NumPy, for example, span all three use cases " +"- they move inner loops to C for speed reasons, wrap external libraries " +"written in C, FORTRAN and other languages, and use low level system " +"interfaces for both CPython and the underlying operation system to support " +"concurrent execution of vectorised operations and to tightly control the " +"exact memory layout of created objects." +msgstr "" +"ບໍ່ແມ່ນທຸກໂມດູນສ່ວນຂະຫຍາຍຈະຈັດຢູ່ໃນປະເພດຂ້າງເທິງໄດ້ຢ່າງຊັດເຈນ. ຕົວຢ່າງ ໂມດູນສ່ວນຂະຫຍາຍໃນ NumPy " +"ແມ່ນລວມເອົາທັງສາມກໍລະນີການນຳໃຊ້." + +#: ../source/guides/packaging-binary-extensions.rst:69 +msgid "Disadvantages" +msgstr "ຂໍ້ເສຍ" + +#: ../source/guides/packaging-binary-extensions.rst:71 +msgid "" +"The main disadvantage of using binary extensions is the fact that it makes " +"subsequent distribution of the software more difficult. One of the " +"advantages of using Python is that it is largely cross platform, and the " +"languages used to write extension modules (typically C or C++, but really " +"any language that can bind to the CPython C API) typically require that " +"custom binaries be created for different platforms." +msgstr "" +"ຂໍ້ເສຍຫຼັກຂອງການໃຊ້ສ່ວນຂະຫຍາຍໄບນາຣີແມ່ນ ມັນເຮັດໃຫ້ການແຈກຢາຍຊອບແວໃນພາຍຫຼັງເຮັດໄດ້ຍາກຂຶ້ນ. " +"ຂໍ້ດີຂອງ Python ແມ່ນການເຮັດວຽກໄດ້ຂ້າມແພລັດຟອມ (cross platform), " +"ແຕ່ສ່ວນຂະຫຍາຍໄບນາຣີຈຳເປັນຕ້ອງຖືກສ້າງ (build) ແຍກກັນສຳລັບແຕ່ລະແພລັດຟອມ." + +#: ../source/guides/packaging-binary-extensions.rst:78 +msgid "This means that binary extensions:" +msgstr "ນີ້ໝາຍຄວາມວ່າ ສ່ວນຂະຫຍາຍໄບນາຣີ:" + +#: ../source/guides/packaging-binary-extensions.rst:80 +msgid "" +"require that end users be able to either build them from source, or else " +"that someone publish pre-built binaries for common platforms" +msgstr "" +"ຕ້ອງການໃຫ້ຜູ້ໃຊ້ປາຍທາງສາມາດສ້າງພວກມັນຈາກຊອສໂຄ້ດໄດ້ ຫຼື " +"ຕ້ອງມີຄົນເຜີຍແຜ່ໄບນາຣີທີ່ສ້າງສຳເລັດຮູບແລ້ວສຳລັບແພລັດຟອມຕ່າງໆ" + +#: ../source/guides/packaging-binary-extensions.rst:83 +msgid "" +"may not be compatible with different builds of the CPython reference " +"interpreter" +msgstr "ອາດຈະບໍ່ເຂົ້າກັນໄດ້ກັບ CPython interpreter ລຸ້ນທີ່ສ້າງຂຶ້ນມາຕ່າງກັນ" + +#: ../source/guides/packaging-binary-extensions.rst:86 +msgid "" +"often will not work correctly with alternative interpreters such as PyPy, " +"IronPython or Jython" +msgstr "ມັກຈະເຮັດວຽກບໍ່ຖືກຕ້ອງກັບ interpreter ອື່ນໆ ເຊັ່ນ PyPy, IronPython ຫຼື Jython" + +#: ../source/guides/packaging-binary-extensions.rst:89 +msgid "" +"if handcoded, make maintenance more difficult by requiring that maintainers " +"be familiar not only with Python, but also with the language used to create " +"the binary extension, as well as with the details of the CPython C API." +msgstr "" +"ຖ້າຂຽນດ້ວຍມືເອງ, ຈະເຮັດໃຫ້ການບຳລຸງຮັກສາຍາກຂຶ້ນ ເພາະຜູ້ບຳລຸງຮັກສາຕ້ອງຮູ້ທັງ Python ແລະ " +"ພາສາທີ່ໃຊ້ສ້າງສ່ວນຂະຫຍາຍນັ້ນ, ລວມເຖິງລາຍລະອຽດຂອງ CPython C API." + +#: ../source/guides/packaging-binary-extensions.rst:94 +msgid "" +"if a pure Python fallback implementation is provided, make maintenance more " +"difficult by requiring that changes be implemented in two places, and " +"introducing additional complexity in the test suite to ensure both versions " +"are always executed." +msgstr "" +"ຖ້າມີການຂຽນ Python ບໍລິສຸດໄວ້ສຳຮອງ, ຈະເຮັດໃຫ້ການບຳລຸງຮັກສາຍາກຂຶ້ນ " +"ເພາະຕ້ອງມີການປ່ຽນແປງສອງບ່ອນ ແລະ ເຮັດໃຫ້ການທົດສອບມີຄວາມຊັບຊ້ອນຫຼາຍຂຶ້ນ." + +#: ../source/guides/packaging-binary-extensions.rst:99 +msgid "" +"Another disadvantage of relying on binary extensions is that alternative " +"import mechanisms (such as the ability to import modules directly from " +"zipfiles) often won't work for extension modules (as the dynamic loading " +"mechanisms on most platforms can only load libraries from disk)." +msgstr "" +"ຂໍ້ເສຍອີກຢ່າງໜຶ່ງແມ່ນ ກົນໄກການ import ທາງເລືອກອື່ນ (ເຊັ່ນການ import ຈາກໄຟລ໌ zip ໂດຍກົງ) " +"ມັກຈະໃຊ້ບໍ່ໄດ້ກັບໂມດູນສ່ວນຂະຫຍາຍ." + +#: ../source/guides/packaging-binary-extensions.rst:106 +msgid "Alternatives to handcoded accelerator modules" +msgstr "ທາງເລືອກອື່ນແທນການຂຽນໂມດູນເລັ່ງຄວາມໄວດ້ວຍມື" + +#: ../source/guides/packaging-binary-extensions.rst:108 +msgid "" +"When extension modules are just being used to make code run faster (after " +"profiling has identified the code where the speed increase is worth " +"additional maintenance effort), a number of other alternatives should also " +"be considered:" +msgstr "ເມື່ອໂມດູນສ່ວນຂະຫຍາຍຖືກໃຊ້ພຽງເພື່ອໃຫ້ໂຄ້ດເຮັດວຽກໄວຂຶ້ນ, ຄວນພິຈາລະນາທາງເລືອກອື່ນໆດັ່ງນີ້:" + +#: ../source/guides/packaging-binary-extensions.rst:113 +msgid "" +"look for existing optimised alternatives. The CPython standard library " +"includes a number of optimised data structures and algorithms (especially in " +"the builtins and the ``collections`` and ``itertools`` modules). The Python " +"Package Index also offers additional alternatives. Sometimes, the " +"appropriate choice of standard library or third party module can avoid the " +"need to create your own accelerator module." +msgstr "" +"ຊອກຫາທາງເລືອກທີ່ຖືກປັບແຕ່ງມາແລ້ວ. ໄລບຣາຣີມາດຕະຖານຂອງ CPython ມີໂຄງສ້າງຂໍ້ມູນ ແລະ " +"ອັນກໍຣິທຶມທີ່ຖືກປັບແຕ່ງມາຢ່າງດີແລ້ວ. " +"ບາງຄັ້ງການເລືອກໃຊ້ສິ່ງທີ່ມີຢູ່ແລ້ວອາດຊ່ວຍໃຫ້ບໍ່ຕ້ອງສ້າງໂມດູນເລັ່ງຄວາມໄວເອງ." + +#: ../source/guides/packaging-binary-extensions.rst:120 +msgid "" +"for long running applications, the JIT compiled `PyPy interpreter `__ may offer a suitable alternative to the standard CPython " +"runtime. The main barrier to adopting PyPy is typically reliance on other " +"binary extension modules - while PyPy does emulate the CPython C API, " +"modules that rely on that cause problems for the PyPy JIT, and the emulation " +"layer can often expose latent defects in extension modules that CPython " +"currently tolerates (frequently around reference counting errors - an object " +"having one live reference instead of two often won't break anything, but no " +"references instead of one is a major problem)." +msgstr "" +"ສຳລັບແອັບພລິເຄຊັນທີ່ເຮັດວຽກດົນໆ, PyPy interpreter ອາດເປັນທາງເລືອກທີ່ດີກວ່າ CPython " +"ມາດຕະຖານ." + +#: ../source/guides/packaging-binary-extensions.rst:130 +msgid "" +"`Cython `__ is a mature static compiler that can " +"compile most Python code to C extension modules. The initial compilation " +"provides some speed increases (by bypassing the CPython interpreter layer), " +"and Cython's optional static typing features can offer additional " +"opportunities for speed increases. Using Cython still carries the " +"`disadvantages`_ associated with using binary extensions, but has the " +"benefit of having a reduced barrier to entry for Python programmers " +"(relative to other languages like C or C++)." +msgstr "" +"`Cython` ແມ່ນຄອມໄພເລີ (compiler) ທີ່ສາມາດແປງໂຄ້ດ Python ສ່ວນໃຫຍ່ໃຫ້ເປັນໂມດູນສ່ວນຂະຫຍາຍ " +"C ໄດ້." + +#: ../source/guides/packaging-binary-extensions.rst:139 +msgid "" +"`Numba `__ is a newer tool, created by members of " +"the scientific Python community, that aims to leverage LLVM to allow " +"selective compilation of pieces of a Python application to native machine " +"code at runtime. It requires that LLVM be available on the system where the " +"code is running, but can provide significant speed increases, especially for " +"operations that are amenable to vectorisation." +msgstr "" +"`Numba` ແມ່ນເຄື່ອງມືທີ່ຊ່ວຍແປງບາງສ່ວນຂອງແອັບພລິເຄຊັນ Python ໃຫ້ເປັນ machine code " +"ໃນເວລາເຮັດວຽກ (runtime) ເພື່ອເພີ່ມຄວາມໄວ." + +#: ../source/guides/packaging-binary-extensions.rst:148 +msgid "Alternatives to handcoded wrapper modules" +msgstr "ທາງເລືອກອື່ນແທນການຂຽນໂມດູນ wrapper ດ້ວຍມື" + +#: ../source/guides/packaging-binary-extensions.rst:150 +msgid "" +"The C ABI (Application Binary Interface) is a common standard for sharing " +"functionality between multiple applications. One of the strengths of the " +"CPython C API (Application Programming Interface) is allowing Python users " +"to tap into that functionality. However, wrapping modules by hand is quite " +"tedious, so a number of other alternative approaches should be considered." +msgstr "ການຂຽນໂມດູນ wrapper ດ້ວຍມືແມ່ນເປັນໜ້າວຽກທີ່ໜ້າເບື່ອ, ດັ່ງນັ້ນຄວນພິຈາລະນາທາງເລືອກອື່ນໆ." + +#: ../source/guides/packaging-binary-extensions.rst:156 +msgid "" +"The approaches described below don't simplify the distribution case at all, " +"but they *can* significantly reduce the maintenance burden of keeping " +"wrapper modules up to date." +msgstr "" +"ວິທີການທີ່ລະບຸໄວ້ຂ້າງລຸ່ມນີ້ບໍ່ໄດ້ຊ່ວຍໃຫ້ການແຈກຢາຍງ່າຍຂຶ້ນ, " +"ແຕ່ມັນສາມາດຫຼຸດພາລະໃນການບຳລຸງຮັກສາໄດ້ຢ່າງຫຼວງຫຼາຍ." + +#: ../source/guides/packaging-binary-extensions.rst:160 +msgid "" +"In addition to being useful for the creation of accelerator modules, `Cython " +"`__ is also widely used for creating wrapper modules " +"for C or C++ APIs. It involves wrapping the interfaces by hand, which gives " +"a wide range of freedom in designing and optimising the wrapper code, but " +"may not be a good choice for wrapping very large APIs quickly. See the `list " +"of third-party tools `_ for " +"automatic wrapping with Cython. It also supports performance-oriented Python " +"implementations that provide a CPython-like C-API, such as PyPy and Pyston." +msgstr "" +"ນອກຈາກຈະໃຊ້ສ້າງໂມດູນເລັ່ງຄວາມໄວແລ້ວ, `Cython` ຍັງຖືກໃຊ້ຢ່າງກວ້າງຂວາງໃນການສ້າງໂມດູນ " +"wrapper ສຳລັບ C ຫຼື C++ API." + +#: ../source/guides/packaging-binary-extensions.rst:171 +msgid "" +":doc:`pybind11 ` is a pure C++11 library that provides a " +"clean C++ interface to the CPython (and PyPy) C API. It does not require a " +"pre-processing step; it is written entirely in templated C++. Helpers are " +"included for Setuptools or CMake builds. It was based on `Boost.Python " +"`__, " +"but doesn't require the Boost libraries or BJam." +msgstr "" +"``pybind11`` ແມ່ນໄລບຣາຣີ C++11 ບໍລິສຸດທີ່ໃຫ້ interface C++ ທີ່ສະອາດສຳລັບ CPython C API." + +#: ../source/guides/packaging-binary-extensions.rst:178 +msgid "" +":doc:`cffi ` is a project created by some of the PyPy developers " +"to make it straightforward for developers that already know both Python and " +"C to expose their C modules to Python applications. It also makes it " +"relatively straightforward to wrap a C module based on its header files, " +"even if you don't know C yourself." +msgstr "``cffi`` ແມ່ນໂຄງການທີ່ເຮັດໃຫ້ການເຊື່ອມຕໍ່ໂມດູນ C ກັບ Python ເປັນເລື່ອງງ່າຍ." + +#: ../source/guides/packaging-binary-extensions.rst:184 +msgid "" +"One of the key advantages of ``cffi`` is that it is compatible with the PyPy " +"JIT, allowing CFFI wrapper modules to participate fully in PyPy's tracing " +"JIT optimisations." +msgstr "ຂໍ້ດີຫຼັກຂອງ ``cffi`` ແມ່ນມັນເຂົ້າກັນໄດ້ກັບ PyPy JIT." + +#: ../source/guides/packaging-binary-extensions.rst:188 +msgid "" +"`SWIG `__ is a wrapper interface generator that allows " +"a variety of programming languages, including Python, to interface with C " +"and C++ code." +msgstr "`SWIG` ແມ່ນເຄື່ອງມືສ້າງ wrapper interface ທີ່ຮອງຮັບຫຼາຍພາສາ ລວມເຖິງ Python." + +#: ../source/guides/packaging-binary-extensions.rst:192 +msgid "" +"The standard library's ``ctypes`` module, while useful for getting access to " +"C level interfaces when header information isn't available, suffers from the " +"fact that it operates solely at the C ABI level, and thus has no automatic " +"consistency checking between the interface actually being exported by the " +"library and the one declared in the Python code. By contrast, the above " +"alternatives are all able to operate at the C *API* level, using C header " +"files to ensure consistency between the interface exported by the library " +"being wrapped and the one expected by the Python wrapper module. While " +"``cffi`` *can* operate directly at the C ABI level, it suffers from the same " +"interface inconsistency problems as ``ctypes`` when it is used that way." +msgstr "" +"ໂມດູນ ``ctypes`` ໃນໄລບຣາຣີມາດຕະຖານມີປະໂຫຍດໃນການເຂົ້າເຖິງ interface ລະດັບ C, " +"ແຕ່ມັນເຮັດວຽກສະເພາະໃນລະດັບ C ABI ເທົ່ານັ້ນ." + +#: ../source/guides/packaging-binary-extensions.rst:206 +msgid "Alternatives for low level system access" +msgstr "ທາງເລືອກອື່ນສຳລັບການເຂົ້າເຖິງລະບົບລະດັບຕ່ຳ" + +#: ../source/guides/packaging-binary-extensions.rst:208 +msgid "" +"For applications that need low level system access (regardless of the " +"reason), a binary extension module often *is* the best way to go about it. " +"This is particularly true for low level access to the CPython runtime " +"itself, since some operations (like releasing the Global Interpreter Lock) " +"are simply invalid when the interpreter is running code, even if a module " +"like ``ctypes`` or ``cffi`` is used to obtain access to the relevant C API " +"interfaces." +msgstr "" +"ສຳລັບແອັບພລິເຄຊັນທີ່ຕ້ອງການເຂົ້າເຖິງລະບົບລະດັບຕ່ຳ, ໂມດູນສ່ວນຂະຫຍາຍໄບນາຣີມັກຈະເປັນວິທີທີ່ດີທີ່ສຸດ." + +#: ../source/guides/packaging-binary-extensions.rst:216 +msgid "" +"For cases where the extension module is manipulating the underlying " +"operating system or hardware (rather than the CPython runtime), it may " +"sometimes be better to just write an ordinary C library (or a library in " +"another systems programming language like C++ or Rust that can export a C " +"compatible ABI), and then use one of the wrapping techniques described above " +"to make the interface available as an importable Python module." +msgstr "" +"ໃນບາງກໍລະນີ, ອາດຈະດີກວ່າທີ່ຈະຂຽນໄລບຣາຣີ C ທຳມະດາ ແລ້ວໃຊ້ເຕັກນິກ wrapper ເພື່ອໃຫ້ Python " +"ສາມາດ import ໄປໃຊ້ໄດ້." + +#: ../source/guides/packaging-binary-extensions.rst:225 +msgid "Implementing binary extensions" +msgstr "ການພັດທະນາສ່ວນຂະຫຍາຍໄບນາຣີ" + +#: ../source/guides/packaging-binary-extensions.rst:227 +msgid "" +"The CPython :doc:`Extending and Embedding ` guide " +"includes an introduction to writing a :doc:`custom extension module in C " +"`." +msgstr "ຄູ່ມື CPython ມີເນື້ອຫາແນະນຳການຂຽນໂມດູນສ່ວນຂະຫຍາຍດ້ວຍພາສາ C." + +#: ../source/guides/packaging-binary-extensions.rst:231 +msgid "" +"FIXME: Elaborate that all this is one of the reasons why you probably " +"*don't* want to handcode your extension modules :)" +msgstr "" +"FIXME: ອະທິບາຍວ່າທັງໝົດນີ້ແມ່ນເຫດຜົນທີ່ທ່ານອາດຈະ *ບໍ່* ຢາກຂຽນໂມດູນສ່ວນຂະຫຍາຍດ້ວຍມືເອງ :)" + +#: ../source/guides/packaging-binary-extensions.rst:236 +msgid "Extension module lifecycle" +msgstr "ວົງຈອນຊີວິດຂອງໂມດູນສ່ວນຂະຫຍາຍ" + +#: ../source/guides/packaging-binary-extensions.rst:238 +#: ../source/guides/packaging-binary-extensions.rst:244 +#: ../source/guides/packaging-binary-extensions.rst:250 +#: ../source/guides/packaging-binary-extensions.rst:256 +#: ../source/guides/packaging-binary-extensions.rst:376 +msgid "FIXME: This section needs to be fleshed out." +msgstr "FIXME: ສ່ວນນີ້ຍັງຕ້ອງໄດ້ເພີ່ມລາຍລະອຽດ." + +#: ../source/guides/packaging-binary-extensions.rst:242 +msgid "Implications of shared static state and subinterpreters" +msgstr "" +"ຜົນກະທົບຂອງສະຖານະສະແຕຕິກຮ່ວມ (shared static state) ແລະ ຕົວແປພາສາຍ່ອຍ " +"(subinterpreters)" + +#: ../source/guides/packaging-binary-extensions.rst:248 +msgid "Implications of the GIL" +msgstr "ຜົນກະທົບຂອງ GIL" + +#: ../source/guides/packaging-binary-extensions.rst:254 +msgid "Memory allocation APIs" +msgstr "API ສຳລັບການຈອງໜ່ວຍຄວາມຈຳ" + +#: ../source/guides/packaging-binary-extensions.rst:262 +msgid "ABI Compatibility" +msgstr "ຄວາມເຂົ້າກັນໄດ້ຂອງ ABI" + +#: ../source/guides/packaging-binary-extensions.rst:264 +msgid "" +"The CPython C API does not guarantee ABI stability between minor releases " +"(3.2, 3.3, 3.4, etc.). This means that, typically, if you build an extension " +"module against one version of Python, it is only guaranteed to work with the " +"same minor version of Python and not with any other minor versions." +msgstr "" +"CPython C API ບໍ່ຮັບປະກັນຄວາມສະຖຽນຂອງ ABI ລະຫວ່າງລຸ້ນຍ່ອຍ (3.2, 3.3, 3.4, ແລະ ອື່ນໆ)." + +#: ../source/guides/packaging-binary-extensions.rst:270 +msgid "" +"Python 3.2 introduced the Limited API, with is a well-defined subset of " +"Python's C API. The symbols needed for the Limited API form the \"Stable " +"ABI\" which is guaranteed to be compatible across all Python 3.x versions. " +"Wheels containing extensions built against the stable ABI use the ``abi3`` " +"ABI tag, to reflect that they're compatible with all Python 3.x versions." +msgstr "" +"Python 3.2 ໄດ້ແນະນຳ Limited API ເຊິ່ງເປັນສ່ວນໜຶ່ງຂອງ Python C API ທີ່ກຳນົດໄວ້ຢ່າງຊັດເຈນ." + +#: ../source/guides/packaging-binary-extensions.rst:277 +msgid "" +"CPython's :doc:`C API stability` page provides detailed " +"information about the API / ABI stability guarantees, how to use the Limited " +"API and the exact contents of the \"Limited API\"." +msgstr "ໜ້າຄວາມສະຖຽນຂອງ C API ໃຫ້ຂໍ້ມູນລະອຽດກ່ຽວກັບການຮັບປະກັນຄວາມສະຖຽນຂອງ API / ABI." + +#: ../source/guides/packaging-binary-extensions.rst:283 +msgid "Building binary extensions" +msgstr "ການສ້າງ (Build) ສ່ວນຂະຫຍາຍໄບນາຣີ" + +#: ../source/guides/packaging-binary-extensions.rst:285 +msgid "FIXME: Cover the build-backends available for building extensions." +msgstr "FIXME: ກວມເອົາ build-backends ທີ່ມີຢູ່ສຳລັບການສ້າງສ່ວນຂະຫຍາຍ." + +#: ../source/guides/packaging-binary-extensions.rst:288 +msgid "Building extensions for multiple platforms" +msgstr "ການສ້າງສ່ວນຂະຫຍາຍສຳລັບຫຼາຍແພລັດຟອມ" + +#: ../source/guides/packaging-binary-extensions.rst:290 +msgid "" +"If you plan to distribute your extension, you should provide :term:`wheels " +"` for all the platforms you intend to support. These are usually " +"built on continuous integration (CI) systems. There are tools to help you " +"build highly redistributable binaries from CI; these " +"include :ref:`cibuildwheel` and :ref:`multibuild`." +msgstr "" +"ຖ້າທ່ານວາງແຜນທີ່ຈະແຈກຢາຍສ່ວນຂະຫຍາຍຂອງທ່ານ, ທ່ານຄວນຈັດຕຽມ :term:`wheels` " +"ສຳລັບທຸກແພລັດຟອມທີ່ທ່ານຕ້ອງການຮອງຮັບ." + +#: ../source/guides/packaging-binary-extensions.rst:296 +msgid "" +"For most extensions, you will need to build wheels for all the platforms you " +"intend to support. This means that the number of wheels you need to build is " +"the product of::" +msgstr "" +"ສຳລັບສ່ວນຂະຫຍາຍສ່ວນໃຫຍ່, ທ່ານຈະຕ້ອງສ້າງ wheels ສຳລັບທຸກແພລັດຟອມທີ່ທ່ານຮອງຮັບ. " +"ນັ້ນໝາຍຄວາມວ່າຈຳນວນ wheels ທີ່ທ່ານຕ້ອງສ້າງແມ່ນຜົນຄູນຂອງ::" + +#: ../source/guides/packaging-binary-extensions.rst:302 +msgid "" +"Using CPython's :ref:`Stable ABI ` can help " +"significantly reduce the number of wheels you need to provide, since a " +"single wheel on a platform can be used with all Python minor versions; " +"eliminating one dimension of the matrix. It also removes the need to " +"generate new wheels for each new minor version of Python." +msgstr "" +"ການໃຊ້ Stable ABI ຂອງ CPython ສາມາດຊ່ວຍຫຼຸດຈຳນວນ wheels ທີ່ທ່ານຕ້ອງຈັດຕຽມໄດ້ຢ່າງຫຼວງຫຼາຍ." + +#: ../source/guides/packaging-binary-extensions.rst:309 +msgid "Binary extensions for Windows" +msgstr "ສ່ວນຂະຫຍາຍໄບນາຣີສຳລັບ Windows" + +#: ../source/guides/packaging-binary-extensions.rst:311 +msgid "" +"Before it is possible to build a binary extension, it is necessary to ensure " +"that you have a suitable compiler available. On Windows, Visual C is used to " +"build the official CPython interpreter, and should be used to build " +"compatible binary extensions. To set up a build environment for binary " +"extensions, install `Visual Studio Community Edition `__ - any recent version is fine." +msgstr "ກ່ອນທີ່ຈະສ້າງສ່ວນຂະຫຍາຍໄບນາຣີໄດ້, ທ່ານຕ້ອງໝັ້ນໃຈວ່າມີຄອມໄພເລີ (compiler) ທີ່ເໝາະສົມ." + +#: ../source/guides/packaging-binary-extensions.rst:318 +msgid "" +"One caveat: if you use Visual Studio 2019 or later, your extension will " +"depend on an \"extra\" file, ``VCRUNTIME140_1.dll``, in addition to the " +"``VCRUNTIME140.dll`` that all previous versions back to 2015 depend on. This " +"will add an extra requirement to using your extension on versions of CPython " +"that do not include this extra file. To avoid this, you can add the compile-" +"time argument ``/d2FH4-``. Recent versions of Python may include this file." +msgstr "" +"ຂໍ້ຄວນລະວັງ: ຖ້າທ່ານໃຊ້ Visual Studio 2019 ຫຼື ໃໝ່ກວ່ານັ້ນ, " +"ສ່ວນຂະຫຍາຍຂອງທ່ານຈະຕ້ອງໃຊ້ໄຟລ໌ເພີ່ມເຕີມ ``VCRUNTIME140_1.dll``." + +#: ../source/guides/packaging-binary-extensions.rst:326 +msgid "" +"Building for Python prior to 3.5 is discouraged, because older versions of " +"Visual Studio are no longer available from Microsoft. If you do need to " +"build for older versions, you can set ``DISTUTILS_USE_SDK=1`` and " +"``MSSdk=1`` to force a the currently activated version of MSVC to be found, " +"and you should exercise care when designing your extension not to malloc/" +"free memory across different libraries, avoid relying on changed data " +"structures, and so on. Tools for generating extension modules usually avoid " +"these things for you." +msgstr "ບໍ່ແນະນຳໃຫ້ສ້າງສຳລັບ Python ລຸ້ນທີ່ເກົ່າກວ່າ 3.5." + +#: ../source/guides/packaging-binary-extensions.rst:337 +msgid "Binary extensions for Linux" +msgstr "ສ່ວນຂະຫຍາຍໄບນາຣີສຳລັບ Linux" + +#: ../source/guides/packaging-binary-extensions.rst:339 +msgid "" +"Linux binaries must use a sufficiently old glibc to be compatible with older " +"distributions. The `manylinux `_ Docker " +"images provide a build environment with a glibc old enough to support most " +"current Linux distributions on common architectures." +msgstr "ໄບນາຣີຂອງ Linux ຕ້ອງໃຊ້ glibc ລຸ້ນທີ່ເກົ່າພໍທີ່ຈະເຂົ້າກັນໄດ້ກັບ distribution ເກົ່າໆ." + +#: ../source/guides/packaging-binary-extensions.rst:345 +msgid "Binary extensions for macOS" +msgstr "ສ່ວນຂະຫຍາຍໄບນາຣີສຳລັບ macOS" + +#: ../source/guides/packaging-binary-extensions.rst:347 +msgid "" +"Binary compatibility on macOS is determined by the target minimum deployment " +"system, e.g. *10.9*, which is often specified with the " +"``MACOSX_DEPLOYMENT_TARGET`` environmental variable when building binaries " +"on macOS. When building with setuptools / distutils, the deployment target " +"is specified with the flag ``--plat-name``, e.g. ``macosx-10.9-x86_64``. For " +"common deployment targets for macOS Python distributions, see the `MacPython " +"Spinning Wheels wiki `_." +msgstr "ຄວາມເຂົ້າກັນໄດ້ຂອງໄບນາຣີໃນ macOS ແມ່ນຂຶ້ນກັບລະບົບເປົ້າໝາຍຕ່ຳສຸດທີ່ກຳນົດໄວ້." + +#: ../source/guides/packaging-binary-extensions.rst:357 +msgid "Publishing binary extensions" +msgstr "ການເຜີຍແຜ່ສ່ວນຂະຫຍາຍໄບນາຣີ" + +#: ../source/guides/packaging-binary-extensions.rst:359 +msgid "" +"Publishing binary extensions through PyPI uses the same upload mechanisms as " +"publishing pure Python packages. You build a wheel file for your extension " +"using the build-backend and upload it to PyPI using :doc:`twine " +"`." +msgstr "" +"ການເຜີຍແຜ່ສ່ວນຂະຫຍາຍໄບນາຣີຜ່ານ PyPI ແມ່ນໃຊ້ກົນໄກການອັບໂຫຼດດຽວກັນກັບແພັກເກດ Python ບໍລິສຸດ." + +#: ../source/guides/packaging-binary-extensions.rst:365 +msgid "Avoid binary-only releases" +msgstr "ຫຼີກເວັ້ນການເຜີຍແຜ່ສະເພາະໄບນາຣີເທົ່ານັ້ນ" + +#: ../source/guides/packaging-binary-extensions.rst:367 +msgid "" +"It is strongly recommended that you publish your binary extensions as well " +"as the source code that was used to build them. This allows users to build " +"the extension from source if they need to. Notably, this is required for " +"certain Linux distributions that build from source within their own build " +"systems for the distro package repositories." +msgstr "ຂໍແນະນຳຢ່າງຍິ່ງໃຫ້ເຜີຍແຜ່ທັງໄບນາຣີ ແລະ ຊອສໂຄ້ດທີ່ໃຊ້ສ້າງພວກມັນ." + +#: ../source/guides/packaging-binary-extensions.rst:374 +msgid "Weak linking" +msgstr "Weak linking" + +#: ../source/guides/packaging-binary-extensions.rst:379 +msgid "Additional resources" +msgstr "ແຫຼ່ງຂໍ້ມູນເພີ່ມເຕີມ" + +#: ../source/guides/packaging-binary-extensions.rst:381 +msgid "" +"Cross-platform development and distribution of extension modules is a " +"complex topic, so this guide focuses primarily on providing pointers to " +"various tools that automate dealing with the underlying technical " +"challenges. The additional resources in this section are instead intended " +"for developers looking to understand more about the underlying binary " +"interfaces that those systems rely on at runtime." +msgstr "ການພັດທະນາ ແລະ ແຈກຢາຍໂມດູນສ່ວນຂະຫຍາຍແບບຂ້າມແພລັດຟອມແມ່ນເລື່ອງທີ່ຊັບຊ້ອນ." + +#: ../source/guides/packaging-binary-extensions.rst:388 +msgid "Cross-platform wheel generation with scikit-build" +msgstr "ການສ້າງ wheel ແບບຂ້າມແພລັດຟອມດ້ວຍ scikit-build" + +#: ../source/guides/packaging-binary-extensions.rst:390 +msgid "" +"The `scikit-build `_ package " +"helps abstract cross-platform build operations and provides additional " +"capabilities when creating binary extension packages. Additional " +"documentation is also available on the `C runtime, compiler, and build " +"system generator `_ for Python binary extension modules." +msgstr "ແພັກເກດ `scikit-build` ຊ່ວຍໃຫ້ການສ້າງແພັກເກດຂ້າມແພລັດຟອມງ່າຍຂຶ້ນ." + +#: ../source/guides/packaging-binary-extensions.rst:398 +msgid "Introduction to C/C++ extension modules" +msgstr "ການແນະນຳກ່ຽວກັບໂມດູນສ່ວນຂະຫຍາຍ C/C++" + +#: ../source/guides/packaging-binary-extensions.rst:400 +msgid "" +"For a more in depth explanation of how extension modules are used by CPython " +"on a Debian system, see the following articles:" +msgstr "" +"ສຳລັບຄຳອະທິບາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບວິທີທີ່ CPython ໃຊ້ໂມດູນສ່ວນຂະຫຍາຍໃນລະບົບ Debian, " +"ເບິ່ງບົດຄວາມຕໍ່ໄປນີ້:" + +#: ../source/guides/packaging-binary-extensions.rst:403 +msgid "" +"`What are (c)python extension modules? `_" +msgstr "`ໂມດູນສ່ວນຂະຫຍາຍ (c)python ແມ່ນຫຍັງ?`" + +#: ../source/guides/packaging-binary-extensions.rst:404 +msgid "`Releasing the gil `_" +msgstr "`ການປ່ອຍ GIL`" + +#: ../source/guides/packaging-binary-extensions.rst:405 +msgid "" +"`Writing cpython extension modules using C++ `_" +msgstr "`ການຂຽນໂມດູນສ່ວນຂະຫຍາຍ cpython ໂດຍໃຊ້ C++`" + +#: ../source/guides/packaging-binary-extensions.rst:408 +msgid "Additional considerations for binary wheels" +msgstr "ຂໍ້ຄວນພິຈາລະນາເພີ່ມເຕີມສຳລັບ binary wheels" + +#: ../source/guides/packaging-binary-extensions.rst:410 +msgid "" +"The `pypackaging-native `_ website " +"has additional coverage of packaging Python packages with native code. It " +"aims to provide an overview of the most important packaging issues for such " +"projects, with in-depth explanations and references." +msgstr "" +"ເວັບໄຊ `pypackaging-native` ມີຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບການເຮັດແພັກເກດ Python ດ້ວຍ native " +"code." + +#: ../source/guides/packaging-binary-extensions.rst:415 +msgid "" +"Examples of topics covered are non-Python compiled dependencies (\"native " +"dependencies\"), the importance of the ABI (Application Binary Interface) of " +"native code, dependency on SIMD code and cross compilation." +msgstr "" +"ຕົວຢ່າງຫົວຂໍ້ທີ່ກວມເອົາແມ່ນ native dependencies, ຄວາມສຳຄັນຂອງ ABI, ແລະ ການ cross " +"compilation." + +#: ../source/guides/packaging-namespace-packages.rst:5 +msgid "Packaging namespace packages" +msgstr "ການເຮັດແພັກເກດແບບ namespace" + +#: ../source/guides/packaging-namespace-packages.rst:7 +msgid "" +"Namespace packages allow you to split the sub-packages and modules within a " +"single :term:`package ` across multiple, " +"separate :term:`distribution packages ` (referred to " +"as **distributions** in this document to avoid ambiguity). For example, if " +"you have the following package structure:" +msgstr "" +"ແພັກເກດ Namespace ຊ່ວຍໃຫ້ທ່ານສາມາດແບ່ງແພັກເກດຍ່ອຍ ແລະ ໂມດູນພາຍໃນແພັກເກດດຽວ " +"ອອກເປັນຫຼາຍໆຊຸດແຈກຢາຍທີ່ແຍກກັນ." + +#: ../source/guides/packaging-namespace-packages.rst:26 +msgid "And you use this package in your code like so::" +msgstr "ແລະ ທ່ານໃຊ້ແພັກເກດນີ້ໃນໂຄ້ດຂອງທ່ານດັ່ງນີ້::" + +#: ../source/guides/packaging-namespace-packages.rst:31 +msgid "Then you can break these sub-packages into two separate distributions:" +msgstr "ຈາກນັ້ນທ່ານສາມາດແບ່ງແພັກເກດຍ່ອຍເຫຼົ່ານີ້ອອກເປັນສອງຊຸດແຈກຢາຍທີ່ແຍກກັນ:" + +#: ../source/guides/packaging-namespace-packages.rst:50 +msgid "Each sub-package can now be separately installed, used, and versioned." +msgstr "ແຕ່ລະແພັກເກດຍ່ອຍສາມາດຖືກຕິດຕັ້ງ, ນຳໃຊ້, ແລະ ກຳນົດລຸ້ນແຍກກັນໄດ້ແລ້ວ." + +#: ../source/guides/packaging-namespace-packages.rst:52 +msgid "" +"Namespace packages can be useful for a large collection of loosely-related " +"packages (such as a large corpus of client libraries for multiple products " +"from a single company). However, namespace packages come with several " +"caveats and are not appropriate in all cases. A simple alternative is to use " +"a prefix on all of your distributions such as ``import " +"mynamespace_subpackage_a`` (you could even use ``import " +"mynamespace_subpackage_a as subpackage_a`` to keep the import object short)." +msgstr "ແພັກເກດ Namespace ມີປະໂຫຍດສຳລັບກຸ່ມແພັກເກດຂະໜາດໃຫຍ່ທີ່ມີຄວາມກ່ຽວຂ້ອງກັນແບບຫ່າງໆ." + +#: ../source/guides/packaging-namespace-packages.rst:62 +msgid "Creating a namespace package" +msgstr "ການສ້າງແພັກເກດ namespace" + +#: ../source/guides/packaging-namespace-packages.rst:64 +msgid "" +"There are currently two different approaches to creating namespace packages, " +"from which the latter is discouraged:" +msgstr "ປັດຈຸບັນມີສອງວິທີໃນການສ້າງແພັກເກດ namespace ເຊິ່ງວິທີຫຼັງນັ້ນບໍ່ແນະນຳໃຫ້ໃຊ້:" + +#: ../source/guides/packaging-namespace-packages.rst:67 +msgid "" +"Use `native namespace packages`_. This type of namespace package is defined " +"in :pep:`420` and is available in Python 3.3 and later. This is recommended " +"if packages in your namespace only ever need to support Python 3 and " +"installation via ``pip``." +msgstr "" +"ໃຊ້ `native namespace packages`. ວິທີນີ້ຖືກກຳນົດໃນ PEP 420 ແລະ ສາມາດໃຊ້ໄດ້ໃນ Python " +"3.3 ຂຶ້ນໄປ." + +#: ../source/guides/packaging-namespace-packages.rst:71 +msgid "" +"Use `legacy namespace packages`_. This comprises `pkgutil-style namespace " +"packages`_ and `pkg_resources-style namespace packages`_." +msgstr "" +"ໃຊ້ `legacy namespace packages`. ວິທີນີ້ລວມມີແບບ pkgutil ແລະ ແບບ pkg_resources." + +#: ../source/guides/packaging-namespace-packages.rst:75 +msgid "Native namespace packages" +msgstr "Native namespace packages" + +#: ../source/guides/packaging-namespace-packages.rst:77 +msgid "" +"Python 3.3 added **implicit** namespace packages from :pep:`420`. All that " +"is required to create a native namespace package is that you just " +"omit :file:`__init__.py` from the namespace package directory. An example " +"file structure (following :ref:`src-layout `):" +msgstr "Python 3.3 ໄດ້ເພີ່ມ namespace packages ແບບ implicit." + +#: ../source/guides/packaging-namespace-packages.rst:94 +msgid "" +"It is extremely important that every distribution that uses the namespace " +"package omits the :file:`__init__.py` or uses a pkgutil-" +"style :file:`__init__.py`. If any distribution does not, it will cause the " +"namespace logic to fail and the other sub-packages will not be importable." +msgstr "" +"ມັນສຳຄັນຫຼາຍທີ່ທຸກໆຊຸດແຈກຢາຍທີ່ໃຊ້ namespace package ຕ້ອງບໍ່ມີໄຟລ໌ :file:`__init__.py`." + +#: ../source/guides/packaging-namespace-packages.rst:99 +msgid "" +"The ``src-layout`` directory structure allows automatic discovery of " +"packages by most :term:`build backends `. See :ref:`src-" +"layout-vs-flat-layout` for more information. If however you want to manage " +"exclusions or inclusions of packages yourself, this is possible to be " +"configured in the top-level :file:`pyproject.toml`:" +msgstr "ໂຄງສ້າງແບບ ``src-layout`` ຊ່ວຍໃຫ້ຕົວສ້າງສ່ວນຫຼັງສ່ວນໃຫຍ່ຄົ້ນຫາແພັກເກດໄດ້ໂດຍອັດຕະໂນມັດ." + +#: ../source/guides/packaging-namespace-packages.rst:117 +msgid "The same can be accomplished with a :file:`setup.cfg`:" +msgstr "ສາມາດເຮັດແບບດຽວກັນໄດ້ດ້ວຍ :file:`setup.cfg`:" + +#: ../source/guides/packaging-namespace-packages.rst:129 +msgid "Or :file:`setup.py`:" +msgstr "ຫຼື :file:`setup.py`:" + +#: ../source/guides/packaging-namespace-packages.rst:142 +msgid "" +":ref:`setuptools` will search the directory structure for implicit namespace " +"packages by default." +msgstr "" +"ໂດຍມາດຕະຖານແລ້ວ :ref:`setuptools` ຈະຄົ້ນຫາ implicit namespace packages " +"ຈາກໂຄງສ້າງໂຟນເດີ." + +#: ../source/guides/packaging-namespace-packages.rst:145 +msgid "" +"A complete working example of two native namespace packages can be found in " +"the `native namespace package example project`_." +msgstr "" +"ຕົວຢ່າງການເຮັດວຽກທີ່ສົມບູນຂອງ native namespace packages ສອງອັນ " +"ສາມາດເບິ່ງໄດ້ໃນໂຄງການຕົວຢ່າງ." + +#: ../source/guides/packaging-namespace-packages.rst:151 +msgid "" +"Because native and pkgutil-style namespace packages are largely compatible, " +"you can use native namespace packages in the distributions that only support " +"Python 3 and pkgutil-style namespace packages in the distributions that need " +"to support Python 2 and 3." +msgstr "ເນື່ອງຈາກ native ແລະ pkgutil-style ເຂົ້າກັນໄດ້ດີ, ທ່ານສາມາດໃຊ້ທັງສອງແບບຮ່ວມກັນໄດ້." + +#: ../source/guides/packaging-namespace-packages.rst:158 +msgid "Legacy namespace packages" +msgstr "Legacy namespace packages" + +#: ../source/guides/packaging-namespace-packages.rst:160 +msgid "" +"These two methods, that were used to create namespace packages prior " +"to :pep:`420`, are now considered to be obsolete and should not be used " +"unless you need compatibility with packages already using one of these " +"methods." +msgstr "ສອງວິທີນີ້ຖືວ່າຫຼ້າສະໄໝແລ້ວ ແລະ ບໍ່ຄວນນຳໃຊ້." + +#: ../source/guides/packaging-namespace-packages.rst:164 +msgid "" +"To migrate an existing package, all packages sharing the namespace must be " +"migrated simultaneously." +msgstr "" +"ໃນການຍ້າຍ (migrate) ແພັກເກດທີ່ມີຢູ່ແລ້ວ, ທຸກແພັກເກດທີ່ໃຊ້ namespace ຮ່ວມກັນຕ້ອງຖືກຍ້າຍພ້ອມກັນ." + +#: ../source/guides/packaging-namespace-packages.rst:166 +msgid "" +"While native namespace packages and pkgutil-style namespace packages are " +"largely compatible, pkg_resources-style namespace packages are not " +"compatible with the other methods. It's inadvisable to use different methods " +"in different distributions that provide packages to the same namespace." +msgstr "ແບບ pkg_resources ບໍ່ເຂົ້າກັນໄດ້ກັບວິທີອື່ນ." + +#: ../source/guides/packaging-namespace-packages.rst:173 +msgid "pkgutil-style namespace packages" +msgstr "pkgutil-style namespace packages" + +#: ../source/guides/packaging-namespace-packages.rst:175 +msgid "" +"Python 2.3 introduced the :doc:`pkgutil ` module and " +"the :py:func:`python:pkgutil.extend_path` function. This can be used to " +"declare namespace packages that need to be compatible with both Python 2.3+ " +"and Python 3. This was the recommended approach for the highest level of " +"compatibility." +msgstr "" +"Python 2.3 ໄດ້ແນະນຳໂມດູນ ``pkgutil`` ເຊິ່ງສາມາດໃຊ້ສ້າງ namespace packages ທີ່ຮອງຮັບທັງ " +"Python 2 ແລະ 3." + +#: ../source/guides/packaging-namespace-packages.rst:180 +msgid "" +"To create a pkgutil-style namespace package, you need to provide " +"an :file:`__init__.py` file for the namespace package:" +msgstr "ໃນການສ້າງແພັກເກດແບບ pkgutil, ທ່ານຕ້ອງມີໄຟລ໌ :file:`__init__.py`:" + +#: ../source/guides/packaging-namespace-packages.rst:194 +#: ../source/guides/packaging-namespace-packages.rst:249 +msgid "" +"The :file:`__init__.py` file for the namespace package needs to contain the " +"following:" +msgstr "ໄຟລ໌ :file:`__init__.py` ສຳລັບ namespace package ຕ້ອງມີເນື້ອຫາດັ່ງນີ້:" + +#: ../source/guides/packaging-namespace-packages.rst:201 +#: ../source/guides/packaging-namespace-packages.rst:256 +msgid "" +"**Every** distribution that uses the namespace package must include such " +"an :file:`__init__.py`. If any distribution does not, it will cause the " +"namespace logic to fail and the other sub-packages will not be importable. " +"Any additional code in :file:`__init__.py` will be inaccessible." +msgstr "**ທຸກໆ** ຊຸດແຈກຢາຍທີ່ໃຊ້ namespace package ຕ້ອງມີໄຟລ໌ :file:`__init__.py` ນີ້." + +#: ../source/guides/packaging-namespace-packages.rst:206 +msgid "" +"A complete working example of two pkgutil-style namespace packages can be " +"found in the `pkgutil namespace example project`_." +msgstr "ຕົວຢ່າງທີ່ສົມບູນຂອງ pkgutil-style ສາມາດເບິ່ງໄດ້ໃນໂຄງການຕົວຢ່າງ." + +#: ../source/guides/packaging-namespace-packages.rst:216 +msgid "pkg_resources-style namespace packages" +msgstr "pkg_resources-style namespace packages" + +#: ../source/guides/packaging-namespace-packages.rst:220 +msgid "" +"The information in this section is obsolete and is no longer functional (as " +"of Setuptools 82.0.0). It is only retained for historical reference." +msgstr "ຂໍ້ມູນໃນສ່ວນນີ້ແມ່ນຫຼ້າສະໄໝ ແລະ ໃຊ້ງານບໍ່ໄດ້ແລ້ວ (ຕັ້ງແຕ່ Setuptools 82.0.0)." + +#: ../source/guides/packaging-namespace-packages.rst:223 +msgid "" +"``pkg_resources`` has been deprecated and was fully removed in Setuptools " +"82.0.0." +msgstr "``pkg_resources`` ຖືກຍົກເລີກ ແລະ ຖືກຖອດອອກທັງໝົດໃນ Setuptools 82.0.0." + +#: ../source/guides/packaging-namespace-packages.rst:225 +msgid "" +":doc:`Setuptools ` previously provided the " +"``pkg_resources.declare_namespace`` function and the ``namespace_packages`` " +"argument to :func:`~setuptools.setup`. Together these could be used to " +"declare namespace packages. While this approach is no longer supported, it " +"may still be encountered in environments using older ``setuptools`` " +"versions. If you are creating a new distribution within an existing " +"namespace package that uses this method then it's recommended to continue " +"using this as the different methods are not cross-compatible and it's not " +"advisable to try to migrate an existing package." +msgstr "" +"ກ່ອນໜ້ານີ້ Setuptools ເຄີຍມີຟັງຊັນ ``declare_namespace`` ເພື່ອສ້າງ namespace packages." + +#: ../source/guides/packaging-namespace-packages.rst:235 +msgid "" +"To create a pkg_resources-style namespace package, you need to provide " +"an :file:`__init__.py` file for the namespace package:" +msgstr "ໃນການສ້າງແພັກເກດແບບ pkg_resources, ທ່ານຕ້ອງມີໄຟລ໌ :file:`__init__.py`:" + +#: ../source/guides/packaging-namespace-packages.rst:261 +msgid "" +"Some older recommendations advise the following in the namespace " +"package :file:`__init__.py`:" +msgstr "ບາງຄຳແນະນຳທີ່ເກົ່າກວ່າເຄີຍບອກໃຫ້ໃຊ້ແບບນີ້ໃນ :file:`__init__.py`:" + +#: ../source/guides/packaging-namespace-packages.rst:271 +msgid "" +"The idea behind this was that in the rare case that setuptools isn't " +"available packages would fall-back to the pkgutil-style packages. This isn't " +"advisable because pkgutil and pkg_resources-style namespace packages are not " +"cross-compatible. If the presence of setuptools is a concern then the " +"package should just explicitly depend on setuptools via ``install_requires``." +msgstr "" +"ແນວຄິດນີ້ແມ່ນເພື່ອໃຫ້ກັບໄປໃຊ້ແບບ pkgutil ໄດ້ຖ້າບໍ່ມີ setuptools, ແຕ່ມັນບໍ່ແນະນຳເພາະມັນບໍ່ເຂົ້າກັນໄດ້." + +#: ../source/guides/packaging-namespace-packages.rst:278 +msgid "" +"Finally, every distribution must provide the ``namespace_packages`` argument " +"to :func:`~setuptools.setup` in :file:`setup.py`. For example:" +msgstr "ສຸດທ້າຍ, ທຸກຊຸດແຈກຢາຍຕ້ອງລະບຸ ``namespace_packages`` ໃນ :file:`setup.py`." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:5 +msgid "" +"Publishing package distribution releases using GitHub Actions CI/CD workflows" +msgstr "ການເຜີຍແຜ່ແພັກເກດໂດຍໃຊ້ GitHub Actions CI/CD" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:7 +msgid "" +"`GitHub Actions CI/CD`_ allows you to run a series of commands whenever an " +"event occurs on the GitHub platform. One popular choice is having a workflow " +"that's triggered by a ``push`` event. This guide shows you how to publish a " +"Python distribution whenever a tagged commit is pushed. It will use the " +"`pypa/gh-action-pypi-publish GitHub Action`_ for publishing. It also uses " +"GitHub's `upload-artifact`_ and `download-artifact`_ actions for temporarily " +"storing and downloading the source packages." +msgstr "" +"GitHub Actions CI/CD ຊ່ວຍໃຫ້ທ່ານສາມາດສັ່ງໃຫ້ລະບົບເຮັດວຽກອັດຕະໂນມັດເມື່ອມີເຫດການໃດໜຶ່ງເກີດຂຶ້ນ." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:19 +msgid "" +"This guide *assumes* that you already have a project that you know how to " +"build distributions for and *it lives on GitHub*. This guide also avoids " +"details of building platform specific projects. If you have binary " +"components, check out :ref:`cibuildwheel`'s GitHub Action examples." +msgstr "ຄູ່ມືນີ້ *ສົມມຸດ* ວ່າທ່ານມີໂຄງການທີ່ພ້ອມຈະ build ແລ້ວ ແລະ ມັນຢູ່ເທິງ GitHub." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:25 +msgid "Configuring Trusted Publishing" +msgstr "ການຕັ້ງຄ່າການເຜີຍແຜ່ທີ່ໜ້າເຊື່ອຖື (Trusted Publishing)" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:27 +msgid "" +"This guide relies on PyPI's `Trusted Publishing`_ implementation to connect " +"to `GitHub Actions CI/CD`_. This is recommended for security reasons, since " +"the generated tokens are created for each of your projects individually and " +"expire automatically. Otherwise, you'll need to generate an `API token`_ for " +"both PyPI and TestPyPI. In case of publishing to third-party indexes " +"like :doc:`devpi `, you may need to provide a username/password " +"combination." +msgstr "ຄູ່ມືນີ້ໃຊ້ລະບົບ Trusted Publishing ຂອງ PyPI ເພື່ອເຊື່ອມຕໍ່ກັບ GitHub Actions." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:35 +msgid "" +"Since this guide will demonstrate uploading to both PyPI and TestPyPI, we'll " +"need two trusted publishers configured. The following steps will lead you " +"through creating the \"pending\" publishers for your new :term:`PyPI project " +"`. However it is also possible to add `Trusted Publishing`_ to any " +"pre-existing project, if you are its owner." +msgstr "" +"ເນື່ອງຈາກຄູ່ມືນີ້ຈະສາທິດການອັບໂຫຼດໄປທັງ PyPI ແລະ TestPyPI, " +"ພວກເຮົາຈະຕ້ອງມີການຕັ້ງຄ່າຜູ້ເຜີຍແຜ່ທີ່ເຊື່ອຖືໄດ້ (trusted publishers) ສອງແຫ່ງ. " +"ຂັ້ນຕອນຕໍ່ໄປນີ້ຈະນໍາພາທ່ານສ້າງຜູ້ເຜີຍແຜ່ແບບ \"pending\" ສໍາລັບ :term:`PyPI project " +"` ໃໝ່ຂອງທ່ານ. ຢ່າງໃດກໍຕາມ, ທ່ານຍັງສາມາດເພີ່ມ `Trusted Publishing`_ " +"ໃສ່ໂຄງການໃດໜຶ່ງທີ່ມີຢູ່ກ່ອນແລ້ວໄດ້, ຖ້າທ່ານເປັນເຈົ້າຂອງມັນ." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:44 +msgid "" +"If you followed earlier versions of this guide, you have created the secrets " +"``PYPI_API_TOKEN`` and ``TEST_PYPI_API_TOKEN`` for direct PyPI and TestPyPI " +"access. These are obsolete now and you should remove them from your GitHub " +"repository and revoke them in your PyPI and TestPyPI account settings in " +"case you are replacing your old setup with the new one." +msgstr "ຖ້າທ່ານເຄີຍໃຊ້ API Token ແບບເກົ່າ, ມັນຫຼ້າສະໄໝແລ້ວ ແລະ ຄວນປ່ຽນມາໃຊ້ວິທີໃໝ່ນີ້." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:51 +msgid "Let's begin! 🚀" +msgstr "ມາເລີ່ມກັນເລີຍ! 🚀" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:53 +msgid "Go to https://pypi.org/manage/account/publishing/." +msgstr "ໄປທີ່ https://pypi.org/manage/account/publishing/." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:54 +msgid "" +"Fill in the name you wish to publish your new :term:`PyPI project ` " +"under (the ``name`` value in your ``setup.cfg`` or ``pyproject.toml``), the " +"GitHub repository owner's name (org or user), and repository name, and the " +"name of the release workflow file under the ``.github/`` folder, " +"see :ref:`workflow-definition`. Finally, add the name of the GitHub " +"Environment (``pypi``) we're going set up under your repository. Register " +"the trusted publisher." +msgstr "ປ້ອນຂໍ້ມູນຕ່າງໆ ເຊັ່ນ ຊື່ໂຄງການ, ຊື່ເຈົ້າຂອງ repository, ແລະ ຊື່ workflow ໃຫ້ຖືກຕ້ອງ." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:63 +msgid "" +"Now, go to https://test.pypi.org/manage/account/publishing/ and repeat the " +"second step, but this time, enter ``testpypi`` as the name of the GitHub " +"Environment." +msgstr "" +"ຈາກນັ້ນໄປທີ່ TestPyPI ແລະ ເຮັດຂັ້ນຕອນດຽວກັນ ແຕ່ໃຫ້ໃຊ້ຊື່ Environment ວ່າ ``testpypi``." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:66 +msgid "" +"Your \"pending\" publishers are now ready for their first use and will " +"create your projects automatically once you use them for the first time." +msgstr "Trusted publishers ຂອງທ່ານພ້ອມໃຊ້ງານແລ້ວ." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:72 +msgid "" +"If you don't have a TestPyPI account, you'll need to create it. It's not the " +"same as a regular PyPI account." +msgstr "ຖ້າທ່ານຍັງບໍ່ມີບັນຊີ TestPyPI, ທ່ານຕ້ອງສ້າງມັນກ່ອນ (ມັນແຍກຈາກບັນຊີ PyPI ປົກກະຕິ)." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:78 +msgid "" +"For security reasons, you must require `manual approval `_ on each run for the ``pypi`` environment." +msgstr "" +"ເພື່ອຄວາມປອດໄພ, ທ່ານຄວນຕັ້ງຄ່າໃຫ້ມີການອະນຸມັດດ້ວຍມື (manual approval) ສຳລັບ environment " +"``pypi``." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:85 +msgid "Creating a workflow definition" +msgstr "ການສ້າງໄຟລ໌ກຳນົດ workflow" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:87 +msgid "" +"GitHub CI/CD workflows are declared in YAML files stored in the ``.github/" +"workflows/`` directory of your repository." +msgstr "" +"Workflow ຂອງ GitHub ຖືກກຳນົດໃນໄຟລ໌ YAML ທີ່ເກັບໄວ້ໃນໂຟນເດີ ``.github/workflows/``." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:90 +msgid "Let's create a ``.github/workflows/publish-to-pypi.yml`` file." +msgstr "ໃຫ້ສ້າງໄຟລ໌ ``.github/workflows/publish-to-pypi.yml``." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:93 +msgid "" +"Start it with a meaningful name and define the event that should make GitHub " +"run this workflow:" +msgstr "ເລີ່ມຕົ້ນດ້ວຍການຕັ້ງຊື່ທີ່ສື່ຄວາມໝາຍ ແລະ ກຳນົດເຫດການທີ່ຈະໃຫ້ workflow ນີ້ເຮັດວຽກ:" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:101 +msgid "Checking out the project and building distributions" +msgstr "ການກວດສອບໂຄງການ ແລະ ການ build ຊຸດແຈກຢາຍ" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:103 +msgid "" +"We will have to define two jobs to publish to PyPI and TestPyPI " +"respectively, and an additional job to build the distribution packages." +msgstr "ເຮົາຕ້ອງກຳນົດສອງ job ສຳລັບການເຜີຍແຜ່ ແລະ ອີກໜຶ່ງ job ສຳລັບການ build." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "ຄວນແຍກ build job ອອກຈາກ publishing job." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 +msgid "" +"First, we'll define the job for building the dist packages of your project " +"and storing them for later use:" +msgstr "ກ່ອນອື່ນ, ເຮົາຈະກຳນົດ job ສຳລັບ build ແພັກເກດ ແລະ ເກັບມັນໄວ້ໃຊ້ພາຍຫຼັງ:" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 +msgid "" +"If you adapt this workflow to build multiple platform-specific wheels, use " +"uniquely named artifacts for each build job and adjust the download step " +"accordingly. The `cibuildwheel GitHub Actions examples`_ show a fuller wheel " +"matrix layout." +msgstr "ຖ້າທ່ານ build wheels ສຳລັບຫຼາຍແພລັດຟອມ, ໃຫ້ຕັ້ງຊື່ artifact ໃຫ້ແຕກຕ່າງກັນ." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 +msgid "" +"This will download your repository into the CI runner and then install and " +"activate the newest available Python 3 release." +msgstr "ສິ່ງນີ້ຈະດາວໂຫຼດ repository ຂອງທ່ານລົງໃນ CI runner ແລະ ຕິດຕັ້ງ Python 3 ລຸ້ນໃໝ່ສຸດ." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 +msgid "" +"And now we can build the dists from source and store them. In this example, " +"we'll use the ``build`` package. So add this to the steps list:" +msgstr "ຕອນນີ້ເຮົາສາມາດ build ຈາກຊອສໂຄ້ດ ແລະ ເກັບມັນໄວ້ໄດ້ແລ້ວ." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 +msgid "Defining a workflow job environment" +msgstr "ການກຳນົດ Environment ສຳລັບ Workflow Job" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 +msgid "" +"Now, let's add initial setup for our job that will publish to PyPI. It's a " +"process that will execute commands that we'll define later. In this guide, " +"we'll use the latest stable Ubuntu LTS version provided by GitHub Actions. " +"This also defines a GitHub Environment for the job to run in its context and " +"a URL to be displayed in GitHub's UI nicely. Additionally, it allows " +"acquiring an OpenID Connect token that the ``pypi-publish`` actions needs to " +"implement secretless Trusted Publishing to PyPI." +msgstr "ໃຫ້ເຮົາຕັ້ງຄ່າ Environment ສຳລັບ job ທີ່ຈະເຜີຍແຜ່ໄປຍັງ PyPI." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +msgid "" +"This will also ensure that the PyPI publishing workflow is only triggered if " +"the current commit is tagged." +msgstr "ສິ່ງນີ້ຍັງຊ່ວຍໃຫ້ໝັ້ນໃຈວ່າການເຜີຍແຜ່ໄປ PyPI ຈະເກີດຂຶ້ນກໍຕໍ່ເມື່ອມີການຕິດ Tag ເທົ່ານັ້ນ." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 +msgid "Publishing the distribution to PyPI" +msgstr "ການເຜີຍແຜ່ແພັກເກດໄປຍັງ PyPI" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 +msgid "Finally, add the following steps at the end:" +msgstr "ສຸດທ້າຍ, ໃຫ້ເພີ່ມຂັ້ນຕອນຕໍ່ໄປນີ້ໃສ່ຕອນທ້າຍ:" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 +msgid "" +"This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " +"stored distribution package has been downloaded by the `download-artifact`_ " +"action, it uploads the contents of the ``dist/`` folder into PyPI " +"unconditionally." +msgstr "" +"ຂັ້ນຕອນນີ້ໃຊ້ GitHub Action ຂອງ pypa ເພື່ອອັບໂຫຼດເນື້ອຫາໃນໂຟນເດີ ``dist/`` ໄປຍັງ PyPI." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 +msgid "" +"Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " +"and uploads :pep:`740`-compatible attestations for each distribution by " +"default. No additional manual signing steps are required." +msgstr "" +"ຕັ້ງແຕ່ລຸ້ນ v1.11.0 ເປັນຕົ້ນໄປ, ມັນຈະສ້າງ ແລະ ອັບໂຫຼດໃບຢັ້ງຢືນ (attestations) ໃຫ້ໂດຍອັດຕະໂນມັດ." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 +msgid "Separate workflow for publishing to TestPyPI" +msgstr "ແຍກ Workflow ສຳລັບການເຜີຍແຜ່ໄປ TestPyPI" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 +msgid "" +"Now, repeat these steps and create another job for publishing to the " +"TestPyPI package index under the ``jobs`` section:" +msgstr "ຕອນນີ້, ໃຫ້ເຮັດຂັ້ນຕອນເຫຼົ່ານີ້ຄືນໃໝ່ເພື່ອສ້າງ job ສຳລັບ TestPyPI:" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +msgid "" +"Requiring manual approvals in the ``testpypi`` GitHub Environment is " +"typically unnecessary as it's designed to run on each commit to the main " +"branch and is often used to indicate a healthy release publishing pipeline." +msgstr "ການຂໍອະນຸມັດດ້ວຍມືສຳລັບ TestPyPI ມັກຈະບໍ່ຈຳເປັນ." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 +msgid "The whole CI/CD workflow" +msgstr "CI/CD workflow ທັງໝົດ" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 +msgid "" +"This paragraph showcases the whole workflow after following the above guide." +msgstr "ສ່ວນນີ້ສະແດງໃຫ້ເຫັນ workflow ທັງໝົດຫຼັງຈາກທີ່ເຮັດຕາມຄູ່ມືຂ້າງເທິງ." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 +msgid "That's all, folks!" +msgstr "ໝົດພຽງເທົ່ານີ້!" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 +msgid "" +"Now, whenever you push a tagged commit to your Git repository remote on " +"GitHub, this workflow will publish it to PyPI. And it'll publish any push to " +"TestPyPI which is useful for providing test builds to your alpha users as " +"well as making sure that your release pipeline remains healthy!" +msgstr "ຕອນນີ້, ທຸກຄັ້ງທີ່ທ່ານ push ໂຄ້ດທີ່ມີ tag, ລະບົບຈະເຜີຍແຜ່ໄປ PyPI ໃຫ້ໂດຍອັດຕະໂນມັດ." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 +msgid "" +"If your repository has frequent commit activity and every push is uploaded " +"to TestPyPI as described, the project might exceed the `PyPI project size " +"limit `_. The limit could be " +"increased, but a better solution may constitute to use a PyPI-compatible " +"server like :ref:`pypiserver` in the CI for testing purposes." +msgstr "ຖ້າ repository ຂອງທ່ານມີການ push ຖີ່ເກີນໄປ, ທ່ານອາດຈະເກີນຂີດຈຳກັດຂະໜາດຂອງ PyPI." + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 +msgid "" +"It is recommended to keep the integrated GitHub Actions at their latest " +"versions, updating them frequently." +msgstr "ຂໍແນະນຳໃຫ້ອັບເດດ GitHub Actions ໃຫ້ເປັນລຸ້ນໃໝ່ລ່າສຸດຢູ່ສະເໝີ." + +#: ../source/guides/section-build-and-publish.rst:3 +msgid "Building and Publishing" +msgstr "ການສ້າງ ແລະ ການເຜີຍແຜ່" + +#: ../source/guides/section-hosting.rst:3 +msgid "Hosting" +msgstr "ໂຮສຕິ້ງ" + +#: ../source/guides/section-install.rst:3 +#: ../source/specifications/pylock-toml.rst:744 +msgid "Installation" +msgstr "ການຕິດຕັ້ງ" + +#: ../source/guides/single-sourcing-package-version.rst:-1 +msgid "0; url=../../discussions/single-source-version/" +msgstr "0; url=../../discussions/single-source-version/" + +#: ../source/guides/single-sourcing-package-version.rst:6 +msgid "Redirecting stale single-source package version link..." +msgstr "ກຳລັງປ່ຽນເສັ້ນທາງລິ້ງລຸ້ນແພັກເກດທີ່ຫຼ້າສະໄໝ..." + +#: ../source/guides/single-sourcing-package-version.rst:8 +msgid "" +"If the page doesn't automatically refresh, see :ref:`single-source-version`." +msgstr "ຖ້າໜ້າເວັບບໍ່ໂຫຼດໃໝ່ໂດຍອັດຕະໂນມັດ, ໃຫ້ເບິ່ງ :ref:`single-source-version`." + +#: ../source/guides/supporting-multiple-python-versions.rst:7 +msgid "Supporting multiple Python versions" +msgstr "ການຮອງຮັບ Python ຫຼາຍລຸ້ນ" + +#: ../source/guides/supporting-multiple-python-versions.rst:10 +msgid "2014-12-24" +msgstr "2014-12-24" + +#: ../source/guides/supporting-multiple-python-versions.rst:36 +msgid "" +"In addition to the work required to create a Python package, it is often " +"necessary that the package must be made available on different versions of " +"Python. Different Python versions may contain different (or renamed) " +"standard library packages, and the changes between Python versions 2.x and " +"3.x include changes in the language syntax." +msgstr "ນອກຈາກການສ້າງແພັກເກດແລ້ວ, ສິ່ງສຳຄັນແມ່ນຕ້ອງເຮັດໃຫ້ແພັກເກດໃຊ້ໄດ້ກັບ Python ຫຼາຍໆລຸ້ນ." + +#: ../source/guides/supporting-multiple-python-versions.rst:42 +msgid "" +"Performed manually, all the testing required to ensure that the package " +"works correctly on all the target Python versions (and OSs!) could be very " +"time-consuming. Fortunately, several tools are available for dealing with " +"this, and these will briefly be discussed here." +msgstr "ການທົດສອບດ້ວຍມືທຸກໆລຸ້ນອາດຈະໃຊ້ເວລາດົນຫຼາຍ." + +#: ../source/guides/supporting-multiple-python-versions.rst:48 +msgid "Automated testing and continuous integration" +msgstr "ການທົດສອບອັດຕະໂນມັດ ແລະ Continuous Integration" + +#: ../source/guides/supporting-multiple-python-versions.rst:50 +msgid "" +"Several hosted services for automated testing are available. These services " +"will typically monitor your source code repository (e.g. at `GitHub `_ or `Bitbucket `_) and run your " +"project's test suite every time a new commit is made." +msgstr "ມີການບໍລິການຫຼາຍຢ່າງສຳລັບການທົດສອບອັດຕະໂນມັດ." + +#: ../source/guides/supporting-multiple-python-versions.rst:55 +msgid "" +"These services also offer facilities to run your project's test suite on " +"*multiple versions of Python*, giving rapid feedback about whether the code " +"will work, without the developer having to perform such tests themselves." +msgstr "ບໍລິການເຫຼົ່ານີ້ຊ່ວຍໃຫ້ທ່ານທົດສອບກັບ Python ຫຼາຍໆລຸ້ນໄດ້ພ້ອມກັນ." + +#: ../source/guides/supporting-multiple-python-versions.rst:59 +msgid "" +"Wikipedia has an extensive `comparison `_ of many continuous-" +"integration systems. There are two hosted services which when used in " +"conjunction provide automated testing across Linux, Mac and Windows:" +msgstr "ມີສອງບໍລິການທີ່ມັກໃຊ້ຮ່ວມກັນເພື່ອທົດສອບທັງ Linux, Mac ແລະ Windows:" + +#: ../source/guides/supporting-multiple-python-versions.rst:65 +msgid "" +"`GitHub Actions `_ provides Windows, " +"Linux and a macOS environments." +msgstr "`GitHub Actions` ໃຫ້ບໍລິການທັງ Windows, Linux ແລະ macOS." + +#: ../source/guides/supporting-multiple-python-versions.rst:67 +msgid "" +"`Appveyor `_ provides a Windows environment " +"(Windows Server 2012)." +msgstr "`Appveyor` ໃຫ້ບໍລິການສະພາບແວດລ້ອມ Windows." + +#: ../source/guides/supporting-multiple-python-versions.rst:78 +msgid "" +"Both `GitHub Actions`_ and Appveyor_ require a `YAML `_-" +"formatted file as specification for the instructions for testing. If any " +"tests fail, the output log for that specific configuration can be inspected." +msgstr "ທັງສອງຢ່າງນີ້ຕ້ອງການໄຟລ໌ YAML ໃນການຕັ້ງຄ່າ." + +#: ../source/guides/supporting-multiple-python-versions.rst:83 +msgid "" +"For Python projects that are intended to be deployed on both Python 2 and 3 " +"with a single-source strategy, there are a number of options." +msgstr "ສຳລັບໂຄງການທີ່ຕ້ອງການໃຊ້ໄດ້ທັງ Python 2 ແລະ 3 ດ້ວຍຊອສໂຄ້ດດຽວ, ມີຫຼາຍທາງເລືອກ." + +#: ../source/guides/supporting-multiple-python-versions.rst:87 +msgid "Tools for single-source Python packages" +msgstr "ເຄື່ອງມືສຳລັບແພັກເກດ Python ແບບຊອສໂຄ້ດດຽວ (Single-source)" + +#: ../source/guides/supporting-multiple-python-versions.rst:89 +msgid "" +"`six `_ is a tool developed by Benjamin " +"Peterson for wrapping over the differences between Python 2 and Python 3. " +"The six_ package has enjoyed widespread use and may be regarded as a " +"reliable way to write a single-source Python module that can be use in both " +"Python 2 and 3. The six_ module can be used from as early as Python 2.5. A " +"tool called `modernize `_, developed by " +"Armin Ronacher, can be used to automatically apply the code modifications " +"provided by six_." +msgstr "`six` ແມ່ນເຄື່ອງມືທີ່ຊ່ວຍຈັດການຄວາມແຕກຕ່າງລະຫວ່າງ Python 2 ແລະ 3." + +#: ../source/guides/supporting-multiple-python-versions.rst:98 +msgid "" +"Similar to six_, `python-future `_ " +"is a package that provides a compatibility layer between Python 2 and Python " +"3 source code; however, unlike six_, this package aims to provide " +"interoperability between Python 2 and Python 3 with a language syntax that " +"matches one of the two Python versions: one may use" +msgstr "`python-future` ກໍຄ້າຍຄືກັບ six ແຕ່ເນັ້ນໃຫ້ໃຊ້ syntax ຂອງລຸ້ນໃດລຸ້ນໜຶ່ງ." + +#: ../source/guides/supporting-multiple-python-versions.rst:105 +msgid "a Python 2 (by syntax) module in a Python 3 project." +msgstr "ໃຊ້ໂມດູນ Python 2 (ຕາມ syntax) ໃນໂຄງການ Python 3." + +#: ../source/guides/supporting-multiple-python-versions.rst:106 +msgid "a Python 3 (by syntax) module in a *Python 2* project." +msgstr "ໃຊ້ໂມດູນ Python 3 (ຕາມ syntax) ໃນໂຄງການ *Python 2*." + +#: ../source/guides/supporting-multiple-python-versions.rst:108 +msgid "" +"Because of the bi-directionality, python-future_ offers a pathway to " +"converting a Python 2 package to Python 3 syntax module-by-module. However, " +"in contrast to six_, python-future_ is supported only from Python 2.6. " +"Similar to modernize_ for six_, python-future_ comes with two scripts called " +"``futurize`` and ``pasteurize`` that can be applied to either a Python 2 " +"module or a Python 3 module respectively." +msgstr "`python-future` ຊ່ວຍໃຫ້ທ່ານຄ່ອຍໆປ່ຽນໂມດູນໄປທີລະໜ້ອຍໄດ້." + +#: ../source/guides/supporting-multiple-python-versions.rst:115 +msgid "" +"Use of six_ or python-future_ adds an additional runtime dependency to your " +"package: with python-future_, the ``futurize`` script can be called with the " +"``--stage1`` option to apply only the changes that Python 2.6+ already " +"provides for forward-compatibility to Python 3. Any remaining compatibility " +"problems would require manual changes." +msgstr "ການໃຊ້ six ຫຼື python-future ຈະເຮັດໃຫ້ແພັກເກດຂອງທ່ານມີ dependency ເພີ່ມຂຶ້ນ." + +#: ../source/guides/supporting-multiple-python-versions.rst:122 +msgid "What's in which Python?" +msgstr "ມີຫຍັງໃໝ່ໃນແຕ່ລະລຸ້ນຂອງ Python?" + +#: ../source/guides/supporting-multiple-python-versions.rst:124 +msgid "" +"Ned Batchelder provides a list of changes in each Python release for `Python " +"2 `__, " +"`Python 3.0-3.3 `__ and `Python 3.4-3.6 `__. These " +"lists may be used to check whether any changes between Python versions may " +"affect your package." +msgstr "Ned Batchelder ໄດ້ລວບລວມລາຍການການປ່ຽນແປງໃນແຕ່ລະລຸ້ນຂອງ Python ໄວ້." + +#: ../source/guides/supporting-windows-using-appveyor.rst:5 +msgid "Supporting Windows using Appveyor" +msgstr "ການຮອງຮັບ Windows ໂດຍໃຊ້ Appveyor" + +#: ../source/guides/supporting-windows-using-appveyor.rst:8 +msgid "2015-12-03" +msgstr "2015-12-03" + +#: ../source/guides/supporting-windows-using-appveyor.rst:10 +msgid "" +"This section covers how to use the free `Appveyor`_ continuous integration " +"service to provide Windows support for your project. This includes testing " +"the code on Windows, and building Windows-targeted binaries for projects " +"that use C extensions." +msgstr "ສ່ວນນີ້ຈະອະທິບາຍວິທີໃຊ້ Appveyor ເພື່ອຮອງຮັບ Windows." + +#: ../source/guides/supporting-windows-using-appveyor.rst:19 +msgid "" +"Many projects are developed on Unix by default, and providing Windows " +"support can be a challenge, because setting up a suitable Windows test " +"environment is non-trivial, and may require buying software licenses." +msgstr "ຫຼາຍໂຄງການພັດທະນາເທິງ Unix ເປັນຫຼັກ, ການຮອງຮັບ Windows ຈຶ່ງອາດເປັນເລື່ອງຍາກ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:23 +msgid "" +"Windows users typically do not have access to a C compiler, and therefore " +"are reliant on projects that use C extensions distributing binary wheels on " +"PyPI in order for the distribution to be installable via ``python -m pip " +"install ``. By using Appveyor as a build service (even if not using it " +"for testing) it is possible for projects without a dedicated Windows " +"environment to provide Windows-targeted binaries." +msgstr "ຜູ້ໃຊ້ Windows ສ່ວນໃຫຍ່ບໍ່ມີຄອມໄພເລີ C ດັ່ງນັ້ນເຂົາເຈົ້າຈຶ່ງຕ້ອງເພິ່ງພາ binary wheels." + +#: ../source/guides/supporting-windows-using-appveyor.rst:31 +msgid "Setting up" +msgstr "ການຕັ້ງຄ່າ" + +#: ../source/guides/supporting-windows-using-appveyor.rst:33 +msgid "" +"In order to use Appveyor to build Windows wheels for your project, you must " +"have an account on the service. Instructions on setting up an account are " +"given in `the Appveyor documentation `__. " +"The free tier of account is perfectly adequate for open source projects." +msgstr "ທ່ານຕ້ອງມີບັນຊີ Appveyor ກ່ອນ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:38 +msgid "" +"Appveyor provides integration with `GitHub`_ and `Bitbucket`_, so as long as " +"your project is hosted on one of those two services, setting up Appveyor " +"integration is straightforward." +msgstr "Appveyor ສາມາດເຊື່ອມຕໍ່ກັບ GitHub ແລະ Bitbucket ໄດ້." + +#: ../source/guides/supporting-windows-using-appveyor.rst:42 +msgid "" +"Once you have set up your Appveyor account and added your project, Appveyor " +"will automatically build your project each time a commit occurs." +msgstr "ເມື່ອຕັ້ງຄ່າແລ້ວ, Appveyor ຈະ build ໂຄງການໃຫ້ອັດຕະໂນມັດທຸກຄັ້ງທີ່ມີການ commit." + +#: ../source/guides/supporting-windows-using-appveyor.rst:46 +msgid "Adding Appveyor support to your project" +msgstr "ການເພີ່ມການຮອງຮັບ Appveyor ເຂົ້າໃນໂຄງການ" + +#: ../source/guides/supporting-windows-using-appveyor.rst:48 +msgid "" +"In order to define how Appveyor should build your project, you need to add " +"an :file:`appveyor.yml` file to your project. The full details of what can " +"be included in the file are covered in the Appveyor documentation. This " +"guide will provide the details necessary to set up wheel builds." +msgstr "ທ່ານຕ້ອງເພີ່ມໄຟລ໌ :file:`appveyor.yml` ເຂົ້າໃນໂຄງການ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:53 +msgid "" +"Appveyor includes by default all of the compiler toolchains needed to build " +"extensions for Python. For Python 2.7, 3.5+ and 32-bit versions of 3.3 and " +"3.4, the tools work out of the box. But for 64-bit versions of Python 3.3 " +"and 3.4, there is a small amount of additional configuration needed to let " +"distutils know where to find the 64-bit compilers. (From 3.5 onwards, the " +"version of Visual Studio used includes 64-bit compilers with no additional " +"setup)." +msgstr "Appveyor ມີຄອມໄພເລີທຸກຢ່າງທີ່ຈຳເປັນມາໃຫ້ແລ້ວ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:61 +msgid "appveyor.yml" +msgstr "appveyor.yml" + +#: ../source/guides/supporting-windows-using-appveyor.rst:67 +msgid "" +"This file can be downloaded from `here `__." +msgstr "ທ່ານສາມາດດາວໂຫຼດໄຟລ໌ນີ້ໄດ້ຈາກບ່ອນນີ້." + +#: ../source/guides/supporting-windows-using-appveyor.rst:69 +msgid "" +"The :file:`appveyor.yml` file must be located in the root directory of your " +"project. It is in ``YAML`` format, and consists of a number of sections." +msgstr "ໄຟລ໌ :file:`appveyor.yml` ຕ້ອງຢູ່ທີ່ໂຟນເດີຫຼັກຂອງໂຄງການ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:72 +msgid "" +"The ``environment`` section is the key to defining the Python versions for " +"which your wheels will be created. Appveyor comes with Python 2.6, 2.7, 3.3, " +"3.4 and 3.5 installed, in both 32-bit and 64-bit builds. The example file " +"builds for all of these environments except Python 2.6. Installing for " +"Python 2.6 is more complex, as it does not come with pip included. We don't " +"support 2.6 in this document (as Windows users still using Python 2 are " +"generally able to move to Python 2.7 without too much difficulty)." +msgstr "ສ່ວນ ``environment`` ແມ່ນບ່ອນກຳນົດລຸ້ນຂອງ Python ທີ່ຈະໃຊ້ build wheels." + +#: ../source/guides/supporting-windows-using-appveyor.rst:80 +msgid "" +"The ``install`` section uses pip to install any additional software that the " +"project may require. The only requirement for building wheels is the " +"``wheel`` project, but projects may wish to customise this code in certain " +"circumstances (for example, to install additional build packages such as " +"``Cython``, or test tools such as ``tox``)." +msgstr "ສ່ວນ ``install`` ໃຊ້ສຳລັບຕິດຕັ້ງຊອບແວເພີ່ມເຕີມ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:86 +msgid "" +"The ``build`` section simply switches off builds - there is no build step " +"needed for Python, unlike languages like ``C#``." +msgstr "ສ່ວນ ``build`` ໃນທີ່ນີ້ແມ່ນປິດໄວ້ ເພາະ Python ບໍ່ຈຳເປັນຕ້ອງ build ແບບພາສາອື່ນ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:89 +msgid "" +"The main sections that will need to be tailored to your project are " +"``test_script`` and ``after_test``." +msgstr "ສ່ວນຫຼັກທີ່ທ່ານຕ້ອງປັບແຕ່ງແມ່ນ ``test_script`` ແລະ ``after_test``." + +#: ../source/guides/supporting-windows-using-appveyor.rst:92 +msgid "" +"The ``test_script`` section is where you will run your project's tests. The " +"supplied file runs your test suite using ``setup.py test``. If you are only " +"interested in building wheels, and not in running your tests on Windows, you " +"can replace this section with a dummy command such as ``echo Skipped " +"Tests``. You may wish to use another test tool, such as ``nose`` " +"or :file:`py.test`. Or you may wish to use a test driver like ``tox`` - " +"however if you are using ``tox`` there are some additional configuration " +"changes you will need to consider, which are described below." +msgstr "ສ່ວນ ``test_script`` ແມ່ນບ່ອນທີ່ທ່ານສັ່ງໃຫ້ທົດສອບໂຄງການ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:101 +msgid "" +"The ``after_test`` runs once your tests have completed, and so is where the " +"wheels should be built. Assuming your project uses the recommended tools " +"(specifically, ``setuptools``) then the ``setup.py bdist_wheel`` command " +"will build your wheels." +msgstr "" +"ສ່ວນ ``after_test`` ຈະເຮັດວຽກຫຼັງຈາກທົດສອບແລ້ວ ແລະ ເປັນບ່ອນທີ່ເຮົາຈະ build wheels." + +#: ../source/guides/supporting-windows-using-appveyor.rst:106 +msgid "" +"Note that wheels will only be built if your tests succeed. If you expect " +"your tests to fail on Windows, you can skip them as described above." +msgstr "ໝາຍເຫດ wheels ຈະຖືກ build ກໍຕໍ່ເມື່ອການທົດສອບຜ່ານເທົ່ານັ້ນ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:111 +msgid "Support script" +msgstr "ສະຄຣິບຊ່ວຍເຫຼືອ" + +#: ../source/guides/supporting-windows-using-appveyor.rst:113 +msgid "" +"The :file:`appveyor.yml` file relies on a single support script, which sets " +"up the environment to use the SDK compiler for 64-bit builds on Python 3.3 " +"and 3.4. For projects which do not need a compiler, or which don't support " +"3.3 or 3.4 on 64-bit Windows, only the :file:`appveyor.yml` file is needed." +msgstr "ໄຟລ໌ :file:`appveyor.yml` ຕ້ອງໃຊ້ສະຄຣິບຊ່ວຍເພື່ອຕັ້ງຄ່າສະພາບແວດລ້ອມ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:118 +msgid "" +"`build.cmd `__ is a Windows batch " +"script that runs a single command in an environment with the appropriate " +"compiler for the selected Python version. All you need to do is to set the " +"single environment variable ``DISTUTILS_USE_SDK`` to a value of ``1`` and " +"the script does the rest. It sets up the SDK needed for 64-bit builds of " +"Python 3.3 or 3.4, so don't set the environment variable for any other " +"builds." +msgstr "`build.cmd` ແມ່ນສະຄຣິບ Windows batch ທີ່ຊ່ວຍເລືອກຄອມໄພເລີທີ່ຖືກຕ້ອງ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:125 +msgid "" +"You can simply download the batch file and include it in your project " +"unchanged." +msgstr "ທ່ານສາມາດດາວໂຫຼດໄຟລ໌ນີ້ໄປໄວ້ໃນໂຄງການໄດ້ເລີຍໂດຍບໍ່ຕ້ອງປ່ຽນແປງຫຍັງ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:129 +msgid "Access to the built wheels" +msgstr "ການເຂົ້າເຖິງ wheels ທີ່ build ແລ້ວ" + +#: ../source/guides/supporting-windows-using-appveyor.rst:131 +msgid "" +"When your build completes, the built wheels will be available from the " +"Appveyor control panel for your project. They can be found by going to the " +"build status page for each build in turn. At the top of the build output " +"there is a series of links, one of which is \"Artifacts\". That page will " +"include a list of links to the wheels for that Python version / " +"architecture. You can download those wheels and upload them to PyPI as part " +"of your release process." +msgstr "" +"ເມື່ອ build ສຳເລັດ, ທ່ານສາມາດດາວໂຫຼດ wheels ໄດ້ຈາກໜ້າ \"Artifacts\" ໃນ Appveyor." + +#: ../source/guides/supporting-windows-using-appveyor.rst:142 +msgid "Testing with tox" +msgstr "ການທົດສອບດ້ວຍ tox" + +#: ../source/guides/supporting-windows-using-appveyor.rst:144 +msgid "" +"Many projects use the :doc:`Tox ` tool to run their tests. It " +"ensures that tests are run in an isolated environment using the exact files " +"that will be distributed by the project." +msgstr "ຫຼາຍໂຄງການໃຊ້ `Tox` ເພື່ອທົດສອບໃນສະພາບແວດລ້ອມທີ່ແຍກສ່ວນ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:148 +msgid "" +"In order to use ``tox`` on Appveyor there are a couple of additional " +"considerations (in actual fact, these issues are not specific to Appveyor, " +"and may well affect other CI systems)." +msgstr "ການໃຊ້ ``tox`` ເທິງ Appveyor ມີບາງຢ່າງທີ່ຕ້ອງພິຈາລະນາເພີ່ມເຕີມ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:152 +msgid "" +"By default, ``tox`` only passes a chosen subset of environment variables to " +"the test processes. Because ``distutils`` uses environment variables to " +"control the compiler, this \"test isolation\" feature will cause the tests " +"to use the wrong compiler by default." +msgstr "ໂດຍມາດຕະຖານແລ້ວ ``tox`` ຈະສົ່ງຜ່ານຕົວປ່ຽນ environment ພຽງບາງສ່ວນເທົ່ານັ້ນ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:157 +msgid "" +"To force ``tox`` to pass the necessary environment variables to the " +"subprocess, you need to set the ``tox`` configuration option ``passenv`` to " +"list the additional environment variables to be passed to the subprocess. " +"For the SDK compilers, you need" +msgstr "ເພື່ອບັງຄັບໃຫ້ ``tox`` ສົ່ງຜ່ານຕົວປ່ຽນທີ່ຈຳເປັນ, ທ່ານຕ້ອງຕັ້ງຄ່າ ``passenv``." + +#: ../source/guides/supporting-windows-using-appveyor.rst:162 +msgid "``DISTUTILS_USE_SDK``" +msgstr "``DISTUTILS_USE_SDK``" + +#: ../source/guides/supporting-windows-using-appveyor.rst:163 +msgid "``MSSdk``" +msgstr "``MSSdk``" + +#: ../source/guides/supporting-windows-using-appveyor.rst:164 +msgid "``INCLUDE``" +msgstr "``INCLUDE``" + +#: ../source/guides/supporting-windows-using-appveyor.rst:165 +msgid "``LIB``" +msgstr "``LIB``" + +#: ../source/guides/supporting-windows-using-appveyor.rst:167 +msgid "" +"The ``passenv`` option can be set in your :file:`tox.ini`, or if you prefer " +"to avoid adding Windows-specific settings to your general project files, it " +"can be set by setting the ``TOX_TESTENV_PASSENV`` environment variable. The " +"supplied :file:`build.cmd` script does this by default whenever " +"``DISTUTILS_USE_SDK`` is set." +msgstr "ທ່ານສາມາດຕັ້ງຄ່າ ``passenv`` ໃນໄຟລ໌ :file:`tox.ini` ໄດ້." + +#: ../source/guides/supporting-windows-using-appveyor.rst:173 +msgid "" +"When used interactively, ``tox`` allows you to run your tests against " +"multiple environments (often, this means multiple Python versions). This " +"feature is not as useful in a CI environment like Appveyor, where all tests " +"are run in isolated environments for each configuration. As a result, " +"projects often supply an argument ``-e ENVNAME`` to ``tox`` to specify which " +"environment to use (there are default environments for most versions of " +"Python)." +msgstr "ໃນ CI ເຊັ່ນ Appveyor, ເຮົາມັກຈະລະບຸ environment ທີ່ຕ້ອງການດ້ວຍ ``-e ENVNAME``." + +#: ../source/guides/supporting-windows-using-appveyor.rst:180 +msgid "" +"However, this does *not* work well with a Windows CI system like Appveyor, " +"where there are (for example) two installations of Python 3.4 (32-bit and 64-" +"bit) available, but only one ``py34`` environment in ``tox``." +msgstr "" +"ແຕ່ມັນອາດຈະມີບັນຫາເມື່ອມີ Python ລຸ້ນດຽວກັນແຕ່ຄົນລະສະຖາປັດຕະຍະກຳ (32-bit vs 64-bit)." + +#: ../source/guides/supporting-windows-using-appveyor.rst:184 +msgid "" +"In order to run tests using ``tox``, therefore, projects should probably use " +"the default ``py`` environment in ``tox``, which uses the Python interpreter " +"that was used to run ``tox``. This will ensure that when Appveyor runs the " +"tests, they will be run with the configured interpreter." +msgstr "" +"ດັ່ງນັ້ນ, ຄວນໃຊ້ environment ``py`` ໃນ ``tox`` ເພື່ອໃຫ້ມັນໃຊ້ Python ຕົວທີ່ກຳລັງເຮັດວຽກຢູ່." + +#: ../source/guides/supporting-windows-using-appveyor.rst:189 +msgid "" +"In order to support running under the ``py`` environment, it is possible " +"that projects with complex ``tox`` configurations might need to modify " +"their :file:`tox.ini` file. Doing so is, however, outside the scope of this " +"document." +msgstr "ໂຄງການທີ່ມີການຕັ້ງຄ່າຊັບຊ້ອນອາດຈະຕ້ອງແກ້ໄຂ :file:`tox.ini`." + +#: ../source/guides/supporting-windows-using-appveyor.rst:195 +msgid "Automatically uploading wheels" +msgstr "ການອັບໂຫຼດ wheels ໂດຍອັດຕະໂນມັດ" + +#: ../source/guides/supporting-windows-using-appveyor.rst:197 +msgid "" +"It is possible to request Appveyor to automatically upload wheels. There is " +"a ``deployment`` step available in :file:`appveyor.yml` that can be used to " +"(for example) copy the built artifacts to a FTP site, or an Amazon S3 " +"instance. Documentation on how to do this is included in the Appveyor guides." +msgstr "ທ່ານສາມາດຕັ້ງຄ່າໃຫ້ Appveyor ອັບໂຫຼດ wheels ໃຫ້ໂດຍອັດຕະໂນມັດໄດ້." + +#: ../source/guides/supporting-windows-using-appveyor.rst:202 +msgid "" +"Alternatively, it would be possible to add a ``twine upload`` step to the " +"build. The supplied :file:`appveyor.yml` does not do this, as it is not " +"clear that uploading new wheels after every commit is desirable (although " +"some projects may wish to do this)." +msgstr "ຫຼື ທ່ານຈະເພີ່ມຂັ້ນຕອນ ``twine upload`` ເຂົ້າໄປກໍໄດ້." + +#: ../source/guides/supporting-windows-using-appveyor.rst:208 +msgid "External dependencies" +msgstr "External dependencies (ສິ່ງທີ່ຈຳເປັນຈາກພາຍນອກ)" + +#: ../source/guides/supporting-windows-using-appveyor.rst:210 +msgid "" +"The supplied scripts will successfully build any distribution that does not " +"rely on 3rd party external libraries for the build." +msgstr "ສະຄຣິບທີ່ໃຫ້ມານີ້ຈະ build ໄດ້ສະເພາະໂຄງການທີ່ບໍ່ມີໄລບຣາຣີພາຍນອກທີ່ຊັບຊ້ອນ." + +#: ../source/guides/supporting-windows-using-appveyor.rst:213 +msgid "" +"It is possible to add steps to the :file:`appveyor.yml` configuration " +"(typically in the \"install\" section) to download and/or build external " +"libraries needed by the distribution. And if needed, it is possible to add " +"extra configuration for the build to supply the location of these libraries " +"to the compiler. However, this level of configuration is beyond the scope of " +"this document." +msgstr "ທ່ານສາມາດເພີ່ມຂັ້ນຕອນການຕິດຕັ້ງໄລບຣາຣີພາຍນອກໄດ້ໃນສ່ວນ \"install\"." + +#: ../source/guides/supporting-windows-using-appveyor.rst:222 +msgid "Support scripts" +msgstr "ສະຄຣິບຊ່ວຍເຫຼືອ" + +#: ../source/guides/supporting-windows-using-appveyor.rst:224 +msgid "For reference, the SDK setup support script is listed here:" +msgstr "ນີ້ແມ່ນຕົວຢ່າງສະຄຣິບສຳລັບການຕັ້ງຄ່າ SDK:" + +#: ../source/guides/supporting-windows-using-appveyor.rst:226 +msgid "``appveyor-sample/build.cmd``" +msgstr "``appveyor-sample/build.cmd``" + +#: ../source/guides/tool-recommendations.rst:5 +msgid "Tool recommendations" +msgstr "ຄຳແນະນຳກ່ຽວກັບເຄື່ອງມື" + +#: ../source/guides/tool-recommendations.rst:7 +msgid "" +"The Python packaging landscape consists of many different tools. For many " +"tasks, the :term:`Python Packaging Authority ` (PyPA, the working group which encompasses many packaging tools and " +"maintains this guide) purposefully does not make a blanket recommendation; " +"for example, the reason there are many build backends is that the landscape " +"was opened up in order to enable the development of new backends serving " +"certain users' needs better than the previously unique backend, setuptools. " +"This guide does point to some tools that are widely recognized, and also " +"makes some recommendations of tools that you should *not* use because they " +"are deprecated or insecure." +msgstr "" +"ເຄື່ອງມືໃນການເຮັດແພັກເກດ Python ມີຫຼາຍຢ່າງ. PyPA ບໍ່ໄດ້ເຈາະຈົງແນະນຳອັນໃດອັນໜຶ່ງເປັນພິເສດ." + +#: ../source/guides/tool-recommendations.rst:20 +msgid "Virtual environments" +msgstr "ສະພາບແວດລ້ອມສະເໝືອນ (Virtual environments)" + +#: ../source/guides/tool-recommendations.rst:22 +msgid "" +"The standard tools to create and use virtual environments manually " +"are :ref:`virtualenv` (PyPA project) and :doc:`venv ` " +"(part of the Python standard library, though missing some features of " +"virtualenv)." +msgstr "ເຄື່ອງມືມາດຕະຖານໃນການສ້າງສະພາບແວດລ້ອມສະເໝືອນແມ່ນ ``virtualenv`` ແລະ ``venv``." + +#: ../source/guides/tool-recommendations.rst:28 +msgid "Installing packages" +msgstr "ການຕິດຕັ້ງແພັກເກດ" + +#: ../source/guides/tool-recommendations.rst:30 +msgid "" +":ref:`Pip` is the standard tool to install packages from :term:`PyPI `. You may want to read pip's recommendations " +"for :doc:`secure installs `. Pip is available by " +"default in most Python installations through the standard library " +"package :doc:`ensurepip `." +msgstr "``pip`` ແມ່ນເຄື່ອງມືມາດຕະຖານສຳລັບຕິດຕັ້ງແພັກເກດຈາກ PyPI." + +#: ../source/guides/tool-recommendations.rst:36 +msgid "" +"Alternatively, consider :ref:`pipx` for the specific use case of installing " +"Python applications that are distributed through PyPI and run from the " +"command line. Pipx is a wrapper around pip and venv that installs each " +"application into a dedicated virtual environment. This avoids conflicts " +"between the dependencies of different applications, and also with system-" +"wide applications making use of the same Python interpreter (especially on " +"Linux)." +msgstr "ສຳລັບການຕິດຕັ້ງແອັບພລິເຄຊັນ Python ທີ່ໃຊ້ຜ່ານຄຳສັ່ງ (CLI), ໃຫ້ພິຈາລະນາໃຊ້ ``pipx``." + +#: ../source/guides/tool-recommendations.rst:43 +msgid "" +"For scientific software specifically, consider :ref:`Conda` or :ref:`Spack`." +msgstr "ສຳລັບຊອບແວທາງວິທະຍາສາດ, ໃຫ້ພິຈາລະນາໃຊ້ ``Conda`` ຫຼື ``Spack``." + +#: ../source/guides/tool-recommendations.rst:45 +msgid "Write a \"pip vs. Conda\" comparison, here or in a new discussion." +msgstr "ຂຽນການປຽບທຽບ \"pip vs. Conda\" ຢູ່ບ່ອນນີ້ ຫຼື ໃນການສົນທະນາໃໝ່." + +#: ../source/guides/tool-recommendations.rst:47 +msgid "" +"Do **not** use ``easy_install`` (part of :ref:`setuptools`), which is " +"deprecated in favor of pip (see :ref:`pip vs easy_install` for details). " +"Likewise, do **not** use ``python setup.py install`` or ``python setup.py " +"develop``, which are also deprecated (see :ref:`setup-py-deprecated` for " +"background and :ref:`modernize-setup-py-project` for migration advice)." +msgstr "" +"**ຫ້າມ** ໃຊ້ ``easy_install`` ຫຼື ``python setup.py install`` ເພາະພວກມັນຫຼ້າສະໄໝແລ້ວ." + +#: ../source/guides/tool-recommendations.rst:55 +msgid "Lock files" +msgstr "ໄຟລ໌ລັອກ (Lock files)" + +#: ../source/guides/tool-recommendations.rst:57 +msgid "" +":ref:`pip-tools` and :ref:`Pipenv` are two recognized tools to create lock " +"files, which contain the exact versions of all packages installed into an " +"environment, for reproducibility purposes." +msgstr "" +"``pip-tools`` ແລະ ``Pipenv`` ແມ່ນເຄື່ອງມືສຳລັບສ້າງ lock files " +"ເພື່ອກຳນົດລຸ້ນແພັກເກດໃຫ້ແນ່ນອນ." + +#: ../source/guides/tool-recommendations.rst:63 +msgid "Build backends" +msgstr "ຕົວສ້າງສ່ວນຫຼັງ (Build backends)" + +#: ../source/guides/tool-recommendations.rst:67 +msgid "" +"Please, remember: this document does not seek to steer the reader towards a " +"particular tool, only to enumerate common tools. Different use cases often " +"need specialized workflows." +msgstr "ຈື່ໄວ້ວ່າ: ເອກະສານນີ້ພຽງແຕ່ບອກລາຍຊື່ເຄື່ອງມືທົ່ວໄປເທົ່ານັ້ນ." + +#: ../source/guides/tool-recommendations.rst:71 +msgid "" +"Popular :term:`build backends ` for pure-Python packages " +"include, in alphabetical order:" +msgstr "" +"ຕົວສ້າງສ່ວນຫຼັງ (build backends) ທີ່ນິຍົມສຳລັບແພັກເກດ Python ບໍລິສຸດມີດັ່ງນີ້ (ລຽງຕາມຕົວອັກສອນ):" + +#: ../source/guides/tool-recommendations.rst:74 +msgid "" +":doc:`Flit-core ` -- developed with but separate " +"from :ref:`Flit`. A minimal and opinionated build backend. It does not " +"support plugins." +msgstr "``Flit-core`` -- ເນັ້ນຄວາມລຽບງ່າຍ ແລະ ບໍ່ຮອງຮັບປລັກອິນ (plugins)." + +#: ../source/guides/tool-recommendations.rst:77 +msgid "" +"Hatchling_ -- developed with but separate from :ref:`Hatch`. Supports " +"plugins." +msgstr "``Hatchling`` -- ຮອງຮັບປລັກອິນ." + +#: ../source/guides/tool-recommendations.rst:79 +msgid "" +"PDM-backend_ -- developed with but separate from :ref:`PDM`. Supports " +"plugins." +msgstr "``PDM-backend`` -- ຮອງຮັບປລັກອິນ." + +#: ../source/guides/tool-recommendations.rst:81 +msgid "" +"Poetry-core_ -- developed with but separate from :ref:`Poetry`. Supports " +"plugins." +msgstr "``Poetry-core`` -- ຮອງຮັບປລັກອິນ." + +#: ../source/guides/tool-recommendations.rst:84 +msgid "" +"Unlike other backends on this list, Poetry-core does not support the " +"standard :ref:`[project] table ` (it uses a " +"different format, in the ``[tool.poetry]`` table)." +msgstr "" +"Poetry-core ບໍ່ຮອງຮັບຕາຕະລາງ ``[project]`` ມາດຕະຖານ (ມັນໃຊ້ ``[tool.poetry]`` " +"ແທນ)." + +#: ../source/guides/tool-recommendations.rst:88 +msgid "" +":ref:`setuptools`, which used to be the only build backend. Supports plugins." +msgstr "``setuptools`` ເຄີຍເປັນຕົວສ້າງສ່ວນຫຼັງພຽງອັນດຽວໃນເມື່ອກ່ອນ ແລະ ຮອງຮັບປລັກອິນ." + +#: ../source/guides/tool-recommendations.rst:92 +msgid "" +"If you use setuptools, please be aware that some features that predate " +"standardisation efforts are now deprecated and only *temporarily kept* for " +"compatibility." +msgstr "ຖ້າທ່ານໃຊ້ setuptools, ໃຫ້ລະວັງວ່າບາງຄຸນສົມບັດເກົ່າໆຖືກຍົກເລີກແລ້ວ." + +#: ../source/guides/tool-recommendations.rst:96 +msgid "" +"In particular, do **not** use direct ``python setup.py`` invocations. On the " +"other hand, configuring setuptools with a :file:`setup.py` file is still " +"fully supported, although it is recommended to use the " +"modern :ref:`[project] table in pyproject.toml ` " +"(or :file:`setup.cfg`) whenever possible and keep :file:`setup.py` only if " +"programmatic configuration is needed. See :ref:`setup-py-deprecated`." +msgstr "**ຫ້າມ** ເອີ້ນໃຊ້ ``python setup.py`` ໂດຍກົງ." + +#: ../source/guides/tool-recommendations.rst:103 +msgid "" +"Other examples of deprecated features you should **not** use include the " +"``setup_requires`` argument to ``setup()`` (use the :ref:`[build-system] " +"table ` in :file:`pyproject.toml` " +"instead), and the ``easy_install`` command (cf. :ref:`pip vs easy_install`)." +msgstr "ຄຸນສົມບັດອື່ນໆທີ່ບໍ່ຄວນໃຊ້ຄື ``setup_requires`` ແລະ ຄຳສັ່ງ ``easy_install``." + +#: ../source/guides/tool-recommendations.rst:108 +msgid "" +"Do **not** use :ref:`distutils`, which is deprecated, and has been removed " +"from the standard library in Python 3.12, although it still remains " +"available from setuptools." +msgstr "**ຫ້າມ** ໃຊ້ ``distutils`` ເພາະມັນຖືກຖອດອອກຈາກ Python 3.12 ແລ້ວ." + +#: ../source/guides/tool-recommendations.rst:115 +msgid "Build backends for extension modules" +msgstr "ຕົວສ້າງສ່ວນຫຼັງສຳລັບໂມດູນສ່ວນຂະຫຍາຍ" + +#: ../source/guides/tool-recommendations.rst:117 +msgid "" +"For packages with :term:`extension modules `, it is best " +"to use a build system with dedicated support for the language the extension " +"is written in, for example:" +msgstr "ສຳລັບໂມດູນສ່ວນຂະຫຍາຍ, ຄວນໃຊ້ລະບົບທີ່ຮອງຮັບພາສານັ້ນໆໂດຍກົງ ເຊັ່ນ:" + +#: ../source/guides/tool-recommendations.rst:121 +msgid "" +":ref:`setuptools` -- natively supports C and C++ (with third-party plugins " +"for Go and Rust)," +msgstr "``setuptools`` -- ຮອງຮັບ C ແລະ C++ (ແລະ ມີປລັກອິນສຳລັບ Go ແລະ Rust)," + +#: ../source/guides/tool-recommendations.rst:122 +msgid "" +":ref:`meson-python` -- C, C++, Fortran, Rust, and other languages supported " +"by Meson," +msgstr "``meson-python`` -- ຮອງຮັບ C, C++, Fortran, Rust ແລະ ອື່ນໆ ຜ່ານ Meson," + +#: ../source/guides/tool-recommendations.rst:123 +msgid "" +":ref:`scikit-build-core` -- C, C++, Fortran, and other languages supported " +"by CMake," +msgstr "``scikit-build-core`` -- ຮອງຮັບ C, C++, Fortran ແລະ ອື່ນໆ ຜ່ານ CMake," + +#: ../source/guides/tool-recommendations.rst:124 +msgid ":ref:`maturin` -- Rust, via Cargo." +msgstr "``maturin`` -- ຮອງຮັບ Rust ຜ່ານ Cargo." + +#: ../source/guides/tool-recommendations.rst:128 +msgid "Building distributions" +msgstr "ການ build ຊຸດແຈກຢາຍ" + +#: ../source/guides/tool-recommendations.rst:130 +msgid "" +"The standard tool to build :term:`source distributions ` and :term:`wheels ` for uploading to PyPI " +"is :ref:`build`. It will invoke whichever build backend you :ref:`declared " +"` in :file:`pyproject.toml`." +msgstr "ເຄື່ອງມືມາດຕະຖານໃນການ build ຊອສ ແລະ wheels ແມ່ນ ``build``." + +#: ../source/guides/tool-recommendations.rst:135 +msgid "" +"Do **not** use ``python setup.py sdist`` and ``python setup.py bdist_wheel`` " +"for this task. All direct invocations of :file:`setup.py` " +"are :ref:`deprecated `." +msgstr "**ຫ້າມ** ໃຊ້ ``python setup.py sdist`` ຫຼື ``bdist_wheel``." + +#: ../source/guides/tool-recommendations.rst:139 +msgid "" +"If you have :term:`extension modules ` and want to " +"distribute wheels for multiple platforms, use :ref:`cibuildwheel` as part of " +"your CI setup to build distributable wheels." +msgstr "ຖ້າມີສ່ວນຂະຫຍາຍ ແລະ ຢາກແຈກຢາຍ wheels ຫຼາຍແພລັດຟອມ, ໃຫ້ໃຊ້ ``cibuildwheel``." + +#: ../source/guides/tool-recommendations.rst:145 +msgid "Uploading to PyPI" +msgstr "ການອັບໂຫຼດໄປ PyPI" + +#: ../source/guides/tool-recommendations.rst:147 +msgid "" +"For projects hosted on or published via supported CI/CD platforms, it is " +"recommended to use the :ref:`Trusted Publishing `, which " +"allows the package to be securely uploaded to PyPI from a CI/CD workflow " +"without a manually configured API token." +msgstr "ຂໍແນະນຳໃຫ້ໃຊ້ Trusted Publishing ເພື່ອຄວາມປອດໄພ." + +#: ../source/guides/tool-recommendations.rst:152 +msgid "" +"As of November 2024, PyPI supports the following platforms as Trusted " +"Publishing providers:" +msgstr "ຂໍ້ມູນເດືອນພະຈິກ 2024, PyPI ຮອງຮັບ Trusted Publishing ຈາກແພລັດຟອມຕໍ່ໄປນີ້:" + +#: ../source/guides/tool-recommendations.rst:155 +msgid "GitHub Actions (on ``https://github.com``)" +msgstr "GitHub Actions (ເທິງ ``https://github.com``)" + +#: ../source/guides/tool-recommendations.rst:156 +msgid "GitLab CI/CD (on ``https://gitlab.com``)" +msgstr "GitLab CI/CD (ເທິງ ``https://gitlab.com``)" + +#: ../source/guides/tool-recommendations.rst:157 +msgid "ActiveState" +msgstr "ActiveState" + +#: ../source/guides/tool-recommendations.rst:158 +msgid "Google Cloud" +msgstr "Google Cloud" + +#: ../source/guides/tool-recommendations.rst:160 +msgid "" +"The other available method is to upload the package manually " +"using :ref:`twine`." +msgstr "ອີກວິທີໜຶ່ງແມ່ນການອັບໂຫຼດດ້ວຍມືໂດຍໃຊ້ ``twine``." + +#: ../source/guides/tool-recommendations.rst:164 +msgid "" +"**Never** use ``python setup.py upload`` for this task. In addition to " +"being :ref:`deprecated `, it is insecure." +msgstr "**ຫ້າມ** ໃຊ້ ``python setup.py upload`` ເພາະມັນບໍ່ປອດໄພ." + +#: ../source/guides/tool-recommendations.rst:169 +msgid "Workflow tools" +msgstr "ເຄື່ອງມືຈັດການ Workflow" + +#: ../source/guides/tool-recommendations.rst:171 +msgid "" +"These tools are environment managers that automatically manage virtual " +"environments for a project. They also act as \"task runners\", allowing you " +"to define and invoke tasks such as running tests, compiling documentation, " +"regenerating some files, etc. Some of them provide shortcuts for building " +"distributions and uploading to PyPI, and some support lock files for " +"applications. They often call the tools mentioned above under the hood. In " +"alphabetical order:" +msgstr "ເຄື່ອງມືເຫຼົ່ານີ້ຊ່ວຍຈັດການສະພາບແວດລ້ອມ ແລະ ວຽກຕ່າງໆແບບອັດຕະໂນມັດ." + +#: ../source/guides/tool-recommendations.rst:179 +msgid ":ref:`Flit`," +msgstr "``Flit``," + +#: ../source/guides/tool-recommendations.rst:180 +msgid ":ref:`Hatch`," +msgstr "``Hatch``," + +#: ../source/guides/tool-recommendations.rst:181 +msgid ":doc:`nox `," +msgstr "``nox``," + +#: ../source/guides/tool-recommendations.rst:182 +msgid ":ref:`PDM`," +msgstr "``PDM``," + +#: ../source/guides/tool-recommendations.rst:183 +msgid ":ref:`Pipenv`," +msgstr "``Pipenv``," + +#: ../source/guides/tool-recommendations.rst:184 +msgid ":ref:`Poetry`," +msgstr "``Poetry``," + +#: ../source/guides/tool-recommendations.rst:185 +msgid ":doc:`tox `." +msgstr "``tox``." + +#: ../source/guides/using-manifest-in.rst:5 +msgid "Including files in source distributions with ``MANIFEST.in``" +msgstr "ການລວມໄຟລ໌ໃນຊຸດແຈກຢາຍຊອສດ້ວຍ ``MANIFEST.in``" + +#: ../source/guides/using-manifest-in.rst:7 +msgid "" +"The information on this page has moved to :doc:`setuptools:userguide/" +"miscellaneous` in the setuptools documentation." +msgstr "ຂໍ້ມູນໃນໜ້ານີ້ໄດ້ຍ້າຍໄປຢູ່ເອກະສານຂອງ setuptools ແລ້ວ." + +#: ../source/guides/using-testpypi.rst:7 +msgid "" +"``TestPyPI`` is a separate instance of the :term:`Python Package Index " +"(PyPI)` that allows you to try out the distribution tools and process " +"without worrying about affecting the real index. TestPyPI is hosted at " +"`test.pypi.org `_" +msgstr "``TestPyPI`` ແມ່ນລະບົບແຍກຕ່າງຫາກທີ່ໃຊ້ສຳລັບທົດລອງອັບໂຫຼດແພັກເກດ." + +#: ../source/guides/using-testpypi.rst:13 +msgid "Registering your account" +msgstr "ການລົງທະບຽນບັນຊີຂອງທ່ານ" + +#: ../source/guides/using-testpypi.rst:15 +msgid "" +"Because TestPyPI has a separate database from the live PyPI, you'll need a " +"separate user account specifically for TestPyPI. Go to https://test.pypi.org/" +"account/register/ to register your account." +msgstr "ທ່ານຕ້ອງສ້າງບັນຊີໃໝ່ສຳລັບ TestPyPI ແຍກຈາກ PyPI ປົກກະຕິ." + +#: ../source/guides/using-testpypi.rst:19 +msgid "" +"The database for TestPyPI may be periodically pruned, so it is not unusual " +"for user accounts to be deleted." +msgstr "ຂໍ້ມູນໃນ TestPyPI ອາດຖືກລຶບບັນຊີຖິ້ມເປັນໄລຍະ." + +#: ../source/guides/using-testpypi.rst:24 +msgid "Using TestPyPI with Twine" +msgstr "ການໃຊ້ TestPyPI ຮ່ວມກັບ Twine" + +#: ../source/guides/using-testpypi.rst:26 +msgid "" +"You can upload your distributions to TestPyPI using :ref:`twine` by " +"specifying the ``--repository`` flag:" +msgstr "ທ່ານສາມາດອັບໂຫຼດໄປ TestPyPI ດ້ວຍ twine ໂດຍລະບຸ ``--repository``." + +#: ../source/guides/using-testpypi.rst:33 +msgid "" +"You can see if your package has successfully uploaded by navigating to the " +"URL ``https://test.pypi.org/project/`` where " +"``sampleproject`` is the name of your project that you uploaded. It may take " +"a minute or two for your project to appear on the site." +msgstr "ທ່ານສາມາດກວດສອບແພັກເກດທີ່ອັບໂຫຼດແລ້ວໄດ້ທີ່ URL ຂອງ TestPyPI." + +#: ../source/guides/using-testpypi.rst:39 +msgid "Using TestPyPI with pip" +msgstr "ການໃຊ້ TestPyPI ຮ່ວມກັບ pip" + +#: ../source/guides/using-testpypi.rst:41 +msgid "" +"You can tell :ref:`pip` to download packages from TestPyPI instead of PyPI " +"by specifying the ``--index-url`` flag:" +msgstr "ທ່ານສາມາດສັ່ງໃຫ້ pip ດາວໂຫຼດຈາກ TestPyPI ໂດຍໃຊ້ ``--index-url``." + +#: ../source/guides/using-testpypi.rst:56 +msgid "" +"If you want to allow pip to also download packages from PyPI, you can " +"specify ``--extra-index-url`` to point to PyPI. This is useful when the " +"package you're testing has dependencies:" +msgstr "" +"ທ່ານສາມາດໃຊ້ ``--extra-index-url`` ເພື່ອໃຫ້ pip ດາວໂຫຼດ dependencies ຈາກ PyPI " +"ປົກກະຕິໄດ້." + +#: ../source/guides/using-testpypi.rst:73 +msgid "Setting up TestPyPI in :file:`.pypirc`" +msgstr "ການຕັ້ງຄ່າ TestPyPI ໃນໄຟລ໌ :file:`.pypirc`" + +#: ../source/guides/using-testpypi.rst:75 +msgid "" +"If you want to avoid being prompted for your username and password every " +"time, you can configure TestPyPI in your :file:`$HOME/.pypirc`:" +msgstr "ທ່ານສາມາດຕັ້ງຄ່າ TestPyPI ໄວ້ໃນໄຟລ໌ ``.pypirc`` ເພື່ອບໍ່ຕ້ອງປ້ອນລະຫັດຜ່ານທຸກຄັ້ງ." + +#: ../source/guides/writing-pyproject-toml.rst:5 +msgid "Writing your ``pyproject.toml``" +msgstr "ການຂຽນ ``pyproject.toml`` ຂອງທ່ານ" + +#: ../source/guides/writing-pyproject-toml.rst:7 +msgid "" +"``pyproject.toml`` is a configuration file used by packaging tools, as well " +"as other tools such as linters, type checkers, etc. There are three possible " +"TOML tables in this file." +msgstr "``pyproject.toml`` ແມ່ນໄຟລ໌ການຕັ້ງຄ່າທີ່ໃຊ້ໂດຍເຄື່ອງມືຕ່າງໆ." + +#: ../source/guides/writing-pyproject-toml.rst:11 +msgid "" +"The ``[build-system]`` table is **strongly recommended**. It allows you to " +"declare which :term:`build backend` you use and which other dependencies are " +"needed to build your project." +msgstr "" +"ຕາຕະລາງ ``[build-system]`` ແມ່ນ **ແນະນຳຢ່າງຍິ່ງ**. " +"ມັນຊ່ວຍໃຫ້ທ່ານສາມາດປະກາດວ່າ :term:`build backend` ໃດທີ່ທ່ານໃຊ້ ແລະ " +"ສ່ວນປະກອບອື່ນໆໃດທີ່ຈຳເປັນໃນການສ້າງໂປຣເຈັກຂອງທ່ານ." + +#: ../source/guides/writing-pyproject-toml.rst:15 +msgid "" +"The ``[project]`` table is the format that most build backends use to " +"specify your project's basic metadata, such as the dependencies, your name, " +"etc." +msgstr "" +"ຕາຕະລາງ ``[project]`` ແມ່ນຮູບແບບທີ່ build backends ສ່ວນໃຫຍ່ໃຊ້ເພື່ອລະບຸຂໍ້ມູນພື້ນຖານ " +"(metadata) ຂອງໂປຣເຈັກທ່ານ, ເຊັ່ນ: ສ່ວນປະກອບທີ່ຈຳເປັນ, ຊື່ຂອງທ່ານ, ແລະ ອື່ນໆ." + +#: ../source/guides/writing-pyproject-toml.rst:18 +msgid "" +"The ``[tool]`` table has tool-specific subtables, e.g., ``[tool.hatch]``, " +"``[tool.black]``, ``[tool.mypy]``. We only touch upon this table here " +"because its contents are defined by each tool. Consult the particular tool's " +"documentation to know what it can contain." +msgstr "" +"ຕາຕະລາງ ``[tool]`` ຈະມີຕາຕະລາງຍ່ອຍສະເພາະຂອງແຕ່ລະເຄື່ອງມື, ເຊັ່ນ: ``[tool.hatch]``, " +"``[tool.black]``, ``[tool.mypy]``. ພວກເຮົາຈະເວົ້າເຖິງຕາຕະລາງນີ້ພຽງຜ່ານໆ " +"ເນື່ອງຈາກເນື້ອໃນຂອງມັນຖືກກຳນົດໂດຍແຕ່ລະເຄື່ອງມືເອງ. ກະລຸນາເບິ່ງເອກະສານຄຳແນະນຳຂອງເຄື່ອງມືນັ້ນໆ " +"ເພື່ອຮູ້ວ່າສິ່ງໃດແດ່ທີ່ສາມາດໃສ່ລົງໃນນີ້ໄດ້." + +#: ../source/guides/writing-pyproject-toml.rst:25 +msgid "" +"The ``[build-system]`` table should always be present, regardless of which " +"build backend you use (``[build-system]`` *defines* the build tool you use)." +msgstr "" +"ຕາຕະລາງ ``[build-system]`` ຄວນມີຢູ່ສະເໝີ, ບໍ່ວ່າທ່ານຈະໃຊ້ build backend ໃດກໍຕາມ (ເພາະ " +"``[build-system]`` ແມ່ນຕົວ *ກຳນົດ* ເຄື່ອງມືໃນການສ້າງທີ່ທ່ານໃຊ້)." + +#: ../source/guides/writing-pyproject-toml.rst:29 +msgid "" +"On the other hand, the ``[project]`` table is understood by *most* build " +"backends, but some build backends use a different format." +msgstr "" +"ໃນທາງກົງກັນຂ້າມ, ຕາຕະລາງ ``[project]`` ແມ່ນເປັນທີ່ເຂົ້າໃຈໂດຍ build backends *ສ່ວນໃຫຍ່*, " +"ແຕ່ບາງ build backends ກໍຍັງໃຊ້ຮູບແບບທີ່ແຕກຕ່າງອອກໄປ." + +#: ../source/guides/writing-pyproject-toml.rst:32 +msgid "" +"A notable exception is Poetry_, which before version 2.0 (released January " +"5, 2025) did not use the ``[project]`` table, it used the ``[tool.poetry]`` " +"table instead. With version 2.0, it supports both. Also, the setuptools_ " +"build backend supports both the ``[project]`` table, and the older format in " +"``setup.cfg`` or ``setup.py``." +msgstr "" +"ຂໍ້ຍົກເວັ້ນທີ່ສຳຄັນແມ່ນ Poetry_, ເຊິ່ງກ່ອນເວີຊັນ 2.0 (ປ່ອຍອອກເມື່ອວັນທີ 5 ມັງກອນ 2025) " +"ແມ່ນບໍ່ໄດ້ໃຊ້ຕາຕະລາງ ``[project]``, ແຕ່ໃຊ້ຕາຕະລາງ ``[tool.poetry]`` ແທນ. ໃນເວີຊັນ 2.0 " +"ແມ່ນຮອງຮັບທັງສອງແບບ. ນອກຈາກນີ້, setuptools_ build backend ກໍຮອງຮັບທັງຕາຕະລາງ " +"``[project]`` ແລະ ຮູບແບບເກົ່າໃນ ``setup.cfg`` ຫຼື ``setup.py``." + +#: ../source/guides/writing-pyproject-toml.rst:38 +msgid "" +"For new projects, use the ``[project]`` table, and keep ``setup.py`` only if " +"some programmatic configuration is needed (such as building C extensions), " +"but the ``setup.cfg`` and ``setup.py`` formats are still valid. " +"See :ref:`setup-py-deprecated`." +msgstr "" +"ສຳລັບໂປຣເຈັກໃໝ່, ໃຫ້ໃຊ້ຕາຕະລາງ ``[project]``, ແລະ ເກັບ ``setup.py`` " +"ໄວ້ສະເພາະກໍລະນີທີ່ຈຳເປັນຕ້ອງມີການກຳນົດຄ່າແບບຂຽນໂປຣແກຣມ (ເຊັ່ນ: ການສ້າງ C extensions), " +"ແຕ່ຮູບແບບ ``setup.cfg`` ແລະ ``setup.py`` ກໍຍັງສາມາດໃຊ້ໄດ້ຢູ່. ເບິ່ງ :ref:`setup-py-" +"deprecated`." + +#: ../source/guides/writing-pyproject-toml.rst:47 +msgid "Declaring the build backend" +msgstr "ການປະກາດ build backend" + +#: ../source/guides/writing-pyproject-toml.rst:49 +msgid "" +"The ``[build-system]`` table contains a ``build-backend`` key, which " +"specifies the build backend to be used. It also contains a ``requires`` key, " +"which is a list of dependencies needed to build the project -- this is " +"typically just the build backend package, but it may also contain additional " +"dependencies. You can also constrain the versions, e.g., ``requires = " +"[\"setuptools >= 61.0\"]``." +msgstr "" +"ຕາຕະລາງ ``[build-system]`` ປະກອບມີຄີ (key) ``build-backend``, ເຊິ່ງໃຊ້ລະບຸ build " +"backend ທີ່ຈະນຳໃຊ້. ມັນຍັງມີຄີ ``requires``, ເຊິ່ງແມ່ນລາຍການຂອງ ສ່ວນປະກອບທີ່ຈຳເປັນ " +"(dependencies) ໃນການສ້າງໂປຣເຈັກ -- ໂດຍປົກກະຕິແລ້ວແມ່ນມີພຽງແພັກເກດ build backend ເອງ, " +"ແຕ່ມັນອາດຈະລວມເຖິງສ່ວນປະກອບອື່ນໆເພີ່ມເຕີມນຳ. ທ່ານຍັງສາມາດກຳນົດເວີຊັນໄດ້, ເຊັ່ນ: ``requires = " +"[\"setuptools >= 61.0\"]``." + +#: ../source/guides/writing-pyproject-toml.rst:55 +msgid "" +"Usually, you'll just copy what your build backend's documentation suggests " +"(after :ref:`choosing your build backend `). Here " +"are the values for some common build backends:" +msgstr "" +"ໂດຍປົກກະຕິແລ້ວ, ທ່ານພຽງແຕ່ກ່າຍເອົາສິ່ງທີ່ເອກະສານຄຳແນະນຳຂອງ build backend ຂອງທ່ານແນະນຳ " +"(ຫຼັງຈາກ :ref:`ເລືອກ build backend ຂອງທ່ານ `). " +"ນີ້ແມ່ນຄ່າຕ່າງໆສຳລັບ build backends ທີ່ນິຍົມໃຊ້:" + +#: ../source/guides/writing-pyproject-toml.rst:63 +msgid "Static vs. dynamic metadata" +msgstr "ຂໍ້ມູນພື້ນຖານແບບຄົງທີ່ (Static) ທຽບກັບ ແບບປ່ຽນແປງໄດ້ (Dynamic)" + +#: ../source/guides/writing-pyproject-toml.rst:65 +msgid "The rest of this guide is devoted to the ``[project]`` table." +msgstr "ສ່ວນທີ່ເຫຼືອຂອງຄຳແນະນຳນີ້ຈະເນັ້ນໃສ່ຕາຕະລາງ ``[project]``." + +#: ../source/guides/writing-pyproject-toml.rst:67 +msgid "" +"Most of the time, you will directly write the value of a ``[project]`` " +"field. For example: ``requires-python = \">= 3.8\"``, or ``version = " +"\"1.0\"``." +msgstr "" +"ສ່ວນໃຫຍ່ແລ້ວ, ທ່ານຈະຂຽນຄ່າຂອງຟິລ (field) ໃນ ``[project]`` ໂດຍກົງ. ຕົວຢ່າງ: ``requires-" +"python = \">= 3.8\"``, ຫຼື ``version = \"1.0\"``." + +#: ../source/guides/writing-pyproject-toml.rst:71 +msgid "" +"However, in some cases, it is useful to let your build backend compute the " +"metadata for you. For example: many build backends can read the version from " +"a ``__version__`` attribute in your code, a Git tag, or similar. In such " +"cases, you should mark the field as dynamic using, e.g.," +msgstr "" +"ຢ່າງໃດກໍຕາມ, ໃນບາງກໍລະນີ, ມັນຈະມີປະໂຫຍດຫຼາຍຖ້າປ່ອຍໃຫ້ build backend ຄິດໄລ່ metadata " +"ໃຫ້ທ່ານ. ຕົວຢ່າງ: build backends ຫຼາຍຕົວສາມາດອ່ານເວີຊັນຈາກ ຄຸນລັກສະນະ ``__version__`` " +"ໃນໂຄ້ດຂອງທ່ານ, ຈາກ Git tag, ຫຼື ສິ່ງທີ່ຄ້າຍຄືກັນ. ໃນກໍລະນີດັ່ງກ່າວ, ທ່ານຄວນໝາຍຟິລນັ້ນວ່າເປັນ " +"dynamic ໂດຍໃຊ້, ເຊັ່ນ," + +#: ../source/guides/writing-pyproject-toml.rst:82 +msgid "" +"When a field is dynamic, it is the build backend's responsibility to fill " +"it. Consult your build backend's documentation to learn how it does it." +msgstr "" +"ເມື່ອຟິລໃດໜຶ່ງເປັນ dynamic, ມັນຈະເປັນໜ້າທີ່ຂອງ build backend ໃນການຕື່ມຂໍ້ມູນໃສ່. " +"ກະລຸນາເບິ່ງເອກະສານຄຳແນະນຳຂອງ build backend ຂອງທ່ານ ເພື່ອຮຽນຮູ້ວິທີການເຮັດວຽກຂອງມັນ." + +#: ../source/guides/writing-pyproject-toml.rst:88 +msgid "Basic information" +msgstr "ຂໍ້ມູນພື້ນຖານ" + +#: ../source/guides/writing-pyproject-toml.rst:93 +#: ../source/specifications/pyproject-toml.rst:129 +#: ../source/specifications/pyproject-toml.rst:154 +#: ../source/specifications/pyproject-toml.rst:166 +msgid "``name``" +msgstr "``name`` (ຊື່)" + +#: ../source/guides/writing-pyproject-toml.rst:95 +msgid "" +"Put the name of your project on PyPI. This field is required and is the only " +"field that cannot be marked as dynamic." +msgstr "" +"ໃສ່ຊື່ໂປຣເຈັກຂອງທ່ານໃນ PyPI. ຟິລນີ້ແມ່ນຈຳເປັນຕ້ອງມີ ແລະ ເປັນຟິລດຽວທີ່ບໍ່ສາມາດໝາຍໃຫ້ເປັນ dynamic " +"ໄດ້." + +#: ../source/guides/writing-pyproject-toml.rst:103 +msgid "" +"The project name must consist of ASCII letters, digits, underscores " +"\"``_``\", hyphens \"``-``\" and periods \"``.``\". It must not start or end " +"with an underscore, hyphen or period." +msgstr "" +"ຊື່ໂປຣເຈັກຕ້ອງປະກອບດ້ວຍຕົວອັກສອນ ASCII, ຕົວເລກ, ຂີດກ້ອງ \"``_``\", ຂີດຕໍ່ \"``-``\" ແລະ " +"ຈ້ຳ \"``.``\". ມັນຕ້ອງບໍ່ຂຶ້ນຕົ້ນ ຫຼື ລົງທ້າຍດ້ວຍຂີດກ້ອງ, ຂີດຕໍ່ ຫຼື ຈ້ຳ." + +#: ../source/guides/writing-pyproject-toml.rst:107 +msgid "" +"Comparison of project names is case insensitive and treats arbitrarily long " +"runs of underscores, hyphens, and/or periods as equal. For example, if you " +"register a project named ``cool-stuff``, users will be able to download it " +"or declare a dependency on it using any of the following spellings: ``Cool-" +"Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." +msgstr "" +"ການປຽບທຽບຊື່ໂປຣເຈັກແມ່ນບໍ່ແຍກຕົວອັກສອນໃຫຍ່-ນ້ອຍ ແລະ ຖືວ່າການໃຊ້ຂີດກ້ອງ, ຂີດຕໍ່, ແລະ/ຫຼື ຈ້ຳ " +"ທີ່ຕໍ່ກັນຍາວເທົ່າໃດກໍຕາມແມ່ນມີຄ່າເທົ່າກັນ. ຕົວຢ່າງ: ຖ້າທ່ານລົງທະບຽນໂປຣເຈັກຊື່ ``cool-stuff``, " +"ຜູ້ໃຊ້ຈະສາມາດດາວໂຫຼດ ຫຼື ປະກາດການນຳໃຊ້ໂດຍໃຊ້ຮູບແບບໃດໜຶ່ງດັ່ງນີ້: ``Cool-Stuff``, " +"``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." + +#: ../source/guides/writing-pyproject-toml.rst:115 +#: ../source/specifications/pyproject-toml.rst:134 +#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:181 +msgid "``version``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:117 +msgid "Put the version of your project." +msgstr "ໃສ່ເວີຊັນຂອງໂປຣເຈັກຂອງທ່ານ." + +#: ../source/guides/writing-pyproject-toml.rst:124 +msgid "" +"Some more complicated version specifiers like ``2020.0.0a1`` (for an alpha " +"release) are possible; see the :ref:`specification ` for " +"full details." +msgstr "" +"ທ່ານສາມາດລະບຸເວີຊັນທີ່ຊັບຊ້ອນກວ່ານີ້ໄດ້ ເຊັ່ນ ``2020.0.0a1`` (ສຳລັບເວີຊັນ alpha); " +"ເບິ່ງລາຍລະອຽດທັງໝົດໄດ້ທີ່ :ref:`ຂໍ້ກຳນົດ `." + +#: ../source/guides/writing-pyproject-toml.rst:128 +msgid "This field is required, although it is often marked as dynamic using" +msgstr "ຟິລນີ້ແມ່ນຈຳເປັນ, ເຖິງແມ່ນວ່າມັນມັກຈະຖືກໝາຍໃຫ້ເປັນ dynamic ໂດຍໃຊ້" + +#: ../source/guides/writing-pyproject-toml.rst:135 +msgid "" +"This allows use cases such as filling the version from a ``__version__`` " +"attribute or a Git tag. Consult the :ref:`single-source-version` discussion " +"for more details." +msgstr "" +"ສິ່ງນີ້ຊ່ວຍໃຫ້ສາມາດດຶງເວີຊັນມາຈາກຄຸນລັກສະນະ ``__version__`` ຫຼື ຈາກ Git tag ໄດ້. " +"ເບິ່ງລາຍລະອຽດເພີ່ມເຕີມໄດ້ທີ່ຫົວຂໍ້ :ref:`single-source-version`." + +#: ../source/guides/writing-pyproject-toml.rst:141 +msgid "Dependencies and requirements" +msgstr "ສ່ວນປະກອບທີ່ຈຳເປັນ ແລະ ຂໍ້ກຳນົດ" + +#: ../source/guides/writing-pyproject-toml.rst:144 +msgid "``dependencies``/``optional-dependencies``" +msgstr "``dependencies``/``optional-dependencies``" + +#: ../source/guides/writing-pyproject-toml.rst:146 +msgid "If your project has dependencies, list them like this:" +msgstr "ຖ້າໂປຣເຈັກຂອງທ່ານມີສ່ວນປະກອບທີ່ຈຳເປັນ, ໃຫ້ລົງລາຍການໄວ້ດັ່ງນີ້:" + +#: ../source/guides/writing-pyproject-toml.rst:158 +msgid "" +"See :ref:`Dependency specifiers ` for the full syntax " +"you can use to constrain versions." +msgstr "" +"ເບິ່ງ :ref:`ການລະບຸສ່ວນປະກອບ ` " +"ສຳລັບຮູບແບບໄວຍາກອນທັງໝົດທີ່ທ່ານສາມາດໃຊ້ເພື່ອຈຳກັດເວີຊັນ." + +#: ../source/guides/writing-pyproject-toml.rst:161 +msgid "" +"You may want to make some of your dependencies optional, if they are only " +"needed for a specific feature of your package. In that case, put them in " +"``optional-dependencies``." +msgstr "" +"ທ່ານອາດຈະຕ້ອງການເຮັດໃຫ້ບາງສ່ວນປະກອບເປັນແບບທາງເລືອກ (optional), " +"ຖ້າມັນຈຳເປັນສະເພາະບາງຟີເຈີຂອງແພັກເກດທ່ານ. ໃນກໍລະນີນັ້ນ, ໃຫ້ໃສ່ພວກມັນໄວ້ໃນ ``optional-" +"dependencies``." + +#: ../source/guides/writing-pyproject-toml.rst:174 +msgid "" +"Each of the keys defines a \"packaging extra\". In the example above, one " +"could use, e.g., ``pip install your-project-name[gui]`` to install your " +"project with GUI support, adding the PyQt5 dependency." +msgstr "" +"ແຕ່ລະຄີ (key) ຈະກຳນົດເປັນ \"packaging extra\". ໃນຕົວຢ່າງຂ້າງເທິງ, ເຮົາສາມາດໃຊ້ຄຳສັ່ງ " +"ເຊັ່ນ: ``pip install your-project-name[gui]`` ເພື່ອຕິດຕັ້ງໂປຣເຈັກຂອງທ່ານພ້ອມກັບການຮອງຮັບ " +"GUI ໂດຍການເພີ່ມ PyQt5 ເຂົ້າໄປ." + +#: ../source/guides/writing-pyproject-toml.rst:180 +msgid "" +"You can also define an extra that refers back to the current project with " +"other extras. This is useful for convenience extras that combine several " +"optional features (such as an ``all`` extra hosting dependencies from both " +"``gui`` and ``cli``):" +msgstr "" +"ທ່ານຍັງສາມາດກຳນົດ extra ທີ່ອ້າງອີງກັບຄືນຫາໂປຣເຈັກປັດຈຸບັນພ້ອມກັບ extra ອື່ນໆໄດ້. " +"ສິ່ງນີ້ມີປະໂຫຍດສຳລັບການລວມເອົາຫຼາຍໆຟີເຈີທາງເລືອກເຂົ້າກັນ (ເຊັ່ນ: extra ຊື່ ``all`` ທີ່ລວມເອົາທັງ " +"``gui`` ແລະ ``cli``):" + +#: ../source/guides/writing-pyproject-toml.rst:189 +msgid "" +"The combined extra does not need its own manually maintained copy of each " +"referenced extra's dependencies, which can otherwise fall out of sync after " +"a few years of maintenance and bug fixes:" +msgstr "" +"ສ່ວນເສີມແບບລວມ (combined extra) " +"ບໍ່ຈຳເປັນຕ້ອງມີການສຳເນົາໄຟລ໌ທີ່ຕ້ອງເພິ່ງພາຂອງແຕ່ລະສ່ວນເສີມທີ່ອ້າງອີງ ເພື່ອມາເບິ່ງແຍງຮັກສາດ້ວຍຕົນເອງ, " +"ເຊິ່ງຖ້າບໍ່ດັ່ງນັ້ນ ອາດຈະເຮັດໃຫ້ຂໍ້ມູນບໍ່ກົງກັນຫຼັງຈາກການບຳລຸງຮັກສາ ແລະ ການແກ້ໄຂບັກຜ່ານໄປຫຼາຍປີ:" + +#: ../source/guides/writing-pyproject-toml.rst:203 +msgid "" +"Most package managers now support this kind of extra, " +"including :ref:`pip`, :ref:`uv`, :ref:`poetry`, :ref:`hatch`, :ref:`pdm` " +"and :ref:`pipenv`." +msgstr "" +"ເຄື່ອງມືຈັດການແພັກເກດສ່ວນໃຫຍ່ໃນຕອນນີ້ແມ່ນຮອງຮັບ extra ແບບນີ້ແລ້ວ, " +"ລວມມີ: :ref:`pip`, :ref:`uv`, :ref:`poetry`, :ref:`hatch`, :ref:`pdm` " +"ແລະ :ref:`pipenv`." + +#: ../source/guides/writing-pyproject-toml.rst:210 +#: ../source/specifications/pylock-toml.rst:95 +#: ../source/specifications/pyproject-toml.rst:157 +#: ../source/specifications/pyproject-toml.rst:250 +msgid "``requires-python``" +msgstr "``requires-python``" + +#: ../source/guides/writing-pyproject-toml.rst:212 +msgid "" +"This lets you declare the minimum version of Python that you support " +"[#requires-python-upper-bounds]_." +msgstr "" +"ສິ່ງນີ້ຊ່ວຍໃຫ້ທ່ານປະກາດເວີຊັນຕ່ຳສຸດຂອງ Python ທີ່ທ່ານຮອງຮັບ [#requires-python-upper-" +"bounds]_." + +#: ../source/guides/writing-pyproject-toml.rst:224 +msgid "Creating executable scripts" +msgstr "ການສ້າງສະຄຣິບທີ່ສາມາດລັນໄດ້" + +#: ../source/guides/writing-pyproject-toml.rst:226 +msgid "" +"To install a command as part of your package, declare it in the " +"``[project.scripts]`` table." +msgstr "" +"ເພື່ອຕິດຕັ້ງຄຳສັ່ງໃຫ້ເປັນສ່ວນໜຶ່ງຂອງແພັກເກດຂອງທ່ານ, ໃຫ້ປະກາດມັນໄວ້ໃນຕາຕະລາງ " +"``[project.scripts]``." + +#: ../source/guides/writing-pyproject-toml.rst:234 +msgid "" +"In this example, after installing your project, a ``spam-cli`` command will " +"be available. Executing this command will do the equivalent of ``import sys; " +"from spam import main_cli; sys.exit(main_cli())``." +msgstr "" +"ໃນຕົວຢ່າງນີ້, ຫຼັງຈາກຕິດຕັ້ງໂປຣເຈັກຂອງທ່ານແລ້ວ, ຄຳສັ່ງ ``spam-cli`` ຈະສາມາດໃຊ້ງານໄດ້. " +"ການລັນຄຳສັ່ງນີ້ຈະມີຄ່າເທົ່າກັບການເຮັດ ``import sys; from spam import main_cli; " +"sys.exit(main_cli())``." + +#: ../source/guides/writing-pyproject-toml.rst:238 +msgid "" +"On Windows, scripts packaged this way need a terminal, so if you launch them " +"from within a graphical application, they will make a terminal pop up. To " +"prevent this from happening, use the ``[project.gui-scripts]`` table instead " +"of ``[project.scripts]``." +msgstr "" +"ໃນ Windows, ສະຄຣິບທີ່ຖືກສ້າງດ້ວຍວິທີນີ້ແມ່ນຕ້ອງການເທີມິນໍ (terminal), " +"ສະນັ້ນຖ້າທ່ານລັນມັນຈາກໂປຣແກຣມທີ່ມີ GUI, ມັນຈະມີໜ້າຕ່າງ terminal ເດັ້ງຂຶ້ນມາ. " +"ເພື່ອປ້ອງກັນບໍ່ໃຫ້ເກີດເຫດການນີ້, ໃຫ້ໃຊ້ຕາຕະລາງ ``[project.gui-scripts]`` ແທນ " +"``[project.scripts]``." + +#: ../source/guides/writing-pyproject-toml.rst:248 +msgid "" +"In that case, launching your script from the command line will give back " +"control immediately, leaving the script to run in the background." +msgstr "" +"ໃນກໍລະນີນັ້ນ, ການລັນສະຄຣິບຂອງທ່ານຈາກ command line ຈະສົ່ງຄືນການຄວບຄຸມໃຫ້ທັນທີ, " +"ໂດຍປ່ອຍໃຫ້ສະຄຣິບເຮັດວຽກຢູ່ເບື້ອງຫຼັງ." + +#: ../source/guides/writing-pyproject-toml.rst:251 +msgid "" +"The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " +"is only relevant on Windows." +msgstr "" +"ຄວາມແຕກຕ່າງລະຫວ່າງ ``[project.scripts]`` ແລະ ``[project.gui-scripts]`` " +"ແມ່ນຈະເຫັນຜົນສະເພາະໃນ Windows ເທົ່ານັ້ນ." + +#: ../source/guides/writing-pyproject-toml.rst:257 +msgid "About your project" +msgstr "ກ່ຽວກັບໂປຣເຈັກຂອງທ່ານ" + +#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/specifications/pyproject-toml.rst:337 +msgid "``authors``/``maintainers``" +msgstr "``authors`` (ຜູ້ຂຽນ)/``maintainers`` (ຜູ້ດູແລ)" + +#: ../source/guides/writing-pyproject-toml.rst:262 +msgid "" +"Both of these fields contain lists of people identified by a name and/or an " +"email address." +msgstr "ທັງສອງຟິລນີ້ປະກອບມີລາຍຊື່ຂອງບຸກຄົນ ໂດຍລະບຸດ້ວຍຊື່ ແລະ/ຫຼື ທີ່ຢູ່ອີເມວ." + +#: ../source/guides/writing-pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:144 +#: ../source/specifications/pyproject-toml.rst:196 +msgid "``description``" +msgstr "``description`` (ຄຳອະທິບາຍ)" + +#: ../source/guides/writing-pyproject-toml.rst:284 +msgid "" +"This should be a one-line description of your project, to show as the " +"\"headline\" of your project page on PyPI (`example `_), and " +"other places such as lists of search results (`example `_)." +msgstr "" +"ນີ້ຄວນເປັນຄຳອະທິບາຍໂປຣເຈັກຂອງທ່ານພຽງແຖວດຽວ, ເພື່ອສະແດງເປັນ \"ຫົວຂໍ້\" " +"ໃນໜ້າໂປຣເຈັກຂອງທ່ານເທິງ PyPI (`ຕົວຢ່າງ `_), ແລະ ບ່ອນອື່ນໆ ເຊັ່ນ: " +"ລາຍການຜົນການຄົ້ນຫາ (`ຕົວຢ່າງ `_)." + +#: ../source/guides/writing-pyproject-toml.rst:295 +#: ../source/specifications/pyproject-toml.rst:156 +#: ../source/specifications/pyproject-toml.rst:209 +msgid "``readme``" +msgstr "``readme`` (ໄຟລ໌ອ່ານກ່ອນ)" + +#: ../source/guides/writing-pyproject-toml.rst:297 +msgid "" +"This is a longer description of your project, to display on your project " +"page on PyPI. Typically, your project will have a ``README.md`` or " +"``README.rst`` file and you just put its file name here." +msgstr "" +"ນີ້ແມ່ນຄຳອະທິບາຍແບບລະອຽດຂອງໂປຣເຈັກຂອງທ່ານ ເພື່ອສະແດງໃນໜ້າໂປຣເຈັກເທິງ PyPI. ໂດຍທົ່ວໄປແລ້ວ, " +"ໂປຣເຈັກຂອງທ່ານຈະມີໄຟລ໌ ``README.md`` ຫຼື ``README.rst`` ແລະ ທ່ານພຽງແຕ່ໃສ່ຊື່ໄຟລ໌ນັ້ນລົງໃນນີ້." + +#: ../source/guides/writing-pyproject-toml.rst:306 +msgid "The README's format is auto-detected from the extension:" +msgstr "ຮູບແບບຂອງ README ຈະຖືກກວດສອບໂດຍອັດຕະໂນມັດຈາກນາມສະກຸນໄຟລ໌:" + +#: ../source/guides/writing-pyproject-toml.rst:308 +msgid "``README.md`` → `GitHub-flavored Markdown `_," +msgstr "``README.md`` → `GitHub-flavored Markdown `_," + +#: ../source/guides/writing-pyproject-toml.rst:309 +msgid "" +"``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." +msgstr "``README.rst`` → `reStructuredText `_ (ໂດຍບໍ່ມີສ່ວນເສີມ Sphinx)." + +#: ../source/guides/writing-pyproject-toml.rst:311 +msgid "You can also specify the format explicitly, like this:" +msgstr "ທ່ານຍັງສາມາດລະບຸຮູບແບບໄດ້ໂດຍກົງ ດັ່ງນີ້:" + +#: ../source/guides/writing-pyproject-toml.rst:324 +msgid "``license`` and ``license-files``" +msgstr "``license`` (ໃບອະນຸຍາດ) ແລະ ``license-files`` (ໄຟລ໌ໃບອະນຸຍາດ)" + +#: ../source/guides/writing-pyproject-toml.rst:326 +msgid "As per :pep:`639`, licenses should be declared with two fields:" +msgstr "ອີງຕາມ :pep:`639`, ໃບອະນຸຍາດຄວນຖືກປະກາດດ້ວຍສອງຟິລ:" + +#: ../source/guides/writing-pyproject-toml.rst:328 +msgid "" +"``license`` is an :term:`SPDX license expression ` " +"consisting of one or more :term:`license identifiers `." +msgstr "" +"``license`` ແມ່ນ :term:`SPDX license expression ` " +"ທີ່ປະກອບດ້ວຍ :term:`license identifiers ` ຕົວໜຶ່ງ ຫຼື ຫຼາຍກວ່າ." + +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "``license-files`` is a list of license file glob patterns." +msgstr "``license-files`` ແມ່ນລາຍການຮູບແບບ glob ຂອງໄຟລ໌ໃບອະນຸຍາດ." + +#: ../source/guides/writing-pyproject-toml.rst:332 +msgid "" +"A previous PEP had specified ``license`` to be a table with a ``file`` or a " +"``text`` key, this format is now deprecated. Most :term:`build " +"backends` now support the new format as shown in the " +"following table." +msgstr "" +"PEP ກ່ອນໜ້ານີ້ໄດ້ກຳນົດໃຫ້ ``license`` ເປັນຕາຕະລາງທີ່ມີຄີ ``file`` ຫຼື ``text``, " +"ແຕ່ຮູບແບບນີ້ຖືກຍົກເລີກການນຳໃຊ້ແລ້ວ. ຕອນນີ້ :term:`build backends` " +"ສ່ວນໃຫຍ່ແມ່ນຮອງຮັບຮູບແບບໃໝ່ຕາມທີ່ສະແດງໃນຕາຕະລາງລຸ່ມນີ້." + +#: ../source/guides/writing-pyproject-toml.rst:336 +msgid "build backend versions that introduced :pep:`639` support" +msgstr "ເວີຊັນຂອງ build backend ທີ່ເລີ່ມຮອງຮັບ :pep:`639`" + +#: ../source/guides/writing-pyproject-toml.rst:339 +msgid "hatchling" +msgstr "hatchling" + +#: ../source/guides/writing-pyproject-toml.rst:340 +msgid "setuptools" +msgstr "setuptools" + +#: ../source/guides/writing-pyproject-toml.rst:341 +msgid "flit-core [#flit-core-pep639]_" +msgstr "flit-core [#flit-core-pep639]_" + +#: ../source/guides/writing-pyproject-toml.rst:342 +msgid "pdm-backend" +msgstr "pdm-backend" + +#: ../source/guides/writing-pyproject-toml.rst:343 +msgid "poetry-core" +msgstr "poetry-core" + +#: ../source/guides/writing-pyproject-toml.rst:344 +msgid "uv-build" +msgstr "uv-build" + +#: ../source/guides/writing-pyproject-toml.rst:345 +msgid "1.27.0" +msgstr "1.27.0" + +#: ../source/guides/writing-pyproject-toml.rst:346 +msgid "77.0.3" +msgstr "77.0.3" + +#: ../source/guides/writing-pyproject-toml.rst:347 +msgid "3.12" +msgstr "3.12" + +#: ../source/guides/writing-pyproject-toml.rst:348 +msgid "2.4.0" +msgstr "2.4.0" + +#: ../source/guides/writing-pyproject-toml.rst:349 +msgid "2.2.0" +msgstr "2.2.0" + +#: ../source/guides/writing-pyproject-toml.rst:350 +msgid "0.7.19" +msgstr "0.7.19" + +#: ../source/guides/writing-pyproject-toml.rst:356 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:262 +msgid "``license``" +msgstr "``license``" + +#: ../source/guides/writing-pyproject-toml.rst:358 +msgid "" +"The new format for ``license`` is a valid :term:`SPDX license expression " +"` consisting of one or more :term:`license identifiers " +"`. The full license list is available at the `SPDX " +"license list page `_. The supported list version is 3.17 " +"or any later compatible one." +msgstr "" +"ຮູບແບບໃໝ່ສຳລັບ ``license`` ແມ່ນ :term:`SPDX license expression ` ທີ່ຖືກຕ້ອງ ເຊິ່ງປະກອບດ້ວຍ :term:`license identifiers ` ຕົວໜຶ່ງ ຫຼື ຫຼາຍກວ່າ. ສາມາດເບິ່ງລາຍການໃບອະນຸຍາດທັງໝົດໄດ້ທີ່ `ໜ້າລາຍການໃບອະນຸຍາດ " +"SPDX `_. ເວີຊັນທີ່ຮອງຮັບແມ່ນ 3.17 ຫຼື ເວີຊັນທີ່ໃໝ່ກວ່າທີ່ເຂົ້າກັນໄດ້." + +#: ../source/guides/writing-pyproject-toml.rst:371 +msgid "" +"If you get a build error that ``license`` should be a dict/table, your build " +"backend doesn't yet support the new format. See the `above section `_ for more context. The now deprecated format is " +"`described in PEP 621 `__." +msgstr "" +"ຖ້າທ່ານພົບຂໍ້ຜິດພາດໃນການສ້າງວ່າ ``license`` ຄວນເປັນ dict/table, ສະແດງວ່າ build backend " +"ຂອງທ່ານຍັງບໍ່ທັນຮອງຮັບຮູບແບບໃໝ່. ເບິ່ງ `ພາກສ່ວນຂ້າງເທິງ `_ " +"ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ. ສ່ວນຮູບແບບທີ່ຖືກຍົກເລີກນັ້ນ `ມີອະທິບາຍໄວ້ໃນ PEP 621 `__." + +#: ../source/guides/writing-pyproject-toml.rst:376 +msgid "" +"As a general rule, it is a good idea to use a standard, well-known license, " +"both to avoid confusion and because some organizations avoid software whose " +"license is unapproved." +msgstr "" +"ຕາມຫຼັກການທົ່ວໄປ, ການໃຊ້ໃບອະນຸຍາດມາດຕະຖານທີ່ເປັນທີ່ຮູ້ຈັກກັນດີແມ່ນເປັນເລື່ອງທີ່ດີ, " +"ທັງເພື່ອຫຼີກລ່ຽງຄວາມສັບສົນ ແລະ " +"ເນື່ອງຈາກບາງອົງກອນຈະຫຼີກລ່ຽງການໃຊ້ຊອຟແວທີ່ໃບອະນຸຍາດບໍ່ໄດ້ຮັບການອະນຸມັດ." + +#: ../source/guides/writing-pyproject-toml.rst:380 +msgid "" +"If your :term:`Distribution Archive` is licensed with a license that doesn't " +"have an existing SPDX identifier, you can create a custom one in format " +"``LicenseRef-[idstring]``. The custom identifiers must follow the SPDX " +"specification, `clause 10.1 `_ of the version 2.2 or any " +"later compatible one." +msgstr "" +"ຖ້າ :term:`Distribution Archive` ຂອງທ່ານໃຊ້ໃບອະນຸຍາດທີ່ບໍ່ມີໃນລະບົບ SPDX, " +"ທ່ານສາມາດສ້າງຂຶ້ນເອງໄດ້ໃນຮູບແບບ ``LicenseRef-[idstring]``. " +"ລະຫັດທີ່ສ້າງເອງຕ້ອງປະຕິບັດຕາມຂໍ້ກຳນົດຂອງ SPDX, `ຂໍ້ທີ 10.1 `_ ຂອງເວີຊັນ 2.2 " +"ຫຼື ເວີຊັນທີ່ໃໝ່ກວ່າທີ່ເຂົ້າກັນໄດ້." + +#: ../source/guides/writing-pyproject-toml.rst:395 +#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:658 +msgid "``license-files``" +msgstr "``license-files``" + +#: ../source/guides/writing-pyproject-toml.rst:397 +msgid "" +"This is a list of license files and files containing other legal information " +"you want to distribute with your package." +msgstr "" +"ນີ້ແມ່ນລາຍການຂອງໄຟລ໌ໃບອະນຸຍາດ ແລະ ໄຟລ໌ທີ່ປະກອບດ້ວຍຂໍ້ມູນທາງກົດໝາຍອື່ນໆ " +"ທີ່ທ່ານຕ້ອງການແຈກຢາຍໄປພ້ອມກັບແພັກເກດຂອງທ່ານ." + +#: ../source/guides/writing-pyproject-toml.rst:405 +msgid "The glob patterns must follow the specification:" +msgstr "ຮູບແບບ glob ຕ້ອງປະຕິບັດຕາມຂໍ້ກຳນົດດັ່ງນີ້:" + +#: ../source/guides/writing-pyproject-toml.rst:407 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots " +"(``.``) will be matched verbatim." +msgstr "" +"ຕົວອັກສອນ, ຕົວເລກ, ຂີດກ້ອງ (``_``), ຂີດຕໍ່ (``-``) ແລະ ຈ້ຳ (``.``) " +"ຈະຖືກປຽບທຽບຕາມຕົວອັກສອນນັ້ນໆໂດຍກົງ." + +#: ../source/guides/writing-pyproject-toml.rst:409 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "ຮອງຮັບຕົວອັກສອນພິເສດ: ``*``, ``?``, ``**`` ແລະ ການລະບຸຊ່ວງຕົວອັກສອນ: []." + +#: ../source/guides/writing-pyproject-toml.rst:410 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "ຕົວຂັ້ນເສັ້ນທາງ (path) ຕ້ອງໃຊ້ເຄື່ອງໝາຍທັບ (``/``)." + +#: ../source/guides/writing-pyproject-toml.rst:411 +msgid "" +"Patterns are relative to the directory containing :file:`pyproject.toml`, " +"and thus may not start with a slash character." +msgstr "" +"ຮູບແບບແມ່ນອ້າງອີງຕາມໂຟນເດີທີ່ມີໄຟລ໌ :file:`pyproject.toml`, " +"ດັ່ງນັ້ນຈຶ່ງບໍ່ສາມາດເລີ່ມຕົ້ນດ້ວຍເຄື່ອງໝາຍທັບໄດ້." + +#: ../source/guides/writing-pyproject-toml.rst:413 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "ຫ້າມໃຊ້ເຄື່ອງໝາຍອ້າງອີງຫາໂຟນເດີຂຶ້ນໄປໜຶ່ງຊັ້ນ (``..``)." + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "Each glob must match at least one file." +msgstr "ແຕ່ລະ glob ຕ້ອງກົງກັບໄຟລ໌ຢ່າງໜ້ອຍໜຶ່ງໄຟລ໌." + +#: ../source/guides/writing-pyproject-toml.rst:416 +msgid "" +"Literal paths are valid globs. Any characters or character sequences not " +"covered by this specification are invalid." +msgstr "" +"ເສັ້ນທາງໄຟລ໌ແບບລະບຸໂດຍກົງແມ່ນຖືວ່າເປັນ glob ທີ່ຖືກຕ້ອງ. ຕົວອັກສອນ ຫຼື " +"ລຳດັບຕົວອັກສອນໃດໆທີ່ບໍ່ໄດ້ລະບຸໄວ້ໃນຂໍ້ກຳນົດນີ້ ແມ່ນຖືວ່າບໍ່ຖືກຕ້ອງ." + +#: ../source/guides/writing-pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:381 +#: ../source/specifications/pyproject-toml.rst:657 +msgid "``keywords``" +msgstr "``keywords`` (ຄຳຄົ້ນຫາ)" + +#: ../source/guides/writing-pyproject-toml.rst:424 +msgid "" +"This will help PyPI's search box to suggest your project when people search " +"for these keywords." +msgstr "ສິ່ງນີ້ຈະຊ່ວຍໃຫ້ຊ່ອງຄົ້ນຫາຂອງ PyPI ແນະນຳໂປຣເຈັກຂອງທ່ານ ເມື່ອມີຄົນຄົ້ນຫາດ້ວຍຄຳເຫຼົ່ານີ້." + +#: ../source/guides/writing-pyproject-toml.rst:436 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:393 +#: ../source/specifications/pyproject-toml.rst:651 +msgid "``classifiers``" +msgstr "``classifiers`` (ໝວດໝູ່)" + +#: ../source/guides/writing-pyproject-toml.rst:438 +msgid "" +"A list of PyPI classifiers that apply to your project. Check the `full list " +"of possibilities `_." +msgstr "" +"ລາຍການໝວດໝູ່ຂອງ PyPI ທີ່ກ່ຽວຂ້ອງກັບໂປຣເຈັກຂອງທ່ານ. ກວດເບິ່ງ `ລາຍການທັງໝົດ `_." + +#: ../source/guides/writing-pyproject-toml.rst:463 +msgid "" +"Although the list of classifiers is often used to declare what Python " +"versions a project supports, this information is only used for searching and " +"browsing projects on PyPI, not for installing projects. To actually restrict " +"what Python versions a project can be installed on, use the :ref:`requires-" +"python` argument." +msgstr "" +"ເຖິງແມ່ນວ່າລາຍການ classifiers ມັກຈະຖືກໃຊ້ເພື່ອປະກາດເວີຊັນ Python ທີ່ໂປຣເຈັກຮອງຮັບ, " +"ແຕ່ຂໍ້ມູນນີ້ແມ່ນໃຊ້ເພື່ອການຄົ້ນຫາ ແລະ ການເລືອກເບິ່ງໂປຣເຈັກໃນ PyPI ເທົ່ານັ້ນ, " +"ບໍ່ໄດ້ໃຊ້ໃນການຕິດຕັ້ງໂປຣເຈັກ. ເພື່ອຈຳກັດເວີຊັນ Python ທີ່ຈະຕິດຕັ້ງແທ້ໆ, " +"ໃຫ້ໃຊ້ຕົວກຳນົດ :ref:`requires-python`." + +#: ../source/guides/writing-pyproject-toml.rst:468 +msgid "" +"To prevent a package from being uploaded to PyPI, use the special " +"``Private :: Do Not Upload`` classifier. PyPI will always reject packages " +"with classifiers beginning with ``Private ::``." +msgstr "" +"ເພື່ອປ້ອງກັນບໍ່ໃຫ້ແພັກເກດຖືກອັບໂຫຼດຂຶ້ນ PyPI, ໃຫ້ໃຊ້ classifier ພິເສດ ``Private :: Do Not " +"Upload``. PyPI ຈະປະຕິເສດແພັກເກດທີ່ມີ classifier ທີ່ຂຶ້ນຕົ້ນດ້ວຍ ``Private ::`` ສະເໝີ." + +#: ../source/guides/writing-pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:411 +#: ../source/specifications/pyproject-toml.rst:662 +msgid "``urls``" +msgstr "``urls`` (ລິ້ງທີ່ກ່ຽວຂ້ອງ)" + +#: ../source/guides/writing-pyproject-toml.rst:477 +msgid "" +"A list of URLs associated with your project, displayed on the left sidebar " +"of your PyPI project page." +msgstr "" +"ລາຍການ URL ທີ່ກ່ຽວຂ້ອງກັບໂປຣເຈັກຂອງທ່ານ, ເຊິ່ງຈະສະແດງຢູ່ແຖບດ້ານຊ້າຍຂອງໜ້າໂປຣເຈັກໃນ PyPI." + +#: ../source/guides/writing-pyproject-toml.rst:482 +msgid "" +"See :ref:`well-known-labels` for a listing of labels that PyPI and other " +"packaging tools are specifically aware of, and `PyPI's project metadata docs " +"`_ for PyPI-specific " +"URL processing." +msgstr "" +"ເບິ່ງ :ref:`well-known-labels` ສຳລັບລາຍການປ້າຍຊື່ (labels) ທີ່ PyPI ແລະ ເຄື່ອງມືອື່ນໆຮູ້ຈັກ, " +"ແລະ ເບິ່ງ `ເອກະສານ metadata ຂອງ PyPI `_ ສຳລັບການຈັດການ URL ສະເພາະຂອງ PyPI." + +#: ../source/guides/writing-pyproject-toml.rst:496 +msgid "" +"Note that if the label contains spaces, it needs to be quoted, e.g., " +"``Website = \"https://example.com\"`` but ``\"Official Website\" = \"https://" +"example.com\"``." +msgstr "" +"ໝາຍເຫດ: ຖ້າປ້າຍຊື່ມີຍະຫວ່າງ, ມັນຕ້ອງຖືກໃສ່ໃນເຄື່ອງໝາຍຄຳເວົ້າ, ຕົວຢ່າງ: ``Website = \"https://" +"example.com\"`` ແຕ່ ``\"Official Website\" = \"https://example.com\"``." + +#: ../source/guides/writing-pyproject-toml.rst:500 +msgid "" +"Users are advised to use :ref:`well-known-labels` for their project URLs " +"where appropriate, since consumers of metadata (like package indices) can " +"specialize their presentation." +msgstr "" +"ແນະນຳໃຫ້ຜູ້ໃຊ້ໃຊ້ :ref:`well-known-labels` ສຳລັບ URL ຂອງໂປຣເຈັກຕາມຄວາມເໝາະສົມ, " +"ເນື່ອງຈາກລະບົບທີ່ອ່ານ metadata (ເຊັ່ນ: ດັດຊະນີແພັກເກດ) ສາມາດສະແດງຜົນໃຫ້ເປັນຮູບແບບພິເສດໄດ້." + +#: ../source/guides/writing-pyproject-toml.rst:504 +msgid "" +"For example in the following metadata, neither ``MyHomepage`` nor " +"``\"Download Link\"`` is a well-known label, so they will be rendered " +"verbatim:" +msgstr "" +"ຕົວຢ່າງໃນ metadata ລຸ່ມນີ້, ທັງ ``MyHomepage`` ແລະ ``\"Download Link\"`` " +"ແມ່ນບໍ່ແມ່ນປ້າຍຊື່ທີ່ເປັນມາດຕະຖານ, ດັ່ງນັ້ນພວກມັນຈະຖືກສະແດງຕາມຕົວອັກສອນນັ້ນເລີຍ:" + +#: ../source/guides/writing-pyproject-toml.rst:514 +msgid "" +"Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " +"equivalents (``homepage`` and ``download``), and can be presented with those " +"semantics in mind (the project's home page and its external download " +"location, respectively)." +msgstr "" +"ໃນຂະນະທີ່ metadata ນີ້ ``HomePage`` ແລະ ``DOWNLOAD`` ທັງສອງມີຄ່າທີ່ເປັນມາດຕະຖານ " +"(``homepage`` ແລະ ``download``), ແລະ ສາມາດສະແດງຜົນຕາມຄວາມໝາຍນັ້ນໄດ້ (ເຊັ່ນ: " +"ໜ້າຫຼັກຂອງໂປຣເຈັກ ແລະ ບ່ອນດາວໂຫຼດພາຍນອກ)." + +#: ../source/guides/writing-pyproject-toml.rst:526 +msgid "Advanced plugins" +msgstr "ປລັກອິນຂັ້ນສູງ" + +#: ../source/guides/writing-pyproject-toml.rst:528 +msgid "" +"Some packages can be extended through plugins. Examples include Pytest_ and " +"Pygments_. To create such a plugin, you need to declare it in a subtable of " +"``[project.entry-points]`` like this:" +msgstr "" +"ບາງແພັກເກດສາມາດເສີມຂະຫຍາຍໄດ້ຜ່ານປລັກອິນ. ຕົວຢ່າງລວມມີ Pytest_ ແລະ Pygments_. " +"ເພື່ອສ້າງປລັກອິນດັ່ງກ່າວ, ທ່ານຕ້ອງປະກາດມັນໄວ້ໃນຕາຕະລາງຍ່ອຍຂອງ ``[project.entry-points]`` " +"ດັ່ງນີ້:" + +#: ../source/guides/writing-pyproject-toml.rst:537 +msgid "See the :ref:`Plugin guide ` for more information." +msgstr "ເບິ່ງ :ref:`ຄຳແນະນຳປລັກອິນ ` ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ." + +#: ../source/guides/writing-pyproject-toml.rst:542 +msgid "A full example" +msgstr "ຕົວຢ່າງແບບເຕັມ" + +#: ../source/guides/writing-pyproject-toml.rst:606 +msgid "" +"Think twice before applying an upper bound like ``requires-python = \"<= " +"3.10\"`` here. `This blog post `_ contains some " +"information regarding possible problems." +msgstr "" +"ກະລຸນາຄິດໃຫ້ຮອບຄອບກ່ອນຈະກຳນົດຂີດຈຳກັດສູງສຸດ ເຊັ່ນ ``requires-python = \"<= 3.10\"``. " +"`ບົດຄວາມນີ້ `_ ມີຂໍ້ມູນກ່ຽວກັບບັນຫາທີ່ອາດຈະເກີດຂຶ້ນ." + +#: ../source/guides/writing-pyproject-toml.rst:610 +msgid "" +"flit-core `does not yet `_ support WITH in SPDX license " +"expressions." +msgstr "" +"flit-core `ຍັງບໍ່ທັນຮອງຮັບ `_ ການໃຊ້ WITH ໃນ SPDX license " +"expressions." + +#: ../source/index.rst:-1 +msgid "" +"The Python Packaging User Guide (PyPUG) is a collection of tutorials and " +"guides for packaging Python software." +msgstr "" +"ຄຳແນະນຳການສ້າງແພັກເກດ Python (PyPUG) ແມ່ນບ່ອນລວມບົດຮຽນ ແລະ " +"ຄຳແນະນຳສຳລັບການສ້າງແພັກເກດຊອຟແວ Python." + +#: ../source/index.rst:-1 +msgid "python, packaging, guide, tutorial" +msgstr "python, ການສ້າງແພັກເກດ, ຄຳແນະນຳ, ບົດຮຽນ" + +#: ../source/index.rst:3 ../source/key_projects.rst:247 +msgid "Python Packaging User Guide" +msgstr "ຄຳແນະນຳການສ້າງແພັກເກດ Python" + +#: ../source/index.rst:25 +msgid "" +"Welcome to the *Python Packaging User Guide*, a collection of tutorials and " +"references to help you distribute and install Python packages with modern " +"tools." +msgstr "" +"ຍິນດີຕ້ອນຮັບເຂົ້າສູ່ *ຄຳແນະນຳການສ້າງແພັກເກດ Python*, ເຊິ່ງເປັນບ່ອນລວມບົດຮຽນ ແລະ " +"ເອກະສານອ້າງອີງ ເພື່ອຊ່ວຍໃຫ້ທ່ານແຈກຢາຍ ແລະ ຕິດຕັ້ງແພັກເກດ Python ດ້ວຍເຄື່ອງມືທີ່ທັນສະໄໝ." + +#: ../source/index.rst:29 +msgid "" +"This guide is maintained on `GitHub`_ by the :doc:`Python Packaging " +"Authority `. We happily accept :doc:`contributions and feedback " +"`. 😊" +msgstr "" +"ຄຳແນະນຳນີ້ຖືກດູແລເທິງ `GitHub`_ ໂດຍ :doc:`Python Packaging Authority " +"`. ພວກເຮົາຍິນດີຮັບ :doc:`ການມີສ່ວນຮ່ວມ ແລະ ຄຳຄິດເຫັນ `. 😊" + +#: ../source/index.rst:36 +msgid "Overview and Flow" +msgstr "ພາບລວມ ແລະ ຂັ້ນຕອນການເຮັດວຽກ" + +#: ../source/index.rst:40 +msgid "" +"Building your understanding of Python packaging is a journey. Patience and " +"continuous improvement are key to success. The overview and flow sections " +"provide a starting point for understanding the Python packaging ecosystem." +msgstr "" +"ການສ້າງຄວາມເຂົ້າໃຈກ່ຽວກັບການສ້າງແພັກເກດ Python ແມ່ນການເດີນທາງ. ຄວາມອົດທົນ ແລະ " +"ການປັບປຸງຢ່າງຕໍ່ເນື່ອງແມ່ນກຸນແຈສູ່ຄວາມສຳເລັດ. ພາກສ່ວນພາບລວມ ແລະ ຂັ້ນຕອນການເຮັດວຽກ " +"ຈະເປັນຈຸດເລີ່ມຕົ້ນໃນການເຂົ້າໃຈລະບົບນິເວດການສ້າງແພັກເກດ Python." + +#: ../source/index.rst:44 +msgid "" +"The :doc:`overview` explains Python packaging and its use when preparing and " +"distributing projects. This section helps you build understanding about " +"selecting the tools and processes that are most suitable for your use case. " +"It includes what packaging is, the problems that it solves, and key " +"considerations." +msgstr "" +":doc:`ພາບລວມ` ຈະອະທິບາຍກ່ຽວກັບການສ້າງແພັກເກດ Python ແລະ ການນຳໃຊ້ຂອງມັນ ໃນການກະກຽມ " +"ແລະ ແຈກຢາຍໂປຣເຈັກ. ພາກສ່ວນນີ້ຊ່ວຍໃຫ້ທ່ານເຂົ້າໃຈກ່ຽວກັບການເລືອກເຄື່ອງມື ແລະ " +"ຂັ້ນຕອນທີ່ເໝາະສົມທີ່ສຸດສຳລັບວຽກຂອງທ່ານ. ມັນລວມເຖິງວ່າການສ້າງແພັກເກດແມ່ນຫຍັງ, ບັນຫາທີ່ມັນແກ້ໄຂ, ແລະ " +"ຂໍ້ຄວນຄຳນຶງທີ່ສຳຄັນ." + +#: ../source/index.rst:51 +msgid "" +"To get an overview of the workflow used to publish your code, " +"see :doc:`packaging flow `." +msgstr "" +"ເພື່ອເບິ່ງພາບລວມຂອງຂັ້ນຕອນການເຮັດວຽກທີ່ໃຊ້ໃນການເຜີຍແຜ່ໂຄ້ດຂອງທ່ານ, " +"ເບິ່ງ :doc:`ຂັ້ນຕອນການສ້າງແພັກເກດ `." + +#: ../source/index.rst:57 +msgid "" +"Tutorials walk through the steps needed to complete a project for the first " +"time. Tutorials aim to help you succeed and provide a starting point for " +"future exploration. The :doc:`tutorials/index` section includes:" +msgstr "" +"ບົດຮຽນຈະນຳພາທ່ານຜ່ານຂັ້ນຕອນຕ່າງໆທີ່ຈຳເປັນເພື່ອເຮັດໂປຣເຈັກໃຫ້ສຳເລັດເປັນຄັ້ງທຳອິດ. " +"ບົດຮຽນມີເປົ້າໝາຍເພື່ອຊ່ວຍໃຫ້ທ່ານເຮັດສຳເລັດ ແລະ ເປັນຈຸດເລີ່ມຕົ້ນສຳລັບການສຶກສາເພີ່ມເຕີມໃນອະນາຄົດ. " +"ພາກສ່ວນ :doc:`tutorials/index` ລວມມີ:" + +#: ../source/index.rst:62 +msgid "" +"A :doc:`tutorial on installing packages `" +msgstr ":doc:`ບົດຮຽນກ່ຽວກັບການຕິດຕັ້ງແພັກເກດ `" + +#: ../source/index.rst:63 +msgid "" +"A :doc:`tutorial on managing application dependencies ` in a version controlled project" +msgstr "" +":doc:`ບົດຮຽນກ່ຽວກັບການຈັດການສ່ວນປະກອບທີ່ຈຳເປັນ ` " +"ໃນໂປຣເຈັກທີ່ມີການຄວບຄຸມເວີຊັນ" + +#: ../source/index.rst:65 +msgid "" +"A :doc:`tutorial on packaging and distributing ` your project" +msgstr "" +":doc:`ບົດຮຽນກ່ຽວກັບການສ້າງແພັກເກດ ແລະ ການແຈກຢາຍ ` " +"ໂປຣເຈັກຂອງທ່ານ" + +#: ../source/index.rst:71 +msgid "" +"Guides provide steps to perform a specific task. Guides are more focused on " +"users who are already familiar with Python packaging and are looking for " +"specific information." +msgstr "" +"ຄຳແນະນຳຈະບອກຂັ້ນຕອນການເຮັດວຽກໃດໜຶ່ງໂດຍສະເພາະ. " +"ຄຳແນະນຳຈະເນັ້ນໃສ່ຜູ້ໃຊ້ທີ່ຄຸ້ນເຄີຍກັບການສ້າງແພັກເກດ Python ຢູ່ແລ້ວ ແລະ " +"ກຳລັງຊອກຫາຂໍ້ມູນສະເພາະບາງຢ່າງ." + +#: ../source/index.rst:75 +msgid "" +"The :doc:`guides/index` section provides \"how to\" instructions in three " +"major areas: package installation; building and distributing packages; " +"miscellaneous topics." +msgstr "" +"ພາກສ່ວນ :doc:`guides/index` ຈະໃຫ້ຄຳແນະນຳ \"ວິທີການ\" ໃນສາມດ້ານຫຼັກ: ການຕິດຕັ້ງແພັກເກດ; " +"ການສ້າງ ແລະ ການແຈກຢາຍແພັກເກດ; ແລະ ຫົວຂໍ້ອື່ນໆ." + +#: ../source/index.rst:80 +msgid "Explanations and Discussions" +msgstr "ຄຳອະທິບາຍ ແລະ ການສົນທະນາ" + +#: ../source/index.rst:82 +msgid "" +"The :doc:`discussions/index` section provides in-depth explanations and " +"discussion about topics, such as:" +msgstr "" +"ພາກສ່ວນ :doc:`discussions/index` ໃຫ້ຄຳອະທິບາຍແບບເຈາະເລິກ ແລະ " +"ການສົນທະນາກ່ຽວກັບຫົວຂໍ້ຕ່າງໆ, ເຊັ່ນ:" + +#: ../source/index.rst:85 +msgid ":doc:`discussions/deploying-python-applications`" +msgstr ":doc:`discussions/deploying-python-applications` (ການຕິດຂັດແອັບ Python)" + +#: ../source/index.rst:86 +msgid ":doc:`discussions/pip-vs-easy-install`" +msgstr ":doc:`discussions/pip-vs-easy-install` (pip ທຽບກັບ easy-install)" + +#: ../source/index.rst:89 +msgid "Reference" +msgstr "ເອກະສານອ້າງອີງ" + +#: ../source/index.rst:91 +msgid "" +"The :doc:`specifications/index` section for packaging interoperability " +"specifications." +msgstr "" +"ພາກສ່ວນ :doc:`specifications/index` ສຳລັບຂໍ້ກຳນົດດ້ານການເຮັດວຽກຮ່ວມກັນຂອງການສ້າງແພັກເກດ." + +#: ../source/index.rst:92 +msgid "" +"The list of :doc:`other projects ` maintained by members of " +"the Python Packaging Authority." +msgstr "" +"ລາຍການ :doc:`ໂປຣເຈັກອື່ນໆ ` ທີ່ດູແລໂດຍສະມາຊິກຂອງ Python Packaging " +"Authority." + +#: ../source/index.rst:93 +msgid "The :doc:`glossary` for definitions of terms used in Python packaging." +msgstr ":doc:`ຄຳສັບ` ສຳລັບຄຳນິຍາມຂອງຄຳສັບທີ່ໃຊ້ໃນການສ້າງແພັກເກດ Python." + +#: ../source/key_projects.rst:6 +msgid "Project Summaries" +msgstr "ບົດສະຫຼຸບໂປຣເຈັກ" + +#: ../source/key_projects.rst:8 +msgid "" +"Summaries and links for the most relevant projects in the space of Python " +"installation and packaging." +msgstr "ບົດສະຫຼຸບ ແລະ ລິ້ງສຳລັບໂປຣເຈັກທີ່ກ່ຽວຂ້ອງທີ່ສຸດໃນດ້ານການຕິດຕັ້ງ ແລະ ການສ້າງແພັກເກດ Python." + +#: ../source/key_projects.rst:14 +msgid "PyPA Projects" +msgstr "ໂປຣເຈັກຂອງ PyPA" + +#: ../source/key_projects.rst:19 +msgid "bandersnatch" +msgstr "bandersnatch" + +#: ../source/key_projects.rst:21 +msgid "" +"`Docs `__ | `Issues `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `ແຈ້ງບັນຫາ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:26 +msgid "" +"``bandersnatch`` is a PyPI mirroring client designed to efficiently create a " +"complete mirror of the contents of PyPI. Organizations thus save bandwidth " +"and latency on package downloads (especially in the context of automated " +"tests) and to prevent heavily loading PyPI's Content Delivery Network (CDN). " +"Files can be served from a local directory or `AWS S3`_." +msgstr "" +"``bandersnatch`` ແມ່ນຄລາຍແອນ (client) ສຳລັບເຮັດ PyPI mirror " +"ທີ່ຖືກອອກແບບມາເພື່ອສ້າງສຳເນົາເນື້ອໃນທັງໝົດຂອງ PyPI ຢ່າງມີປະສິດທິພາບ. " +"ອົງກອນຕ່າງໆຈຶ່ງສາມາດປະຢັດແບນວິດ (bandwidth) ແລະ ຫຼຸດຄວາມຊ້າໃນການດາວໂຫຼດແພັກເກດ " +"(ໂດຍສະເພາະໃນການທົດສອບແບບອັດຕະໂນມັດ) ແລະ ເພື່ອປ້ອງກັນບໍ່ໃຫ້ເກີດພາລະໜັກເກີນໄປຕໍ່ລະບົບ CDN ຂອງ " +"PyPI. ໄຟລ໌ສາມາດໃຫ້ບໍລິການຈາກໂຟນເດີພາຍໃນເຄື່ອງ ຫຼື `AWS S3`_." + +#: ../source/key_projects.rst:37 +msgid "build" +msgstr "build" + +#: ../source/key_projects.rst:39 +msgid "" +":any:`Docs ` | `Issues `__ | `GitHub `__ | `PyPI `__" +msgstr "" +":any:`ເອກະສານ ` | `ແຈ້ງບັນຫາ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:44 +msgid "" +"``build`` is a :pep:`517` compatible Python package builder. It provides a " +"CLI to build packages, as well as a Python API." +msgstr "" +"``build`` ແມ່ນເຄື່ອງມືສ້າງແພັກເກດ Python ທີ່ເຂົ້າກັນໄດ້ກັບ :pep:`517`. ມັນມີທັງ CLI " +"ເພື່ອສ້າງແພັກເກດ ແລະ Python API." + +#: ../source/key_projects.rst:51 +msgid "cibuildwheel" +msgstr "cibuildwheel" + +#: ../source/key_projects.rst:53 +msgid "" +"`Docs `__ | `Issues `__ | `GitHub `__ | `PyPI `__ | " +"`Discussions `__ | " +"`Discord #cibuildwheel `__" +msgstr "" +"`ເອກະສານ `__ | `ແຈ້ງບັນຫາ `__ | `GitHub `__ | `PyPI `__ | " +"`ສົນທະນາ `__ | `Discord " +"#cibuildwheel `__" + +#: ../source/key_projects.rst:60 +msgid "" +"``cibuildwheel`` is a Python package that builds :term:`wheels ` for " +"all common platforms and Python versions on most CI systems. Also " +"see :ref:`multibuild`." +msgstr "" +"``cibuildwheel`` ແມ່ນແພັກເກດ Python ທີ່ສ້າງ :term:`wheels ` ສຳລັບທຸກແພລດຟອມ " +"ແລະ ທຸກເວີຊັນ Python ທີ່ນິຍົມໃຊ້ໃນລະບົບ CI ສ່ວນໃຫຍ່. ເບິ່ງ :ref:`multibuild` ຕື່ມ." + +#: ../source/key_projects.rst:66 +msgid "distlib" +msgstr "distlib" + +#: ../source/key_projects.rst:68 +msgid "" +":doc:`Docs ` | `Issues `__ | `GitHub `__ | `PyPI `__" +msgstr "" +":doc:`ເອກະສານ ` | `ແຈ້ງບັນຫາ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:73 +msgid "" +"``distlib`` is a library which implements low-level functions that relate to " +"packaging and distribution of Python software. ``distlib`` implements " +"several relevant PEPs (Python Enhancement Proposal standards) and is useful " +"for developers of third-party packaging tools to make and upload binary and " +"source :term:`distributions `, achieve " +"interoperability, resolve dependencies, manage package resources, and do " +"other similar functions." +msgstr "" +"``distlib`` ແມ່ນໄລບຣາຣີທີ່ປະມວນຜົນຟັງຊັນລະດັບຕ່ຳທີ່ກ່ຽວຂ້ອງກັບການສ້າງແພັກເກດ ແລະ " +"ການແຈກຢາຍຊອຟແວ Python. ``distlib`` ຮອງຮັບ PEP ທີ່ກ່ຽວຂ້ອງຫຼາຍຕົວ ແລະ " +"ມີປະໂຫຍດສຳລັບຜູ້ພັດທະນາເຄື່ອງມືສ້າງແພັກເກດພາຍນອກ ເພື່ອສ້າງ ແລະ ອັບໂຫຼດ binary ແລະ " +"source :term:`distributions `, ຊ່ວຍໃຫ້ເຮັດວຽກຮ່ວມກັນໄດ້, " +"ຈັດການສ່ວນປະກອບທີ່ຈຳເປັນ, ຈັດການຊັບພະຍາກອນແພັກເກດ, ແລະ ເຮັດໜ້າທີ່ອື່ນໆທີ່ຄ້າຍຄືກັນ." + +#: ../source/key_projects.rst:82 +msgid "" +"Unlike the stricter :ref:`packaging` project (below), which specifically " +"implements modern Python packaging interoperability standards, ``distlib`` " +"also attempts to provide reasonable fallback behaviours when asked to handle " +"legacy packages and metadata that predate the modern interoperability " +"standards and fall into the subset of packages that are incompatible with " +"those standards." +msgstr "" +"ຕ່າງຈາກໂປຣເຈັກ :ref:`packaging` (ຂ້າງລຸ່ມ) ທີ່ມີຄວາມເຂັ້ມງວດກວ່າ " +"ເຊິ່ງເນັ້ນການຮອງຮັບມາດຕະຖານການເຮັດວຽກຮ່ວມກັນຂອງ Python ຍຸກໃໝ່, ``distlib`` " +"ຍັງພະຍາຍາມໃຫ້ມີການເຮັດວຽກຮອງຮັບ (fallback) ທີ່ເໝາະສົມ ເມື່ອຕ້ອງຈັດການກັບແພັກເກດ ແລະ " +"metadata ແບບເກົ່າ (legacy) ທີ່ມາກ່ອນມາດຕະຖານໃໝ່ ແລະ ບໍ່ສາມາດເຂົ້າກັນໄດ້ກັບມາດຕະຖານເຫຼົ່ານັ້ນ." + +#: ../source/key_projects.rst:93 +msgid "distutils" +msgstr "distutils" + +#: ../source/key_projects.rst:95 +msgid "" +"The original Python packaging system, added to the standard library in " +"Python 2.0 and removed in 3.12." +msgstr "" +"ລະບົບການສ້າງແພັກເກດດັ້ງເດີມຂອງ Python, ເຊິ່ງຖືກເພີ່ມເຂົ້າໃນ Standard Library ຕັ້ງແຕ່ Python " +"2.0 ແລະ ຖືກຖອນອອກໃນເວີຊັນ 3.12." + +#: ../source/key_projects.rst:98 +msgid "" +"Due to the challenges of maintaining a packaging system where feature " +"updates are tightly coupled to language runtime updates, direct usage " +"of :ref:`distutils` has been actively discouraged, with :ref:`Setuptools` " +"being the preferred replacement. :ref:`Setuptools` not only provides " +"features that plain :ref:`distutils` doesn't offer (such as dependency " +"declarations and entry point declarations), it also provides a consistent " +"build interface and feature set across all supported Python versions." +msgstr "" +"ເນື່ອງຈາກຄວາມຫຍຸ້ງຍາກໃນການດູແລລະບົບການສ້າງແພັກເກດທີ່ການອັບເດດຟີເຈີຖືກຜູກຕິດກັບການອັບເດດຂອງຕົວພາສາ, " +"ການໃຊ້ :ref:`distutils` ໂດຍກົງຈຶ່ງບໍ່ໄດ້ຮັບການແນະນຳ, ໂດຍມີ :ref:`Setuptools` " +"ເປັນຕົວປ່ຽນແທນທີ່ດີກວ່າ. :ref:`Setuptools` ບໍ່ພຽງແຕ່ມີຟີເຈີທີ່ :ref:`distutils` ແບບທຳມະດາບໍ່ມີ " +"(ເຊັ່ນ: ການປະກາດສ່ວນປະກອບທີ່ຈຳເປັນ ແລະ entry point), ແຕ່ມັນຍັງມີອິນເຕີເຟດການສ້າງ ແລະ " +"ຊຸດຟີເຈີທີ່ຄົງທີ່ໃນທຸກໆເວີຊັນ Python ທີ່ຮອງຮັບ." + +#: ../source/key_projects.rst:107 +msgid "" +"Consequently, :ref:`distutils` was deprecated in Python 3.10 by :pep:`632` " +"and has been :doc:`removed ` from the standard library " +"in Python 3.12. Setuptools bundles the standalone copy of distutils, and it " +"is injected even on Python < 3.12 if you import setuptools first or use pip." +msgstr "" +"ດ້ວຍເຫດນັ້ນ, :ref:`distutils` ຈຶ່ງຖືກຍົກເລີກການນຳໃຊ້ໃນ Python 3.10 ໂດຍ :pep:`632` ແລະ " +"ຖືກ :doc:`ຖອນອອກ ` ຈາກ standard library ໃນ Python 3.12. " +"ເຖິງຢ່າງໃດກໍຕາມ, Setuptools ໄດ້ລວມເອົາ distutils ແບບ standalone ໄວ້ນຳ, ແລະ " +"ມັນຈະຖືກເອົາມາໃຊ້ເຖິງແມ່ນວ່າຈະເປັນ Python ເວີຊັນຕ່ຳກວ່າ 3.12 ຖ້າທ່ານ import setuptools ກ່ອນ " +"ຫຼື ໃຊ້ pip." + +#: ../source/key_projects.rst:116 +msgid "flit" +msgstr "flit" + +#: ../source/key_projects.rst:118 +msgid "" +"`Docs `__ | `Issues `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `ແຈ້ງບັນຫາ `__ | `PyPI `__" + +#: ../source/key_projects.rst:122 +msgid "" +"Flit provides a simple way to create and upload pure Python packages and " +"modules to PyPI. It focuses on `making the easy things easy `_ for packaging. Flit can generate a configuration file to " +"quickly set up a simple project, build source distributions and wheels, and " +"upload them to PyPI." +msgstr "" +"Flit ໃຫ້ວິທີທີ່ງ່າຍໃນການສ້າງ ແລະ ອັບໂຫຼດແພັກເກດ ແລະ ໂມດູນ Python ແບບບໍລິສຸດ ຂຶ້ນ PyPI. " +"ມັນເນັ້ນໃສ່ `ການເຮັດເລື່ອງງ່າຍໃຫ້ງ່າຍຂຶ້ນ `_ ສຳລັບການສ້າງແພັກເກດ. Flit " +"ສາມາດສ້າງໄຟລ໌ກຳນົດຄ່າເພື່ອຕັ້ງຄ່າໂປຣເຈັກແບບງ່າຍໆຢ່າງວ່ອງໄວ, ສ້າງ source distributions ແລະ " +"wheels, ແລະ ອັບໂຫຼດພວກມັນຂຶ້ນ PyPI." + +#: ../source/key_projects.rst:127 +msgid "" +"Flit uses ``pyproject.toml`` to configure a project. Flit does not rely on " +"tools such as :ref:`setuptools` to build distributions, or :ref:`twine` to " +"upload them to PyPI. Flit requires Python 3, but you can use it to " +"distribute modules for Python 2, so long as they can be imported on Python 3." +msgstr "" +"Flit ໃຊ້ ``pyproject.toml`` ໃນການກຳນົດຄ່າໂປຣເຈັກ. Flit ບໍ່ໄດ້ເພິ່ງພາເຄື່ອງມື " +"ເຊັ່ນ :ref:`setuptools` ໃນການສ້າງ distributions, ຫຼື :ref:`twine` ໃນການອັບໂຫຼດ. " +"Flit ຕ້ອງການ Python 3, ແຕ່ທ່ານສາມາດໃຊ້ມັນເພື່ອແຈກຢາຍໂມດູນສຳລັບ Python 2 ໄດ້, " +"ຕາບໃດທີ່ໂມດູນເຫຼົ່ານັ້ນສາມາດ import ໃນ Python 3 ໄດ້." + +#: ../source/key_projects.rst:132 +msgid "" +"The flit package is lifted by `Matthias Bussonnier `__ since October 2023 on the `tidelift platform `__, and funds sent to the PSF and " +"earmarked for PyPA usage." +msgstr "" +"ແພັກເກດ flit ໄດ້ຮັບການສະໜັບສະໜູນໂດຍ `Matthias Bussonnier `__ ຕັ້ງແຕ່ເດືອນຕຸລາ 2023 ຜ່ານທາງ `tidelift platform `__, ແລະ ເງິນທຶນໄດ້ຖືກສົ່ງໄປໃຫ້ PSF ໂດຍລະບຸໄວ້ເພື່ອໃຊ້ສຳລັບ PyPA." + +#: ../source/key_projects.rst:142 +msgid "hatch" +msgstr "hatch" + +#: ../source/key_projects.rst:144 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:148 +msgid "" +"Hatch is a unified command-line tool meant to conveniently manage " +"dependencies and environment isolation for Python developers. Python package " +"developers use Hatch and its :term:`build backend ` Hatchling " +"to configure, version, specify dependencies for, and publish packages to " +"PyPI. Its plugin system allows for easily extending functionality." +msgstr "" +"Hatch ແມ່ນເຄື່ອງມື command-line ແບບລວມສູນ ເພື່ອຈັດການສ່ວນປະກອບທີ່ຈຳເປັນ ແລະ " +"ການແຍກສະພາບແວດລ້ອມ (environment isolation) ໃຫ້ກັບຜູ້ພັດທະນາ Python. ຜູ້ພັດທະນາແພັກເກດ " +"Python ໃຊ້ Hatch ແລະ :term:`build backend ` ຂອງມັນທີ່ຊື່ວ່າ " +"Hatchling ເພື່ອກຳນົດຄ່າ, ເວີຊັນ, ລະບົບສ່ວນປະກອບທີ່ຈຳເປັນ, ແລະ ເຜີຍແຜ່ແພັກເກດຂຶ້ນ PyPI. " +"ລະບົບປລັກອິນຂອງມັນຊ່ວຍໃຫ້ສາມາດເສີມຟີເຈີໃໝ່ໆໄດ້ງ່າຍ." + +#: ../source/key_projects.rst:157 +msgid "packaging" +msgstr "ການຈັດເຮັດແພັກເກດ" + +#: ../source/key_projects.rst:159 +msgid "" +":doc:`Docs ` | `Issues `__ | `GitHub `__ | `PyPI `__" +msgstr "" +":doc:`ເອກະສານ ` | `ແຈ້ງບັນຫາ `__ | `GitHub `__ | " +"`PyPI `__" + +#: ../source/key_projects.rst:164 +msgid "" +"Core utilities for Python packaging used by :ref:`pip` and :ref:`setuptools`." +msgstr "" +"ເຄື່ອງມືຫຼັກສຳລັບການສ້າງແພັກເກດ Python ທີ່ຖືກໃຊ້ໂດຍ :ref:`pip` ແລະ :ref:`setuptools`." + +#: ../source/key_projects.rst:166 +msgid "" +"The core utilities in the packaging library handle version handling, " +"specifiers, markers, requirements, tags, and similar attributes and tasks " +"for Python packages. Most Python users rely on this library without needing " +"to explicitly call it; developers of the other Python packaging, " +"distribution, and installation tools listed here often use its functionality " +"to parse, discover, and otherwise handle dependency attributes." +msgstr "" +"ເຄື່ອງມືຫຼັກໃນໄລບຣາຣີ packaging ຈະຈັດການກ່ຽວກັບເວີຊັນ, ຕົວກຳນົດ, ຕົວໝາຍ (markers), ຂໍ້ກຳນົດ, " +"ແທັກ (tags), ແລະ ຄຸນລັກສະນະອື່ນໆທີ່ຄ້າຍຄືກັນສຳລັບແພັກເກດ Python. ຜູ້ໃຊ້ Python " +"ສ່ວນໃຫຍ່ແມ່ນໃຊ້ໄລບຣາຣີນີ້ໂດຍບໍ່ຮູ້ຕົວ; ສ່ວນຜູ້ພັດທະນາເຄື່ອງມືສ້າງ ແລະ ຕິດຕັ້ງແພັກເກດ Python " +"ອື່ນໆທີ່ລະບຸໄວ້ໃນນີ້ ມັກຈະໃຊ້ຟັງຊັນຂອງມັນເພື່ອ parse, ກວດຫາ, ແລະ " +"ຈັດການກັບຄຸນລັກສະນະຂອງສ່ວນປະກອບທີ່ຈຳເປັນ." + +#: ../source/key_projects.rst:174 +msgid "" +"This project specifically focuses on implementing the modern Python " +"packaging interoperability standards defined at :ref:`packaging-" +"specifications`, and will report errors for sufficiently old legacy packages " +"that are incompatible with those standards. In contrast, the :ref:`distlib` " +"project is a more permissive library that attempts to provide a plausible " +"reading of ambiguous metadata in cases where :ref:`packaging` will instead " +"report on error." +msgstr "" +"ໂປຣເຈັກນີ້ເນັ້ນໃສ່ການຮອງຮັບມາດຕະຖານການເຮັດວຽກຮ່ວມກັນຂອງ Python ຍຸກໃໝ່ " +"ທີ່ກຳນົດໄວ້ໃນ :ref:`packaging-specifications`, ແລະ ຈະແຈ້ງຂໍ້ຜິດພາດສຳລັບ " +"ແພັກເກດແບບເກົ່າຫຼາຍໆທີ່ບໍ່ເຂົ້າກັນກັບມາດຕະຖານເຫຼົ່ານັ້ນ. ໃນທາງກົງກັນຂ້າມ, ໂປຣເຈັກ :ref:`distlib` " +"ແມ່ນໄລບຣາຣີທີ່ຜ່ອນຜັນກວ່າ ເຊິ່ງພະຍາຍາມອ່ານ metadata ທີ່ບໍ່ຊັດເຈນ ໃນກໍລະນີທີ່ :ref:`packaging` " +"ຈະແຈ້ງເປັນຂໍ້ຜິດພາດ." + +#: ../source/key_projects.rst:186 +#: ../source/specifications/platform-compatibility-tags.rst:147 +msgid "pip" +msgstr "pip" + +#: ../source/key_projects.rst:188 +msgid "" +"`Docs `__ | `Issues `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `ແຈ້ງບັນຫາ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:193 +msgid "" +"The most popular tool for installing Python packages, and the one included " +"with modern versions of Python." +msgstr "" +"ເຄື່ອງມືທີ່ນິຍົມທີ່ສຸດໃນການຕິດຕັ້ງແພັກເກດ Python, ແລະ ຖືກລວມມາພ້ອມກັບ Python ເວີຊັນໃໝ່ໆຢູ່ແລ້ວ." + +#: ../source/key_projects.rst:196 +msgid "" +"It provides the essential core features for finding, downloading, and " +"installing packages from PyPI and other Python package indexes, and can be " +"incorporated into a wide range of development workflows via its command-line " +"interface (CLI)." +msgstr "" +"ມັນມີຟີເຈີຫຼັກທີ່ຈຳເປັນໃນການຄົ້ນຫາ, ດາວໂຫຼດ, ແລະ ຕິດຕັ້ງແພັກເກດຈາກ PyPI ແລະ ແຫຼ່ງອື່ນໆ, ແລະ " +"ສາມາດນຳໄປລວມເຂົ້າກັບຂັ້ນຕອນການພັດທະນາທີ່ຫຼາກຫຼາຍ ຜ່ານທາງ command-line interface (CLI)." + +#: ../source/key_projects.rst:204 +msgid "Pipenv" +msgstr "Pipenv" + +#: ../source/key_projects.rst:206 +msgid "" +":doc:`Docs ` | `Source `__ | " +"`Issues `__ | `PyPI `__" +msgstr "" +":doc:`ເອກະສານ ` | `ໂຄ້ດຕົ້ນສະບັບ `__ | `ແຈ້ງບັນຫາ `__ | `PyPI " +"`__" + +#: ../source/key_projects.rst:211 +msgid "" +"Pipenv is a project that aims to bring the best of all packaging worlds to " +"the Python world. It harnesses :ref:`Pipfile`, :ref:`pip`, " +"and :ref:`virtualenv` into one single toolchain. It can autoimport " +"``requirements.txt`` and also check for CVEs in `Pipfile`_ using `safety " +"`_." +msgstr "" +"Pipenv ແມ່ນໂປຣເຈັກທີ່ມີເປົ້າໝາຍລວມເອົາຂໍ້ດີຂອງໂລກການສ້າງແພັກເກດມາສູ່ Python. " +"ມັນລວມເອົາ :ref:`Pipfile`, :ref:`pip`, ແລະ :ref:`virtualenv` ເຂົ້າເປັນເຄື່ອງມືດຽວ. " +"ມັນສາມາດນຳເຂົ້າ ``requirements.txt`` ໄດ້ອັດຕະໂນມັດ ແລະ ຍັງກວດສອບຊ່ອງໂຫວ່ CVE ໃນ " +"`Pipfile`_ ໂດຍໃຊ້ `safety `_." + +#: ../source/key_projects.rst:216 +msgid "" +"Pipenv aims to help users manage environments, dependencies, and imported " +"packages on the command line. It also works well on Windows (which other " +"tools often underserve), makes and checks file hashes, to ensure compliance " +"with hash-locked dependency specifiers, and eases uninstallation of packages " +"and dependencies." +msgstr "" +"Pipenv ຊ່ວຍໃຫ້ຜູ້ໃຊ້ຈັດການສະພາບແວດລ້ອມ, ສ່ວນປະກອບທີ່ຈຳເປັນ, ແລະ ແພັກເກດທີ່ນຳເຂົ້າ ຜ່ານ " +"command line. ມັນຍັງເຮັດວຽກໄດ້ດີໃນ Windows, ມີການສ້າງ ແລະ ກວດສອບ hash ຂອງໄຟລ໌ " +"ເພື່ອຄວາມປອດໄພ, ແລະ ຊ່ວຍໃຫ້ການຖອນການຕິດຕັ້ງແພັກເກດເຮັດໄດ້ງ່າຍຂຶ້ນ." + +#: ../source/key_projects.rst:225 +msgid "Pipfile" +msgstr "Pipfile" + +#: ../source/key_projects.rst:227 +msgid "`Source `__" +msgstr "`ໂຄ້ດຕົ້ນສະບັບ `__" + +#: ../source/key_projects.rst:229 +msgid "" +":file:`Pipfile` and its sister :file:`Pipfile.lock` are a higher-level " +"application-centric alternative to :ref:`pip`'s lower-" +"level :file:`requirements.txt` file." +msgstr "" +":file:`Pipfile` ແລະ :file:`Pipfile.lock` ແມ່ນທາງເລືອກໃນລະດັບທີ່ສູງກວ່າ " +"ເຊິ່ງເນັ້ນໃສ່ຕົວແອັບພລິເຄຊັນ ແທນທີ່ໄຟລ໌ :file:`requirements.txt` ຂອງ :ref:`pip`." + +#: ../source/key_projects.rst:236 +msgid "pipx" +msgstr "pipx" + +#: ../source/key_projects.rst:238 +msgid "" +"`Docs `__ | `GitHub `__ " +"| `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:242 +msgid "" +"pipx is a tool to install and run Python command-line applications without " +"causing dependency conflicts with other packages installed on the system." +msgstr "" +"pipx ແມ່ນເຄື່ອງມືສຳລັບຕິດຕັ້ງ ແລະ ລັນແອັບພລິເຄຊັນ command-line ຂອງ Python " +"ໂດຍບໍ່ເຮັດໃຫ້ເກີດຄວາມຂັດແຍ້ງຂອງສ່ວນປະກອບທີ່ຈຳເປັນກັບແພັກເກດອື່ນໆໃນລະບົບ." + +#: ../source/key_projects.rst:249 +msgid "" +":doc:`Docs ` | `Issues `__ | `GitHub `__" +msgstr "" +":doc:`ເອກະສານ ` | `ແຈ້ງບັນຫາ `__ | `GitHub `__" + +#: ../source/key_projects.rst:253 +msgid "This guide!" +msgstr "ຄຳແນະນຳນີ້ແຫຼະ!" + +#: ../source/key_projects.rst:258 +msgid "readme_renderer" +msgstr "readme_renderer" + +#: ../source/key_projects.rst:260 +msgid "" +"`GitHub and docs `__ | `PyPI " +"`__" +msgstr "" +"`GitHub ແລະ ເອກະສານ `__ | `PyPI " +"`__" + +#: ../source/key_projects.rst:263 +msgid "" +"``readme_renderer`` is a library that package developers use to render their " +"user documentation (README) files into HTML from markup languages such as " +"Markdown or reStructuredText. Developers call it on its own or " +"via :ref:`twine`, as part of their release management process, to check that " +"their package descriptions will properly display on PyPI." +msgstr "" +"``readme_renderer`` ແມ່ນໄລບຣາຣີທີ່ຜູ້ພັດທະນາແພັກເກດໃຊ້ເພື່ອແປງໄຟລ໌ README ໃຫ້ເປັນ HTML " +"ຈາກພາສາ Markdown ຫຼື reStructuredText. ຜູ້ພັດທະນາໃຊ້ມັນໂດຍກົງ ຫຼື ຜ່ານ :ref:`twine` " +"ເພື່ອກວດສອບວ່າຄຳອະທິບາຍແພັກເກດຈະສະແດງຜົນຢ່າງຖືກຕ້ອງໃນ PyPI." + +#: ../source/key_projects.rst:274 +msgid "Setuptools" +msgstr "Setuptools" + +#: ../source/key_projects.rst:276 +msgid "" +"`Docs `__ | `Issues `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `ແຈ້ງບັນຫາ " +"`__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:281 +msgid "" +"Setuptools (which includes ``easy_install``) is a collection of enhancements " +"to the Python distutils that allow you to more easily build and distribute " +"Python :term:`distributions `, especially ones that " +"have dependencies on other packages." +msgstr "" +"Setuptools (ເຊິ່ງລວມມີ ``easy_install``) ແມ່ນຊຸດເຄື່ອງມືທີ່ເສີມປະສິດທິພາບໃຫ້ distutils ຂອງ " +"Python ເພື່ອໃຫ້ທ່ານສ້າງ ແລະ ແຈກຢາຍ :term:`distributions ` " +"ຂອງ Python ໄດ້ງ່າຍຂຶ້ນ, ໂດຍສະເພາະຕົວທີ່ມີສ່ວນປະກອບທີ່ຈຳເປັນຈາກແພັກເກດອື່ນ." + +#: ../source/key_projects.rst:289 +msgid "trove-classifiers" +msgstr "trove-classifiers" + +#: ../source/key_projects.rst:291 +msgid "" +"`Issues `__ | `GitHub " +"`__ | `PyPI `__" +msgstr "" +"`ແຈ້ງບັນຫາ `__ | `GitHub " +"`__ | `PyPI `__" + +#: ../source/key_projects.rst:295 +msgid "" +"trove-classifiers is the canonical source for `classifiers on PyPI `_, which project maintainers use " +"to :ref:`systematically describe their projects ` " +"so that users can better find projects that match their needs on the PyPI." +msgstr "" +"trove-classifiers ແມ່ນແຫຼ່ງຂໍ້ມູນຫຼັກສຳລັບ `classifiers ໃນ PyPI `_, ເຊິ່ງຜູ້ດູແລໂປຣເຈັກໃຊ້ເພື່ອ :ref:`ອະທິບາຍໂປຣເຈັກຢ່າງເປັນລະບົບ ` ເພື່ອໃຫ້ຜູ້ໃຊ້ສາມາດຄົ້ນຫາໂປຣເຈັກທີ່ຕົງກັບຄວາມຕ້ອງການໃນ PyPI ໄດ້ງ່າຍຂຶ້ນ." + +#: ../source/key_projects.rst:300 +msgid "" +"The trove-classifiers package contains a list of valid classifiers and " +"deprecated classifiers (which are paired with the classifiers that replace " +"them). Use this package to validate classifiers used in packages intended " +"for uploading to PyPI. As this list of classifiers is published as code, you " +"can install and import it, giving you a more convenient workflow compared to " +"referring to the `list published on PyPI `_. " +"The `issue tracker `_ for " +"the project hosts discussions on proposed classifiers and requests for new " +"classifiers." +msgstr "" +"ແພັກເກດ trove-classifiers ລວມມີລາຍຊື່ classifiers ທີ່ໃຊ້ໄດ້ ແລະ ຕົວທີ່ຖືກຍົກເລີກແລ້ວ. " +"ໃຊ້ແພັກເກດນີ້ເພື່ອຢັ້ງຢືນ classifiers ກ່ອນອັບໂຫຼດຂຶ້ນ PyPI. ເນື່ອງຈາກມັນຢູ່ໃນຮູບແບບໂຄ້ດ, " +"ທ່ານສາມາດຕິດຕັ້ງ ແລະ import ມັນມາໃຊ້ໄດ້ເລີຍ ເຊິ່ງສະດວກກວ່າການເບິ່ງຈາກເວັບໄຊ. " +"ນອກຈາກນີ້ຍັງສາມາດສະເໜີ ຫຼື ຂໍ classifiers ໃໝ່ໆໄດ້ໃນ `issue tracker `_." + +#: ../source/key_projects.rst:314 +msgid "twine" +msgstr "twine" + +#: ../source/key_projects.rst:316 +msgid "" +"`Docs `__ | `Issues `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `ແຈ້ງບັນຫາ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:321 +msgid "" +"Twine is the primary tool developers use to upload packages to the Python " +"Package Index or other Python package indexes. It is a command-line program " +"that passes program files and metadata to a web API. Developers use it " +"because it's the official PyPI upload tool, it's fast and secure, it's " +"maintained, and it reliably works." +msgstr "" +"Twine ແມ່ນເຄື່ອງມືຫຼັກທີ່ຜູ້ພັດທະນາໃຊ້ເພື່ອອັບໂຫຼດແພັກເກດຂຶ້ນ PyPI ຫຼື ແຫຼ່ງອື່ນໆ. ມັນແມ່ນໂປຣແກຣມ " +"command-line ທີ່ສົ່ງໄຟລ໌ ແລະ metadata ຜ່ານ web API. " +"ຜູ້ພັດທະນາໃຊ້ມັນຍ້ອນວ່າມັນເປັນເຄື່ອງມືທາງການ, ໄວ, ປອດໄພ, ແລະ ເຮັດວຽກໄດ້ຢ່າງໝັ້ນໃຈ." + +#: ../source/key_projects.rst:331 ../source/overview.rst:405 +msgid "virtualenv" +msgstr "virtualenv" + +#: ../source/key_projects.rst:333 +msgid "" +"`Docs `__ | `Issues " +"`__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `ແຈ້ງບັນຫາ " +"`__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:338 +msgid "" +"virtualenv is a tool for creating isolated Python :term:`Virtual " +"Environments `, like :ref:`venv`. Unlike :ref:`venv`, " +"virtualenv can create virtual environments for other versions of Python, " +"which it locates using the PATH environment variable. It also provides " +"convenient features for configuring, maintaining, duplicating, and " +"troubleshooting virtual environments. For more information, see the section " +"on :ref:`Creating and using Virtual Environments`." +msgstr "" +"virtualenv ແມ່ນເຄື່ອງມືສຳລັບສ້າງ :term:`Virtual Environments ` ຂອງ Python ແບບແຍກສ່ວນ, ຄ້າຍຄືກັບ :ref:`venv`. ແຕ່ຕ່າງຈາກ :ref:`venv` " +"ບ່ອນວ່າ virtualenv ສາມາດສ້າງສະພາບແວດລ້ອມຈຳລອງສຳລັບ Python ເວີຊັນອື່ນໆໄດ້. " +"ມັນຍັງມີຟີເຈີໃນການກຳນົດຄ່າ, ດູແລ, ສຳເນົາ, ແລະ ແກ້ໄຂບັນຫາ virtual environment ໄດ້ສະດວກ." + +#: ../source/key_projects.rst:350 +msgid "Warehouse" +msgstr "Warehouse" + +#: ../source/key_projects.rst:352 +msgid "" +"`Docs `__ | `Issues `__ | `GitHub `__" +msgstr "" +"`ເອກະສານ `__ | `ແຈ້ງບັນຫາ `__ | `GitHub `__" + +#: ../source/key_projects.rst:356 +msgid "" +"The current codebase powering the :term:`Python Package Index (PyPI)`. It is " +"hosted at `pypi.org `_. The default source for :ref:`pip` " +"downloads." +msgstr "" +"ຊຸດໂຄ້ດປັດຈຸບັນທີ່ຂັບເຄື່ອນ :term:`Python Package Index (PyPI)`. ມັນໃຫ້ບໍລິການຢູ່ທີ່ `pypi.org " +"`_ ແລະ ເປັນແຫຼ່ງດາວໂຫຼດຫຼັກສຳລັບ :ref:`pip`." + +#: ../source/key_projects.rst:364 +msgid "wheel" +msgstr "wheel" + +#: ../source/key_projects.rst:366 +msgid "" +"`Docs `__ | `Issues `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `ແຈ້ງບັນຫາ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:371 +msgid "" +"Primarily, the wheel project offers the ``bdist_wheel`` :ref:`setuptools` " +"extension for creating :term:`wheel distributions `. Additionally, " +"it offers its own command line utility for creating and installing wheels." +msgstr "" +"ໂດຍຫຼັກແລ້ວ, ໂປຣເຈັກ wheel ຈະໃຫ້ສ່ວນເສີມ ``bdist_wheel`` ສຳລັບ :ref:`setuptools` " +"ເພື່ອສ້າງ :term:`wheel distributions `. ນອກຈາກນີ້ ມັນຍັງມີເຄື່ອງມື command line " +"ຂອງມັນເອງເພື່ອສ້າງ ແລະ ຕິດຕັ້ງ wheel." + +#: ../source/key_projects.rst:375 +msgid "" +"See also `auditwheel `__, a tool that " +"package developers use to check and fix Python packages they are making in " +"the binary wheel format. It provides functionality to discover dependencies, " +"check metadata for compliance, and repair the wheel and metadata to properly " +"link and include external shared libraries in a package." +msgstr "" +"ເບິ່ງ `auditwheel `__ ຕື່ມ, " +"ເຊິ່ງແມ່ນເຄື່ອງມືທີ່ຜູ້ພັດທະນາໃຊ້ເພື່ອກວດສອບ ແລະ ແກ້ໄຂແພັກເກດ Python ໃນຮູບແບບ binary wheel. " +"ມັນຊ່ວຍກວດຫາສ່ວນປະກອບທີ່ຈຳເປັນ, ກວດສອບ metadata, ແລະ ແກ້ໄຂ wheel " +"ໃຫ້ເຊື່ອມຕໍ່ກັບໄລບຣາຣີພາຍນອກໄດ້ຢ່າງຖືກຕ້ອງ." + +#: ../source/key_projects.rst:384 +msgid "Non-PyPA Projects" +msgstr "ໂປຣເຈັກທີ່ບໍ່ໄດ້ຂຶ້ນກັບ PyPA" + +#: ../source/key_projects.rst:389 +msgid "buildout" +msgstr "buildout" + +#: ../source/key_projects.rst:391 +msgid "" +"`Docs `__ | `Issues `__ | `PyPI `__ | `GitHub `__" +msgstr "" +"`ເອກະສານ `__ | `ແຈ້ງບັນຫາ `__ | `PyPI `__ | `GitHub `__" + +#: ../source/key_projects.rst:396 +msgid "" +"Buildout is a Python-based build system for creating, assembling and " +"deploying applications from multiple parts, some of which may be non-Python-" +"based. It lets you create a buildout configuration and reproduce the same " +"software later." +msgstr "" +"Buildout ແມ່ນລະບົບການສ້າງທີ່ໃຊ້ Python ເປັນຫຼັກ ສຳລັບການສ້າງ, ປະກອບ ແລະ ຕິດຂັດ (deploy) " +"ແອັບພລິເຄຊັນຈາກຫຼາຍໆສ່ວນ, ເຊິ່ງບາງສ່ວນອາດຈະບໍ່ແມ່ນ Python. ມັນຊ່ວຍໃຫ້ທ່ານສ້າງການກຳນົດຄ່າ " +"buildout ແລະ ສ້າງຊອຟແວແບບເກົ່າຄືນໃໝ່ໄດ້." + +#: ../source/key_projects.rst:403 +msgid "conda" +msgstr "conda" + +#: ../source/key_projects.rst:405 +msgid ":doc:`Docs `" +msgstr ":doc:`ເອກະສານ `" + +#: ../source/key_projects.rst:407 +msgid "" +"Conda is a package, dependency, and environment management system for any " +"language — Python, R, Ruby, C/C++, Fortran, and more. It is written in " +"Python and widely used in the Python scientific computing community, due to " +"its support for non-Python compiled libraries and extensions. It is used as " +"the basis of the `Anaconda `__ Python " +"distribution from Anaconda, Inc. It was originally aimed at the scientific " +"community, but can also be used on its own, or with the :doc:`miniconda " +"`, `miniforge `_ " +"or `pixi `_ systems. It is available for Windows, Mac and " +"Linux systems." +msgstr "" +"Conda ແມ່ນລະບົບຈັດການແພັກເກດ, ສ່ວນປະກອບທີ່ຈຳເປັນ, ແລະ ສະພາບແວດລ້ອມ ສຳລັບທຸກພາສາ — " +"Python, R, Ruby, C/C++, Fortran, ແລະ ອື່ນໆ. ມັນຖືກຂຽນດ້ວຍ Python ແລະ " +"ຖືກນຳໃຊ້ຢ່າງກວ້າງຂວາງໃນວົງການວິທະຍາສາດ, ເນື່ອງຈາກມັນຮອງຮັບໄລບຣາຣີພາຍນອກ. ມັນເປັນພື້ນຖານຂອງ " +"Anaconda Python. Conda ສາມາດໃຊ້ໄດ້ທັງໃນ Windows, Mac ແລະ Linux." + +#: ../source/key_projects.rst:416 +msgid "" +"Conda is a completely separate tool from :ref:`pip`, virtualenv and wheel, " +"but provides many of their combined features, such as package management, " +"virtual environment management and deployment of binary extensions and other " +"binary code." +msgstr "" +"Conda ແມ່ນເຄື່ອງມືທີ່ແຍກອອກຈາກ :ref:`pip`, virtualenv ແລະ wheel ຢ່າງສິ້ນເຊີງ, " +"ແຕ່ມັນມີຟີເຈີຫຼາຍຢ່າງລວມກັນ ເຊິ່ງຄອບຄຸມທັງການຈັດການແພັກເກດ ແລະ virtual environment." + +#: ../source/key_projects.rst:420 +msgid "" +"Conda does not install packages from PyPI -- it can only manage packages " +"built specifically for conda, which can be made available on a \"conda " +"channel\", such as those hosted on `anaconda.org `__, " +"or a local (e.g. intranet) package server. In addition to the \"default\" " +"channels managed by `Anaconda, Inc. `__, there " +"are a wide variety of packages from the community supported `conda-forge " +"project `__" +msgstr "" +"Conda ບໍ່ໄດ້ຕິດຕັ້ງແພັກເກດຈາກ PyPI ໂດຍກົງ -- ມັນຈັດການສະເພາະແພັກເກດທີ່ສ້າງມາສຳລັບ conda " +"ເທົ່ານັ້ນ. ທ່ານສາມາດຫາແພັກເກດໄດ້ຈາກ \"conda channel\" ເຊັ່ນ anaconda.org ຫຼື ຈາກ conda-" +"forge ທີ່ດູແລໂດຍຊຸມຊົນ." + +#: ../source/key_projects.rst:426 +msgid "" +"Note that :ref:`pip` can be installed into, and work side-by-side with conda " +"for managing :term:`distributions ` from PyPI. It is " +"also possible to build conda packages from Python source packages using " +"tools such as `conda skeleton `__: a tool to " +"automatically make conda packages from Python packages available on PyPI." +msgstr "" +"ໝາຍເຫດ: ທ່ານສາມາດຕິດຕັ້ງ :ref:`pip` ລົງໃນ conda ເພື່ອໃຊ້ງານຮ່ວມກັນໃນການຈັດການແພັກເກດຈາກ " +"PyPI ໄດ້. ນອກຈາກນີ້ຍັງສາມາດໃຊ້ `conda skeleton` ເພື່ອສ້າງແພັກເກດ conda ຈາກແພັກເກດ " +"Python ໃນ PyPI ໄດ້ໂດຍອັດຕະໂນມັດ." + +#: ../source/key_projects.rst:435 +msgid "devpi" +msgstr "devpi" + +#: ../source/key_projects.rst:437 +msgid "" +"`Docs `__ | :gh:`Issues ` " +"| `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | :gh:`ແຈ້ງບັນຫາ ` | `PyPI `__" + +#: ../source/key_projects.rst:441 +msgid "" +"devpi features a powerful PyPI-compatible server and PyPI proxy cache with a " +"complementary command line tool to drive packaging, testing and release " +"activities with Python. devpi also provides a browsable and searchable web " +"interface. devpi supports mirroring PyPI, multiple :term:`package indexes " +"` with inheritance, syncing between these indexes, index " +"replication and fail-over, and package upload." +msgstr "" +"devpi ມີເຊີບເວີທີ່ເຂົ້າກັນໄດ້ກັບ PyPI ແລະ ລະບົບແຄສ (proxy cache) ພ້ອມເຄື່ອງມື command line " +"ເພື່ອຊ່ວຍໃນການສ້າງແພັກເກດ, ທົດສອບ ແລະ ເຜີຍແຜ່. ມັນມີໜ້າເວັບທີ່ສາມາດຄົ້ນຫາໄດ້, ຮອງຮັບການເຮັດ " +"mirror, ແລະ ການຈັດການດັດຊະນີແພັກເກດຫຼາຍຕົວ." + +#: ../source/key_projects.rst:452 +msgid "dumb-pypi" +msgstr "dumb-pypi" + +#: ../source/key_projects.rst:454 +msgid "" +"`GitHub `__ | `PyPI `__" +msgstr "" +"`GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:457 +msgid "" +"dumb-pypi is a simple :term:`package index ` static file site " +"generator, which then must be hosted by a static file webserver to become " +"the package index. It supports serving the hash, core-metadata, and yank-" +"status." +msgstr "" +"dumb-pypi ແມ່ນເຄື່ອງມືສ້າງເວັບໄຊດັດຊະນີແພັກເກດແບບ static ທີ່ງ່າຍດາຍ. ມັນຮອງຮັບການສະແດງ " +"hash, core-metadata, ແລະ ສະຖານະການຖືກຍົກເລີກ (yank-status)." + +#: ../source/key_projects.rst:464 +msgid "enscons" +msgstr "enscons" + +#: ../source/key_projects.rst:466 +msgid "" +":gh:`Source ` | :gh:`Issues ` | `PyPI " +"`__" +msgstr "" +":gh:`ໂຄ້ດຕົ້ນສະບັບ ` | :gh:`ແຈ້ງບັນຫາ ` | " +"`PyPI `__" + +#: ../source/key_projects.rst:470 +msgid "" +"Enscons is a Python packaging tool based on `SCons`_. It builds :ref:`pip`-" +"compatible source distributions and wheels without using distutils or " +"setuptools, including distributions with C extensions. Enscons has a " +"different architecture and philosophy than :ref:`distutils`. Rather than " +"adding build features to a Python packaging system, enscons adds Python " +"packaging to a general purpose build system. Enscons helps you to build " +"sdists that can be automatically built by :ref:`pip`, and wheels that are " +"independent of enscons." +msgstr "" +"Enscons ແມ່ນເຄື່ອງມືສ້າງແພັກເກດ Python ທີ່ອີງໃສ່ `SCons`_. ມັນສາມາດສ້າງ distributions " +"ທີ່ເຂົ້າກັນໄດ້ກັບ :ref:`pip` ໂດຍບໍ່ຕ້ອງໃຊ້ distutils ຫຼື setuptools. Enscons " +"ມີແນວຄິດທີ່ຕ່າງອອກໄປ ໂດຍການເອົາລະບົບການສ້າງແພັກເກດໄປໃສ່ໃນລະບົບການສ້າງແບບທົ່ວໄປ (general " +"purpose build system)." + +#: ../source/key_projects.rst:485 +msgid "Flask-Pypi-Proxy" +msgstr "Flask-Pypi-Proxy" + +#: ../source/key_projects.rst:487 +msgid "" +"`Docs `__ | :gh:`GitHub ` | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | :gh:`GitHub " +"` | `PyPI `__" + +#: ../source/key_projects.rst:491 ../source/key_projects.rst:685 +#: ../source/key_projects.rst:744 +msgid "Not maintained, project archived" +msgstr "ບໍ່ໄດ້ຮັບການດູແລແລ້ວ, ໂປຣເຈັກຖືກເກັບໄວ້ (archived)" + +#: ../source/key_projects.rst:493 +msgid "" +"Flask-Pypi-Proxy is a :term:`package index ` as a cached " +"proxy for PyPI." +msgstr "Flask-Pypi-Proxy ແມ່ນດັດຊະນີແພັກເກດທີ່ເຮັດໜ້າທີ່ເປັນແຄສ (cached proxy) ສຳລັບ PyPI." + +#: ../source/key_projects.rst:499 +msgid "Hashdist" +msgstr "Hashdist" + +#: ../source/key_projects.rst:501 +msgid "" +"`Docs `__ | `GitHub `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub `__" + +#: ../source/key_projects.rst:504 +msgid "" +"Hashdist is a library for building non-root software distributions. Hashdist " +"is trying to be “the Debian of choice for cases where Debian technology " +"doesn’t work”. The best way for Pythonistas to think about Hashdist may be a " +"more powerful hybrid of :ref:`virtualenv` and :ref:`buildout`. It is aimed " +"at solving the problem of installing scientific software, and making package " +"distribution stateless, cached, and branchable. It is used by some " +"researchers but has been lacking in maintenance since 2016." +msgstr "" +"Hashdist ແມ່ນໄລບຣາຣີສຳລັບສ້າງ software distributions ໂດຍບໍ່ຕ້ອງໃຊ້ສິດ root. " +"ມັນຖືກອອກແບບມາເພື່ອແກ້ບັນຫາການຕິດຕັ້ງຊອຟແວທາງວິທະຍາສາດ, ແຕ່ຂາດການດູແລຕັ້ງແຕ່ປີ 2016." + +#: ../source/key_projects.rst:516 +msgid "Maturin" +msgstr "Maturin" + +#: ../source/key_projects.rst:518 +msgid "" +"`Docs `__ | `GitHub `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub `__" + +#: ../source/key_projects.rst:521 +msgid "" +"Maturin is a build backend for Rust extension modules, also written in Rust. " +"It supports building wheels for python 3.7+ on Windows, Linux, macOS and " +"FreeBSD, can upload them to PyPI and has basic PyPy and GraalPy support." +msgstr "" +"Maturin ແມ່ນ build backend ສຳລັບໂມດູນເສີມທີ່ຂຽນດ້ວຍ Rust. ມັນຮອງຮັບການສ້າງ wheels ສຳລັບ " +"Python 3.7+ ໃນຫຼາຍແພລດຟອມ ແລະ ສາມາດອັບໂຫຼດຂຶ້ນ PyPI ໄດ້." + +#: ../source/key_projects.rst:529 +msgid "meson-python" +msgstr "meson-python" + +#: ../source/key_projects.rst:531 +msgid "" +"`Docs `__ | `GitHub `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub " +"`__" + +#: ../source/key_projects.rst:534 +msgid "" +"``meson-python`` is a build backend that uses the Meson_ build system. It " +"enables Python package authors to use Meson_ as the build system for their " +"package. It supports a wide variety of languages, including C, and is able " +"to fill the needs of most complex build configurations." +msgstr "" +"``meson-python`` ແມ່ນ build backend ທີ່ໃຊ້ລະບົບ Meson_. ມັນຊ່ວຍໃຫ້ຜູ້ພັດທະນາສາມາດໃຊ້ " +"Meson ໃນການສ້າງແພັກເກດທີ່ຊັບຊ້ອນ ແລະ ຮອງຮັບຫຼາຍພາສາ ເຊັ່ນ C." + +#: ../source/key_projects.rst:544 +msgid "multibuild" +msgstr "multibuild" + +#: ../source/key_projects.rst:546 +msgid "`GitHub `__" +msgstr "`GitHub `__" + +#: ../source/key_projects.rst:548 +msgid "" +"Multibuild is a set of CI scripts for building and testing " +"Python :term:`wheels ` for Linux, macOS, and (less flexibly) Windows. " +"Also see :ref:`cibuildwheel`." +msgstr "" +"Multibuild ແມ່ນຊຸດສະຄຣິບ CI ສຳລັບສ້າງ ແລະ ທົດສອບ Python wheels ໃນ Linux, macOS ແລະ " +"Windows. ເບິ່ງ :ref:`cibuildwheel` ນຳ." + +#: ../source/key_projects.rst:554 +msgid "nginx_pypi_cache" +msgstr "nginx_pypi_cache" + +#: ../source/key_projects.rst:556 +msgid ":gh:`GitHub `" +msgstr ":gh:`GitHub `" + +#: ../source/key_projects.rst:558 +msgid "" +"nginx_pypi_cache is a :term:`package index ` caching proxy " +"using `nginx `_." +msgstr "nginx_pypi_cache ແມ່ນແຄສຂອງດັດຊະນີແພັກເກດ (caching proxy) ທີ່ໃຊ້ nginx." + +#: ../source/key_projects.rst:564 +msgid "pdm" +msgstr "pdm" + +#: ../source/key_projects.rst:566 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:570 +msgid "" +"PDM is a modern Python package manager. It uses :term:`pyproject.toml` to " +"store project metadata as defined in :pep:`621`." +msgstr "" +"PDM ແມ່ນເຄື່ອງມືຈັດການແພັກເກດ Python ຍຸກໃໝ່. ມັນໃຊ້ :term:`pyproject.toml` ເພື່ອເກັບ " +"metadata ຂອງໂປຣເຈັກຕາມ :pep:`621`." + +#: ../source/key_projects.rst:578 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:582 +msgid "" +"Pex is a tool for generating :file:`.pex` (Python EXecutable) files, " +"standalone Python environments in the spirit of :ref:`virtualenv`. PEX files " +"are :doc:`zipapps ` that make deployment of Python " +"applications as simple as ``cp``. A single PEX file can support multiple " +"target platforms and can be created from standard :ref:`pip`-resolvable " +"requirements, a lockfile generated with ``pex3 lock ...`` or even another " +"PEX. PEX files can optionally have tools embedded that support turning the " +"PEX file into a standard venv, graphing dependencies and more." +msgstr "" +"Pex ແມ່ນເຄື່ອງມືສ້າງໄຟລ໌ :file:`.pex` (Python EXecutable) ເຊິ່ງເປັນສະພາບແວດລ້ອມ Python " +"ແບບ standalone. ໄຟລ໌ PEX ຊ່ວຍໃຫ້ການເຜີຍແຜ່ແອັບ Python ເຮັດໄດ້ງ່າຍຄືກັບການກ່າຍໄຟລ໌ (cp)." + +#: ../source/key_projects.rst:594 +msgid "pip-tools" +msgstr "pip-tools" + +#: ../source/key_projects.rst:596 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:600 +msgid "" +"pip-tools is a suite of tools meant for Python system administrators and " +"release managers who particularly want to keep their builds deterministic " +"yet stay up to date with new versions of their dependencies. Users can " +"specify particular release of their dependencies via hash, conveniently make " +"a properly formatted list of requirements from information in other parts of " +"their program, update all dependencies (a feature :ref:`pip` currently does " +"not provide), and create layers of constraints for the program to obey." +msgstr "" +"pip-tools ແມ່ນຊຸດເຄື່ອງມືສຳລັບຜູ້ດູແລລະບົບ ແລະ ຜູ້ຈັດການການປ່ອຍຊອຟແວ " +"ທີ່ຕ້ອງການໃຫ້ການສ້າງແພັກເກດມີຄວາມຄົງທີ່ (deterministic) ແຕ່ຍັງອັບເດດຢູ່ສະເໝີ." + +#: ../source/key_projects.rst:612 +msgid "pip2pi" +msgstr "pip2pi" + +#: ../source/key_projects.rst:614 +msgid "" +":gh:`GitHub ` | `PyPI `__" +msgstr "" +":gh:`GitHub ` | `PyPI `__" + +#: ../source/key_projects.rst:617 +msgid "" +"pip2pi is a :term:`package index ` server where specific " +"packages are manually synchronised." +msgstr "pip2pi ແມ່ນເຊີບເວີດັດຊະນີແພັກເກດ ບ່ອນທີ່ມີການຊິງໂຄຣໄນແພັກເກດແບບລະບຸເອງ." + +#: ../source/key_projects.rst:623 +msgid "piwheels" +msgstr "piwheels" + +#: ../source/key_projects.rst:625 +msgid "" +"`Website `__ | :doc:`Docs ` | " +"`GitHub `__" +msgstr "" +"`ເວັບໄຊ `__ | :doc:`ເອກະສານ ` | " +"`GitHub `__" + +#: ../source/key_projects.rst:629 +msgid "" +"piwheels is a website, and software underpinning it, that fetches source " +"code distribution packages from PyPI and compiles them into binary wheels " +"that are optimized for installation onto Raspberry Pi computers. Raspberry " +"Pi OS pre-configures pip to use piwheels.org as an additional index to PyPI." +msgstr "" +"piwheels ແມ່ນເວັບໄຊທີ່ສ້າງ binary wheels ເພື່ອໃຫ້ຕິດຕັ້ງໃນ Raspberry Pi ໄດ້ຢ່າງມີປະສິດທິພາບ." + +#: ../source/key_projects.rst:638 +msgid "poetry" +msgstr "poetry" + +#: ../source/key_projects.rst:640 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:644 +msgid "" +"poetry is a command-line tool to handle dependency installation and " +"isolation as well as building and packaging of Python packages. It uses " +"``pyproject.toml`` and, instead of depending on the resolver functionality " +"within :ref:`pip`, provides its own dependency resolver. It attempts to " +"speed users' experience of installation and dependency resolution by locally " +"caching metadata about dependencies." +msgstr "" +"poetry ແມ່ນເຄື່ອງມື command-line ສຳລັບຈັດການສ່ວນປະກອບທີ່ຈຳເປັນ, ການແຍກສ່ວນ ລວມເຖິງການສ້າງ " +"ແລະ ການຫຸ້ມຫໍ່ແພັກເກດ Python ໂດຍໃຊ້ ``pyproject.toml``." + +#: ../source/key_projects.rst:654 +msgid "proxpi" +msgstr "proxpi" + +#: ../source/key_projects.rst:656 +msgid "" +":gh:`GitHub ` | `PyPI `__" +msgstr "" +":gh:`GitHub ` | `PyPI `__" + +#: ../source/key_projects.rst:659 +msgid "" +"proxpi is a simple :term:`package index ` which proxies PyPI " +"and other indexes with caching." +msgstr "proxpi ແມ່ນດັດຊະນີແພັກເກດແບບງ່າຍໆ ທີ່ເຮັດໜ້າທີ່ເປັນ proxy ໃຫ້ PyPI ພ້ອມລະບົບແຄສ." + +#: ../source/key_projects.rst:665 +msgid "Pulp-python" +msgstr "Pulp-python" + +#: ../source/key_projects.rst:667 +msgid "" +"`Docs `__ | :gh:`GitHub ` | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | :gh:`GitHub ` | `PyPI `__" + +#: ../source/key_projects.rst:671 +msgid "" +"Pulp-python is the Python :term:`package index ` plugin for " +"`Pulp `_. Pulp-python supports mirrors backed by " +"local or `AWS S3`_, package upload, and proxying to multiple package indexes." +msgstr "" +"Pulp-python ແມ່ນປລັກອິນດັດຊະນີແພັກເກດ Python ສຳລັບ Pulp. ມັນຮອງຮັບການເຮັດ mirror ທັງແບບ " +"local ແລະ AWS S3." + +#: ../source/key_projects.rst:679 +msgid "PyPI Cloud" +msgstr "PyPI Cloud" + +#: ../source/key_projects.rst:681 +msgid "" +"`Docs `__ | :gh:`GitHub ` | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | :gh:`GitHub ` | `PyPI `__" + +#: ../source/key_projects.rst:687 +msgid "" +"PyPI Cloud is a :term:`package index ` server, backed by `AWS " +"S3`_ or another cloud storage service, or local files. PyPI Cloud supports " +"redirect/cached proxying for PyPI, as well as authentication and " +"authorisation." +msgstr "" +"PyPI Cloud ແມ່ນເຊີບເວີດັດຊະນີແພັກເກດ ທີ່ເກັບຂໍ້ມູນໄວ້ໃນ Cloud ເຊັ່ນ AWS S3 ຫຼື ໃນເຄື່ອງເອງ." + +#: ../source/key_projects.rst:695 +msgid "pypiprivate" +msgstr "pypiprivate" + +#: ../source/key_projects.rst:697 +msgid "" +":gh:`GitHub ` | `PyPI `__" +msgstr "" +":gh:`GitHub ` | `PyPI `__" + +#: ../source/key_projects.rst:700 +msgid "" +"pypiprivate serves a local (or `AWS S3`_-hosted) directory of packages as " +"a :term:`package index `." +msgstr "pypiprivate ໃຫ້ບໍລິການແພັກເກດຈາກໂຟນເດີໃນເຄື່ອງ (ຫຼື AWS S3) ໃນຮູບແບບດັດຊະນີແພັກເກດ." + +#: ../source/key_projects.rst:706 +msgid "pypiserver" +msgstr "pypiserver" + +#: ../source/key_projects.rst:708 +msgid "" +"`GitHub `__ | `PyPI `__" +msgstr "" +"`GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:711 +msgid "" +"pypiserver is a minimalist application that serves as a private " +"Python :term:`package index ` (from a local directory) within " +"organizations, implementing a simple API and browser interface. You can " +"upload private packages using standard upload tools, and users can download " +"and install them with :ref:`pip`, without publishing them publicly. " +"Organizations who use pypiserver usually download packages both from " +"pypiserver and from PyPI." +msgstr "" +"pypiserver ແມ່ນແອັບພລິເຄຊັນຂະໜາດນ້ອຍ ສຳລັບໃຊ້ເປັນດັດຊະນີແພັກເກດ Python ພາຍໃນອົງກອນ." + +#: ../source/key_projects.rst:722 +msgid "PyScaffold" +msgstr "PyScaffold" + +#: ../source/key_projects.rst:724 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:728 +msgid "" +"PyScaffold is a project generator for bootstrapping Python packages, ready " +"to be shared on PyPI and installable via :ref:`pip`. It relies on a set of " +"sane default configurations for established tools (such " +"as :ref:`setuptools`, pytest_ and Sphinx_) to provide a productive " +"environment so developers can start coding right away. PyScaffold can also " +"be used with existing projects to make packaging easier." +msgstr "PyScaffold ແມ່ນເຄື່ອງມືສ້າງໂຄງຮ່າງໂປຣເຈັກ Python ເພື່ອໃຫ້ພ້ອມແບ່ງປັນໃນ PyPI ໄດ້ທັນທີ." + +#: ../source/key_projects.rst:739 +msgid "pywharf" +msgstr "pywharf" + +#: ../source/key_projects.rst:741 +msgid "" +":gh:`GitHub ` | `PyPI `__" +msgstr "" +":gh:`GitHub ` | `PyPI `__" + +#: ../source/key_projects.rst:746 +msgid "" +"pywharf is a :term:`package index ` server, serving files " +"locally or from `GitHub `_." +msgstr "pywharf ແມ່ນເຊີບເວີດັດຊະນີແພັກເກດ ທີ່ໃຫ້ບໍລິການໄຟລ໌ຈາກໃນເຄື່ອງ ຫຼື ຈາກ GitHub." + +#: ../source/key_projects.rst:752 +msgid "scikit-build" +msgstr "scikit-build" + +#: ../source/key_projects.rst:754 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub " +"`__ | `PyPI `__" + +#: ../source/key_projects.rst:758 +msgid "" +"Scikit-build is a :ref:`setuptools` wrapper for CPython that builds C/C++/" +"Fortran/Cython extensions It uses `cmake `__ " +"(available on PyPI) to provide better support for additional compilers, " +"build systems, cross compilation, and locating dependencies and their " +"associated build requirements. To speed up and parallelize the build of " +"large projects, the user can install `ninja `__ (also available on PyPI)." +msgstr "" +"Scikit-build ແມ່ນຕົວຫຸ້ມ (wrapper) ຂອງ :ref:`setuptools` ສຳລັບສ້າງ extensions " +"ທີ່ຂຽນດ້ວຍ C/C++/Fortran." + +#: ../source/key_projects.rst:769 +msgid "scikit-build-core" +msgstr "scikit-build-core" + +#: ../source/key_projects.rst:771 +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub " +"`__ | `PyPI `__" + +#: ../source/key_projects.rst:775 +msgid "" +"Scikit-build-core is a build backend for CPython C/C++/Fortran/Cython " +"extensions. It enables users to write extensions with `cmake `__ (available on PyPI) to provide better support for " +"additional compilers, build systems, cross compilation, and locating " +"dependencies and their associated build requirements. CMake/Ninja are " +"automatically downloaded from PyPI if not available on the system." +msgstr "Scikit-build-core ແມ່ນ build backend ສຳລັບ extensions ຂອງ CPython." + +#: ../source/key_projects.rst:785 +msgid "shiv" +msgstr "shiv" + +#: ../source/key_projects.rst:787 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:791 +msgid "" +"shiv is a command line utility for building fully self contained Python " +"zipapps as outlined in :pep:`441`, but with all their dependencies included. " +"Its primary goal is making distributing Python applications and command line " +"tools fast & easy." +msgstr "shiv ແມ່ນເຄື່ອງມືສ້າງ Python zipapps ທີ່ລວມທັງໝົດໄວ້ໃນໄຟລ໌ດຽວ ຕາມ :pep:`441`." + +#: ../source/key_projects.rst:799 +msgid "simpleindex" +msgstr "simpleindex" + +#: ../source/key_projects.rst:801 +msgid "" +":gh:`GitHub ` | `PyPI `__" +msgstr "" +":gh:`GitHub ` | `PyPI `__" + +#: ../source/key_projects.rst:804 +msgid "" +"simpleindex is a :term:`package index ` which routes URLs to " +"multiple package indexes (including PyPI), serves local (or cloud-hosted, " +"for example `AWS S3`_, with a custom plugin) directories of packages, and " +"supports custom plugins." +msgstr "simpleindex ແມ່ນດັດຊະນີແພັກເກດ ທີ່ຊ່ວຍສົ່ງຕໍ່ URL ໄປຍັງດັດຊະນີຫຼາຍໆແຫຼ່ງ." + +#: ../source/key_projects.rst:814 +msgid "" +":doc:`Docs ` | `GitHub `__ | " +"`Paper `__ | `Slides `__" +msgstr "" +":doc:`ເອກະສານ ` | `GitHub `__ | " +"`ບົດຄວາມ `__ | `ສະໄລ້ `__" + +#: ../source/key_projects.rst:819 +msgid "" +"A flexible package manager designed to support multiple versions, " +"configurations, platforms, and compilers. Spack is like Homebrew, but " +"packages are written in Python and parameterized to allow easy swapping of " +"compilers, library versions, build options, etc. Arbitrarily many versions " +"of packages can coexist on the same system. Spack was designed for rapidly " +"building high performance scientific applications on clusters and " +"supercomputers." +msgstr "Spack ແມ່ນເຄື່ອງມືຈັດການແພັກເກດທີ່ຢືດຢຸ່ນ ຖືກອອກແບບມາສຳລັບຊອຟແວວິທະຍາສາດ." + +#: ../source/key_projects.rst:827 +msgid "" +"Spack is not in PyPI (yet), but it requires no installation and can be used " +"immediately after cloning from GitHub." +msgstr "Spack ຍັງບໍ່ມີໃນ PyPI, ແຕ່ສາມາດໃຊ້ໄດ້ທັນທີຫຼັງຈາກ clone ຈາກ GitHub." + +#: ../source/key_projects.rst:833 +msgid "uv" +msgstr "uv" + +#: ../source/key_projects.rst:835 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub `__ | `PyPI `__" + +#: ../source/key_projects.rst:839 +msgid "" +"A Python package and project manager, written in Rust for high performance. " +"It supports creating and managing virtual environments, installing packages, " +"locking dependencies, and managing Python versions and projects." +msgstr "ເຄື່ອງມືຈັດການແພັກເກດ ແລະ ໂປຣເຈັກ Python ທີ່ຂຽນດ້ວຍ Rust ເພື່ອປະສິດທິພາບສູງ." + +#: ../source/key_projects.rst:846 +msgid "zest.releaser" +msgstr "zest.releaser" + +#: ../source/key_projects.rst:848 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" +"`ເອກະສານ `__ | `GitHub " +"`__ | `PyPI `__" + +#: ../source/key_projects.rst:852 +msgid "" +"``zest.releaser`` is a Python package release tool providing an abstraction " +"layer on top of :ref:`twine`. Python developers use ``zest.releaser`` to " +"automate incrementing package version numbers, updating changelogs, tagging " +"releases in source control, and uploading new packages to PyPI." +msgstr "``zest.releaser`` ແມ່ນເຄື່ອງມືຊ່ວຍໃນການປ່ອຍແພັກເກດ Python ແບບອັດຕະໂນມັດ." + +#: ../source/key_projects.rst:859 +msgid "Standard Library Projects" +msgstr "ໂປຣເຈັກໃນ Standard Library" + +#: ../source/key_projects.rst:864 +msgid "ensurepip" +msgstr "ensurepip" + +#: ../source/key_projects.rst:866 +msgid "" +"`Docs `__ | `Issues " +"`__" +msgstr "" +"`ເອກະສານ `__ | `ແຈ້ງບັນຫາ " +"`__" + +#: ../source/key_projects.rst:869 +msgid "" +"A package in the Python Standard Library that provides support for " +"bootstrapping :ref:`pip` into an existing Python installation or virtual " +"environment. In most cases, end users won't use this module, but rather it " +"will be used during the build of the Python distribution." +msgstr "ແພັກເກດໃນ Standard Library ທີ່ຊ່ວຍຕິດຕັ້ງ :ref:`pip` ເຂົ້າໃນ Python." + +#: ../source/key_projects.rst:877 +msgid "http.server" +msgstr "http.server" + +#: ../source/key_projects.rst:879 +msgid "" +":doc:`Docs ` | :gh:`Issues `" +msgstr "" +":doc:`ເອກະສານ ` | :gh:`ແຈ້ງບັນຫາ `" + +#: ../source/key_projects.rst:882 +msgid "" +"A package and command-line interface which can host a directory as a " +"website, for example as a :term:`package index ` " +"(see :ref:`Hosting your Own Simple Repository`)." +msgstr "ແພັກເກດ ແລະ CLI ທີ່ສາມາດເປີດໂຟນເດີໃຫ້ເປັນເວັບໄຊ ເພື່ອໃຊ້ເປັນດັດຊະນີແພັກເກດໄດ້." + +#: ../source/key_projects.rst:889 +msgid "venv" +msgstr "venv" + +#: ../source/key_projects.rst:891 +msgid "" +"`Docs `__ | `Issues `__" +msgstr "" +"`ເອກະສານ `__ | `ແຈ້ງບັນຫາ " +"`__" + +#: ../source/key_projects.rst:894 +msgid "" +"A package in the Python Standard Library (starting with Python 3.3) for " +"creating :term:`Virtual Environments `. For more " +"information, see the section on :ref:`Creating and using Virtual " +"Environments`." +msgstr "" +"ແພັກເກດໃນ Standard Library ສຳລັບສ້າງ :term:`Virtual Environments `." + +#: ../source/news.rst:2 +msgid "News" +msgstr "ຂ່າວສານ" + +#: ../source/news.rst:4 +msgid "" +"This document is not currently updated. Previously, the document highlighted " +"changes in Python packaging." +msgstr "ເອກະສານນີ້ບໍ່ໄດ້ຮັບການອັບເດດໃນຕອນນີ້." + +#: ../source/news.rst:9 +msgid "September 2019" +msgstr "ກັນຍາ 2019" + +#: ../source/news.rst:10 +msgid "Added a guide about publishing dists via GitHub Actions. (:pr:`647`)" +msgstr "ເພີ່ມຄຳແນະນຳກ່ຽວກັບການເຜີຍແຜ່ dists ຜ່ານ GitHub Actions. (:pr:`647`)" + +#: ../source/news.rst:13 +msgid "August 2019" +msgstr "ສິງຫາ 2019" + +#: ../source/news.rst:14 +msgid "Updated to use :file:`python3 -m` when installing pipx. (:pr:`631`)" +msgstr "ອັບເດດໃຫ້ໃຊ້ :file:`python3 -m` ເມື່ອຕິດຕັ້ງ pipx. (:pr:`631`)" + +#: ../source/news.rst:17 +msgid "July 2019" +msgstr "ກໍລະກົດ 2019" + +#: ../source/news.rst:18 +msgid "Marked all PEP numbers with the :pep: role. (:pr:`629`)" +msgstr "ໝາຍເລກ PEP ທັງໝົດດ້ວຍ :pep: role. (:pr:`629`)" + +#: ../source/news.rst:19 +msgid "Upgraded Sphinx version and removed pypa.io intersphinx. (:pr:`625`)" +msgstr "ອັບເກຣດເວີຊັນ Sphinx ແລະ ຖອນ pypa.io intersphinx ອອກ. (:pr:`625`)" + +#: ../source/news.rst:20 +msgid "Mentioned :file:`find_namespace_packages`. (:pr:`622`)" +msgstr "ກ່າວເຖິງ :file:`find_namespace_packages`. (:pr:`622`)" + +#: ../source/news.rst:21 +msgid "Updated directory layout examples for consistency. (:pr:`611`)" +msgstr "ອັບເດດຕົວຢ່າງໂຄງສ້າງໂຟນເດີເພື່ອຄວາມຄົງທີ່. (:pr:`611`)" + +#: ../source/news.rst:22 +msgid "Updated Bandersnatch link to GitHub. (:pr:`623`)" +msgstr "ອັບເດດລິ້ງ Bandersnatch ໄປ GitHub. (:pr:`623`)" + +#: ../source/news.rst:25 +msgid "June 2019" +msgstr "ມິຖຸນາ 2019" + +#: ../source/news.rst:26 +msgid "Fixed some typos. (:pr:`620`)" +msgstr "ແກ້ໄຂຄຳຜິດບາງບ່ອນ. (:pr:`620`)" + +#: ../source/news.rst:29 +msgid "May 2019" +msgstr "ພຶດສະພາ 2019" + +#: ../source/news.rst:30 +msgid "Added :file:`python_requires` usage to packaging tutorial. (:pr:`613`)" +msgstr "ເພີ່ມການໃຊ້ :file:`python_requires` ໃນບົດຮຽນການສ້າງແພັກເກດ. (:pr:`613`)" + +#: ../source/news.rst:31 +msgid "Added a MANIFEST.in guide page. (:pr:`609`)" +msgstr "ເພີ່ມໜ້າຄຳແນະນຳ MANIFEST.in. (:pr:`609`)" + +#: ../source/news.rst:34 +msgid "April 2019" +msgstr "ເມສາ 2019" + +#: ../source/news.rst:35 +msgid "" +"Added a mention for :file:`shiv` in the key projects section. (:pr:`608`)" +msgstr "ເພີ່ມການກ່າວເຖິງ :file:`shiv` ໃນສ່ວນໂປຣເຈັກສຳຄັນ. (:pr:`608`)" + +#: ../source/news.rst:36 +msgid "Reduced emphasis on virtualenv. (:pr:`606`)" +msgstr "ຫຼຸດການເນັ້ນໜັກເລື່ອງ virtualenv ລົງ. (:pr:`606`)" + +#: ../source/news.rst:39 +msgid "March 2019" +msgstr "ມີນາ 2019" + +#: ../source/news.rst:40 +msgid "Moved single-sourcing guide version option to Python 3. (:pr:`605`)" +msgstr "ຍ້າຍຕົວເລືອກເວີຊັນໃນຄຳແນະນຳ single-sourcing ໄປເປັນ Python 3. (:pr:`605`)" + +#: ../source/news.rst:41 +msgid "Covered RTD details for contributing. (:pr:`600`)" +msgstr "ເພີ່ມລາຍລະອຽດ RTD ສຳລັບການມີສ່ວນຮ່ວມ. (:pr:`600`)" + +#: ../source/news.rst:44 +msgid "February 2019" +msgstr "ກຸມພາ 2019" + +#: ../source/news.rst:45 +msgid "" +"Elaborate upon the differences between the tutorial and the real packaging " +"process. (:pr:`602`)" +msgstr "" +"ອະທິບາຍເພີ່ມເຕີມກ່ຽວກັບຄວາມແຕກຕ່າງລະຫວ່າງບົດຮຽນ ແລະ ຂັ້ນຕອນການສ້າງແພັກເກດແທ້. (:pr:`602`)" + +#: ../source/news.rst:46 +msgid "Added instructions to install Python CLI applications. (:pr:`594`)" +msgstr "ເພີ່ມຄຳແນະນຳໃນການຕິດຕັ້ງແອັບພລິເຄຊັນ Python CLI. (:pr:`594`)" + +#: ../source/news.rst:49 +msgid "January 2019" +msgstr "ມັງກອນ 2019" + +#: ../source/news.rst:50 +msgid "Added :file:`--no-deps` to the packaging tutorial. (:pr:`593`)" +msgstr "ເພີ່ມ :file:`--no-deps` ໃນບົດຮຽນການສ້າງແພັກເກດ. (:pr:`593`)" + +#: ../source/news.rst:51 +msgid "Updated Sphinx and Nox. (:pr:`591`)" +msgstr "ອັບເດດ Sphinx ແລະ Nox. (:pr:`591`)" + +#: ../source/news.rst:52 +msgid "Referenced Twine from Python3. (:pr:`581`)" +msgstr "ອ້າງອີງ Twine ຈາກ Python3. (:pr:`581`)" + +#: ../source/news.rst:55 +msgid "December 2018" +msgstr "ທັນວາ 2018" + +#: ../source/news.rst:56 +msgid "No programmers in the office!" +msgstr "ບໍ່ມີໂປຣແກຣມເມີຢູ່ໃນຫ້ອງການ!" + +#: ../source/news.rst:59 +msgid "November 2018" +msgstr "ພະຈິກ 2018" + +#: ../source/news.rst:60 +msgid "Removed landing page link to PyPI migration guide. (:pr:`575`)" +msgstr "ຖອນລິ້ງຄຳແນະນຳການຍ້າຍໄປ PyPI ອອກຈາກໜ້າຫຼັກ. (:pr:`575`)" + +#: ../source/news.rst:61 +msgid "Changed bumpversion to bump2version. (:pr:`572`)" +msgstr "ປ່ຽນຈາກ bumpversion ເປັນ bump2version. (:pr:`572`)" + +#: ../source/news.rst:62 +msgid "Added single-sourcing package version example. (:pr:`573`)" +msgstr "ເພີ່ມຕົວຢ່າງເວີຊັນແພັກເກດແບບ single-sourcing. (:pr:`573`)" + +#: ../source/news.rst:63 +msgid "Added a guide for creating documentation. (:pr:`568`)" +msgstr "ເພີ່ມຄຳແນະນຳສຳລັບການສ້າງເອກະສານອະທິບາຍ. (:pr:`568`)" + +#: ../source/news.rst:66 +msgid "October 2018" +msgstr "ຕຸລາ 2018" + +#: ../source/news.rst:67 +msgid "Updated Nox package name. (:pr:`566`)" +msgstr "ອັບເດດຊື່ແພັກເກດ Nox. (:pr:`566`)" + +#: ../source/news.rst:68 +msgid "Mentioned Sphinx extensions in guides. (:pr:`562`)" +msgstr "ກ່າວເຖິງສ່ວນເສີມ Sphinx ໃນຄຳແນະນຳ. (:pr:`562`)" + +#: ../source/news.rst:71 +msgid "September 2018" +msgstr "ກັນຍາ 2018" + +#: ../source/news.rst:72 +msgid "Added a section on checking RST markup. (:pr:`554`)" +msgstr "ເພີ່ມສ່ວນການກວດສອບ RST markup. (:pr:`554`)" + +#: ../source/news.rst:73 +msgid "Updated user installs page. (:pr:`558`)" +msgstr "ອັບເດດໜ້າການຕິດຕັ້ງສຳລັບຜູ້ໃຊ້. (:pr:`558`)" + +#: ../source/news.rst:74 +msgid "Updated Google BigQuery urls. (:pr:`556`)" +msgstr "ອັບເດດ URL ຂອງ Google BigQuery. (:pr:`556`)" + +#: ../source/news.rst:75 +msgid "Replaced tar command with working command. (:pr:`552`)" +msgstr "ປ່ຽນຄຳສັ່ງ tar ດ້ວຍຄຳສັ່ງທີ່ໃຊ້ວຽກໄດ້ແທ້. (:pr:`552`)" + +#: ../source/news.rst:76 +msgid "" +"Changed to double quotes in the pip install SomeProject==1.4. (:pr:`550`)" +msgstr "ປ່ຽນເປັນອັນຍະປະກາດຄູ່ໃນ pip install SomeProject==1.4. (:pr:`550`)" + +#: ../source/news.rst:79 +msgid "August 2018" +msgstr "ສິງຫາ 2018" + +#: ../source/news.rst:80 +msgid "Removed the recommendation to store passwords in cleartext. (:pr:`546`)" +msgstr "ຖອນຄຳແນະນຳເລື່ອງການເກັບລະຫັດຜ່ານແບບຂໍ້ຄວາມທຳມະດາອອກ. (:pr:`546`)" + +#: ../source/news.rst:81 +msgid "" +"Moved the Overview to a task based lead in along with the others. (:pr:`540`)" +msgstr "ຍ້າຍສ່ວນພາບລວມໄປລວມກັບສ່ວນອື່ນໆຕາມລັກສະນະວຽກ. (:pr:`540`)" + +#: ../source/news.rst:82 +msgid "Updated Python version supported by virtualenv. (:pr:`538`)" +msgstr "ອັບເດດເວີຊັນ Python ທີ່ຮອງຮັບໂດຍ virtualenv. (:pr:`538`)" + +#: ../source/news.rst:83 +msgid "Added outline/rough draft of new Overview page. (:pr:`519`)" +msgstr "ເພີ່ມໂຄງຮ່າງ/ຮ່າງທຳອິດຂອງໜ້າພາບລວມໃໝ່. (:pr:`519`)" + +#: ../source/news.rst:86 +msgid "July 2018" +msgstr "ກໍລະກົດ 2018" + +#: ../source/news.rst:88 +msgid "Improved binary extension docs. (:pr:`531`)" +msgstr "ປັບປຸງເອກະສານ binary extension. (:pr:`531`)" + +#: ../source/news.rst:89 +msgid "Added scikit-build to key projects. (:pr:`530`)" +msgstr "ເພີ່ມ scikit-build ເຂົ້າໃນໂປຣເຈັກສຳຄັນ. (:pr:`530`)" + +#: ../source/news.rst:92 +msgid "June 2018" +msgstr "ມິຖຸນາ 2018" + +#: ../source/news.rst:94 +msgid "Fixed categories of interop PEP for pypa.io. (:pr:`527`)" +msgstr "ແກ້ໄຂໝວດໝູ່ຂອງ interop PEP ສຳລັບ pypa.io. (:pr:`527`)" + +#: ../source/news.rst:95 +msgid "Updated Markdown descriptions explanation. (:pr:`522`)" +msgstr "ອັບເດດຄຳອະທິບາຍກ່ຽວກັບ Markdown. (:pr:`522`)" + +#: ../source/news.rst:98 +msgid "May 2018" +msgstr "ພຶດສະພາ 2018" + +#: ../source/news.rst:100 +msgid "Noted issues with Provides-Dist and Obsoletes-Dist. (:pr:`513`)" +msgstr "ໝາຍເຫດບັນຫາກ່ຽວກັບ Provides-Dist ແລະ Obsoletes-Dist. (:pr:`513`)" + +#: ../source/news.rst:101 +msgid "" +"Removed outdated warning about Python version mixing with Pipenv. (:pr:`501`)" +msgstr "ຖອນຄຳເຕືອນທີ່ລ້າສະໄໝເລື່ອງການປະສົມເວີຊັນ Python ກັບ Pipenv ອອກ. (:pr:`501`)" + +#: ../source/news.rst:102 +msgid "Simplified packaging tutorial. (:pr:`498`)" +msgstr "ເຮັດໃຫ້ບົດຮຽນການສ້າງແພັກເກດເຂົ້າໃຈງ່າຍຂຶ້ນ. (:pr:`498`)" + +#: ../source/news.rst:103 +msgid "Updated Windows users instructions for clarity. (:pr:`493`)" +msgstr "ອັບເດດຄຳແນະນຳສຳລັບຜູ້ໃຊ້ Windows ໃຫ້ຊັດເຈນຂຶ້ນ. (:pr:`493`)" + +#: ../source/news.rst:104 +msgid "Updated the license section description for completeness. (:pr:`492`)" +msgstr "ອັບເດດຄຳອະທິບາຍສ່ວນໃບອະນຸຍາດໃຫ້ສົມບູນຂຶ້ນ. (:pr:`492`)" + +#: ../source/news.rst:105 +msgid "Added specification-style document to contributing section. (:pr:`489`)" +msgstr "ເພີ່ມເອກະສານຮູບແບບຂໍ້ກຳນົດໃນສ່ວນການມີສ່ວນຮ່ວມ. (:pr:`489`)" + +#: ../source/news.rst:106 +msgid "Added documentation types to contributing guide. (:pr:`485`)" +msgstr "ເພີ່ມປະເພດເອກະສານໃນຄຳແນະນຳການມີສ່ວນຮ່ວມ. (:pr:`485`)" + +#: ../source/news.rst:109 +msgid "April 2018" +msgstr "ເມສາ 2018" + +#: ../source/news.rst:111 +msgid "Added README guide. (:pr:`461`)" +msgstr "ເພີ່ມຄຳແນະນຳ README. (:pr:`461`)" + +#: ../source/news.rst:112 +msgid "Updated instructions and status for PyPI launch. (:pr:`475`)" +msgstr "ອັບເດດຄຳແນະນຳ ແລະ ສະຖານະສຳລັບການເປີດຕົວ PyPI. (:pr:`475`)" + +#: ../source/news.rst:113 +msgid "Added instructions for Warehouse. (:pr:`471`)" +msgstr "ເພີ່ມຄຳແນະນຳສຳລັບ Warehouse. (:pr:`471`)" + +#: ../source/news.rst:114 +msgid "Removed GPG references from publishing tutorial. (:pr:`466`)" +msgstr "ຖອນການອ້າງອີງ GPG ອອກຈາກບົດຮຽນການເຜີຍແຜ່. (:pr:`466`)" + +#: ../source/news.rst:115 +msgid "Added 'What’s in which Python 3.4–3.6?'. (:pr:`468`)" +msgstr "ເພີ່ມ 'ມີຫຍັງໃໝ່ໃນ Python 3.4–3.6?'. (:pr:`468`)" + +#: ../source/news.rst:116 +msgid "Added a guide for phasing out Python versions. (:pr:`459`)" +msgstr "ເພີ່ມຄຳແນະນຳການຍົກເລີກເວີຊັນ Python ເກົ່າ. (:pr:`459`)" + +#: ../source/news.rst:117 +msgid "Made default Description-Content-Type variant GFM. (:pr:`462`)" +msgstr "ກຳນົດໃຫ້ Description-Content-Type ເປັນ GFM ໂດຍມາດຕະຖານ. (:pr:`462`)" + +#: ../source/news.rst:120 +msgid "March 2018" +msgstr "ມີນາ 2018" + +#: ../source/news.rst:122 +msgid "Updated \"installing scientific packages\". (:pr:`455`)" +msgstr "ອັບເດດສ່ວນ \"ການຕິດຕັ້ງແພັກເກດທາງວິທະຍາສາດ\". (:pr:`455`)" + +#: ../source/news.rst:123 +msgid "" +"Added :file:`long_description_content_type` to follow PEP 556. (:pr:`457`)" +msgstr "ເພີ່ມ :file:`long_description_content_type` ຕາມ PEP 556. (:pr:`457`)" + +#: ../source/news.rst:124 +msgid "Clarified a long description classifier on pypi.org. (:pr:`456`)" +msgstr "" +"ປັບປຸງຄຳອະທິບາຍ long description classifier ໃນ pypi.org ໃຫ້ຊັດເຈນ. (:pr:`456`)" + +#: ../source/news.rst:125 +msgid "Updated Core Metadata spec to follow PEP 556. (:pr:`412`)" +msgstr "ອັບເດດຂໍ້ກຳນົດ Core Metadata ຕາມ PEP 556. (:pr:`412`)" + +#: ../source/news.rst:128 +msgid "February 2018" +msgstr "ກຸມພາ 2018" + +#: ../source/news.rst:130 +msgid "" +"Added python3-venv and python3-pip to Debian installation instructions. " +"(:pr:`445`)" +msgstr "" +"ເພີ່ມ python3-venv ແລະ python3-pip ໃນຄຳແນະນຳການຕິດຕັ້ງສຳລັບ Debian. (:pr:`445`)" + +#: ../source/news.rst:131 +msgid "Updated PyPI migration info. (:pr:`439`)" +msgstr "ອັບເດດຂໍ້ມູນການຍ້າຍໄປ PyPI. (:pr:`439`)" + +#: ../source/news.rst:132 +msgid "" +"Added a warning about managing multiple versions with pipenv. (:pr:`430`)" +msgstr "ເພີ່ມຄຳເຕືອນກ່ຽວກັບການຈັດການຫຼາຍເວີຊັນດ້ວຍ pipenv. (:pr:`430`)" + +#: ../source/news.rst:133 +msgid "Added example of multiple emails to Core Metadata. (:pr:`429`)" +msgstr "ເພີ່ມຕົວຢ່າງການໃຊ້ຫຼາຍອີເມວໃນ Core Metadata. (:pr:`429`)" + +#: ../source/news.rst:134 +msgid "Added explanation of \"legacy\" in test.pypi.org/legacy. (:pr:`426`)" +msgstr "ເພີ່ມຄຳອະທິບາຍຂອງ \"legacy\" ໃນ test.pypi.org/legacy. (:pr:`426`)" + +#: ../source/news.rst:137 +msgid "January 2018" +msgstr "ມັງກອນ 2018" + +#: ../source/news.rst:139 +msgid "Added a link to PyPI's list of classifiers. (:pr:`425`)" +msgstr "ເພີ່ມລິ້ງໄປຫາລາຍການ classifiers ຂອງ PyPI. (:pr:`425`)" + +#: ../source/news.rst:140 +msgid "Updated README.rst explanation. (:pr:`419`)" +msgstr "ອັບເດດຄຳອະທິບາຍ README.rst. (:pr:`419`)" + +#: ../source/news.rst:143 +msgid "December 2017" +msgstr "ທັນວາ 2017" + +#: ../source/news.rst:145 +msgid "" +"Replaced :file:`~` with :file:`$HOME` in guides and tutorials. (:pr:`418`)" +msgstr "ປ່ຽນ :file:`~` ເປັນ :file:`$HOME` ໃນທຸກຄຳແນະນຳ. (:pr:`418`)" + +#: ../source/news.rst:146 +msgid "Noted which fields can be used with environment markers. (:pr:`416`)" +msgstr "ລະບຸຟິລທີ່ສາມາດໃຊ້ກັບ environment markers ໄດ້. (:pr:`416`)" + +#: ../source/news.rst:147 +msgid "Updated Requires-Python section. (:pr:`414`)" +msgstr "ອັບເດດສ່ວນ Requires-Python. (:pr:`414`)" + +#: ../source/news.rst:148 +msgid "Added news page. (:pr:`404`)" +msgstr "ເພີ່ມໜ້າຂ່າວສານ. (:pr:`404`)" + +#: ../source/news.rst:151 +msgid "November 2017" +msgstr "ພະຈິກ 2017" + +#: ../source/news.rst:153 +msgid "" +"Introduced a new dependency management tutorial based on Pipenv. (:pr:`402`)" +msgstr "ເພີ່ມບົດຮຽນການຈັດການສ່ວນປະກອບທີ່ຈຳເປັນດ້ວຍ Pipenv. (:pr:`402`)" + +#: ../source/news.rst:154 +msgid "" +"Updated the *Single Sourcing Package Version* tutorial to reflect pip's " +"current strategy. (:pr:`400`)" +msgstr "" +"ອັບເດດບົດຮຽນ *Single Sourcing Package Version* ໃຫ້ກົງກັບວິທີການຂອງ pip. (:pr:`400`)" + +#: ../source/news.rst:156 +msgid "" +"Added documentation about the ``py_modules`` argument to ``setup``. " +"(:pr:`398`)" +msgstr "ເພີ່ມເອກະສານກ່ຽວກັບ ``py_modules`` ໃນ ``setup``. (:pr:`398`)" + +#: ../source/news.rst:157 +msgid "Simplified the wording for the :file:`manifest.in` section. (:pr:`395`)" +msgstr "ປັບປຸງຂໍ້ຄວາມໃນສ່ວນ :file:`manifest.in` ໃຫ້ເຂົ້າໃຈງ່າຍຂຶ້ນ. (:pr:`395`)" + +#: ../source/news.rst:160 +msgid "October 2017" +msgstr "ຕຸລາ 2017" + +#: ../source/news.rst:162 +msgid "" +"Added a specification for the :file:`entry_points.txt` file. (:pr:`398`)" +msgstr "ເພີ່ມຂໍ້ກຳນົດສຳລັບໄຟລ໌ :file:`entry_points.txt`. (:pr:`398`)" + +#: ../source/news.rst:163 +msgid "" +"Created a new guide for managing packages using ``pip`` and ``virtualenv``. " +"(:pr:`385`)" +msgstr "" +"ສ້າງຄຳແນະນຳໃໝ່ສຳລັບການຈັດການແພັກເກດດ້ວຍ ``pip`` ແລະ ``virtualenv``. (:pr:`385`)" + +#: ../source/news.rst:164 +msgid "Split the specifications page into multiple pages. (:pr:`386`)" +msgstr "ແຍກໜ້າຂໍ້ກຳນົດອອກເປັນຫຼາຍໜ້າ. (:pr:`386`)" + +#: ../source/news.rst:167 +msgid "September 2017" +msgstr "ກັນຍາ 2017" + +#: ../source/news.rst:169 +msgid "" +"Encouraged using ``readme_renderer`` to validate :file:`README.rst`. " +"(:pr:`379`)" +msgstr "ແນະນຳໃຫ້ໃຊ້ ``readme_renderer`` ເພື່ອຢັ້ງຢືນ :file:`README.rst`. (:pr:`379`)" + +#: ../source/news.rst:171 +msgid "Recommended using the ``--user-base`` option. (:pr:`374`)" +msgstr "ແນະນຳໃຫ້ໃຊ້ຕົວເລືອກ ``--user-base``. (:pr:`374`)" + +#: ../source/news.rst:174 +msgid "August 2017" +msgstr "ສິງຫາ 2017" + +#: ../source/news.rst:176 +msgid "" +"Added a new, experimental tutorial on installing packages using ``Pipenv``. " +"(:pr:`369`)" +msgstr "ເພີ່ມບົດຮຽນການຕິດຕັ້ງແພັກເກດດ້ວຍ ``Pipenv`` (ແບບທົດລອງ). (:pr:`369`)" + +#: ../source/news.rst:177 +msgid "Added a new guide on how to use ``TestPyPI``. (:pr:`366`)" +msgstr "ເພີ່ມຄຳແນະນຳການໃຊ້ ``TestPyPI``. (:pr:`366`)" + +#: ../source/news.rst:178 +msgid "Added :file:`pypi.org` as a term. (:pr:`365`)" +msgstr "ເພີ່ມຄຳວ່າ :file:`pypi.org` ໃນສ່ວນຄຳສັບ. (:pr:`365`)" + +#: ../source/news.rst:181 +msgid "July 2017" +msgstr "ກໍລະກົດ 2017" + +#: ../source/news.rst:183 +msgid "Added ``flit`` to the key projects list. (:pr:`358`)" +msgstr "ເພີ່ມ ``flit`` ໃນລາຍການໂປຣເຈັກສຳຄັນ. (:pr:`358`)" + +#: ../source/news.rst:184 +msgid "Added ``enscons`` to the list of key projects. (:pr:`357`)" +msgstr "ເພີ່ມ ``enscons`` ໃນລາຍການໂປຣເຈັກສຳຄັນ. (:pr:`357`)" + +#: ../source/news.rst:185 +msgid "" +"Updated this guide's ``readme`` with instructions on how to build the guide " +"locally. (:pr:`356`)" +msgstr "" +"ອັບເດດໄຟລ໌ ``readme`` ຂອງຄຳແນະນຳນີ້ ພ້ອມວິທີການສ້າງເອກະສານໃນເຄື່ອງເອງ. (:pr:`356`)" + +#: ../source/news.rst:186 +msgid "" +"Made the new ``TestPyPI`` URL more visible, adding note to homepage about " +"pypi.org. (:pr:`354`)" +msgstr "ເຮັດໃຫ້ URL ຂອງ ``TestPyPI`` ເຫັນຊັດເຈນຂຶ້ນ. (:pr:`354`)" + +#: ../source/news.rst:187 +msgid "" +"Added a note about the removal of the explicit registration API. (:pr:`347`)" +msgstr "ເພີ່ມໝາຍເຫດກ່ຽວກັບການຖອນ registration API ອອກ. (:pr:`347`)" + +#: ../source/news.rst:190 +msgid "June 2017" +msgstr "ມິຖຸນາ 2017" + +#: ../source/news.rst:192 +msgid "Added a document on migrating uploads to :file:`PyPI.org`. (:pr:`339`)" +msgstr "ເພີ່ມເອກະສານການຍ້າຍການອັບໂຫຼດໄປ :file:`PyPI.org`. (:pr:`339`)" + +#: ../source/news.rst:193 +msgid "Added documentation for ``python_requires``. (:pr:`338`)" +msgstr "ເພີ່ມເອກະສານສຳລັບ ``python_requires``. (:pr:`338`)" + +#: ../source/news.rst:194 +msgid "" +"Added a note about PyPI migration in the *Tool Recommendations* tutorial. " +"(:pr:`335`)" +msgstr "ເພີ່ມໝາຍເຫດເລື່ອງການຍ້າຍ PyPI ໃນບົດຮຽນ *ການແນະນຳເຄື່ອງມື*. (:pr:`335`)" + +#: ../source/news.rst:195 +msgid "" +"Added a note that :file:`manifest.in` does not affect wheels. (:pr:`332`)" +msgstr "ເພີ່ມໝາຍເຫດວ່າ :file:`manifest.in` ບໍ່ມີຜົນກັບ wheels. (:pr:`332`)" + +#: ../source/news.rst:196 +msgid "Added a license section to the distributing guide. (:pr:`331`)" +msgstr "ເພີ່ມສ່ວນໃບອະນຸຍາດໃນຄຳແນະນຳການແຈກຢາຍ. (:pr:`331`)" + +#: ../source/news.rst:197 +msgid "Expanded the section on the ``name`` argument. (:pr:`329`)" +msgstr "ຂະຫຍາຍລາຍລະອຽດສ່ວນຕົວກຳນົດ ``name``. (:pr:`329`)" + +#: ../source/news.rst:198 +msgid "Adjusted the landing page. (:pr:`327`, :pr:`326`, :pr:`324`)" +msgstr "ປັບປຸງໜ້າຫຼັກ. (:pr:`327`, :pr:`326`, :pr:`324`)" + +#: ../source/news.rst:199 +msgid "Updated to Sphinx 1.6.2. (:pr:`323`)" +msgstr "ອັບເດດເປັນ Sphinx 1.6.2. (:pr:`323`)" + +#: ../source/news.rst:200 +msgid "Switched to the PyPA theme. (:pr:`305`)" +msgstr "ປ່ຽນມາໃຊ້ທີມ (theme) ຂອງ PyPA. (:pr:`305`)" + +#: ../source/news.rst:201 +msgid "Re-organized the documentation into the new structure. (:pr:`318`)" +msgstr "ຈັດໂຄງສ້າງເອກະສານໃໝ່. (:pr:`318`)" + +#: ../source/news.rst:204 +msgid "May 2017" +msgstr "ພຶດສະພາ 2017" + +#: ../source/news.rst:206 +msgid "" +"Added documentation for the ``Description-Content-Type`` field. (:pr:`258`)" +msgstr "ເພີ່ມເອກະສານສຳລັບຟິລ ``Description-Content-Type``. (:pr:`258`)" + +#: ../source/news.rst:207 +msgid "Added contributor and style guide. (:pr:`307`)" +msgstr "ເພີ່ມຄຳແນະນຳສຳລັບຜູ້ມີສ່ວນຮ່ວມ ແລະ ຮູບແບບການຂຽນ. (:pr:`307`)" + +#: ../source/news.rst:208 +msgid "" +"Documented ``pip`` and ``easy_install``'s differences for per-project " +"indexes. (:pr:`233`)" +msgstr "" +"ບັນທຶກຄວາມແຕກຕ່າງຂອງ ``pip`` ແລະ ``easy_install`` ສຳລັບດັດຊະນີແຍກແຕ່ລະໂປຣເຈັກ. " +"(:pr:`233`)" + +#: ../source/news.rst:211 +msgid "April 2017" +msgstr "ເມສາ 2017" + +#: ../source/news.rst:213 +msgid "Added travis configuration for testing pull requests. (:pr:`300`)" +msgstr "ເພີ່ມການກຳນົດຄ່າ travis ສຳລັບທົດສອບ pull requests. (:pr:`300`)" + +#: ../source/news.rst:214 +msgid "" +"Mentioned the requirement of the ``wheel`` package for creating wheels " +"(:pr:`299`)" +msgstr "ກ່າວເຖິງຄວາມຈຳເປັນຂອງແພັກເກດ ``wheel`` ໃນການສ້າງ wheels. (:pr:`299`)" + +#: ../source/news.rst:215 +msgid "" +"Removed the ``twine register`` reference in the *Distributing Packages* " +"tutorial. (:pr:`271`)" +msgstr "ຖອນການອ້າງອີງ ``twine register`` ອອກຈາກບົດຮຽນການແຈກຢາຍແພັກເກດ. (:pr:`271`)" + +#: ../source/news.rst:216 +msgid "Added a topic on plugin discovery. (:pr:`294`, :pr:`296`)" +msgstr "ເພີ່ມຫົວຂໍ້ກ່ຽວກັບການຄົ້ນຫາປລັກອິນ. (:pr:`294`, :pr:`296`)" + +#: ../source/news.rst:217 +msgid "Added a topic on namespace packages. (:pr:`290`)" +msgstr "ເພີ່ມຫົວຂໍ້ກ່ຽວກັບແພັກເກດ namespace. (:pr:`290`)" + +#: ../source/news.rst:218 +msgid "" +"Added documentation explaining prominently how to install ``pip`` in ``/usr/" +"local``. (:pr:`230`)" +msgstr "" +"ເພີ່ມເອກະສານອະທິບາຍຢ່າງຈະແຈ້ງກ່ຽວກັບວິທີການຕິດຕັ້ງ ``pip`` ໃນ ``/usr/local``. (:pr:`230`)" + +#: ../source/news.rst:219 +msgid "" +"Updated development mode documentation to mention that order of local " +"packages matters. (:pr:`208`)" +msgstr "" +"ອັບເດດເອກະສານໂໝດການພັດທະນາ ເພື່ອລະບຸວ່າລໍາດັບຂອງແພັກເກດທ້ອງຖິ່ນມີຄວາມສຳຄັນ. (:pr:`208`)" + +#: ../source/news.rst:220 +msgid "" +"Convert readthedocs link for their ``.org`` -> ``.io`` migration for hosted " +"projects (:pr:`239`)" +msgstr "" +"ປ່ຽນລິ້ງ readthedocs ສຳລັບການຍ້າຍຈາກ ``.org`` -> ``.io`` ຂອງໂຄງການທີ່ໂຮສໄວ້ " +"(:pr:`239`)" + +#: ../source/news.rst:221 +msgid "" +"Swapped order of :file:`setup.py` arguments for the upload command, as order " +"is significant. (:pr:`260`)" +msgstr "" +"ສະຫຼັບລຳດັບຂອງອາຄິວເມນ (arguments) ໃນ :file:`setup.py` ສຳລັບຄຳສັ່ງອັບໂຫຼດ " +"ເນື່ອງຈາກລຳດັບມີຄວາມສຳຄັນ. (:pr:`260`)" + +#: ../source/news.rst:223 +msgid "" +"Explained how to install from unsupported sources using a helper " +"application. (:pr:`289`)" +msgstr "ອະທິບາຍວິທີການຕິດຕັ້ງຈາກແຫຼ່ງທີ່ບໍ່ຮອງຮັບ ໂດຍໃຊ້ແອັບພລິເຄຊັນຊ່ວຍເຫຼືອ. (:pr:`289`)" + +#: ../source/news.rst:227 +msgid "March 2017" +msgstr "ມີນາ 2017" + +#: ../source/news.rst:229 +msgid "Covered ``manylinux1`` in *Platform Wheels*. (:pr:`283`)" +msgstr "ກວມເອົາ ``manylinux1`` ໃນ *Platform Wheels*. (:pr:`283`)" + +#: ../source/news.rst:232 +msgid "February 2017" +msgstr "ກຸມພາ 2017" + +#: ../source/news.rst:234 +msgid "Added :pep:`518`. (:pr:`281`)" +msgstr "ເພີ່ມ :pep:`518`. (:pr:`281`)" + +#: ../source/overview.rst:3 +msgid "Overview of Python Packaging" +msgstr "ພາບລວມຂອງການເຮັດແພັກເກດ Python" + +#: ../source/overview.rst:7 +msgid "" +"As a general-purpose programming language, Python is designed to be used in " +"many ways. You can build web sites or industrial robots or a game for your " +"friends to play, and much more, all using the same core technology." +msgstr "" +"ໃນຖານະທີ່ເປັນພາສາຂຽນໂປຣແກຣມອະເນກປະສົງ, Python ຖືກອອກແບບມາເພື່ອໃຊ້ໃນຫຼາຍຮູບແບບ. " +"ທ່ານສາມາດສ້າງເວັບໄຊ, ຫຸ່ນຍົນອຸດສາຫະກຳ ຫຼື ເກມໃຫ້ໝູ່ຫຼິ້ນ ແລະ ອື່ນໆອີກຫຼາຍຢ່າງ " +"ໂດຍໃຊ້ເຕັກໂນໂລຊີຫຼັກອັນດຽວກັນ." + +#: ../source/overview.rst:12 +msgid "" +"Python's flexibility is why the first step in every Python project must be " +"to think about the project's audience and the corresponding environment " +"where the project will run. It might seem strange to think about packaging " +"before writing code, but this process does wonders for avoiding future " +"headaches." +msgstr "" +"ຄວາມຢືດຢຸ່ນຂອງ Python ແມ່ນເຫດຜົນທີ່ຂັ້ນຕອນທຳອິດໃນທຸກໆໂຄງການ Python ຕ້ອງແມ່ນການຄິດເຖິງກຸ່ມຜູ້ໃຊ້ " +"ແລະ ສະພາບແວດລ້ອມທີ່ຈະໃຊ້ງານໂຄງການນັ້ນ. " +"ມັນອາດຈະເບິ່ງຄືວ່າແປກທີ່ຈະຄິດກ່ຽວກັບການເຮັດແພັກເກດກ່ອນການຂຽນໂຄດ, " +"ແຕ່ຂະບວນການນີ້ຊ່ວຍຫຼີກເວັ້ນບັນຫາທີ່ໜ້າປວດຫົວໃນອະນາຄົດໄດ້ຢ່າງດີ." + +#: ../source/overview.rst:18 +msgid "" +"This overview provides a general-purpose decision tree for reasoning about " +"Python's plethora of packaging options. Read on to choose the best " +"technology for your next project." +msgstr "" +"ພາບລວມນີ້ຈະສະແດງແຜນຜັງການຕັດສິນໃຈ ເພື່ອພິຈາລະນາຕົວເລືອກການເຮັດແພັກເກດທີ່ມີຫຼາກຫຼາຍຂອງ Python. " +"ອ່ານຕໍ່ເພື່ອເລືອກເຕັກໂນໂລຊີທີ່ດີທີ່ສຸດສຳລັບໂຄງການຕໍ່ໄປຂອງທ່ານ." + +#: ../source/overview.rst:23 +msgid "Thinking about deployment" +msgstr "ການວາງແຜນກ່ຽວກັບການຕິດຕັ້ງໃຊ້ງານ" + +#: ../source/overview.rst:25 +msgid "" +"Packages exist to be installed (or *deployed*), so before you package " +"anything, you'll want to have some answers to the deployment questions below:" +msgstr "" +"ແພັກເກດມີໄວ້ເພື່ອຕິດຕັ້ງ (ຫຼື *deployed*), ດັ່ງນັ້ນກ່ອນທີ່ທ່ານຈະເຮັດແພັກເກດໃດໜຶ່ງ, " +"ທ່ານຄວນມີຄຳຕອບສຳລັບຄຳຖາມກ່ຽວກັບການຕິດຕັ້ງໃຊ້ງານລຸ່ມນີ້:" + +#: ../source/overview.rst:29 +msgid "" +"Who are your software's users? Will your software be installed by other " +"developers doing software development, operations people in a datacenter, or " +"a less software-savvy group?" +msgstr "" +"ໃຜແມ່ນຜູ້ໃຊ້ຊອບແວຂອງທ່ານ? ຊອບແວຂອງທ່ານຈະຖືກຕິດຕັ້ງໂດຍນັກພັດທະນາຄົນອື່ນ, ຜູ້ເບິ່ງແຍງລະບົບໃນສູນຂໍ້ມູນ " +"(datacenter), ຫຼື ກຸ່ມຄົນທີ່ບໍ່ຄ່ອຍມີຄວາມຮູ້ດ້ານຊອບແວ?" + +#: ../source/overview.rst:32 +msgid "" +"Is your software intended to run on servers, desktops, mobile clients " +"(phones, tablets, etc.), or embedded in dedicated devices?" +msgstr "" +"ຊອບແວຂອງທ່ານມີຈຸດປະສົງເພື່ອໃຊ້ງານເທິງເຊີເວີ, ຄອມພິວເຕີຕັ້ງໂຕະ, ອຸປະກອນເຄື່ອນທີ່ (ໂທລະສັບ, ແທັບເລັດ " +"ແລະ ອື່ນໆ) ຫຼື ຝັງຢູ່ໃນອຸປະກອນສະເພາະຕົວ?" + +#: ../source/overview.rst:34 +msgid "" +"Is your software installed individually, or in large deployment batches?" +msgstr "ຊອບແວຂອງທ່ານຖືກຕິດຕັ້ງແບບແຍກສ່ວນ ຫຼື ຕິດຕັ້ງເປັນຊຸດໃຫຍ່ພ້ອມກັນ?" + +#: ../source/overview.rst:36 +msgid "" +"Packaging is all about target environment and deployment experience. There " +"are many answers to the questions above and each combination of " +"circumstances has its own solutions. With this information, the following " +"overview will guide you to the packaging technologies best suited to your " +"project." +msgstr "" +"ການເຮັດແພັກເກດແມ່ນກ່ຽວກັບສະພາບແວດລ້ອມເປົ້າໝາຍ ແລະ ປະສົບການການຕິດຕັ້ງໃຊ້ງານ. " +"ມີຫຼາຍຄຳຕອບສຳລັບຄຳຖາມຂ້າງເທິງ ແລະ ແຕ່ລະສະຖານະການກໍມີວິທີແກ້ໄຂຂອງມັນເອງ. ດ້ວຍຂໍ້ມູນນີ້, " +"ພາບລວມຕໍ່ໄປນີ້ຈະແນະນຳທ່ານໄປຫາເຕັກໂນໂລຊີການເຮັດແພັກເກດທີ່ເໝາະສົມທີ່ສຸດສຳລັບໂຄງການຂອງທ່ານ." + +#: ../source/overview.rst:43 +msgid "Packaging Python libraries and tools" +msgstr "ການເຮັດແພັກເກດໄລບຣາຣີ ແລະ ເຄື່ອງມື Python" + +#: ../source/overview.rst:45 +msgid "" +"You may have heard about PyPI, ``setup.py``, and ``wheel`` files. These are " +"just a few of the tools Python's ecosystem provides for distributing Python " +"code to developers, which you can read about in :doc:`guides/distributing-" +"packages-using-setuptools`." +msgstr "" +"ທ່ານອາດຈະເຄີຍໄດ້ຍິນກ່ຽວກັບ PyPI, ``setup.py`` ແລະ ໄຟລ໌ ``wheel``. " +"ເຫຼົ່ານີ້ແມ່ນພຽງແຕ່ບາງສ່ວນຂອງເຄື່ອງມືໃນລະບົບນິເວດຂອງ Python ທີ່ໃຊ້ສຳລັບແຈກຢາຍໂຄດ Python " +"ໃຫ້ກັບນັກພັດທະນາ, ເຊິ່ງທ່ານສາມາດອ່ານເພີ່ມເຕີມໄດ້ໃນ :doc:`guides/distributing-packages-" +"using-setuptools`." + +#: ../source/overview.rst:50 +msgid "" +"The following approaches to packaging are meant for libraries and tools used " +"by technical audience in a development setting. If you're looking for ways " +"to package Python for a non-technical audience and/or a production setting, " +"skip ahead to :ref:`packaging-applications`." +msgstr "" +"ວິທີການເຮັດແພັກເກດຕໍ່ໄປນີ້ແມ່ນສຳລັບໄລບຣາຣີ ແລະ ເຄື່ອງມືທີ່ໃຊ້ໂດຍຜູ້ທີ່ມີຄວາມຮູ້ດ້ານເຕັກນິກໃນການພັດທະນາ. " +"ຖ້າທ່ານກຳລັງຊອກຫາວິທີການເຮັດແພັກເກດ Python ສຳລັບຜູ້ໃຊ້ທົ່ວໄປ ຫຼື ສຳລັບການໃຊ້ງານຈິງ " +"(production), ໃຫ້ຂ້າມໄປເບິ່ງທີ່ :ref:`packaging-applications`." + +#: ../source/overview.rst:56 +msgid "Python modules" +msgstr "ໂມດູນ Python" + +#: ../source/overview.rst:58 +msgid "" +"A Python file, provided it only relies on the standard library, can be " +"redistributed and reused. You will also need to ensure it's written for the " +"right version of Python, and only relies on the standard library." +msgstr "" +"ໄຟລ໌ Python ໃດໜຶ່ງ, ຖ້າມັນຂຶ້ນກັບພຽງແຕ່ໄລບຣາຣີມາດຕະຖານ, ສາມາດນຳໄປແຈກຢາຍ ແລະ ໃຊ້ຄືນໄດ້. " +"ທ່ານຍັງຕ້ອງຮັບປະກັນວ່າມັນຖືກຂຽນຂຶ້ນສຳລັບເວີຊັນຂອງ Python ທີ່ຖືກຕ້ອງ ແລະ " +"ຂຶ້ນກັບພຽງແຕ່ໄລບຣາຣີມາດຕະຖານເທົ່ານັ້ນ." + +#: ../source/overview.rst:63 +msgid "" +"This is great for sharing simple scripts and snippets between people who " +"both have compatible Python versions (such as via email, StackOverflow, or " +"GitHub gists). There are even some entire Python libraries that offer this " +"as an option, such as :doc:`bottle.py` and :doc:`boltons " +"`." +msgstr "" +"ວິທີນີ້ເໝາະສຳລັບການແບ່ງປັນສະຄຣິບງ່າຍໆ ແລະ ໂຄດສັ້ນໆ ລະຫວ່າງຄົນທີ່ມີ Python ເວີຊັນທີ່ເຂົ້າກັນໄດ້ (ເຊັ່ນ: " +"ຜ່ານອີເມລ, StackOverflow ຫຼື GitHub gists). ຍັງມີບາງໄລບຣາຣີ Python " +"ທັງໝົດທີ່ສະເໜີທາງເລືອກນີ້ ເຊັ່ນ: :doc:`bottle.py` ແລະ :doc:`boltons " +"`." + +#: ../source/overview.rst:70 +msgid "" +"However, this pattern won't scale for projects that consist of multiple " +"files, need additional libraries, or need a specific version of Python, " +"hence the options below." +msgstr "" +"ຢ່າງໃດກໍຕາມ, ຮູບແບບນີ້ຈະບໍ່ຮອງຮັບໂຄງການທີ່ປະກອບມີຫຼາຍໄຟລ໌, ຕ້ອງການໄລບຣາຣີເພີ່ມເຕີມ ຫຼື ຕ້ອງການ " +"Python ເວີຊັນສະເພາະ, ດັ່ງນັ້ນຈຶ່ງມີຕົວເລືອກອື່ນໆລຸ່ມນີ້." + +#: ../source/overview.rst:75 +msgid "Python source distributions" +msgstr "ການແຈກຢາຍຊອສ (source distributions) ຂອງ Python" + +#: ../source/overview.rst:77 +msgid "" +"If your code consists of multiple Python files, it's usually organized into " +"a directory structure. Any directory containing Python files can comprise " +"an :term:`Import Package`." +msgstr "" +"ຖ້າໂຄດຂອງທ່ານປະກອບມີຫຼາຍໄຟລ໌ Python, ໂດຍປົກກະຕິມັນຈະຖືກຈັດລະບຽບເປັນໂຄງສ້າງໄດເຣັກທໍຣີ. " +"ໄດເຣັກທໍຣີໃດໜຶ່ງທີ່ບັນຈຸໄຟລ໌ Python ສາມາດລວມກັນເປັນ :term:`Import Package` ໄດ້." + +#: ../source/overview.rst:81 +msgid "" +"Because packages consist of multiple files, they are harder to distribute. " +"Most protocols support transferring only one file at a time (when was the " +"last time you clicked a link and it downloaded multiple files?). It's easier " +"to get incomplete transfers, and harder to guarantee code integrity at the " +"destination." +msgstr "" +"ເນື່ອງຈາກແພັກເກດປະກອບດ້ວຍຫຼາຍໄຟລ໌, ພວກມັນຈຶ່ງແຈກຢາຍໄດ້ຍາກກວ່າ. " +"ໂປຣໂຕຄໍສ່ວນໃຫຍ່ຮອງຮັບການສົ່ງໄຟລ໌ເທື່ອລະໄຟລ໌ເທົ່ານັ້ນ. ມັນງ່າຍທີ່ຈະເກີດການສົ່ງຂໍ້ມູນບໍ່ຄົບຖ້ວນ ແລະ " +"ຍາກທີ່ຈະຮັບປະກັນຄວາມສົມບູນຂອງໂຄດເມື່ອໄປຮອດປາຍທາງ." + +#: ../source/overview.rst:87 +msgid "" +"So long as your code contains nothing but pure Python code, and you know " +"your deployment environment supports your version of Python, then you can " +"use Python's native packaging tools to create a *source* :term:`Distribution " +"Package`, or *sdist* for short." +msgstr "" +"ຕາບໃດທີ່ໂຄດຂອງທ່ານມີພຽງແຕ່ໂຄດ Python ລ້ວນໆ ແລະ ທ່ານຮູ້ວ່າສະພາບແວດລ້ອມການຕິດຕັ້ງຮອງຮັບ " +"Python ເວີຊັນຂອງທ່ານ, ທ່ານສາມາດໃຊ້ເຄື່ອງມືການເຮັດແພັກເກດພື້ນຖານຂອງ Python ເພື່ອສ້າງ " +"*source* :term:`Distribution Package` ຫຼື ເອີ້ນສັ້ນໆວ່າ *sdist*." + +#: ../source/overview.rst:92 +msgid "" +"Python's *sdists* are compressed archives (``.tar.gz`` files) containing one " +"or more packages or modules. If your code is pure-Python, and you only " +"depend on other Python packages, you can go to the :ref:`source-distribution-" +"format` specification to learn more." +msgstr "" +"*sdists* ຂອງ Python ແມ່ນໄຟລ໌ບີບອັດ (``.tar.gz``) ທີ່ບັນຈຸໜຶ່ງ ຫຼື ຫຼາຍແພັກເກດ ຫຼື ໂມດູນ. " +"ຖ້າໂຄດຂອງທ່ານເປັນ pure-Python ແລະ ຂຶ້ນກັບແພັກເກດ Python ອື່ນໆເທົ່ານັ້ນ, " +"ທ່ານສາມາດເຂົ້າໄປເບິ່ງຂໍ້ກຳນົດ :ref:`source-distribution-format` ເພື່ອຮຽນຮູ້ເພີ່ມເຕີມ." + +#: ../source/overview.rst:97 +msgid "" +"If you rely on any non-Python code, or non-Python packages (such as `libxml2 " +"`_ in the case of `lxml `_, or BLAS libraries in the case of `numpy `_), you will need to use the format detailed in the " +"next section, which also has many advantages for pure-Python libraries." +msgstr "" +"ຖ້າທ່ານຕ້ອງອາໄສໂຄດທີ່ບໍ່ແມ່ນ Python ຫຼື ແພັກເກດທີ່ບໍ່ແມ່ນ Python (ເຊັ່ນ `libxml2` ໃນກໍລະນີຂອງ " +"`lxml`, ຫຼື ໄລບຣາຣີ BLAS ໃນກໍລະນີຂອງ `numpy`), ທ່ານຈະຕ້ອງໃຊ້ຮູບແບບທີ່ລະບຸໄວ້ໃນສ່ວນຕໍ່ໄປ, " +"ເຊິ່ງຍັງມີຂໍ້ດີຫຼາຍຢ່າງສຳລັບໄລບຣາຣີ pure-Python." + +#: ../source/overview.rst:104 +msgid "" +"Python and PyPI support multiple distributions providing different " +"implementations of the same package. For instance the unmaintained-but-" +"seminal `PIL distribution `_ provides the PIL " +"package, and so does `Pillow `_, an " +"actively-maintained fork of PIL!" +msgstr "" +"Python ແລະ PyPI ຮອງຮັບການແຈກຢາຍຫຼາຍຮູບແບບທີ່ໃຫ້ການເຮັດວຽກຂອງແພັກເກດດຽວກັນທີ່ແຕກຕ່າງກັນ. " +"ຕົວຢ່າງເຊັ່ນ: `PIL distribution` ທີ່ບໍ່ໄດ້ຮັບການເບິ່ງແຍງແລ້ວໃຫ້ແພັກເກດ PIL, ແລະ `Pillow` " +"ເຊິ່ງເປັນຕົວທີ່ແຍກອອກມາ ແລະ ໄດ້ຮັບການເບິ່ງແຍງຢ່າງຕໍ່ເນື່ອງກໍໃຫ້ແພັກເກດ PIL ຄືກັນ!" + +#: ../source/overview.rst:111 +msgid "" +"This Python packaging superpower makes it possible for Pillow to be a drop-" +"in replacement for PIL, just by changing your project's ``install_requires`` " +"or ``requirements.txt``." +msgstr "" +"ຄວາມສາມາດພິເສດນີ້ຂອງການເຮັດແພັກເກດ Python ເຮັດໃຫ້ Pillow ສາມາດໃຊ້ແທນ PIL ໄດ້ທັນທີ " +"ພຽງແຕ່ປ່ຽນ ``install_requires`` ຫຼື ``requirements.txt`` ໃນໂຄງການຂອງທ່ານ." + +#: ../source/overview.rst:116 +msgid "Python binary distributions" +msgstr "ການແຈກຢາຍບາຍນາຣີ (binary distributions) ຂອງ Python" + +#: ../source/overview.rst:118 +msgid "" +"So much of Python's practical power comes from its ability to integrate with " +"the software ecosystem, in particular libraries written in C, C++, Fortran, " +"Rust, and other languages." +msgstr "" +"ພະລັງໃນການໃຊ້ງານຕົວຈິງສ່ວນໃຫຍ່ຂອງ Python " +"ແມ່ນມາຈາກຄວາມສາມາດໃນການເຮັດວຽກຮ່ວມກັບລະບົບນິເວດຊອບແວອື່ນໆ, ໂດຍສະເພາະໄລບຣາຣີທີ່ຂຽນດ້ວຍ C, " +"C++, Fortran, Rust ແລະ ພາສາອື່ນໆ." + +#: ../source/overview.rst:122 +msgid "" +"Not all developers have the right tools or experiences to build these " +"components written in these compiled languages, so Python created " +"the :term:`Wheel`, a package format designed to ship libraries with compiled " +"artifacts. In fact, Python's package installer, ``pip``, always prefers " +"wheels because installation is always faster, so even pure-Python packages " +"work better with wheels." +msgstr "" +"ບໍ່ແມ່ນນັກພັດທະນາທຸກຄົນທີ່ຈະມີເຄື່ອງມື ຫຼື ປະສົບການໃນການບິວ (build) ສ່ວນປະກອບທີ່ຂຽນດ້ວຍພາສາເຫຼົ່ານີ້, " +"ດັ່ງນັ້ນ Python ຈຶ່ງໄດ້ສ້າງ :term:`Wheel` ຂຶ້ນມາ, " +"ເຊິ່ງເປັນຮູບແບບແພັກເກດທີ່ອອກແບບມາເພື່ອສົ່ງມອບໄລບຣາຣີພ້ອມກັບໄຟລ໌ທີ່ຄອມພາຍ (compile) ແລ້ວ. " +"ໃນຄວາມເປັນຈິງ, ເຄື່ອງມືຕິດຕັ້ງແພັກເກດຂອງ Python ຢ່າງ ``pip`` ມັກຈະເລືອກ wheel ສະເໝີ " +"ເພາະວ່າການຕິດຕັ້ງຈະໄວຖ້າກວ່າ, ດັ່ງນັ້ນແມ່ນແຕ່ແພັກເກດ pure-Python ກໍຍັງເຮັດວຽກໄດ້ດີກວ່າເມື່ອເປັນ " +"wheel." + +#: ../source/overview.rst:129 +msgid "" +"Binary distributions are best when they come with source distributions to " +"match. Even if you don't upload wheels of your code for every operating " +"system, by uploading the sdist, you're enabling users of other platforms to " +"still build it for themselves. Default to publishing both sdist and wheel " +"archives together, *unless* you're creating artifacts for a very specific " +"use case where you know the recipient only needs one or the other." +msgstr "" +"ການແຈກຢາຍແບບບາຍນາຣີຈະດີທີ່ສຸດເມື່ອມາພ້ອມກັບການແຈກຢາຍແບບຊອສ (source distribution). " +"ເຖິງແມ່ນວ່າທ່ານຈະບໍ່ໄດ້ອັບໂຫຼດ wheel ຂອງໂຄດທ່ານສຳລັບທຸກລະບົບປະຕິບັດການ, ແຕ່ການອັບໂຫຼດ sdist " +"ຈະຊ່ວຍໃຫ້ຜູ້ໃຊ້ໃນແພລັດຟອມອື່ນສາມາດບິວມັນດ້ວຍຕົນເອງໄດ້. ໂດຍປົກກະຕິແລ້ວຄວນເຜີຍແຜ່ທັງ sdist ແລະ " +"wheel ໄປພ້ອມກັນ, *ຍົກເວັ້ນ* " +"ວ່າທ່ານກຳລັງສ້າງສຳລັບກໍລະນີສະເພາະທີ່ທ່ານຮູ້ແນ່ນອນວ່າຜູ້ຮັບຕ້ອງການພຽງຢ່າງໃດຢ່າງໜຶ່ງ." + +#: ../source/overview.rst:137 +msgid "" +"Python and PyPI make it easy to upload both wheels and sdists together. Just " +"follow the :doc:`tutorials/packaging-projects` tutorial." +msgstr "" +"Python ແລະ PyPI ເຮັດໃຫ້ການອັບໂຫຼດທັງ wheels ແລະ sdists ໄປພ້ອມກັນເປັນເລື່ອງງ່າຍ. " +"ພຽງແຕ່ປະຕິບັດຕາມບົດຮຽນ :doc:`tutorials/packaging-projects`." + +#: ../source/overview.rst:145 +msgid "A summary of Python's packaging capabilities for tools and libraries." +msgstr "ບົດສະຫຼຸບຄວາມສາມາດໃນການເຮັດແພັກເກດຂອງ Python ສຳລັບເຄື່ອງມື ແລະ ໄລບຣາຣີ." + +#: ../source/overview.rst:145 +msgid "" +"Python's recommended built-in library and tool packaging technologies. " +"Excerpted from `The Packaging Gradient (2017) `_." +msgstr "" +"ເຕັກໂນໂລຊີການເຮັດແພັກເກດໄລບຣາຣີ ແລະ ເຄື່ອງມືພາຍໃນທີ່ແນະນຳຂອງ Python. ຄັດມາຈາກ `The " +"Packaging Gradient (2017)`." + +#: ../source/overview.rst:152 +msgid "Packaging Python applications" +msgstr "ການເຮັດແພັກເກດແອັບພລິເຄຊັນ Python" + +#: ../source/overview.rst:154 +msgid "" +"So far we've only discussed Python's native distribution tools. Based on our " +"introduction, you would be correct to infer these built-in approaches only " +"target environments which have Python, and an audience who knows how to " +"install Python packages." +msgstr "" +"ມາຮອດນີ້ ພວກເຮົາໄດ້ສົນທະນາກ່ຽວກັບເຄື່ອງມືແຈກຢາຍພື້ນຖານຂອງ Python ເທົ່ານັ້ນ. ຈາກບົດນຳ, " +"ທ່ານອາດຈະເຂົ້າໃຈຖືກແລ້ວວ່າວິທີການເຫຼົ່ານີ້ເປົ້າໝາຍພຽງແຕ່ສະພາບແວດລ້ອມທີ່ມີ Python ຢູ່ແລ້ວ ແລະ " +"ຜູ້ໃຊ້ທີ່ຮູ້ວິທີການຕິດຕັ້ງແພັກເກດ Python." + +#: ../source/overview.rst:159 +msgid "" +"With the variety of operating systems, configurations, and people out there, " +"this assumption is only safe when targeting a developer audience." +msgstr "" +"ດ້ວຍຄວາມຫຼາກຫຼາຍຂອງລະບົບປະຕິບັດການ, ການຕັ້ງຄ່າ ແລະ ຜູ້ໃຊ້, " +"ຂໍ້ສົມມຸດນີ້ຈະປອດໄພກໍຕໍ່ເມື່ອເປົ້າໝາຍແມ່ນກຸ່ມນັກພັດທະນາເທົ່ານັ້ນ." + +#: ../source/overview.rst:163 +msgid "" +"Python's native packaging is mostly built for distributing reusable code, " +"called libraries, between developers. You can piggyback **tools**, or basic " +"applications for developers, on top of Python's library packaging, using " +"technologies like :doc:`setuptools entry_points `." +msgstr "" +"ການເຮັດແພັກເກດພື້ນຖານຂອງ Python ສ່ວນໃຫຍ່ແມ່ນສ້າງຂຶ້ນເພື່ອແຈກຢາຍໂຄດທີ່ນຳມາໃຊ້ໃໝ່ໄດ້, ເອີ້ນວ່າ " +"ໄລບຣາຣີ, ລະຫວ່າງນັກພັດທະນາ. ທ່ານສາມາດພ່ວງ **ເຄື່ອງມື** ຫຼື ແອັບພລິເຄຊັນພື້ນຖານສຳລັບນັກພັດທະນາ " +"ເທິງການເຮັດແພັກເກດໄລບຣາຣີຂອງ Python ໂດຍໃຊ້ເຕັກໂນໂລຊີເຊັ່ນ :doc:`setuptools " +"entry_points`." + +#: ../source/overview.rst:169 +msgid "" +"Libraries are building blocks, not complete applications. For distributing " +"applications, there's a whole new world of technologies out there." +msgstr "" +"ໄລບຣາຣີແມ່ນສ່ວນປະກອບພື້ນຖານ, ບໍ່ແມ່ນແອັບພລິເຄຊັນທີ່ສົມບູນ. ສຳລັບການແຈກຢາຍແອັບພລິເຄຊັນ, " +"ຍັງມີໂລກຂອງເຕັກໂນໂລຊີໃໝ່ໆອີກຫຼາກຫຼາຍ." + +#: ../source/overview.rst:173 +msgid "" +"The next few sections organize these application packaging options according " +"to their dependencies on the target environment, so you can choose the right " +"one for your project." +msgstr "" +"ສ່ວນຕໍ່ໄປຈະຈັດລະບຽບຕົວເລືອກການເຮັດແພັກເກດແອັບພລິເຄຊັນເຫຼົ່ານີ້ ຕາມການຂຶ້ນກັບສະພາບແວດລ້ອມເປົ້າໝາຍ, " +"ເພື່ອໃຫ້ທ່ານສາມາດເລືອກສິ່ງທີ່ເໝາະສົມສຳລັບໂຄງການຂອງທ່ານ." + +#: ../source/overview.rst:178 +msgid "Depending on a framework" +msgstr "ການຂຶ້ນກັບເຟຣມເວີກ (framework)" + +#: ../source/overview.rst:180 +msgid "" +"Some types of Python applications, like web site backends and other network " +"services, are common enough that they have frameworks to enable their " +"development and packaging. Other types of applications, like dynamic web " +"frontends and mobile clients, are complex enough to target that a framework " +"becomes more than a convenience." +msgstr "" +"ແອັບພລິເຄຊັນ Python ບາງປະເພດ ເຊັ່ນ: ສ່ວນຫຼັງຂອງເວັບໄຊ (web site backends) ແລະ " +"ການບໍລິການເຄືອຂ່າຍອື່ນໆ, ແມ່ນມີຄວາມນິຍົມຫຼາຍຈົນມີເຟຣມເວີກທີ່ຊ່ວຍໃນການພັດທະນາ ແລະ ການເຮັດແພັກເກດ. " +"ແອັບພລິເຄຊັນປະເພດອື່ນ ເຊັ່ນ: ສ່ວນໜ້າຂອງເວັບ (web frontends) ແລະ ແອັບພລິເຄຊັນເທິງມືຖື, " +"ແມ່ນມີຄວາມຊັບຊ້ອນຫຼາຍຈົນການໃຊ້ເຟຣມເວີກກາຍເປັນສິ່ງທີ່ຈຳເປັນຫຼາຍກວ່າພຽງແຕ່ຄວາມສະດວກສະບາຍ." + +#: ../source/overview.rst:186 +msgid "" +"In all these cases, it makes sense to work backwards, from the framework's " +"packaging and deployment story. Some frameworks include a deployment system " +"which wraps the technologies outlined in the rest of the guide. In these " +"cases, you'll want to defer to your framework's packaging guide for the " +"easiest and most reliable production experience." +msgstr "" +"ໃນທຸກໆກໍລະນີນີ້, ມັນສົມຄວນທີ່ຈະພິຈາລະນາຍ້ອນກັບຈາກວິທີການເຮັດແພັກເກດ ແລະ " +"ການຕິດຕັ້ງຂອງເຟຣມເວີກນັ້ນໆ. ບາງເຟຣມເວີກລວມມີລະບົບການຕິດຕັ້ງທີ່ຫຸ້ມເຕັກໂນໂລຊີຕ່າງໆທີ່ໄດ້ກ່າວໄວ້ໃນຄູ່ມືນີ້. " +"ໃນກໍລະນີເຫຼົ່ານີ້, ທ່ານຄວນອ້າງອີງຕາມຄູ່ມືການເຮັດແພັກເກດຂອງເຟຣມເວີກຂອງທ່ານ " +"ເພື່ອປະສົບການການໃຊ້ງານຈິງທີ່ງ່າຍ ແລະ ໜ້າເຊື່ອຖືທີ່ສຸດ." + +#: ../source/overview.rst:192 +msgid "" +"If you ever wonder how these platforms and frameworks work under the hood, " +"you can always read the sections beyond." +msgstr "" +"ຖ້າທ່ານເຄີຍສົງໄສວ່າແພລັດຟອມ ແລະ ເຟຣມເວີກເຫຼົ່ານີ້ເຮັດວຽກແນວໃດຢູ່ເບື້ອງຫຼັງ, " +"ທ່ານສາມາດອ່ານສ່ວນຕໍ່ໆໄປໄດ້." + +#: ../source/overview.rst:196 +msgid "Service platforms" +msgstr "ແພລັດຟອມການບໍລິການ" + +#: ../source/overview.rst:198 +msgid "" +"If you're developing for a \"`Platform-as-a-Service `_\" or \"PaaS\", you are going " +"to want to follow their respective packaging guides. These types of " +"platforms take care of packaging and deployment, as long as you follow their " +"patterns. Most software does not fit one of these templates, hence the " +"existence of all the other options below." +msgstr "" +"ຖ້າທ່ານກຳລັງພັດທະນາສຳລັບ \"Platform-as-a-Service\" ຫຼື \"PaaS\", " +"ທ່ານຄວນປະຕິບັດຕາມຄູ່ມືການເຮັດແພັກເກດຂອງພວກເຂົາ. ແພລັດຟອມປະເພດນີ້ຈະເບິ່ງແຍງເລື່ອງການເຮັດແພັກເກດ " +"ແລະ ການຕິດຕັ້ງໃຫ້, ຕາບໃດທີ່ທ່ານປະຕິບັດຕາມຮູບແບບຂອງພວກເຂົາ. " +"ຊອບແວສ່ວນໃຫຍ່ບໍ່ໄດ້ເໝາະສົມກັບຮູບແບບເຫຼົ່ານີ້ສະເໝີໄປ, ດັ່ງນັ້ນຈຶ່ງມີຕົວເລືອກອື່ນໆຢູ່ລຸ່ມນີ້." + +#: ../source/overview.rst:205 +msgid "" +"If you're developing software that will be deployed to machines you own, " +"users' personal computers, or any other arrangement, read on." +msgstr "" +"ຖ້າທ່ານກຳລັງພັດທະນາຊອບແວທີ່ຈະຖືກຕິດຕັ້ງໃນເຄື່ອງຂອງທ່ານເອງ, ຄອມພິວເຕີສ່ວນຕົວຂອງຜູ້ໃຊ້ ຫຼື ຮູບແບບອື່ນໆ, " +"ໃຫ້ອ່ານຕໍ່." + +#: ../source/overview.rst:209 +msgid "Web browsers and mobile applications" +msgstr "ເວັບບຣາວເຊີ ແລະ ແອັບພລິເຄຊັນເທິງມືຖື" + +#: ../source/overview.rst:211 +msgid "" +"Python's steady advances are leading it into new spaces. These days you can " +"write a mobile app or web application frontend in Python. While the language " +"may be familiar, the packaging and deployment practices are brand new." +msgstr "" +"ຄວາມກ້າວໜ້າຢ່າງຕໍ່ເນື່ອງຂອງ Python ກຳລັງນຳພາມັນໄປສູ່ພື້ນທີ່ໃໝ່ໆ. ໃນທຸກມື້ນີ້ ທ່ານສາມາດຂຽນແອັບມືຖື ຫຼື " +"ສ່ວນໜ້າຂອງເວັບແອັບພລິເຄຊັນດ້ວຍ Python ໄດ້. ເຖິງແມ່ນວ່າພາສາຈະຄຸ້ນເຄີຍ, ແຕ່ວິທີການເຮັດແພັກເກດ ແລະ " +"ການຕິດຕັ້ງນັ້ນແມ່ນສິ່ງໃໝ່ທັງໝົດ." + +#: ../source/overview.rst:216 +msgid "" +"If you're planning on releasing to these new frontiers, you'll want to check " +"out the following frameworks, and refer to their packaging guides:" +msgstr "" +"ຖ້າທ່ານມີແຜນທີ່ຈະເຜີຍແຜ່ໄປສູ່ຂົງເຂດໃໝ່ເຫຼົ່ານີ້, ທ່ານຄວນກວດເບິ່ງເຟຣມເວີກຕໍ່ໄປນີ້ ແລະ " +"ອ້າງອີງຕາມຄູ່ມືການເຮັດແພັກເກດຂອງພວກເຂົາ:" + +#: ../source/overview.rst:220 +msgid "`Kivy `_" +msgstr "" + +#: ../source/overview.rst:221 +msgid "`Beeware `_" +msgstr "`Beeware `_" + +#: ../source/overview.rst:222 +msgid "`Brython `_" +msgstr "`Brython `_" + +#: ../source/overview.rst:223 +msgid "`Flexx `_" +msgstr "" + +#: ../source/overview.rst:225 +msgid "" +"If you are *not* interested in using a framework or platform, or just wonder " +"about some of the technologies and techniques utilized by the frameworks " +"above, continue reading below." +msgstr "" +"ຖ້າທ່ານ *ບໍ່* ສົນໃຈທີ່ຈະໃຊ້ເຟຣມເວີກ ຫຼື ແພລັດຟອມ, ຫຼື ພຽງແຕ່ສົງໄສກ່ຽວກັບເຕັກໂນໂລຊີ ແລະ " +"ເຕັກນິກບາງຢ່າງທີ່ໃຊ້ໂດຍເຟຣມເວີກຂ້າງເທິງ, ໃຫ້ອ່ານຕໍ່ລຸ່ມນີ້." + +#: ../source/overview.rst:230 +msgid "Depending on a pre-installed Python" +msgstr "ການຂຶ້ນກັບ Python ທີ່ຕິດຕັ້ງໄວ້ກ່ອນແລ້ວ" + +#: ../source/overview.rst:232 +msgid "" +"Pick an arbitrary computer, and depending on the context, there's a very " +"good chance Python is already installed. Included by default in most Linux " +"and Mac operating systems for many years now, you can reasonably depend on " +"Python preexisting in your data centers or on the personal machines of " +"developers and data scientists." +msgstr "" +"ຖ້າເລືອກຄອມພິວເຕີໃດໜຶ່ງຂຶ້ນມາ, ມັນມີໂອກາດສູງຫຼາຍທີ່ Python ຈະຖືກຕິດຕັ້ງໄວ້ແລ້ວ. " +"ມັນຖືກລວມມາເປັນພື້ນຖານໃນລະບົບປະຕິບັດການ Linux ແລະ Mac ສ່ວນໃຫຍ່ມາເປັນເວລາຫຼາຍປີແລ້ວ, " +"ທ່ານສາມາດໝັ້ນໃຈໄດ້ວ່າ Python ມີຢູ່ແລ້ວໃນສູນຂໍ້ມູນ ຫຼື ໃນເຄື່ອງສ່ວນຕົວຂອງນັກພັດທະນາ ແລະ " +"ນັກວິທະຍາສາດຂໍ້ມູນ." + +#: ../source/overview.rst:238 +msgid "Technologies which support this model:" +msgstr "ເຕັກໂນໂລຊີທີ່ຮອງຮັບຮູບແບບນີ້:" + +#: ../source/overview.rst:240 +msgid ":gh:`PEX ` (Python EXecutable)" +msgstr ":gh:`PEX ` (Python EXecutable)" + +#: ../source/overview.rst:241 +msgid "" +":doc:`zipapp ` (does not help manage dependencies, " +"requires Python 3.5+)" +msgstr "" +":doc:`zipapp ` (ບໍ່ຊ່ວຍຈັດການສິ່ງທີ່ຕ້ອງໃຊ້ຮ່ວມ (dependencies), " +"ຕ້ອງການ Python 3.5+)" + +#: ../source/overview.rst:242 +msgid ":gh:`shiv ` (requires Python 3)" +msgstr ":gh:`shiv ` (ຕ້ອງການ Python 3)" + +#: ../source/overview.rst:244 +msgid "" +"Of all the approaches here, depending on a pre-installed Python relies the " +"most on the target environment. Of course, this also makes for the smallest " +"package, as small as single-digit megabytes, or even kilobytes." +msgstr "" +"ໃນບັນດາວິທີການທັງໝົດນີ້, ການຂຶ້ນກັບ Python ທີ່ຕິດຕັ້ງໄວ້ກ່ອນແມ່ນອີງໃສ່ສະພາບແວດລ້ອມເປົ້າໝາຍຫຼາຍທີ່ສຸດ. " +"ແນ່ນອນວ່າມັນເຮັດໃຫ້ແພັກເກດມີຂະໜາດນ້ອຍທີ່ສຸດ, ອາດຈະນ້ອຍພຽງແຕ່ບໍ່ກີ່ເມກາໄບ ຫຼື ແມ່ນແຕ່ກິໂລໄບ." + +#: ../source/overview.rst:249 +msgid "" +"In general, decreasing the dependency on the target system increases the " +"size of our package, so the solutions here are roughly arranged by " +"increasing size of output." +msgstr "" +"ໂດຍທົ່ວໄປແລ້ວ, ການຫຼຸດຜ່ອນການຂຶ້ນກັບລະບົບເປົ້າໝາຍຈະເພີ່ມຂະໜາດຂອງແພັກເກດ, " +"ດັ່ງນັ້ນວິທີແກ້ໄຂຢູ່ທີ່ນີ້ຈຶ່ງຖືກຈັດລຽງຕາມຂະໜາດຂອງຜົນຜະລິດທີ່ເພີ່ມຂຶ້ນ." + +#: ../source/overview.rst:256 +msgid "Depending on a separate software distribution ecosystem" +msgstr "ການຂຶ້ນກັບລະບົບນິເວດການແຈກຢາຍຊອບແວແຍກຕ່າງຫາກ" + +#: ../source/overview.rst:258 +msgid "" +"For a long time many operating systems, including Mac and Windows, lacked " +"built-in package management. Only recently did these OSes gain so-called " +"\"app stores\", but even those focus on consumer applications and offer " +"little for developers." +msgstr "" +"ເປັນເວລາດົນນານທີ່ລະບົບປະຕິບັດການຫຼາຍຢ່າງ, ລວມທັງ Mac ແລະ Windows, " +"ບໍ່ມີລະບົບຈັດການແພັກເກດໃນຕົວ. ຫວ່າງບໍ່ດົນມານີ້ ລະບົບປະຕິບັດການເຫຼົ່ານີ້ຈຶ່ງມີສິ່ງທີ່ເອີ້ນວ່າ \"app " +"stores\", ແຕ່ພວກມັນກໍເນັ້ນໃສ່ແອັບພລິເຄຊັນສຳລັບຜູ້ໃຊ້ທົ່ວໄປ ແລະ ໃຫ້ປະໂຫຍດໜ້ອຍສຳລັບນັກພັດທະນາ." + +#: ../source/overview.rst:263 +msgid "" +"Developers long sought remedies, and in this struggle, emerged with their " +"own package management solutions, such as `Homebrew `_. " +"The most relevant alternative for Python developers is a package ecosystem " +"called `Anaconda `_. Anaconda is built around Python and is " +"increasingly common in academic, analytical, and other data-oriented " +"environments, even making its way `into server-oriented environments " +"`_." +msgstr "" +"ນັກພັດທະນາໄດ້ຊອກຫາວິທີແກ້ໄຂມາເປັນເວລາດົນນານ, ແລະ ໃນການຕໍ່ສູ້ນີ້, " +"ກໍໄດ້ເກີດມີລະບົບຈັດການແພັກເກດຂອງຕົນເອງ ເຊັ່ນ `Homebrew`. ທາງເລືອກທີ່ກ່ຽວຂ້ອງທີ່ສຸດສຳລັບນັກພັດທະນາ " +"Python ແມ່ນລະບົບນິເວດແພັກເກດທີ່ເອີ້ນວ່າ `Anaconda`. Anaconda ຖືກສ້າງຂຶ້ນອ້ອມຮອບ Python ແລະ " +"ເປັນທີ່ນິຍົມຫຼາຍຂຶ້ນໃນດ້ານວິຊາການ, ການວິເຄາະ ແລະ ສະພາບແວດລ້ອມທີ່ເນັ້ນຂໍ້ມູນອື່ນໆ." + +#: ../source/overview.rst:273 +msgid "Instructions on building and publishing for the Anaconda ecosystem:" +msgstr "ຄຳແນະນຳໃນການບິວ ແລະ ເຜີຍແຜ່ສຳລັບລະບົບນິເວດ Anaconda:" + +#: ../source/overview.rst:275 +msgid "" +"`Building libraries and applications with conda `_" +msgstr "" +"`ການສ້າງໄລບຣາຣີ ແລະ ແອັບພລິເຄຊັນດ້ວຍ conda `_" + +#: ../source/overview.rst:276 +msgid "" +"`Transitioning a native Python package to Anaconda `_" +msgstr "" +"`ການປ່ຽນແພັກເກດ Python ພື້ນຖານໄປເປັນ Anaconda `_" + +#: ../source/overview.rst:278 +msgid "" +"A similar model involves installing an alternative Python distribution, but " +"does not support arbitrary operating system-level packages:" +msgstr "" +"ຮູບແບບທີ່ຄ້າຍຄືກັນແມ່ນການຕິດຕັ້ງການແຈກຢາຍ Python ທາງເລືອກອື່ນ, " +"ແຕ່ບໍ່ຮອງຮັບແພັກເກດໃນລະດັບລະບົບປະຕິບັດການທົ່ວໄປ:" + +#: ../source/overview.rst:282 +msgid "" +"`ActiveState ActivePython `_" +msgstr "" +"`ActiveState ActivePython `_" + +#: ../source/overview.rst:283 +msgid "`WinPython `_" +msgstr "`WinPython `_" + +#: ../source/overview.rst:288 +msgid "Bringing your own Python executable" +msgstr "ການນຳໃຊ້ໄຟລ໌ລັນ (executable) ຂອງ Python ເອງ" + +#: ../source/overview.rst:290 +msgid "" +"Computing as we know it is defined by the ability to execute programs. Every " +"operating system natively supports one or more formats of programs they can " +"natively execute." +msgstr "" +"ການຄຳນວນຕາມທີ່ພວກເຮົາຮູ້ແມ່ນຖືກກຳນົດໂດຍຄວາມສາມາດໃນການປະມວນຜົນໂປຣແກຣມ. " +"ທຸກໆລະບົບປະຕິບັດການຮອງຮັບຮູບແບບໂປຣແກຣມໜຶ່ງ ຫຼື ຫຼາຍຮູບແບບທີ່ພວກມັນສາມາດປະມວນຜົນໄດ້ໂດຍກົງ." + +#: ../source/overview.rst:294 +msgid "" +"There are many techniques and technologies which turn your Python program " +"into one of these formats, most of which involve embedding the Python " +"interpreter and any other dependencies into a single executable file." +msgstr "" +"ມີຫຼາຍເຕັກນິກ ແລະ ເຕັກໂນໂລຊີທີ່ປ່ຽນໂປຣແກຣມ Python ຂອງທ່ານໃຫ້ເປັນໜຶ່ງໃນຮູບແບບເຫຼົ່ານີ້, " +"ເຊິ່ງສ່ວນໃຫຍ່ກ່ຽວຂ້ອງກັບການຝັງຕົວແປພາສາ (interpreter) ຂອງ Python ແລະ " +"ສິ່ງທີ່ຕ້ອງໃຊ້ຮ່ວມອື່ນໆລົງໃນໄຟລ໌ລັນດຽວ." + +#: ../source/overview.rst:299 +msgid "" +"This approach, called *freezing*, offers wide compatibility and seamless " +"user experience, though often requires multiple technologies, and a good " +"amount of effort." +msgstr "" +"ວິທີການນີ້, ທີ່ເອີ້ນວ່າ *freezing*, ໃຫ້ຄວາມເຂົ້າກັນໄດ້ທີ່ກວ້າງຂວາງ ແລະ ປະສົບການຜູ້ໃຊ້ທີ່ຕໍ່ເນື່ອງ, " +"ເຖິງແມ່ນວ່າມັກຈະຕ້ອງໃຊ້ຫຼາຍເຕັກໂນໂລຊີ ແລະ ຄວາມພະຍາຍາມຫຼາຍພໍສົມຄວນ." + +#: ../source/overview.rst:303 +msgid "A selection of Python freezers:" +msgstr "ຕົວເລືອກຂອງເຄື່ອງມື Python freezer:" + +#: ../source/overview.rst:305 +msgid "" +"`pyInstaller `_ - Cross-" +"platform" +msgstr "" +"`pyInstaller `_ - ຫຼາຍແພລັດຟອມ " +"(Cross-platform)" + +#: ../source/overview.rst:306 +msgid "" +"`cx_Freeze `_ - Cross-platform" +msgstr "" +"`cx_Freeze `_ - ຫຼາຍແພລັດຟອມ " +"(Cross-platform)" + +#: ../source/overview.rst:307 +msgid "" +"`constructor `_ - For command-line " +"installers" +msgstr "" +"`constructor `_ - ສຳລັບຕົວຕິດຕັ້ງແບບຄຳສັ່ງ " +"(command-line)" + +#: ../source/overview.rst:308 +msgid "`py2exe `_ - Windows only" +msgstr "`py2exe `_ - ສະເພາະ Windows" + +#: ../source/overview.rst:309 +msgid "`py2app `_ - Mac only" +msgstr "`py2app `_ - ສະເພາະ Mac" + +#: ../source/overview.rst:310 +msgid "`osnap `_ - Windows and Mac" +msgstr "`osnap `_ - Windows ແລະ Mac" + +#: ../source/overview.rst:311 +msgid "`pynsist `_ - Windows only" +msgstr "`pynsist `_ - ສະເພາະ Windows" + +#: ../source/overview.rst:313 +msgid "" +"Most of the above imply single-user deployments. For multi-component server " +"applications, see :gh:`Chef Omnibus `." +msgstr "" +"ສ່ວນໃຫຍ່ຂ້າງເທິງນັ້ນແມ່ນສຳລັບການຕິດຕັ້ງໃຫ້ຜູ້ໃຊ້ຄົນດຽວ. ສຳລັບແອັບພລິເຄຊັນເຊີເວີທີ່ມີຫຼາຍສ່ວນປະກອບ, " +"ໃຫ້ເບິ່ງ :gh:`Chef Omnibus`." + +#: ../source/overview.rst:319 +msgid "Bringing your own userspace" +msgstr "ການນຳໃຊ້ userspace ຂອງຕົນເອງ" + +#: ../source/overview.rst:321 +msgid "" +"An increasing number of operating systems -- including Linux, Mac OS, and " +"Windows -- can be set up to run applications packaged as lightweight images, " +"using a relatively modern arrangement often referred to as `operating-system-" +"level virtualization `_, or *containerization*." +msgstr "" +"ລະບົບປະຕິບັດການຈຳນວນຫຼາຍຂຶ້ນ ລວມທັງ Linux, Mac OS ແລະ Windows " +"ສາມາດຖືກຕັ້ງຄ່າໃຫ້ລັນແອັບພລິເຄຊັນທີ່ເຮັດແພັກເກດເປັນອິເມຈ (image) ຂະໜາດເບົາ, " +"ໂດຍໃຊ້ວິທີການທີ່ທັນສະໄໝທີ່ເອີ້ນວ່າ `operating-system-level virtualization` ຫຼື " +"*containerization*." + +#: ../source/overview.rst:328 +msgid "" +"These techniques are mostly Python agnostic, because they package whole OS " +"filesystems, not just Python or Python packages." +msgstr "" +"ເຕັກນິກເຫຼົ່ານີ້ສ່ວນໃຫຍ່ບໍ່ຂຶ້ນກັບ Python ໂດຍກົງ, " +"ເພາະວ່າພວກມັນເຮັດແພັກເກດທັງໝົດຂອງລະບົບໄຟລ໌ລະບົບປະຕິບັດການ, ບໍ່ແມ່ນພຽງແຕ່ Python ຫຼື ແພັກເກດ " +"Python." + +#: ../source/overview.rst:331 +msgid "" +"Adoption is most extensive among Linux servers, where the technology " +"originated and where the technologies below work best:" +msgstr "" +"ການນຳໃຊ້ແມ່ນມີຄວາມແຜ່ຫຼາຍທີ່ສຸດໃນບັນດາເຊີເວີ Linux, ເຊິ່ງເປັນບ່ອນທີ່ເຕັກໂນໂລຊີນີ້ກຳເນີດຂຶ້ນ ແລະ " +"ເປັນບ່ອນທີ່ເຕັກໂນໂລຊີລຸ່ມນີ້ເຮັດວຽກໄດ້ດີທີ່ສຸດ:" + +#: ../source/overview.rst:334 +msgid "`AppImage `_" +msgstr "`AppImage `_" + +#: ../source/overview.rst:335 +msgid "`Docker `_" +msgstr "`Docker `_" + +#: ../source/overview.rst:336 +msgid "`Flatpak `_" +msgstr "`Flatpak `_" + +#: ../source/overview.rst:337 +msgid "`Snapcraft `_" +msgstr "`Snapcraft `_" + +#: ../source/overview.rst:340 +msgid "Bringing your own kernel" +msgstr "ການນຳໃຊ້ເຄີເນີນ (kernel) ຂອງຕົນເອງ" + +#: ../source/overview.rst:342 +msgid "" +"Most desktop operating systems support some form of classical " +"virtualization, running applications packaged as images containing a full " +"operating system of their own. Running these virtual machines, or VMs, is a " +"mature approach, widespread in data center environments." +msgstr "" +"ລະບົບປະຕິບັດການຄອມພິວເຕີສ່ວນໃຫຍ່ຮອງຮັບການເຮັດ virtualization ແບບດັ້ງເດີມ, " +"ໂດຍລັນແອັບພລິເຄຊັນທີ່ເຮັດແພັກເກດເປັນອິເມຈທີ່ມີລະບົບປະຕິບັດການຂອງຕົນເອງຢ່າງສົມບູນ. " +"ການລັນເຄື່ອງຈຳລອງເຫຼົ່ານີ້ ຫຼື VMs ແມ່ນວິທີການທີ່ໝັ້ນຄົງ ແລະ ແຜ່ຫຼາຍໃນສະພາບແວດລ້ອມສູນຂໍ້ມູນ." + +#: ../source/overview.rst:347 +msgid "" +"These techniques are mostly reserved for larger scale deployments in data " +"centers, though certain complex applications can benefit from this " +"packaging. The technologies are Python agnostic, and include:" +msgstr "" +"ເຕັກນິກເຫຼົ່ານີ້ສ່ວນໃຫຍ່ແມ່ນສະຫງວນໄວ້ສຳລັບການຕິດຕັ້ງຂະໜາດໃຫຍ່ໃນສູນຂໍ້ມູນ, " +"ເຖິງແມ່ນວ່າແອັບພລິເຄຊັນທີ່ຊັບຊ້ອນບາງຢ່າງສາມາດໄດ້ຮັບຜົນປະໂຫຍດຈາກການເຮັດແພັກເກດນີ້. " +"ເຕັກໂນໂລຊີເຫຼົ່ານີ້ບໍ່ຂຶ້ນກັບ Python ໂດຍກົງ ແລະ ລວມມີ:" + +#: ../source/overview.rst:351 +msgid "KVM on Linux" +msgstr "KVM ເທິງ Linux" + +#: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "Hyper-V ເທິງ Windows" + +#: ../source/overview.rst:353 +msgid "" +"`VHD `_, `AMI `_, and :doc:`other formats " +"`" +msgstr "`VHD`, `AMI` ແລະ :doc:`ຮູບແບບອື່ນໆ `" + +#: ../source/overview.rst:356 +msgid "" +"`OpenStack `_ - A cloud " +"management system written in Python, with extensive VM support" +msgstr "" +"`OpenStack `_ - ລະບົບຈັດການຄລາວ " +"(cloud) ທີ່ຂຽນດ້ວຍ Python, ພ້ອມການຮອງຮັບ VM ທີ່ກວ້າງຂວາງ" + +#: ../source/overview.rst:360 +msgid "Bringing your own hardware" +msgstr "ການນຳໃຊ້ຮາດແວຂອງຕົນເອງ" + +#: ../source/overview.rst:362 +msgid "" +"The most all-encompassing way to ship your software would be to ship it " +"already-installed on some hardware. This way, your software's user would " +"require only electricity." +msgstr "" +"ວິທີການທີ່ຄອບຄຸມທີ່ສຸດໃນການສົ່ງມອບຊອບແວຂອງທ່ານແມ່ນການສົ່ງມອບມັນພ້ອມກັບການຕິດຕັ້ງໄວ້ລ່ວງໜ້າໃນຮາດແວບາງຢ່າງ. " +"ດ້ວຍວິທີນີ້, ຜູ້ໃຊ້ຊອບແວຂອງທ່ານຈະຕ້ອງການພຽງແຕ່ໄຟຟ້າເທົ່ານັ້ນ." + +#: ../source/overview.rst:366 +msgid "" +"Whereas the virtual machines described above are primarily reserved for the " +"tech-savvy, you can find hardware appliances being used by everyone from the " +"most advanced data centers to the youngest children." +msgstr "" +"ໃນຂະນະທີ່ເຄື່ອງຈຳລອງທີ່ກ່າວມາຂ້າງເທິງສ່ວນໃຫຍ່ແມ່ນສະຫງວນໄວ້ສຳລັບຜູ້ທີ່ມີຄວາມຮູ້ດ້ານເຕັກນິກ, " +"ແຕ່ທ່ານສາມາດພົບເຫັນອຸປະກອນຮາດແວທີ່ຖືກໃຊ້ໂດຍທຸກຄົນ ຕັ້ງແຕ່ສູນຂໍ້ມູນທີ່ທັນສະໄໝທີ່ສຸດຈົນເຖິງເດັກນ້ອຍ." + +#: ../source/overview.rst:370 +msgid "" +"Embed your code on an :gh:`Adafruit `, `MicroPython " +"`_, or more-powerful hardware running Python, then " +"ship it to the datacenter or your users' homes. They plug and play, and you " +"can call it a day." +msgstr "" +"ຝັງໂຄດຂອງທ່ານລົງໃນ :gh:`Adafruit`, `MicroPython` ຫຼື ຮາດແວທີ່ມີປະສິດທິພາບສູງກວ່າທີ່ລັນ " +"Python, ຈາກນັ້ນສົ່ງມອບມັນໃຫ້ກັບສູນຂໍ້ມູນ ຫຼື ບ້ານຂອງຜູ້ໃຊ້. ພວກເຂົາພຽງແຕ່ສຽບປລັກແລ້ວກໍໃຊ້ງານໄດ້ເລີຍ." + +#: ../source/overview.rst:379 +msgid "A summary of technologies used to package Python applications." +msgstr "ບົດສະຫຼຸບຂອງເຕັກໂນໂລຊີທີ່ໃຊ້ເພື່ອເຮັດແພັກເກດແອັບພລິເຄຊັນ Python." + +#: ../source/overview.rst:379 +msgid "" +"The simplified gamut of technologies used to package Python applications." +msgstr "ລະດັບເຕັກໂນໂລຊີທີ່ເຮັດໃຫ້ງ່າຍຂຶ້ນເຊິ່ງໃຊ້ໃນການເຮັດແພັກເກດແອັບພລິເຄຊັນ Python." + +#: ../source/overview.rst:382 +msgid "What about..." +msgstr "ແລ້ວກ່ຽວກັບ..." + +#: ../source/overview.rst:384 +msgid "" +"The sections above can only summarize so much, and you might be wondering " +"about some of the more conspicuous gaps." +msgstr "" +"ສ່ວນຕ່າງໆຂ້າງເທິງສາມາດສະຫຼຸບໄດ້ພຽງແຕ່ບາງສ່ວນ, ແລະ " +"ທ່ານອາດຈະສົງໄສກ່ຽວກັບຊ່ອງຫວ່າງທີ່ເຫັນໄດ້ແຈ້ງບາງຢ່າງ." + +#: ../source/overview.rst:388 +msgid "Operating system packages" +msgstr "ແພັກເກດລະບົບປະຕິບັດການ" + +#: ../source/overview.rst:390 +msgid "" +"As mentioned in :ref:`depending-on-a-separate-ecosystem` above, some " +"operating systems have package managers of their own. If you're very sure of " +"the operating system you're targeting, you can depend directly on a format " +"like `deb `_ (for Debian, " +"Ubuntu, etc.) or `RPM `_ " +"(for Red Hat, Fedora, etc.), and use that built-in package manager to take " +"care of installation, and even deployment. You can even use `FPM `_ to generate " +"both deb and RPMs from the same source." +msgstr "" +"ດັ່ງທີ່ກ່າວໄວ້ຂ້າງເທິງ, ບາງລະບົບປະຕິບັດການມີຕົວຈັດການແພັກເກດຂອງຕົນເອງ. " +"ຖ້າທ່ານໝັ້ນໃຈໃນລະບົບປະຕິບັດການທີ່ທ່ານກຳລັງເປົ້າໝາຍ, ທ່ານສາມາດອີງໃສ່ຮູບແບບໂດຍກົງເຊັ່ນ `deb` (ສຳລັບ " +"Debian, Ubuntu ແລະ ອື່ນໆ) ຫຼື `RPM` (ສຳລັບ Red Hat, Fedora ແລະ ອື່ນໆ) ແລະ " +"ໃຊ້ຕົວຈັດການແພັກເກດໃນຕົວນັ້ນເພື່ອເບິ່ງແຍງການຕິດຕັ້ງ ແລະ ການໃຊ້ງານ. ທ່ານຍັງສາມາດໃຊ້ `FPM` " +"ເພື່ອສ້າງທັງ deb ແລະ RPM ຈາກຊອສດຽວກັນ." + +#: ../source/overview.rst:401 +msgid "" +"In most deployment pipelines, the OS package manager is just one piece of " +"the puzzle." +msgstr "ໃນຂະບວນການຕິດຕັ້ງສ່ວນໃຫຍ່, ຕົວຈັດການແພັກເກດຂອງ OS ເປັນພຽງສ່ວນໜຶ່ງຂອງພາບລວມທັງໝົດ." + +#: ../source/overview.rst:407 +msgid "" +":doc:`Virtualenvs ` have been an indispensable " +"tool for multiple generations of Python developer, but are slowly fading " +"from view, as they are being wrapped by higher-level tools. With packaging " +"in particular, virtualenvs are used as a primitive in :doc:`the dh-" +"virtualenv tool ` and `osnap `_, both of which wrap virtualenvs in a self-contained way." +msgstr "" +":doc:`Virtualenvs` ເປັນເຄື່ອງມືທີ່ຂາດບໍ່ໄດ້ສຳລັບນັກພັດທະນາ Python ຫຼາຍລຸ້ນຄົນ, " +"ແຕ່ກຳລັງຄ່ອຍໆຖືກແທນທີ່ດ້ວຍເຄື່ອງມືລະດັບສູງກວ່າ. ໃນການເຮັດແພັກເກດ, virtualenvs " +"ຖືກໃຊ້ເປັນພື້ນຖານໃນເຄື່ອງມືເຊັ່ນ `dh-virtualenv` ແລະ `osnap`." + +#: ../source/overview.rst:416 +msgid "" +"For production deployments, do not rely on running ``python -m pip install`` " +"from the Internet into a virtualenv, as one might do in a development " +"environment. The overview above is full of much better solutions." +msgstr "" +"ສຳລັບການຕິດຕັ້ງໃຊ້ງານຈິງ, ຢ່າເພິ່ງພາການລັນ ``python -m pip install`` ຈາກອິນເຕີເນັດລົງໃນ " +"virtualenv ຄືກັບທີ່ເຮັດໃນສະພາບແວດລ້ອມການພັດທະນາ. ພາບລວມຂ້າງເທິງມີວິທີແກ້ໄຂທີ່ດີກວ່າຫຼາຍ." + +#: ../source/overview.rst:421 +msgid "Security" +msgstr "ຄວາມປອດໄພ" + +#: ../source/overview.rst:423 +msgid "" +"The further down the gradient you come, the harder it gets to update " +"components of your package. Everything is more tightly bound together." +msgstr "" +"ຍິ່ງທ່ານເລືອກວິທີທີ່ຢູ່ລະດັບລຸ່ມຫຼາຍເທົ່າໃດ, ມັນກໍຍິ່ງຍາກຂຶ້ນໃນການອັບເດດສ່ວນປະກອບຂອງແພັກເກດຂອງທ່ານ. " +"ທຸກຢ່າງຈະຖືກຜູກມັດເຂົ້າກັນຢ່າງແໜ້ນໜາ." + +#: ../source/overview.rst:426 +msgid "" +"For example, if a kernel security issue emerges, and you're deploying " +"containers, the host system's kernel can be updated without requiring a new " +"build on behalf of the application. If you deploy VM images, you'll need a " +"new build. Whether or not this dynamic makes one option more secure is still " +"a bit of an old debate, going back to the still-unsettled matter of `static " +"versus dynamic linking `_." +msgstr "" +"ຕົວຢ່າງເຊັ່ນ: ຖ້າມີບັນຫາຄວາມປອດໄພຂອງເຄີເນີນເກີດຂຶ້ນ ແລະ ທ່ານກຳລັງໃຊ້ container, " +"ເຄີເນີນຂອງລະບົບໂຮສ (host) ສາມາດອັບເດດໄດ້ໂດຍບໍ່ຕ້ອງສ້າງແພັກເກດແອັບພລິເຄຊັນໃໝ່. ຖ້າທ່ານໃຊ້ VM " +"images, ທ່ານຈະຕ້ອງສ້າງໃໝ່. ຄວາມແຕກຕ່າງນີ້ເຮັດໃຫ້ທາງເລືອກໃດໜຶ່ງປອດໄພກວ່າຫຼືບໍ່ນັ້ນ " +"ຍັງຄົງເປັນຫົວຂໍ້ທີ່ມີການຖົກຖຽງກັນມາແຕ່ດົນນານ." + +#: ../source/overview.rst:435 +msgid "Wrap up" +msgstr "ສະຫຼຸບ" + +#: ../source/overview.rst:437 +msgid "" +"Packaging in Python has a bit of a reputation for being a bumpy ride. This " +"impression is mostly a byproduct of Python's versatility. Once you " +"understand the natural boundaries between each packaging solution, you begin " +"to realize that the varied landscape is a small price Python programmers pay " +"for using one of the most balanced, flexible languages available." +msgstr "" +"ການເຮັດແພັກເກດໃນ Python ມີຊື່ສຽງວ່າຍາກ ແລະ ສັບສົນ. " +"ຄວາມຮູ້ສຶກນີ້ສ່ວນໃຫຍ່ແມ່ນຜົນມາຈາກຄວາມສາມາດທີ່ຫຼາກຫຼາຍຂອງ Python. " +"ເມື່ອທ່ານເຂົ້າໃຈຂອບເຂດຂອງແຕ່ລະວິທີການແລ້ວ, " +"ທ່ານຈະເລີ່ມເຫັນວ່າຄວາມຫຼາກຫຼາຍນີ້ເປັນພຽງລາຄາເລັກນ້ອຍທີ່ນັກຂຽນໂປຣແກຣມ Python ຕ້ອງຈ່າຍ " +"ເພື່ອແລກກັບການໃຊ້ພາສາທີ່ມີຄວາມສົມດຸນ ແລະ ຢືດຢຸ່ນທີ່ສຸດພາສາໜຶ່ງ." + +#: ../source/specifications/binary-distribution-format.rst:7 +msgid "Binary distribution format" +msgstr "ຮູບແບບການແຈກຢາຍແບບບາຍນາຣີ" + +#: ../source/specifications/binary-distribution-format.rst:9 +msgid "" +"This page specifies the binary distribution format for Python packages, also " +"called the wheel format." +msgstr "ໜ້ານີ້ລະບຸຮູບແບບການແຈກຢາຍແບບບາຍນາຣີສຳລັບແພັກເກດ Python, ເຊິ່ງເອີ້ນວ່າຮູບແບບ wheel." + +#: ../source/specifications/binary-distribution-format.rst:12 +msgid "" +"A wheel is a ZIP-format archive with a specially formatted file name and the " +"``.whl`` extension. It contains a single distribution nearly as it would be " +"installed according to PEP 376 with a particular installation scheme. " +"Although a specialized installer is recommended, a wheel file may be " +"installed by simply unpacking into site-packages with the standard 'unzip' " +"tool while preserving enough information to spread its contents out onto " +"their final paths at any later time." +msgstr "" +"wheel ແມ່ນໄຟລ໌ບີບອັດຮູບແບບ ZIP ທີ່ມີການຕັ້ງຊື່ໄຟລ໌ແບບພິເສດ ແລະ ມີນາມສະກຸນ ``.whl``. " +"ມັນບັນຈຸການແຈກຢາຍທີ່ເກືອບຈະພ້ອມຕິດຕັ້ງຕາມ PEP 376. ເຖິງແມ່ນວ່າຈະແນະນຳໃຫ້ໃຊ້ຕົວຕິດຕັ້ງສະເພາະ, " +"ແຕ່ໄຟລ໌ wheel ກໍສາມາດຕິດຕັ້ງໄດ້ໂດຍການແຕກໄຟລ໌ລົງໃນ site-packages ດ້ວຍເຄື່ອງມື 'unzip' " +"ມາດຕະຖານ." + +#: ../source/specifications/binary-distribution-format.rst:22 +msgid "Details" +msgstr "ລາຍລະອຽດ" + +#: ../source/specifications/binary-distribution-format.rst:25 +msgid "Installing a wheel 'distribution-1.0-py32-none-any.whl'" +msgstr "ການຕິດຕັ້ງ wheel 'distribution-1.0-py32-none-any.whl'" + +#: ../source/specifications/binary-distribution-format.rst:27 +msgid "Wheel installation notionally consists of two phases:" +msgstr "ໂດຍຫຼັກການແລ້ວ ການຕິດຕັ້ງ Wheel ປະກອບມີສອງໄລຍະ:" + +#: ../source/specifications/binary-distribution-format.rst:29 +msgid "Unpack." +msgstr "ແຕກໄຟລ໌ (Unpack)." + +#: ../source/specifications/binary-distribution-format.rst:31 +msgid "Parse ``distribution-1.0.dist-info/WHEEL``." +msgstr "ວິເຄາະ (Parse) ``distribution-1.0.dist-info/WHEEL``." + +#: ../source/specifications/binary-distribution-format.rst:32 +msgid "" +"Check that installer is compatible with Wheel-Version. Warn if minor " +"version is greater, abort if major version is greater." +msgstr "" +"ກວດສອບວ່າຕົວຕິດຕັ້ງເຂົ້າກັນໄດ້ກັບ Wheel-Version ຫຼື ບໍ່. ເຕືອນຖ້າເວີຊັນຍ່ອຍສູງກວ່າ, " +"ຍົກເລີກຖ້າເວີຊັນຫຼັກສູງກວ່າ." + +#: ../source/specifications/binary-distribution-format.rst:34 +msgid "" +"If Root-Is-Purelib == 'true', unpack archive into purelib (site-packages)." +msgstr "ຖ້າ Root-Is-Purelib == 'true', ໃຫ້ແຕກໄຟລ໌ລົງໃນ purelib (site-packages)." + +#: ../source/specifications/binary-distribution-format.rst:36 +msgid "Else unpack archive into platlib (site-packages)." +msgstr "ຖ້າບໍ່ດັ່ງນັ້ນ ໃຫ້ແຕກໄຟລ໌ລົງໃນ platlib (site-packages)." + +#: ../source/specifications/binary-distribution-format.rst:38 +msgid "Spread." +msgstr "ກະຈາຍໄຟລ໌ (Spread)." + +#: ../source/specifications/binary-distribution-format.rst:40 +msgid "" +"Unpacked archive includes ``distribution-1.0.dist-info/`` and (if there is " +"data) ``distribution-1.0.data/``." +msgstr "" +"ໄຟລ໌ທີ່ແຕກອອກມາຈະລວມມີ ``distribution-1.0.dist-info/`` ແລະ (ຖ້າມີຂໍ້ມູນ) " +"``distribution-1.0.data/``." + +#: ../source/specifications/binary-distribution-format.rst:42 +msgid "" +"Move each subtree of ``distribution-1.0.data/`` onto its destination path. " +"Each subdirectory of ``distribution-1.0.data/`` is a key into a dict of " +"destination directories, such as ``distribution-1.0.data/(purelib|platlib|" +"headers|scripts|data)``. These subdirectories are :ref:`installation paths " +"defined by sysconfig `." +msgstr "" +"ຍ້າຍແຕ່ລະໂຄງສ້າງຍ່ອຍຂອງ ``distribution-1.0.data/`` ໄປຍັງເສັ້ນທາງປາຍທາງ. " +"ແຕ່ລະໄດເຣັກທໍຣີຍ່ອຍແມ່ນຄີ (key) ໄປຫາໄດເຣັກທໍຣີປາຍທາງ." + +#: ../source/specifications/binary-distribution-format.rst:48 +msgid "" +"If applicable, update scripts starting with ``#!python`` to point to the " +"correct interpreter." +msgstr "" +"ຖ້າເປັນໄປໄດ້, ໃຫ້ອັບເດດສະຄຣິບທີ່ຂຶ້ນຕົ້ນດ້ວຍ ``#!python`` ໃຫ້ຊີ້ໄປຫາຕົວແປພາສາ (interpreter) " +"ທີ່ຖືກຕ້ອງ." + +#: ../source/specifications/binary-distribution-format.rst:50 +msgid "Update ``distribution-1.0.dist-info/RECORD`` with the installed paths." +msgstr "ອັບເດດ ``distribution-1.0.dist-info/RECORD`` ດ້ວຍເສັ້ນທາງທີ່ຕິດຕັ້ງແລ້ວ." + +#: ../source/specifications/binary-distribution-format.rst:52 +msgid "Remove empty ``distribution-1.0.data`` directory." +msgstr "ລົບໄດເຣັກທໍຣີ ``distribution-1.0.data`` ທີ່ວ່າງເປົ່າອອກ." + +#: ../source/specifications/binary-distribution-format.rst:53 +msgid "" +"Compile any installed .py to .pyc. (Uninstallers should be smart enough to " +"remove .pyc even if it is not mentioned in RECORD.)" +msgstr "" +"ຄອມພາຍ (Compile) ໄຟລ໌ .py ທີ່ຕິດຕັ້ງແລ້ວໃຫ້ເປັນ .pyc. " +"(ຕົວຖອນການຕິດຕັ້ງຄວນຈະສະຫຼາດພໍທີ່ຈະລົບ .pyc ອອກ ເຖິງແມ່ນວ່າຈະບໍ່ໄດ້ລະບຸໄວ້ໃນ RECORD ກໍຕາມ.)" + +#: ../source/specifications/binary-distribution-format.rst:57 +msgid "Recommended installer features" +msgstr "ຄຸນສົມບັດທີ່ແນະນຳສຳລັບຕົວຕິດຕັ້ງ" + +#: ../source/specifications/binary-distribution-format.rst:67 +msgid "Rewrite ``#!python``." +msgstr "ຂຽນ ``#!python`` ໃໝ່." + +#: ../source/specifications/binary-distribution-format.rst:60 +msgid "" +"In wheel, scripts are packaged in ``{distribution}-{version}.data/scripts/" +"``. If the first line of a file in ``scripts/`` starts with exactly ``b'#!" +"python'``, rewrite to point to the correct interpreter. Unix installers may " +"need to add the +x bit to these files if the archive was created on Windows." +msgstr "" +"ໃນ wheel, ບັນດາສະຄຣິບຈະຖືກບັນຈຸໄວ້ໃນ ``{distribution}-{version}.data/scripts/``. " +"ຫາກແຖວທຳອິດຂອງໄຟລ໌ໃນ ``scripts/`` ເລີ່ມຕົ້ນດ້ວຍ ``b'#!python'`` ຢ່າງແນ່ນອນ, " +"ໃຫ້ຂຽນຄືນໃໝ່ເພື່ອຊີ້ໄປຫາຕົວແປພາສາທີ່ຖືກຕ້ອງ. ຕົວຕິດຕັ້ງ Unix ອາດຈຳເປັນຕ້ອງເພີ່ມບິດ +x ໃຫ້ກັບໄຟລ໌ເຫຼົ່ານີ້ " +"ຫາກໄຟລ໌ຈັດເກັບຖືກສ້າງຂຶ້ນໃນ Windows." + +#: ../source/specifications/binary-distribution-format.rst:66 +msgid "" +"The ``b'#!pythonw'`` convention is allowed. ``b'#!pythonw'`` indicates a GUI " +"script instead of a console script." +msgstr "" +"ອະນຸຍາດໃຫ້ໃຊ້ຮູບແບບ ``b'#!pythonw'``. ໂດຍ ``b'#!pythonw'`` ບົ່ງບອກເຖິງສະຄຣິບແບບ GUI " +"ແທນທີ່ຈະເປັນສະຄຣິບແບບຄອນໂຊລ (console)." + +#: ../source/specifications/binary-distribution-format.rst:72 +msgid "Generate script wrappers." +msgstr "ສ້າງຕົວຫຸ້ມສະຄຣິບ (script wrappers)." + +#: ../source/specifications/binary-distribution-format.rst:70 +msgid "" +"In wheel, scripts packaged on Unix systems will certainly not have " +"accompanying .exe wrappers. Windows installers may want to add them during " +"install." +msgstr "" +"ໃນ wheel, ສະຄຣິບທີ່ເຮັດແພັກເກດໃນລະບົບ Unix ຈະບໍ່ມີຕົວຫຸ້ມ .exe. ຕົວຕິດຕັ້ງ Windows " +"ອາດຈະຕ້ອງການເພີ່ມພວກມັນໃນລະຫວ່າງການຕິດຕັ້ງ." + +#: ../source/specifications/binary-distribution-format.rst:75 +msgid "Recommended archiver features" +msgstr "ຄຸນສົມບັດທີ່ແນະນຳສຳລັບຕົວຈັດເກັບໄຟລ໌ (archiver)" + +#: ../source/specifications/binary-distribution-format.rst:82 +msgid "Place ``.dist-info`` at the end of the archive." +msgstr "ວາງ ``.dist-info`` ໄວ້ທີ່ສ່ວນທ້າຍຂອງໄຟລ໌ບີບອັດ." + +#: ../source/specifications/binary-distribution-format.rst:78 +msgid "" +"Archivers are encouraged to place the ``.dist-info`` files physically at the " +"end of the archive. This enables some potentially interesting ZIP tricks " +"including the ability to amend the metadata without rewriting the entire " +"archive." +msgstr "" +"ແນະນຳໃຫ້ຕົວຈັດເກັບໄຟລ໌ວາງໄຟລ໌ ``.dist-info`` ໄວ້ທີ່ສ່ວນທ້າຍຂອງໄຟລ໌ບີບອັດ. " +"ສິ່ງນີ້ຊ່ວຍໃຫ້ສາມາດແກ້ໄຂ metadata ໄດ້ໂດຍບໍ່ຕ້ອງຂຽນໄຟລ໌ບີບອັດໃໝ່ທັງໝົດ." + +#: ../source/specifications/binary-distribution-format.rst:85 +#: ../source/specifications/pylock-toml.rst:51 +msgid "File Format" +msgstr "ຮູບແບບໄຟລ໌" + +#: ../source/specifications/binary-distribution-format.rst:90 +msgid "File name convention" +msgstr "ຂໍ້ກຳນົດການຕັ້ງຊື່ໄຟລ໌" + +#: ../source/specifications/binary-distribution-format.rst:92 +msgid "" +"The wheel filename is ``{distribution}-{version}(-{build tag})?-{python tag}-" +"{abi tag}-{platform tag}.whl``." +msgstr "" +"ຊື່ໄຟລ໌ wheel ແມ່ນ ``{distribution}-{version}(-{build tag})?-{python tag}-{abi " +"tag}-{platform tag}.whl``." + +#: ../source/specifications/binary-distribution-format.rst:96 +msgid "distribution" +msgstr "ການແຈກຢາຍ (distribution)" + +#: ../source/specifications/binary-distribution-format.rst:96 +msgid "Distribution name, e.g. 'django', 'pyramid'." +msgstr "ຊື່ການແຈກຢາຍ, ເຊັ່ນ: 'django', 'pyramid'." + +#: ../source/specifications/binary-distribution-format.rst:99 +msgid "version" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:99 +msgid "Distribution version, e.g. 1.0." +msgstr "ເວີຊັນຂອງການແຈກຢາຍ, ເຊັ່ນ: 1.0." + +#: ../source/specifications/binary-distribution-format.rst:124 +msgid "build tag" +msgstr "ແທັກການບິວ (build tag)" + +#: ../source/specifications/binary-distribution-format.rst:102 +msgid "" +"Optional build number. Must start with a digit. Acts as a tie-breaker if " +"two wheel file names are the same in all other respects (i.e. name, version, " +"and other tags). Sort as an empty tuple if unspecified, else sort as a two-" +"item tuple with the first item being the initial digits as an ``int``, and " +"the second item being the remainder of the tag as a ``str``." +msgstr "" +"ເລກລຳດັບການບິວ (ບໍ່ບັງຄັບ). ຕ້ອງຂຶ້ນຕົ້ນດ້ວຍຕົວເລກ. ໃຊ້ເພື່ອແຍກຄວາມແຕກຕ່າງຫາກຊື່ໄຟລ໌ wheel " +"ອື່ນໆຄືກັນໝົດ." + +#: ../source/specifications/binary-distribution-format.rst:109 +msgid "" +"A common use-case for build numbers is rebuilding a binary distribution due " +"to a change in the build environment, like when using the manylinux image to " +"build distributions using pre-release CPython versions." +msgstr "" +"ກໍລະນີທົ່ວໄປສຳລັບການໃຊ້ເລກການບິວແມ່ນການບິວການແຈກຢາຍແບບບາຍນາຣີໃໝ່ " +"ເນື່ອງຈາກການປ່ຽນແປງໃນສະພາບແວດລ້ອມການບິວ." + +#: ../source/specifications/binary-distribution-format.rst:116 +msgid "" +"Build numbers are not a part of the distribution version and thus are " +"difficult to reference externally, especially so outside the Python " +"ecosystem of tools and standards. A common case where a distribution would " +"need to referenced externally is when resolving a security vulnerability." +msgstr "ເລກການບິວບໍ່ແມ່ນສ່ວນໜຶ່ງຂອງເວີຊັນການແຈກຢາຍ ແລະ ຍາກທີ່ຈະອ້າງອີງຈາກພາຍນອກ." + +#: ../source/specifications/binary-distribution-format.rst:121 +msgid "" +"Due to this limitation, new distributions which need to be referenced " +"externally **should not** use build numbers when building the new " +"distribution. Instead a **new distribution version** should be created for " +"such cases." +msgstr "" +"ເນື່ອງຈາກຂໍ້ຈຳກັດນີ້, ການແຈກຢາຍໃໝ່ທີ່ຕ້ອງມີການອ້າງອີງຈາກພາຍນອກ **ບໍ່ຄວນ** ໃຊ້ເລກການບິວ. " +"ແຕ່ຄວນສ້າງ **ເວີຊັນການແຈກຢາຍໃໝ່** ແທນ." + +#: ../source/specifications/binary-distribution-format.rst:127 +msgid "language implementation and version tag" +msgstr "ແທັກການເຮັດວຽກຂອງພາສາ ແລະ ເວີຊັນ" + +#: ../source/specifications/binary-distribution-format.rst:127 +msgid "E.g. 'py27', 'py2', 'py3'." +msgstr "ເຊັ່ນ: 'py27', 'py2', 'py3'." + +#: ../source/specifications/binary-distribution-format.rst:130 +#: ../source/specifications/platform-compatibility-tags.rst:20 +msgid "abi tag" +msgstr "ແທັກ ABI" + +#: ../source/specifications/binary-distribution-format.rst:130 +msgid "E.g. 'cp33m', 'abi3', 'none'." +msgstr "ເຊັ່ນ: 'cp33m', 'abi3', 'none'." + +#: ../source/specifications/binary-distribution-format.rst:133 +#: ../source/specifications/platform-compatibility-tags.rst:23 +msgid "platform tag" +msgstr "ແທັກແພລັດຟອມ (platform tag)" + +#: ../source/specifications/binary-distribution-format.rst:133 +msgid "E.g. 'linux_x86_64', 'any'." +msgstr "ເຊັ່ນ: 'linux_x86_64', 'any'." + +#: ../source/specifications/binary-distribution-format.rst:135 +msgid "" +"For example, ``distribution-1.0-1-py27-none-any.whl`` is the first build of " +"a package called 'distribution', and is compatible with Python 2.7 (any " +"Python 2.7 implementation), with no ABI (pure Python), on any CPU " +"architecture." +msgstr "" +"ຕົວຢ່າງ: ``distribution-1.0-1-py27-none-any.whl`` ແມ່ນການບິວຄັ້ງທຳອິດຂອງແພັກເກດ " +"'distribution', ເຊິ່ງເຂົ້າກັນໄດ້ກັບ Python 2.7, ບໍ່ມີ ABI (pure Python), " +"ເທິງສະຖາປັດຕະຍະກຳ CPU ໃດກໍໄດ້." + +#: ../source/specifications/binary-distribution-format.rst:140 +msgid "" +"The last three components of the filename before the extension are called " +"\"compatibility tags.\" The compatibility tags express the package's basic " +"interpreter requirements and are detailed in PEP 425." +msgstr "" +"ສາມສ່ວນປະກອບສຸດທ້າຍຂອງຊື່ໄຟລ໌ກ່ອນນາມສະກຸນເອີ້ນວ່າ \"compatibility tags\" " +"(ແທັກຄວາມເຂົ້າກັນໄດ້)." + +#: ../source/specifications/binary-distribution-format.rst:145 +msgid "Escaping and Unicode" +msgstr "ການໃຊ້ Escaping ແລະ Unicode" + +#: ../source/specifications/binary-distribution-format.rst:147 +msgid "" +"As the components of the filename are separated by a dash (``-``, HYPHEN-" +"MINUS), this character cannot appear within any component. This is handled " +"as follows:" +msgstr "" +"ເນື່ອງຈາກສ່ວນປະກອບຂອງຊື່ໄຟລ໌ຖືກແຍກດ້ວຍເຄື່ອງໝາຍຂີດ (``-``), " +"ຕົວອັກສອນນີ້ຈຶ່ງບໍ່ສາມາດປາກົດຢູ່ພາຍໃນສ່ວນປະກອບໃດໜຶ່ງໄດ້. ສິ່ງນີ້ຖືກຈັດການດັ່ງນີ້:" + +#: ../source/specifications/binary-distribution-format.rst:150 +msgid "" +"In distribution names, any run of ``-_.`` characters (HYPHEN-MINUS, LOW LINE " +"and FULL STOP) should be replaced with ``_`` (LOW LINE), and uppercase " +"characters should be replaced with corresponding lowercase ones. This is " +"equivalent to regular :ref:`name normalization ` " +"followed by replacing ``-`` with ``_``. Tools consuming wheels must be " +"prepared to accept ``.`` (FULL STOP) and uppercase letters, however, as " +"these were allowed by an earlier version of this specification." +msgstr "" +"ໃນຊື່ການແຈກຢາຍ, ຕົວອັກສອນ ``-_.`` ຄວນຖືກແທນທີ່ດ້ວຍ ``_`` ແລະ " +"ຕົວອັກສອນໃຫຍ່ຄວນຖືກແທນທີ່ດ້ວຍຕົວອັກສອນນ້ອຍ." + +#: ../source/specifications/binary-distribution-format.rst:157 +msgid "" +"Version numbers should be normalised according to the :ref:`Version " +"specifier specification `. Normalised version numbers " +"cannot contain ``-``." +msgstr "" +"ເລກເວີຊັນຄວນຖືກເຮັດໃຫ້ເປັນມາດຕະຖານ (normalised). " +"ເລກເວີຊັນທີ່ເປັນມາດຕະຖານແລ້ວບໍ່ສາມາດມີເຄື່ອງໝາຍ ``-``." + +#: ../source/specifications/binary-distribution-format.rst:159 +msgid "" +"The remaining components may not contain ``-`` characters, so no escaping is " +"necessary." +msgstr "ສ່ວນປະກອບທີ່ເຫຼືອອາດຈະບໍ່ມີຕົວອັກສອນ ``-``, ດັ່ງນັ້ນຈຶ່ງບໍ່ຈຳເປັນຕ້ອງໃຊ້ escaping." + +#: ../source/specifications/binary-distribution-format.rst:162 +msgid "" +"Tools producing wheels should verify that the filename components do not " +"contain ``-``, as the resulting file may not be processed correctly if they " +"do." +msgstr "ເຄື່ອງມືທີ່ສ້າງ wheel ຄວນກວດສອບວ່າສ່ວນປະກອບຂອງຊື່ໄຟລ໌ບໍ່ມີ ``-``." + +#: ../source/specifications/binary-distribution-format.rst:165 +msgid "" +"The archive filename is Unicode. It will be some time before the tools are " +"updated to support non-ASCII filenames, but they are supported in this " +"specification." +msgstr "" +"ຊື່ໄຟລ໌ບີບອັດແມ່ນ Unicode. ເຖິງວ່າຈະຕ້ອງໃຊ້ເວລາອີກໄລຍະໜຶ່ງກ່ອນທີ່ເຄື່ອງມືຕ່າງໆຈະຮອງຮັບຊື່ໄຟລ໌ທີ່ບໍ່ແມ່ນ " +"ASCII, ແຕ່ພວກມັນກໍໄດ້ຮັບການຮອງຮັບໃນຂໍ້ກຳນົດນີ້." + +#: ../source/specifications/binary-distribution-format.rst:169 +msgid "" +"The filenames *inside* the archive are encoded as UTF-8. Although some ZIP " +"clients in common use do not properly display UTF-8 filenames, the encoding " +"is supported by both the ZIP specification and Python's ``zipfile``." +msgstr "ຊື່ໄຟລ໌ *ພາຍໃນ* ໄຟລ໌ບີບອັດຖືກເຂົ້າລະຫັດເປັນ UTF-8." + +#: ../source/specifications/binary-distribution-format.rst:175 +msgid "File contents" +msgstr "ເນື້ອໃນໄຟລ໌" + +#: ../source/specifications/binary-distribution-format.rst:177 +msgid "" +"The contents of a wheel file, where {distribution} is replaced with " +"the :ref:`normalized name ` of the package, e.g. " +"``beaglevote`` and {version} is replaced with its :ref:`normalized version " +"`, e.g. ``1.0.0``, (with dash/``-`` " +"characters replaced with underscore/``_`` characters in both fields) consist " +"of:" +msgstr "" +"ເນື້ອໃນຂອງໄຟລ໌ wheel, ໂດຍທີ່ {distribution} ຖືກແທນທີ່ດ້ວຍ :ref:`ຊື່ທີ່ປັບໃຫ້ເປັນມາດຕະຖານ " +"` ຂອງແພັກເກດ, ຕົວຢ່າງ: ``beaglevote`` ແລະ {version} " +"ຖືກແທນທີ່ດ້ວຍ :ref:`ເວີຊັນທີ່ປັບໃຫ້ເປັນມາດຕະຖານ ` " +"ຂອງມັນ, ຕົວຢ່າງ: ``1.0.0``, (ໂດຍການແທນທີ່ຕົວອັກສອນຂີດຕໍ່/``-`` ດ້ວຍຕົວອັກສອນຂີດກ້ອງ/``_`` " +"ໃນທັງສອງຟິວ) ປະກອບມີ:" + +#: ../source/specifications/binary-distribution-format.rst:184 +msgid "" +"``/``, the root of the archive, contains all files to be installed in " +"``purelib`` or ``platlib`` as specified in ``WHEEL``. ``purelib`` and " +"``platlib`` are usually both ``site-packages``." +msgstr "" +"``/`` ເຊິ່ງເປັນຮາກ (root) ຂອງໄຟລ໌ບີບອັດ, ບັນຈຸໄຟລ໌ທັງໝົດທີ່ຈະຕິດຕັ້ງໃນ ``purelib`` ຫຼື " +"``platlib``." + +#: ../source/specifications/binary-distribution-format.rst:187 +msgid "``{distribution}-{version}.dist-info/`` contains metadata." +msgstr "``{distribution}-{version}.dist-info/`` ບັນຈຸ metadata." + +#: ../source/specifications/binary-distribution-format.rst:188 +msgid "" +":file:`{distribution}-{version}.dist-info/licenses/` contains license files." +msgstr "" +":file:`{distribution}-{version}.dist-info/licenses/` ບັນຈຸໄຟລ໌ໃບອະນຸຍາດ " +"(license)." + +#: ../source/specifications/binary-distribution-format.rst:189 +msgid "" +"``{distribution}-{version}.data/`` contains one subdirectory for each non-" +"empty install scheme key not already covered, where the subdirectory name is " +"an index into a dictionary of install paths (e.g. ``data``, ``scripts``, " +"``headers``, ``purelib``, ``platlib``)." +msgstr "``{distribution}-{version}.data/`` ບັນຈຸໄດເຣັກທໍຣີຍ່ອຍສຳລັບແຕ່ລະຮູບແບບການຕິດຕັ້ງ." + +#: ../source/specifications/binary-distribution-format.rst:193 +msgid "" +"Python scripts must appear in ``scripts`` and begin with exactly ``b'#!" +"python'`` in order to enjoy script wrapper generation and ``#!python`` " +"rewriting at install time. They may have any or no extension. The " +"``scripts`` directory may only contain regular files." +msgstr "ສະຄຣິບ Python ຕ້ອງປາກົດຢູ່ໃນ ``scripts`` ແລະ ເລີ່ມຕົ້ນດ້ວຍ ``b'#!python'``." + +#: ../source/specifications/binary-distribution-format.rst:197 +msgid "" +"``{distribution}-{version}.dist-info/METADATA`` is Metadata version 1.1 or " +"greater format metadata." +msgstr "" +"``{distribution}-{version}.dist-info/METADATA`` ແມ່ນ metadata ໃນຮູບແບບເວີຊັນ 1.1 " +"ຫຼື ສູງກວ່າ." + +#: ../source/specifications/binary-distribution-format.rst:199 +msgid "" +"``{distribution}-{version}.dist-info/WHEEL`` is metadata about the archive " +"itself in the same basic key: value format::" +msgstr "" +"``{distribution}-{version}.dist-info/WHEEL`` ແມ່ນ metadata ກ່ຽວກັບຕົວໄຟລ໌ບີບອັດເອງ." + +#: ../source/specifications/binary-distribution-format.rst:209 +msgid "``Wheel-Version`` is the version number of the Wheel specification." +msgstr "``Wheel-Version`` ແມ່ນເລກເວີຊັນຂອງຂໍ້ກຳນົດ Wheel." + +#: ../source/specifications/binary-distribution-format.rst:210 +msgid "" +"``Generator`` is the name and optionally the version of the software that " +"produced the archive." +msgstr "``Generator`` ແມ່ນຊື່ ແລະ ເວີຊັນ (ຖ້າມີ) ຂອງຊອບແວທີ່ສ້າງໄຟລ໌ບີບອັດນີ້." + +#: ../source/specifications/binary-distribution-format.rst:212 +msgid "" +"``Root-Is-Purelib`` is true if the top level directory of the archive should " +"be installed into purelib; otherwise the root should be installed into " +"platlib." +msgstr "" +"``Root-Is-Purelib`` ເປັນ true ຫາກໄດເຣັກທໍຣີລະດັບສູງສຸດຂອງໄຟລ໌ບີບອັດຄວນຖືກຕິດຕັ້ງໃນ purelib." + +#: ../source/specifications/binary-distribution-format.rst:215 +msgid "" +"``Tag`` is the wheel's expanded compatibility tags; in the example the " +"filename would contain ``py2.py3-none-any``." +msgstr "``Tag`` ແມ່ນແທັກຄວາມເຂົ້າກັນໄດ້ຂອງ wheel." + +#: ../source/specifications/binary-distribution-format.rst:217 +msgid "" +"``Build`` is the build number and is omitted if there is no build number." +msgstr "``Build`` ແມ່ນເລກການບິວ ແລະ ຈະຖືກລະເວັ້ນຫາກບໍ່ມີເລກການບິວ." + +#: ../source/specifications/binary-distribution-format.rst:218 +msgid "" +"A wheel installer should warn if Wheel-Version is greater than the version " +"it supports, and must fail if Wheel-Version has a greater major version than " +"the version it supports." +msgstr "ຕົວຕິດຕັ້ງ wheel ຄວນແຈ້ງເຕືອນຫາກ Wheel-Version ສູງກວ່າເວີຊັນທີ່ມັນຮອງຮັບ." + +#: ../source/specifications/binary-distribution-format.rst:221 +msgid "" +"Wheel, being an installation format that is intended to work across multiple " +"versions of Python, does not generally include .pyc files." +msgstr "" +"ເນື່ອງຈາກ wheel ເປັນຮູບແບບການຕິດຕັ້ງທີ່ອອກແບບມາເພື່ອເຮັດວຽກຂ້າມ Python ຫຼາຍເວີຊັນ, " +"ໂດຍທົ່ວໄປແລ້ວມັນຈຶ່ງບໍ່ລວມໄຟລ໌ .pyc." + +#: ../source/specifications/binary-distribution-format.rst:223 +msgid "Wheel does not contain setup.py or setup.cfg." +msgstr "Wheel ບໍ່ມີ setup.py ຫຼື setup.cfg." + +#: ../source/specifications/binary-distribution-format.rst:225 +msgid "" +"This version of the wheel specification is based on the distutils install " +"schemes and does not define how to install files to other locations. The " +"layout offers a superset of the functionality provided by the existing " +"wininst and egg binary formats." +msgstr "ຂໍ້ກຳນົດເວີຊັນນີ້ຂອງ wheel ແມ່ນອີງຕາມຮູບແບບການຕິດຕັ້ງຂອງ distutils." + +#: ../source/specifications/binary-distribution-format.rst:232 +#: ../source/specifications/recording-installed-packages.rst:23 +msgid "The .dist-info directory" +msgstr "ໄດເຣັກທໍຣີ .dist-info" + +#: ../source/specifications/binary-distribution-format.rst:234 +msgid "" +"Wheel .dist-info directories include at a minimum METADATA, WHEEL, and " +"RECORD." +msgstr "ໄດເຣັກທໍຣີ .dist-info ຂອງ Wheel ຢ່າງໜ້ອຍຕ້ອງມີ METADATA, WHEEL ແລະ RECORD." + +#: ../source/specifications/binary-distribution-format.rst:236 +msgid "" +"METADATA is the package metadata, the same format as PKG-INFO as found at " +"the root of sdists." +msgstr "METADATA ແມ່ນ metadata ຂອງແພັກເກດ, ເຊິ່ງຢູ່ໃນຮູບແບບດຽວກັນກັບ PKG-INFO." + +#: ../source/specifications/binary-distribution-format.rst:238 +msgid "WHEEL is the wheel metadata specific to a build of the package." +msgstr "WHEEL ແມ່ນ metadata ຂອງ wheel ທີ່ສະເພາະເຈາະຈົງກັບການບິວຂອງແພັກເກດນັ້ນ." + +#: ../source/specifications/binary-distribution-format.rst:239 +msgid "" +"RECORD is a list of (almost) all the files in the wheel and their secure " +"hashes. Unlike PEP 376, every file except RECORD, which cannot contain a " +"hash of itself, must include its hash. The hash algorithm must be sha256 or " +"better; specifically, md5 and sha1 are not permitted." +msgstr "RECORD ແມ່ນລາຍການໄຟລ໌ເກືອບທັງໝົດໃນ wheel ພ້ອມກັບຄ່າແຮຊ (hash) ເພື່ອຄວາມປອດໄພ." + +#: ../source/specifications/binary-distribution-format.rst:244 +msgid "PEP 376's INSTALLER and REQUESTED are not included in the archive." +msgstr "INSTALLER ແລະ REQUESTED ຂອງ PEP 376 ບໍ່ໄດ້ຖືກລວມໄວ້ໃນໄຟລ໌ບີບອັດ." + +#: ../source/specifications/binary-distribution-format.rst:245 +msgid "" +"RECORD.jws and RECORD.p7s are deprecated. Where they are still used, " +"neither RECORD.jws nor RECORD.p7s are mentioned in RECORD. Build backends " +"and other tools must not add them to wheels anymore, installers should be " +"aware that these files may still be part of some wheels." +msgstr "RECORD.jws ແລະ RECORD.p7s ຖືກຍົກເລີກການໃຊ້ງານແລ້ວ (deprecated)." + +#: ../source/specifications/binary-distribution-format.rst:250 +msgid "" +"During extraction, wheel installers verify all the hashes in RECORD against " +"the file contents. Apart from RECORD, RECORD.jws and RECORD.p7s, " +"installation will fail if any file in the archive is not both mentioned and " +"correctly hashed in RECORD." +msgstr "" +"ໃນລະຫວ່າງການແຕກໄຟລ໌, ຕົວຕິດຕັ້ງ wheel ຈະກວດສອບຄ່າແຮຊທັງໝົດໃນ RECORD ທຽບກັບເນື້ອໃນໄຟລ໌." + +#: ../source/specifications/binary-distribution-format.rst:256 +msgid "Subdirectories in :file:`.dist-info/`" +msgstr "ໄດເຣັກທໍຣີຍ່ອຍໃນ :file:`.dist-info/`" + +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "" +"Subdirectories under :file:`.dist-info/` are reserved for future use. The " +"following subdirectory names under :file:`.dist-info/` are reserved for " +"specific usage:" +msgstr "ໄດເຣັກທໍຣີຍ່ອຍພາຍໃຕ້ :file:`.dist-info/` ຖືກສະຫງວນໄວ້ສຳລັບການໃຊ້ງານໃນອະນາຄົດ." + +#: ../source/specifications/binary-distribution-format.rst:262 +msgid "Subdirectory name" +msgstr "ຊື່ໄດເຣັກທໍຣີຍ່ອຍ" + +#: ../source/specifications/binary-distribution-format.rst:262 +msgid "PEP / Standard" +msgstr "PEP / ມາດຕະຖານ" + +#: ../source/specifications/binary-distribution-format.rst:264 +msgid "``licenses``" +msgstr "``licenses``" + +#: ../source/specifications/binary-distribution-format.rst:264 +#: ../source/specifications/binary-distribution-format.rst:265 +msgid ":pep:`639`" +msgstr ":pep:`639`" + +#: ../source/specifications/binary-distribution-format.rst:265 +msgid "``license_files``" +msgstr "``license_files``" + +#: ../source/specifications/binary-distribution-format.rst:266 +msgid "``LICENSES``" +msgstr "``LICENSES``" + +#: ../source/specifications/binary-distribution-format.rst:266 +msgid "`REUSE licensing framework `__" +msgstr "`ໂຄງສ້າງການອອກໃບອະນຸຍາດ REUSE `__" + +#: ../source/specifications/binary-distribution-format.rst:267 +msgid "``sboms``" +msgstr "``sboms``" + +#: ../source/specifications/binary-distribution-format.rst:267 +msgid ":pep:`770`" +msgstr ":pep:`770`" + +#: ../source/specifications/binary-distribution-format.rst:271 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "ໄດເຣັກທໍຣີ :file:`.dist-info/licenses/`" + +#: ../source/specifications/binary-distribution-format.rst:273 +msgid "" +"If the metadata version is 2.4 or greater and one or more ``License-File`` " +"fields is specified, the :file:`.dist-info/` directory MUST contain " +"a :file:`licenses/` subdirectory, which MUST contain the files listed in the " +"``License-File`` fields in the :file:`METADATA` file at their respective " +"paths relative to the :file:`licenses/` directory." +msgstr "" +"ຖ້າເວີຊັນ metadata ແມ່ນ 2.4 ຫຼື ສູງກວ່າ, ໄດເຣັກທໍຣີ :file:`.dist-info/` " +"ຕ້ອງມີໄດເຣັກທໍຣີຍ່ອຍ :file:`licenses/`." + +#: ../source/specifications/binary-distribution-format.rst:282 +msgid "The :file:`.dist-info/sboms/` directory" +msgstr "ໄດເຣັກທໍຣີ :file:`.dist-info/sboms/`" + +#: ../source/specifications/binary-distribution-format.rst:284 +msgid "" +"All files contained within the :file:`.dist-info/sboms/` directory MUST be " +"Software Bill-of-Materials (SBOM) files that describe software contained " +"within the distribution archive." +msgstr "" +"ທຸກໄຟລ໌ພາຍໃນໄດເຣັກທໍຣີ :file:`.dist-info/sboms/` ຕ້ອງເປັນໄຟລ໌ Software Bill-of-" +"Materials (SBOM)." + +#: ../source/specifications/binary-distribution-format.rst:289 +msgid "The .data directory" +msgstr "ໄດເຣັກທໍຣີ .data" + +#: ../source/specifications/binary-distribution-format.rst:291 +msgid "" +"Any file that is not normally installed inside site-packages goes into " +"the .data directory, named as the .dist-info directory but with the .data/ " +"extension::" +msgstr "ໄຟລ໌ໃດກໍຕາມທີ່ປົກກະຕິບໍ່ໄດ້ຕິດຕັ້ງພາຍໃນ site-packages ຈະຖືກເກັບໄວ້ໃນໄດເຣັກທໍຣີ .data." + +#: ../source/specifications/binary-distribution-format.rst:299 +msgid "" +"The .data directory contains subdirectories with the scripts, headers, " +"documentation and so forth from the distribution. During installation the " +"contents of these subdirectories are moved onto their destination paths." +msgstr "ໄດເຣັກທໍຣີ .data ບັນຈຸໄດເຣັກທໍຣີຍ່ອຍພ້ອມກັບສະຄຣິບ, headers, ເອກະສານ ແລະ ອື່ນໆ." + +#: ../source/specifications/binary-distribution-format.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:376 +msgid "FAQ" +msgstr "ຄຳຖາມທີ່ພົບເລື້ອຍ (FAQ)" + +#: ../source/specifications/binary-distribution-format.rst:309 +msgid "Wheel defines a .data directory. Should I put all my data there?" +msgstr "Wheel ກຳນົດໄດເຣັກທໍຣີ .data. ຂ້ອຍຄວນເອົາຂໍ້ມູນທັງໝົດໄວ້ທີ່ນັ້ນບໍ່?" + +#: ../source/specifications/binary-distribution-format.rst:311 +msgid "" +"This specification does not have an opinion on how you should organize your " +"code. The .data directory is just a place for any files that are not " +"normally installed inside ``site-packages`` or on the PYTHONPATH. In other " +"words, you may continue to use ``pkgutil.get_data(package, resource)`` even " +"though *those* files will usually not be distributed in *wheel's* ``.data`` " +"directory." +msgstr "ຂໍ້ກຳນົດນີ້ບໍ່ໄດ້ບັງຄັບວິທີການຈັດລະບຽບໂຄດຂອງທ່ານ." + +#: ../source/specifications/binary-distribution-format.rst:320 +msgid "What's the deal with \"purelib\" vs. \"platlib\"?" +msgstr "\"purelib\" ກັບ \"platlib\" ແຕກຕ່າງກັນແນວໃດ?" + +#: ../source/specifications/binary-distribution-format.rst:322 +msgid "" +"Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " +"significant on some platforms. For example, Fedora installs pure Python " +"packages to '/usr/lib/pythonX.Y/site-packages' and platform dependent " +"packages to '/usr/lib64/pythonX.Y/site-packages'." +msgstr "Wheel ຍັງຄົງຮັກສາຄວາມແຕກຕ່າງລະຫວ່າງ \"purelib\" ແລະ \"platlib\" ເອົາໄວ້." + +#: ../source/specifications/binary-distribution-format.rst:327 +msgid "" +"A wheel with \"Root-Is-Purelib: false\" with all its files in ``{name}-" +"{version}.data/purelib`` is equivalent to a wheel with \"Root-Is-Purelib: " +"true\" with those same files in the root, and it is legal to have files in " +"both the \"purelib\" and \"platlib\" categories." +msgstr "" +"wheel ທີ່ມີ \"Root-Is-Purelib: false\" ໂດຍມີໄຟລ໌ທັງໝົດຢູ່ໃນ ``{name}-{version}.data/" +"purelib`` ແມ່ນທຽບເທົ່າກັບ wheel ທີ່ມີ \"Root-Is-Purelib: true\" ທີ່ມີໄຟລ໌ດຽວກັນເຫຼົ່ານັ້ນຢູ່ໃນ " +"root, ແລະ ມັນເປັນສິ່ງທີ່ຖືກຕ້ອງທີ່ຈະມີໄຟລ໌ຢູ່ໃນທັງໝວດໝູ່ \"purelib\" ແລະ \"platlib\"." + +#: ../source/specifications/binary-distribution-format.rst:332 +msgid "" +"In practice a wheel should have only one of \"purelib\" or \"platlib\" " +"depending on whether it is pure Python or not and those files should be at " +"the root with the appropriate setting given for \"Root-is-purelib\"." +msgstr "ໃນທາງປະຕິບັດ, wheel ຄວນມີພຽງຢ່າງໃດຢ່າງໜຶ່ງ." + +#: ../source/specifications/binary-distribution-format.rst:340 +msgid "Is it possible to import Python code directly from a wheel file?" +msgstr "ເປັນໄປໄດ້ບໍ່ທີ່ຈະ import ໂຄດ Python ໂດຍກົງຈາກໄຟລ໌ wheel?" + +#: ../source/specifications/binary-distribution-format.rst:342 +msgid "" +"Technically, due to the combination of supporting installation via simple " +"extraction and using an archive format that is compatible with " +"``zipimport``, a subset of wheel files *do* support being placed directly on " +"``sys.path``. However, while this behaviour is a natural consequence of the " +"format design, actually relying on it is generally discouraged." +msgstr "ໃນທາງເຕັກນິກແລ້ວ ສາມາດເຮັດໄດ້ ແຕ່ໂດຍທົ່ວໄປແລ້ວບໍ່ແນະນຳໃຫ້ເຮັດ." + +#: ../source/specifications/binary-distribution-format.rst:348 +msgid "" +"Firstly, wheel *is* designed primarily as a distribution format, so skipping " +"the installation step also means deliberately avoiding any reliance on " +"features that assume full installation (such as being able to use standard " +"tools like ``pip`` and ``virtualenv`` to capture and manage dependencies in " +"a way that can be properly tracked for auditing and security update " +"purposes, or integrating fully with the standard build machinery for C " +"extensions by publishing header files in the appropriate place)." +msgstr "ປະການທຳອິດ, wheel ຖືກອອກແບບມາເພື່ອເປັນຮູບແບບການແຈກຢາຍເປັນຫຼັກ." + +#: ../source/specifications/binary-distribution-format.rst:357 +msgid "" +"Secondly, while some Python software is written to support running directly " +"from a zip archive, it is still common for code to be written assuming it " +"has been fully installed. When that assumption is broken by trying to run " +"the software from a zip archive, the failures can often be obscure and hard " +"to diagnose (especially when they occur in third party libraries). The two " +"most common sources of problems with this are the fact that importing C " +"extensions from a zip archive is *not* supported by CPython (since doing so " +"is not supported directly by the dynamic loading machinery on any platform) " +"and that when running from a zip archive the ``__file__`` attribute no " +"longer refers to an ordinary filesystem path, but to a combination path that " +"includes both the location of the zip archive on the filesystem and the " +"relative path to the module inside the archive. Even when software correctly " +"uses the abstract resource APIs internally, interfacing with external " +"components may still require the availability of an actual on-disk file." +msgstr "" +"ປະການທີສອງ, ເຖິງວ່າຊອບແວ Python ບາງຊະນິດຈະຮອງຮັບການລັນຈາກ zip, " +"ແຕ່ປົກກະຕິແລ້ວໂຄດມັກຈະຖືກຂຽນໂດຍສົມມຸດວ່າມັນຖືກຕິດຕັ້ງຢ່າງສົມບູນແລ້ວ." + +#: ../source/specifications/binary-distribution-format.rst:374 +msgid "" +"Like metaclasses, monkeypatching and metapath importers, if you're not " +"already sure you need to take advantage of this feature, you almost " +"certainly don't need it. If you *do* decide to use it anyway, be aware that " +"many projects will require a failure to be reproduced with a fully installed " +"package before accepting it as a genuine bug." +msgstr "ຖ້າທ່ານບໍ່ແນ່ໃຈວ່າທ່ານຕ້ອງໃຊ້ຄຸນສົມບັດນີ້, ທ່ານກໍອາດຈະບໍ່ຈຳເປັນຕ້ອງໃຊ້ມັນ." + +#: ../source/specifications/binary-distribution-format.rst:382 +#: ../source/specifications/core-metadata.rst:1043 +#: ../source/specifications/dependency-groups.rst:250 +#: ../source/specifications/dependency-specifiers.rst:681 +#: ../source/specifications/direct-url-data-structure.rst:292 +#: ../source/specifications/direct-url.rst:67 +#: ../source/specifications/entry-points.rst:163 +#: ../source/specifications/externally-managed-environments.rst:472 +#: ../source/specifications/glob-patterns.rst:118 +#: ../source/specifications/inline-script-metadata.rst:224 +#: ../source/specifications/name-normalization.rst:50 +#: ../source/specifications/platform-compatibility-tags.rst:440 +#: ../source/specifications/pylock-toml.rst:841 +#: ../source/specifications/pyproject-toml.rst:697 +#: ../source/specifications/recording-installed-packages.rst:278 +#: ../source/specifications/simple-repository-api.rst:983 +#: ../source/specifications/source-distribution-format.rst:153 +#: ../source/specifications/version-specifiers.rst:1282 +#: ../source/specifications/virtual-environments.rst:54 +msgid "History" +msgstr "ປະຫວັດ" + +#: ../source/specifications/binary-distribution-format.rst:384 +msgid "February 2013: This specification was approved through :pep:`427`." +msgstr "ກຸມພາ 2013: ຂໍ້ກຳນົດນີ້ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`427`." + +#: ../source/specifications/binary-distribution-format.rst:385 +msgid "" +"February 2021: The rules on escaping in wheel filenames were revised, to " +"bring them into line with what popular tools actually do." +msgstr "ກຸມພາ 2021: ກົດເກນກ່ຽວກັບການໃຊ້ escaping ໃນຊື່ໄຟລ໌ wheel ໄດ້ຖືກປັບປຸງ." + +#: ../source/specifications/binary-distribution-format.rst:387 +msgid "" +"December 2024: Clarified that the ``scripts`` folder should only contain " +"regular files (the expected behaviour of consuming tools when encountering " +"symlinks or subdirectories in this folder is not formally defined, and hence " +"may vary between tools)." +msgstr "ທັນວາ 2024: ເຮັດໃຫ້ແຈ້ງເຈນວ່າໂຟນເດີ ``scripts`` ຄວນບັນຈຸພຽງແຕ່ໄຟລ໌ທຳມະດາ." + +#: ../source/specifications/binary-distribution-format.rst:391 +#: ../source/specifications/recording-installed-packages.rst:288 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" +"ທັນວາ 2024: ໄດເຣັກທໍຣີ :file:`.dist-info/licenses/` ໄດ້ຖືກກຳນົດຜ່ານ :pep:`639`." + +#: ../source/specifications/binary-distribution-format.rst:393 +msgid "" +"January 2025: Clarified that name and version needs to be normalized for " +"``.dist-info`` and ``.data`` directories." +msgstr "" +"ມັງກອນ 2025: ເຮັດໃຫ້ແຈ້ງເຈນວ່າຊື່ ແລະ ເວີຊັນຕ້ອງໄດ້ຮັບການເຮັດໃຫ້ເປັນມາດຕະຖານ (normalized)." + +#: ../source/specifications/binary-distribution-format.rst:395 +msgid "January 2026: Deprecate RECORD.jws and RECORD.p7s :pep:`815`." +msgstr "ມັງກອນ 2026: ຍົກເລີກການໃຊ້ງານ RECORD.jws ແລະ RECORD.p7s ຕາມ :pep:`815`." + +#: ../source/specifications/binary-distribution-format.rst:399 +msgid "Appendix" +msgstr "ພາກຜະໜວກ" + +#: ../source/specifications/binary-distribution-format.rst:401 +msgid "Example urlsafe-base64-nopad implementation::" +msgstr "ຕົວຢ່າງການເຮັດວຽກຂອງ urlsafe-base64-nopad::" + +#: ../source/specifications/build-details/index.rst:7 +#: ../source/specifications/build-details/index.rst:41 +msgid "v1.0" +msgstr "v1.0" + +#: ../source/specifications/build-details/index.rst:5 +msgid ":file:`build-details.json`" +msgstr ":file:`build-details.json`" + +#: ../source/specifications/build-details/index.rst:13 +msgid "" +"The ``build-details.json`` file is a standardized file format that provides " +"build-specfic information of a Python installation, such as its version, " +"extension ABI details, and other information that is specific to that " +"particular build of Python." +msgstr "" +"ໄຟລ໌ ``build-details.json`` ແມ່ນຮູບແບບໄຟລ໌ມາດຕະຖານທີ່ໃຫ້ຂໍ້ມູນສະເພາະຂອງການຕິດຕັ້ງ Python." + +#: ../source/specifications/build-details/index.rst:18 +msgid "" +"Starting from Python 3.14, a ``build-details.json`` file is installed in the " +"platform-independent standard library directory (``stdlib``, e.g. ``/usr/lib/" +"python3.14/build-details.json``)." +msgstr "" +"ເລີ່ມຕົ້ນຈາກ Python 3.14, ໄຟລ໌ ``build-details.json`` " +"ຈະຖືກຕິດຕັ້ງໃນໄດເຣັກທໍຣີໄລບຣາຣີມາດຕະຖານ." + +#: ../source/specifications/build-details/index.rst:22 +msgid "" +"Please refer to the :ref:`latest version ` for its " +"specification." +msgstr "ກະລຸນາອ້າງອີງ :ref:`ເວີຊັນຫຼ້າສຸດ ` ສຳລັບຂໍ້ກຳນົດ." + +#: ../source/specifications/build-details/index.rst:28 +#: ../source/specifications/build-details/v1.0.rst:16 +#: ../source/specifications/inline-script-metadata.rst:111 +#: ../source/specifications/pylock-toml.rst:737 +msgid "Example" +msgstr "ຕົວຢ່າງ" + +#: ../source/specifications/build-details/index.rst:35 +msgid "Changelog" +msgstr "ບັນທຶກການປ່ຽນແປງ" + +#: ../source/specifications/build-details/index.rst:45 +#: ../source/specifications/build-details/v1.0.rst:9 +#: ../source/specifications/dependency-groups.rst:20 +#: ../source/specifications/dependency-specifiers.rst:30 +#: ../source/specifications/direct-url-data-structure.rst:19 +#: ../source/specifications/direct-url.rst:15 +#: ../source/specifications/file-yanking.rst:20 +#: ../source/specifications/index-hosted-attestations.rst:17 +#: ../source/specifications/inline-script-metadata.rst:13 +#: ../source/specifications/license-expression.rst:12 +#: ../source/specifications/project-status-markers.rst:20 +msgid "Specification" +msgstr "ຂໍ້ກຳນົດ" + +#: ../source/specifications/build-details/index.rst:46 +msgid ":ref:`build-details-v1.0`" +msgstr ":ref:`build-details-v1.0`" + +#: ../source/specifications/build-details/index.rst:48 +msgid "Schema" +msgstr "Schema" + +#: ../source/specifications/build-details/index.rst:49 +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"https://packaging.python.org/en/latest/specifications/schemas/build-details-" +"v1.0.schema.json" +msgstr "" +"https://packaging.python.org/en/latest/specifications/schemas/build-details-" +"v1.0.schema.json" + +#: ../source/specifications/build-details/index.rst:52 +msgid "Initial version, introduced by :pep:`739`." +msgstr "ເວີຊັນເລີ່ມຕົ້ນ, ແນະນຳໂດຍ :pep:`739`." + +#: ../source/specifications/build-details/v1.0.rst:5 +msgid "``build-details.json`` v1.0" +msgstr "``build-details.json`` v1.0" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"*build-details.json — a static description file with build details of Python " +"installations*" +msgstr "" +"*build-details.json — ໄຟລ໌ຄຳອະທິບາຍແບບ static ພ້ອມລາຍລະອຽດການບິວຂອງການຕິດຕັ້ງ " +"Python*" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "type" +msgstr "ປະເພດ" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "*object*" +msgstr "*object*" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "properties" +msgstr "ຄຸນສົມບັດ (properties)" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**schema\\_version**" +msgstr "**schema\\_version**" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Schema version." +msgstr "ເວີຊັນຂອງ Schema." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This is a string following the format ``.``, where ```` " +"and ```` are unpaded numbers and represent the **major** and " +"**minor** components of the version. Versions may be arithmetically compared " +"by intrepreting the version string as a decimal number." +msgstr "ນີ້ແມ່ນສະຕຣິງ (string) ຕາມຮູບແບບ ``.``." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"For this specification version, this value is constant and **MUST** be " +"``1.0``." +msgstr "ສຳລັບເວີຊັນຂໍ້ກຳນົດນີ້, ຄ່ານີ້ເປັນຄ່າຄົງທີ່ ແລະ **ຕ້ອງ** ເປັນ ``1.0``." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"Future versions of this schema **MUST** use a higher version number. Future " +"versions of this schema **MUST NOT** use the same **major** version " +"component as other schema version unless its specification is deemed " +"backwards-compatible with them — it can't change, or extend, any parts of " +"the current specification in such a way as the semantics of the interpreted " +"data differ, or that data valid under the new specification is invalid under " +"the older specification, with the exception of additional properties (errors " +"caused by ``additionalProperties``)." +msgstr "ເວີຊັນໃນອະນາຄົດຂອງ schema ນີ້ **ຕ້ອງ** ໃຊ້ເລກເວີຊັນທີ່ສູງກວ່າ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "*string*" +msgstr "*string*" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "const" +msgstr "const" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "1.0" +msgstr "1.0" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**base\\_prefix**" +msgstr "**base\\_prefix**" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Base prefix of the Python installation." +msgstr "Base prefix ຂອງການຕິດຕັ້ງ Python." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"Either an absolute path, or a path relative to directory where this file is " +"contained." +msgstr "ອາດຈະເປັນເສັ້ນທາງສຳບູນ (absolute path) ຫຼື ເສັ້ນທາງທຽບຖານ (relative path)." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "examples" +msgstr "ຕົວຢ່າງ" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "/usr" +msgstr "/usr" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "../.." +msgstr "../.." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "base\\_interpreter" +msgstr "base\\_interpreter" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "The path to the Python interprer of the base installation." +msgstr "ເສັ້ນທາງໄປຫາຕົວແປພາສາ Python ຂອງການຕິດຕັ້ງພື້ນຖານ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Either an absolute path, or a path relative to ``base_prefix``." +msgstr "ອາດຈະເປັນເສັ້ນທາງສຳບູນ ຫຼື ເສັ້ນທາງທຽບຖານກັບ ``base_prefix``." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This field **MUST** be present if the installation provides an interpreter " +"executable." +msgstr "ຟິລ (field) ນີ້ **ຕ້ອງ** ມີຢູ່ຫາກການຕິດຕັ້ງມີໄຟລ໌ລັນຂອງຕົວແປພາສາ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "/usr/bin/python" +msgstr "/usr/bin/python" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "bin/python" +msgstr "bin/python" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**platform**" +msgstr "**platform**" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "System platform string." +msgstr "ສະຕຣິງແພລັດຟອມຂອງລະບົບ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "This field **SHOULD** be equivalent to ``sysconfig.get_platform()``." +msgstr "ຟິລນີ້ **ຄວນ** ຈະທຽບເທົ່າກັບ ``sysconfig.get_platform()``." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "linux-x86\\_64" +msgstr "linux-x86\\_64" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**language**" +msgstr "**language**" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Object containing details related to the Python language specification." +msgstr "Object ທີ່ບັນຈຸລາຍລະອຽດກ່ຽວກັບຂໍ້ກຳນົດພາສາ Python." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**version**" +msgstr "**version**" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"String representation the Python language version — a version string " +"consisting only of the *major* and *minor* components." +msgstr "ສະຕຣິງແທນເວີຊັນພາສາ Python." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This field **SHOULD** be equivalent to ``sysconfig.get_python_version()``." +msgstr "ຟິລນີ້ **ຄວນ** ຈະທຽບເທົ່າກັບ ``sysconfig.get_python_version()``." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "3.14" +msgstr "3.14" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "version\\_info" +msgstr "version\\_info" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Object in the format of :py:data:`sys.version_info`." +msgstr "Object ໃນຮູບແບບຂອງ :py:data:`sys.version_info`." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "This section **SHOULD** be equivalent to :py:data:`sys.version_info`." +msgstr "ສ່ວນນີ້ **ຄວນ** ຈະທຽບເທົ່າກັບ :py:data:`sys.version_info`." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "major" +msgstr "major" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "3" +msgstr "3" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "minor" +msgstr "minor" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "14" +msgstr "14" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "micro" +msgstr "micro" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "1" +msgstr "1" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "releaselevel" +msgstr "releaselevel" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "final" +msgstr "final" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "serial" +msgstr "serial" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "0" +msgstr "0" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**major**" +msgstr "**major**" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "*number*" +msgstr "*number*" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**minor**" +msgstr "**minor**" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**micro**" +msgstr "**micro**" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**releaselevel**" +msgstr "**releaselevel**" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "enum" +msgstr "enum" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "alpha, beta, candidate, final" +msgstr "alpha, beta, candidate, final" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**serial**" +msgstr "**serial**" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "additionalProperties" +msgstr "additionalProperties" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "False" +msgstr "False" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**implementation**" +msgstr "**implementation**" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Object containing details related to Python implementation." +msgstr "Object ທີ່ບັນຈຸລາຍລະອຽດກ່ຽວກັບການເຮັດວຽກຂອງ Python (implementation)." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This section **SHOULD** be equivalent to :py:data:`sys.implementation`. It " +"follows specification defined in PEP 421, meaning that on top of the " +"required keys, implementation-specific keys can also exist, but must be " +"prefixed with an underscore." +msgstr "ສ່ວນນີ້ **ຄວນ** ຈະທຽບເທົ່າກັບ :py:data:`sys.implementation`." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**name**" +msgstr "**name**" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Lower-case name of the Python implementation." +msgstr "ຊື່ຕົວອັກສອນນ້ອຍຂອງການເຮັດວຽກຂອງ Python." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "cpython" +msgstr "cpython" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "pypy" +msgstr "pypy" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"Object in the format of :py:data:`sys.version_info`, containing the " +"implementation version." +msgstr "Object ໃນຮູບແບບຂອງ :py:data:`sys.version_info` ທີ່ບັນຈຸເວີຊັນຂອງການເຮັດວຽກ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "7" +msgstr "7" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "16" +msgstr "16" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "True" +msgstr "True" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "abi" +msgstr "abi" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Object containing details related to ABI." +msgstr "Object ທີ່ບັນຈຸລາຍລະອຽດກ່ຽວກັບ ABI." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**flags**" +msgstr "**flags**" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Build configuration flags, used to calculate the extension suffix." +msgstr "" +"ແຟລັກ (flags) ການຕັ້ງຄ່າການບິວ, ໃຊ້ເພື່ອຄຳນວນນາມສະກຸນຂອງສ່ວນເສີມ (extension suffix)." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"The flags **MUST** be defined in the order they appear on the extension " +"suffix." +msgstr "ແຟລັກ **ຕ້ອງ** ຖືກກຳນົດຕາມລຳດັບທີ່ປາກົດໃນນາມສະກຸນສ່ວນເສີມ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "*array*" +msgstr "*array*" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "t" +msgstr "t" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "d" +msgstr "d" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "extension\\_suffix" +msgstr "extension\\_suffix" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"Suffix used for extensions built against the current implementation version." +msgstr "ນາມສະກຸນທີ່ໃຊ້ສຳລັບສ່ວນເສີມທີ່ບິວຂຶ້ນມາ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This field **MUST** be present if the Python implementation supports " +"extensions, otherwise this entry will be missing." +msgstr "ຟິລນີ້ **ຕ້ອງ** ມີຢູ່ຫາກການເຮັດວຽກຂອງ Python ຮອງຮັບສ່ວນເສີມ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid ".cpython-314-x86\\_64-linux-gnu.so" +msgstr ".cpython-314-x86\\_64-linux-gnu.so" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "stable\\_abi\\_suffix" +msgstr "stable\\_abi\\_suffix" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Suffix used for extensions built against the stable ABI." +msgstr "ນາມສະກຸນທີ່ໃຊ້ສຳລັບສ່ວນເສີມທີ່ບິວດ້ວຍ stable ABI." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This field **MUST** be present if the Python implementation has a stable ABI " +"extension suffix, otherwise this entry will be missing." +msgstr "ຟິລນີ້ **ຕ້ອງ** ມີຢູ່ຫາກການເຮັດວຽກຂອງ Python ມີນາມສະກຸນສ່ວນເສີມ stable ABI." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid ".abi3.so" +msgstr ".abi3.so" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "suffixes" +msgstr "suffixes" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Valid module suffixes grouped by type." +msgstr "ນາມສະກຸນໂມດູນທີ່ຖືກຕ້ອງ ຈັດກຸ່ມຕາມປະເພດ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This section **MUST** be present if the Python installation supports " +"importing external files, and it **SHOULD** be equivalent to the " +"``importlib.machinery.*_SUFFIXES`` attributes." +msgstr "ສ່ວນນີ້ **ຕ້ອງ** ມີຢູ່ຫາກການຕິດຕັ້ງ Python ຮອງຮັບການ import ໄຟລ໌ພາຍນອກ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"Additionally, if a Python implementation provides extension kinds other than " +"the ones listed on ``importlib.machinery`` module, they **MAY** add a sub-" +"section for them." +msgstr "" +"ນອກຈາກນັ້ນ, ຫາກການເຮັດວຽກຂອງ Python ໃຫ້ປະເພດສ່ວນເສີມອື່ນໆ, ພວກເຂົາ **ອາດຈະ** " +"ເພີ່ມສ່ວນຍ່ອຍໃຫ້ກັບພວກມັນ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "source" +msgstr "ຊອສ (source)" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid ".py" +msgstr ".py" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "bytecode" +msgstr "ໄບທ໌ໂຄດ (bytecode)" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid ".pyc" +msgstr ".pyc" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "optimized_bytecode" +msgstr "optimized_bytecode" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "debug_bytecode" +msgstr "debug_bytecode" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "extensions" +msgstr "extensions" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid ".cpython-313-x86\\_64-linux-gnu.so" +msgstr ".cpython-313-x86\\_64-linux-gnu.so" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid ".so" +msgstr ".so" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "libpython" +msgstr "libpython" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Object containing details related to the ``libpython`` library." +msgstr "Object ທີ່ບັນຈຸລາຍລະອຽດກ່ຽວກັບໄລບຣາຣີ ``libpython``." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This section **MUST** by present if Python installation provides a " +"``libpython`` library, otherwise this section will be missing." +msgstr "ສ່ວນນີ້ **ຕ້ອງ** ມີຢູ່ຫາກການຕິດຕັ້ງ Python ມີໄລບຣາຣີ ``libpython``." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "dynamic" +msgstr "ໄດນາມິກ (dynamic)" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "The path to the dynamic ``libpython`` library." +msgstr "ເສັ້ນທາງໄປຫາໄລບຣາຣີ ``libpython`` ແບບໄດນາມິກ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This field **MUST** be present if the Python installation provides a dynamic " +"``libpython`` library, otherwise this entry will be missing." +msgstr "ຟິລນີ້ **ຕ້ອງ** ມີຢູ່ຫາກການຕິດຕັ້ງ Python ມີໄລບຣາຣີ ``libpython`` ແບບໄດນາມິກ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "/usr/lib/libpython3.14.so.1.0" +msgstr "/usr/lib/libpython3.14.so.1.0" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "lib/libpython3.14.so.1.0" +msgstr "lib/libpython3.14.so.1.0" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "dynamic\\_stableabi" +msgstr "dynamic\\_stableabi" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "The path to the dynamic ``libpython`` library for the stable ABI." +msgstr "ເສັ້ນທາງໄປຫາໄລບຣາຣີ ``libpython`` ແບບໄດນາມິກສຳລັບ stable ABI." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This field **MUST** be present if the Python installation provides a dynamic " +"``libpython`` library targeting the Stable ABI, otherwise this entry will be " +"missing." +msgstr "" +"ຟິລນີ້ **ຕ້ອງ** ມີຢູ່ຫາກການຕິດຕັ້ງ Python ມີໄລບຣາຣີ ``libpython`` ແບບໄດນາມິກທີ່ເປົ້າໝາຍ " +"Stable ABI." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "If this key is present ``dynamic`` **MUST** also be set." +msgstr "ຫາກມີຄີ (key) ນີ້, ``dynamic`` **ຕ້ອງ** ຖືກຕັ້ງຄ່າໄວ້ຄືກັນ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "/usr/lib/libpython3.so" +msgstr "/usr/lib/libpython3.so" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "lib/libpython3.so" +msgstr "lib/libpython3.so" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "static" +msgstr "ສະແຕຕິກ (static)" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "The path to the static ``libpython`` library." +msgstr "ເສັ້ນທາງໄປຫາໄລບຣາຣີ ``libpython`` ແບບສະແຕຕິກ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This field **MUST** be present if the Python installation provides a static " +"``libpython`` library, otherwise this entry will be missing." +msgstr "ຟິລນີ້ **ຕ້ອງ** ມີຢູ່ຫາກການຕິດຕັ້ງ Python ມີໄລບຣາຣີ ``libpython`` ແບບສະແຕຕິກ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "/usr/lib/python3.14/config-3.14-x86\\_64-linux-gnu/libpython3.14.a" +msgstr "/usr/lib/python3.14/config-3.14-x86\\_64-linux-gnu/libpython3.14.a" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "lib/python3.14/config-3.14-x86\\_64-linux-gnu/libpython3.14.a" +msgstr "lib/python3.14/config-3.14-x86\\_64-linux-gnu/libpython3.14.a" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "link\\_extensions" +msgstr "link\\_extensions" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Should extensions built against a dynamic ``libpython`` link to it?" +msgstr "ສ່ວນເສີມທີ່ບິວດ້ວຍ ``libpython`` ແບບໄດນາມິກຄວນລິ້ງຫາວ່າມັນຫຼືບໍ່?" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "*boolean*" +msgstr "*boolean*" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "c\\_api" +msgstr "c\\_api" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Object containing details related to the Python C API." +msgstr "Object ທີ່ບັນຈຸລາຍລະອຽດກ່ຽວກັບ Python C API." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This section **MUST** be present if the Python implementation provides a C " +"API, otherwise this section will be missing." +msgstr "ສ່ວນນີ້ **ຕ້ອງ** ມີຢູ່ຫາກການເຮັດວຽກຂອງ Python ມີ C API." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**headers**" +msgstr "**headers**" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "The path to the C API headers." +msgstr "ເສັ້ນທາງໄປຫາ C API headers." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "/usr/include/python3.14" +msgstr "/usr/include/python3.14" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "include/python3.14" +msgstr "include/python3.14" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "pkgconfig\\_path" +msgstr "pkgconfig\\_path" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "The path to the pkg-config definition files." +msgstr "ເສັ້ນທາງໄປຫາໄຟລ໌ກຳນົດຄ່າ pkg-config." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This field **MUST** be present if the Python implementation provides pkg-" +"config definition files, otherwise this section will be missing." +msgstr "ຟິລນີ້ **ຕ້ອງ** ມີຢູ່ຫາກການເຮັດວຽກຂອງ Python ມີໄຟລ໌ກຳນົດຄ່າ pkg-config." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "/usr/lib/pkgconfig" +msgstr "/usr/lib/pkgconfig" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "lib/pkgconfig" +msgstr "lib/pkgconfig" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "arbitrary\\_data" +msgstr "arbitrary\\_data" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Object containing extra arbitrary data." +msgstr "Object ທີ່ບັນຈຸຂໍ້ມູນເພີ່ມເຕີມອື່ນໆ." + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This is meant to be used as an escape-hatch, to include any relevant data " +"that is not covered by this specification. Implementations may choose what " +"data to provide in this section." +msgstr "ນີ້ແມ່ນໃຊ້ເປັນທາງເລືອກໃນການລວມຂໍ້ມູນທີ່ກ່ຽວຂ້ອງໃດໆ ທີ່ບໍ່ໄດ້ກວມເອົາໃນຂໍ້ກຳນົດນີ້." + +#: ../source/specifications/core-metadata.rst:7 +msgid "Core metadata specifications" +msgstr "ຂໍ້ກຳນົດ Metadata ຫຼັກ" + +#: ../source/specifications/core-metadata.rst:9 +msgid "This page describes version 2.6, approved in May 2026." +msgstr "ໜ້ານີ້ອະທິບາຍເວີຊັນ 2.6, ເຊິ່ງໄດ້ຮັບການອະນຸມັດໃນເດືອນພຶດສະພາ 2026." + +#: ../source/specifications/core-metadata.rst:11 +msgid "" +"Fields defined in the following specification should be considered valid, " +"complete and not subject to change. The required fields are:" +msgstr "ຟິລທີ່ກຳນົດໃນຂໍ້ກຳນົດຕໍ່ໄປນີ້ຄວນຖືວ່າຖືກຕ້ອງ, ສົມບູນ ແລະ ບໍ່ມີການປ່ຽນແປງ. ຟິລທີ່ບັງຄັບແມ່ນ:" + +#: ../source/specifications/core-metadata.rst:14 +msgid "``Metadata-Version``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:15 +msgid "``Name``" +msgstr "``Name``" + +#: ../source/specifications/core-metadata.rst:16 +msgid "``Version``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:18 +msgid "All the other fields are optional." +msgstr "ຟິລອື່ນໆທັງໝົດແມ່ນບໍ່ບັງຄັບ." + +#: ../source/specifications/core-metadata.rst:20 +msgid "" +"The standard file format for metadata (including in :doc:`wheels ` and :doc:`installed projects `) is based on the format of email headers. However, email formats " +"have been revised several times, and exactly which email RFC applies to " +"packaging metadata is not specified. In the absence of a precise definition, " +"the practical standard is set by what the standard " +"library :mod:`python:email.parser` module can parse using " +"the :data:`~.python:email.policy.compat32` policy." +msgstr "ຮູບແບບໄຟລ໌ມາດຕະຖານສຳລັບ metadata ແມ່ນອີງຕາມຮູບແບບຂອງ email headers." + +#: ../source/specifications/core-metadata.rst:29 +msgid "" +"Whenever metadata is serialised to a byte stream (for example, to save to a " +"file), strings must be serialised using the UTF-8 encoding." +msgstr "" +"ເມື່ອໃດກໍຕາມທີ່ metadata ຖືກແປງເປັນ byte stream, ສະຕຣິງຕ້ອງຖືກແປງໂດຍໃຊ້ການເຂົ້າລະຫັດ UTF-8." + +#: ../source/specifications/core-metadata.rst:32 +msgid "" +"Although :pep:`566` defined a way to transform metadata into a JSON-" +"compatible dictionary, this is not yet used as a standard interchange " +"format. The need for tools to work with years worth of existing packages " +"makes it difficult to shift to a new format." +msgstr "" +"ເຖິງແມ່ນວ່າ :pep:`566` ຈະກຳນົດວິທີການແປງ metadata ໃຫ້ເປັນ dictionary ທີ່ເຂົ້າກັນໄດ້ກັບ " +"JSON, ແຕ່ມັນຍັງບໍ່ທັນໄດ້ຖືກໃຊ້ເປັນຮູບແບບມາດຕະຖານໃນການແລກປ່ຽນ." + +#: ../source/specifications/core-metadata.rst:37 +msgid "" +"*Interpreting old metadata:* In :pep:`566`, the version specifier field " +"format specification was relaxed to accept the syntax used by popular " +"publishing tools (namely to remove the requirement that version specifiers " +"must be surrounded by parentheses). Metadata consumers may want to use the " +"more relaxed formatting rules even for metadata files that are nominally " +"less than version 2.1." +msgstr "" +"*ການຕີຄວາມໝາຍ metadata ເກົ່າ:* ໃນ :pep:`566`, ຂໍ້ກຳນົດຮູບແບບຟິລລະບຸເວີຊັນໄດ້ຖືກຜ່ອນຜັນ." + +#: ../source/specifications/core-metadata.rst:48 +msgid "Metadata-Version" +msgstr "Metadata-Version" + +#: ../source/specifications/core-metadata.rst:52 +msgid "" +"Version of the file format; legal values are \"1.0\", \"1.1\", \"1.2\", " +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", \"2.5\", and \"2.6\"." +msgstr "ເວີຊັນຂອງຮູບແບບໄຟລ໌." + +#: ../source/specifications/core-metadata.rst:55 +msgid "" +"Automated tools consuming metadata SHOULD warn if ``metadata-version`` is " +"greater than the highest version they support, and MUST fail if ``metadata-" +"version`` has a greater major version than the highest version they support " +"(as described in the :ref:`Version specifier specification `, the major version is the value before the first dot)." +msgstr "" +"ເຄື່ອງມືອັດຕະໂນມັດທີ່ໃຊ້ metadata ຄວນແຈ້ງເຕືອນຫາກ ``metadata-version`` " +"ສູງກວ່າເວີຊັນທີ່ພວກມັນຮອງຮັບ." + +#: ../source/specifications/core-metadata.rst:62 +msgid "" +"For broader compatibility, build tools MAY choose to produce distribution " +"metadata using the lowest metadata version that includes all of the needed " +"fields." +msgstr "" +"ເພື່ອຄວາມເຂົ້າກັນໄດ້ທີ່ກວ້າງຂວາງ, ເຄື່ອງມືບິວອາດຈະເລືອກສ້າງ metadata ຂອງການແຈກຢາຍໂດຍໃຊ້ເວີຊັນ " +"metadata ທີ່ຕໍ່າທີ່ສຸດ." + +#: ../source/specifications/core-metadata.rst:66 +#: ../source/specifications/core-metadata.rst:84 +#: ../source/specifications/core-metadata.rst:101 +#: ../source/specifications/core-metadata.rst:184 +#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:237 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:317 +#: ../source/specifications/core-metadata.rst:321 +#: ../source/specifications/core-metadata.rst:353 +#: ../source/specifications/core-metadata.rst:375 +#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:440 +#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:701 +#: ../source/specifications/core-metadata.rst:711 +#: ../source/specifications/core-metadata.rst:940 +#: ../source/specifications/core-metadata.rst:1037 +msgid "Example::" +msgstr "ຕົວຢ່າງ::" + +#: ../source/specifications/core-metadata.rst:74 +msgid "Name" +msgstr "" + +#: ../source/specifications/core-metadata.rst:77 +msgid "Added restrictions on format from the :ref:`name format `." +msgstr "ເພີ່ມຂໍ້ຈຳກັດກ່ຽວກັບຮູບແບບຈາກ :ref:`ຮູບແບບຊື່ `." + +#: ../source/specifications/core-metadata.rst:80 +msgid "" +"The name of the distribution. The name field is the primary identifier for a " +"distribution. It must conform to the :ref:`name format specification `." +msgstr "ຊື່ຂອງການແຈກຢາຍ. ຟິລຊື່ແມ່ນຕົວລະບຸຫຼັກສຳລັບການແຈກຢາຍ." + +#: ../source/specifications/core-metadata.rst:88 +msgid "" +"For comparison purposes, the names should be :ref:`normalized ` before comparing." +msgstr "ເພື່ອຈຸດປະສົງໃນການປຽບທຽບ, ຊື່ຄວນໄດ້ຮັບການເຮັດໃຫ້ເປັນມາດຕະຖານ (normalized) ກ່ອນ." + +#: ../source/specifications/core-metadata.rst:93 +msgid "Version" +msgstr "" + +#: ../source/specifications/core-metadata.rst:97 +msgid "" +"A string containing the distribution's version number. This field must be " +"in the format specified in the :ref:`Version specifier specification " +"`." +msgstr "ສະຕຣິງທີ່ບັນຈຸເລກເວີຊັນຂອງການແຈກຢາຍ." + +#: ../source/specifications/core-metadata.rst:109 +msgid "Dynamic (multiple use)" +msgstr "Dynamic (ໃຊ້ໄດ້ຫຼາຍຄັ້ງ)" + +#: ../source/specifications/core-metadata.rst:112 +msgid "" +"A multiple use field that is present in the sdist and also marked " +"``Dynamic`` may only be appended to in a wheel built from the sdist. " +"Previously any field listed in Dynamic was ignored in an sdist." +msgstr "" +"ຟິລທີ່ໃຊ້ໄດ້ຫຼາຍຄັ້ງເຊິ່ງມີຢູ່ໃນ sdist ແລະ ຖືກໝາຍວ່າ ``Dynamic`` ອາດຈະຖືກເພີ່ມເຂົ້າໃນ wheel " +"ທີ່ບິວຈາກ sdist ນັ້ນ." + +#: ../source/specifications/core-metadata.rst:117 +msgid "" +"A string containing the name of another core metadata field. The field names " +"``Name``, ``Version``, and ``Metadata-Version`` may not be specified in this " +"field." +msgstr "ສະຕຣິງທີ່ບັນຈຸຊື່ຂອງຟິລ metadata ຫຼັກອື່ນ." + +#: ../source/specifications/core-metadata.rst:121 +msgid "" +"When found in the metadata of a source distribution, the following rules " +"apply:" +msgstr "" +"ເມື່ອພົບໃນ metadata ຂອງການແຈກຢາຍຊອສ (source distribution), ກົດເກນຕໍ່ໄປນີ້ຈະມີຜົນບັງຄັບໃຊ້:" + +#: ../source/specifications/core-metadata.rst:124 +msgid "" +"If a field is *not* marked as ``Dynamic``, then the value of the field in " +"any wheel built from the sdist MUST match the value in the sdist. If the " +"field is not in the sdist, and not marked as ``Dynamic``, then it MUST NOT " +"be present in the wheel." +msgstr "" +"ຫາກຟິລ *ບໍ່* ຖືກໝາຍວ່າ ``Dynamic``, ຄ່າຂອງຟິລໃນ wheel ທີ່ບິວຈາກ sdist ຕ້ອງກົງກັບຄ່າໃນ " +"sdist." + +#: ../source/specifications/core-metadata.rst:128 +msgid "" +"If a single-use field is marked as ``Dynamic``, it may contain any valid " +"value in a wheel built from the sdist (including not being present at all)." +msgstr "ຫາກຟິລແບບໃຊ້ຄັ້ງດຽວຖືກໝາຍວ່າ ``Dynamic``, ມັນອາດຈະບັນຈຸຄ່າໃດກໍໄດ້ທີ່ຖືກຕ້ອງໃນ wheel." + +#: ../source/specifications/core-metadata.rst:130 +msgid "" +"If a multiple use field is present in the sdist and also marked ``Dynamic``, " +"then a wheel built from the sdist MUST include the value(s) present in the " +"sdist. The wheel MAY add further values, but it MUST NOT remove, reorder, or " +"modify the values present in the sdist." +msgstr "" +"ຫາກຟິລທີ່ໃຊ້ໄດ້ຫຼາຍຄັ້ງມີຢູ່ໃນ sdist ແລະ ຖືກໝາຍວ່າ ``Dynamic``, wheel ທີ່ບິວຈາກ sdist " +"ນັ້ນຕ້ອງລວມເອົາຄ່າທີ່ມີຢູ່ໃນ sdist." + +#: ../source/specifications/core-metadata.rst:135 +msgid "" +"If the sdist metadata version is older than version 2.2, then all fields " +"should be treated as if they were specified with ``Dynamic`` (i.e. there are " +"no special restrictions on the metadata of wheels built from the sdist)." +msgstr "" +"ຫາກເວີຊັນ metadata ຂອງ sdist ເກົ່າກວ່າເວີຊັນ 2.2, ໃຫ້ຖືວ່າທຸກຟິລຖືກກຳນົດດ້ວຍ ``Dynamic``." + +#: ../source/specifications/core-metadata.rst:139 +msgid "" +"In any context other than a source distribution, ``Dynamic`` is for " +"information only, and indicates that the field value was calculated at wheel " +"build time, and may not be the same as the value in the sdist or in other " +"wheels for the project." +msgstr "ໃນບໍລິບົດອື່ນໆທີ່ບໍ່ແມ່ນການແຈກຢາຍຊອສ, ``Dynamic`` ແມ່ນເພື່ອເປັນຂໍ້ມູນເທົ່ານັ້ນ." + +#: ../source/specifications/core-metadata.rst:144 +msgid "" +"Note in particular that if you have obtained a prebuilt wheel, you cannot " +"assume that a field which is not marked as ``Dynamic`` will have the same " +"value in other wheels, as some wheels are not built directly from the sdist, " +"but are modified from existing wheels (the ``auditwheel`` tool does this, " +"for example, and it's commonly used when building wheels for PyPI). Such " +"modifications *could* include changing metadata (even non-dynamic " +"metadata). Similarly, if you have a sdist and a wheel which you didn't " +"build from that sdist, you cannot assume that the wheel's metadata matches " +"that of the sdist, even if the field is not marked as ``Dynamic``." +msgstr "" +"ໃຫ້ສັງເກດວ່າຫາກທ່ານໄດ້ຮັບ wheel ທີ່ບິວໄວ້ລ່ວງໜ້າ, ທ່ານບໍ່ສາມາດສົມມຸດໄດ້ວ່າຟິລທີ່ບໍ່ໄດ້ໝາຍວ່າ " +"``Dynamic`` ຈະມີຄ່າດຽວກັນໃນ wheel ອື່ນໆ." + +#: ../source/specifications/core-metadata.rst:154 +msgid "" +"Full details of the semantics of ``Dynamic`` are described in :pep:`643`." +msgstr "ລາຍລະອຽດທັງໝົດຂອງຄວາມໝາຍຂອງ ``Dynamic`` ແມ່ນໄດ້ຖືກອະທິບາຍໄວ້ໃນ :pep:`643`." + +#: ../source/specifications/core-metadata.rst:159 +msgid "Platform (multiple use)" +msgstr "ແພລັດຟອມ (ໃຊ້ໄດ້ຫຼາຍຄັ້ງ)" + +#: ../source/specifications/core-metadata.rst:163 +msgid "" +"A Platform specification describing an operating system supported by the " +"distribution which is not listed in the \"Operating System\" Trove " +"classifiers. See \"Classifier\" below." +msgstr "ຂໍ້ກຳນົດແພລັດຟອມທີ່ອະທິບາຍລະບົບປະຕິບັດການທີ່ການແຈກຢາຍຮອງຮັບ." + +#: ../source/specifications/core-metadata.rst:167 +#: ../source/specifications/core-metadata.rst:473 +#: ../source/specifications/core-metadata.rst:500 +#: ../source/specifications/core-metadata.rst:523 +#: ../source/specifications/core-metadata.rst:552 +#: ../source/specifications/core-metadata.rst:593 +#: ../source/specifications/core-metadata.rst:649 +#: ../source/specifications/core-metadata.rst:783 +#: ../source/specifications/core-metadata.rst:824 +#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:991 +#: ../source/specifications/core-metadata.rst:1013 +msgid "Examples::" +msgstr "ຕົວຢ່າງ::" + +#: ../source/specifications/core-metadata.rst:175 +msgid "Supported-Platform (multiple use)" +msgstr "Supported-Platform (ໃຊ້ໄດ້ຫຼາຍຄັ້ງ)" + +#: ../source/specifications/core-metadata.rst:179 +msgid "" +"Binary distributions containing a PKG-INFO file will use the Supported-" +"Platform field in their metadata to specify the OS and CPU for which the " +"binary distribution was compiled. The semantics of the Supported-Platform " +"field are not specified in this PEP." +msgstr "" +"ການແຈກຢາຍແບບບາຍນາຣີຈະໃຊ້ຟິລ Supported-Platform ໃນ metadata ເພື່ອລະບຸ OS ແລະ CPU." + +#: ../source/specifications/core-metadata.rst:193 +msgid "Summary" +msgstr "" + +#: ../source/specifications/core-metadata.rst:197 +msgid "A one-line summary of what the distribution does." +msgstr "ບົດສະຫຼຸບບັນທັດດຽວກ່ຽວກັບສິ່ງທີ່ການແຈກຢາຍນັ້ນເຮັດ." + +#: ../source/specifications/core-metadata.rst:217 +msgid "This field may be specified in the message body instead." +msgstr "ຟິລນີ້ອາດຈະຖືກລະບຸໄວ້ໃນສ່ວນເນື້ອຫາຂອງຂໍ້ຄວາມແທນ." + +#: ../source/specifications/core-metadata.rst:220 +msgid "" +"A longer description of the distribution that can run to several " +"paragraphs. Software that deals with metadata should not assume any maximum " +"size for this field, though people shouldn't include their instruction " +"manual as the description." +msgstr "ຄຳອະທິບາຍທີ່ຍາວກວ່າຂອງການແຈກຢາຍ ເຊິ່ງອາດມີຄວາມຍາວຫຼາຍຫຍໍ້ໜ້າ." + +#: ../source/specifications/core-metadata.rst:225 +msgid "" +"The contents of this field can be written using reStructuredText markup " +"[1]_. For programs that work with the metadata, supporting markup is " +"optional; programs can also display the contents of the field as-is. This " +"means that authors should be conservative in the markup they use." +msgstr "ເນື້ອໃນຂອງຟິລນີ້ສາມາດຂຽນໂດຍໃຊ້ reStructuredText markup." + +#: ../source/specifications/core-metadata.rst:231 +msgid "" +"To support empty lines and lines with indentation with respect to the RFC " +"822 format, any CRLF character has to be suffixed by 7 spaces followed by a " +"pipe (\"|\") char. As a result, the Description field is encoded into a " +"folded field that can be interpreted by RFC822 parser [2]_." +msgstr "ເພື່ອຮອງຮັບບັນທັດວ່າງ ແລະ ບັນທັດທີ່ມີການຍໍ້ໜ້າ." + +#: ../source/specifications/core-metadata.rst:248 +msgid "" +"This encoding implies that any occurrences of a CRLF followed by 7 spaces " +"and a pipe char have to be replaced by a single CRLF when the field is " +"unfolded using a RFC822 reader." +msgstr "" +"ການເຂົ້າລະຫັດນີ້ໝາຍຄວາມວ່າ ທຸກໆການປາກົດຂອງ CRLF ຕາມດ້ວຍຍະຫວ່າງ 7 ຕົວ ແລະ ເຄື່ອງໝາຍ pipe " +"ຈະຕ້ອງຖືກແທນທີ່ດ້ວຍ CRLF ຕົວດຽວ." + +#: ../source/specifications/core-metadata.rst:252 +msgid "" +"Alternatively, the distribution's description may instead be provided in the " +"message body (i.e., after a completely blank line following the headers, " +"with no indentation or other special formatting necessary)." +msgstr "ອີກທາງເລືອກໜຶ່ງ, ຄຳອະທິບາຍຂອງການແຈກຢາຍອາດຈະຖືກລະບຸໄວ້ໃນສ່ວນເນື້ອຫາຂອງຂໍ້ຄວາມ." + +#: ../source/specifications/core-metadata.rst:261 +msgid "Description-Content-Type" +msgstr "Description-Content-Type" + +#: ../source/specifications/core-metadata.rst:265 +msgid "" +"A string stating the markup syntax (if any) used in the distribution's " +"description, so that tools can intelligently render the description." +msgstr "ສະຕຣິງທີ່ລະບຸໄວຍາກອນ markup (ຖ້າມີ) ທີ່ໃຊ້ໃນຄຳອະທິບາຍຂອງການແຈກຢາຍ." + +#: ../source/specifications/core-metadata.rst:268 +msgid "" +"Historically, PyPI supported descriptions in plain text and " +"`reStructuredText (reST) `_, and could render reST into HTML. However, it is " +"common for distribution authors to write the description in `Markdown " +"`_ (:rfc:`7763`) as many code " +"hosting sites render Markdown READMEs, and authors would reuse the file for " +"the description. PyPI didn't recognize the format and so could not render " +"the description correctly. This resulted in many packages on PyPI with " +"poorly-rendered descriptions when Markdown is left as plain text, or worse, " +"was attempted to be rendered as reST. This field allows the distribution " +"author to specify the format of their description, opening up the " +"possibility for PyPI and other tools to be able to render Markdown and other " +"formats." +msgstr "" +"ໃນອະດີດ, PyPI ຮອງຮັບຄຳອະທິບາຍໃນຮູບແບບ plain text ແລະ reStructuredText. " +"ຟິລນີ້ຊ່ວຍໃຫ້ຜູ້ຂຽນການແຈກຢາຍສາມາດລະບຸຮູບແບບຄຳອະທິບາຍຂອງພວກເຂົາໄດ້, ເຊິ່ງຊ່ວຍໃຫ້ PyPI ແລະ " +"ເຄື່ອງມືອື່ນໆສາມາດສະແດງຜົນ Markdown ແລະ ຮູບແບບອື່ນໆໄດ້." + +#: ../source/specifications/core-metadata.rst:281 +msgid "" +"The format of this field is the same as the ``Content-Type`` header in HTTP " +"(i.e.: `RFC 1341 `_). Briefly, this means that it has a ``type/subtype`` part and " +"then it can optionally have a number of parameters:" +msgstr "" +"ຮູບແບບຂອງຊ່ອງຂໍ້ມູນນີ້ແມ່ນຄືກັນກັບສ່ວນຫົວ (header) ``Content-Type`` ໃນ HTTP (ຕົວຢ່າງ: `RFC " +"1341 `_). ໂດຍຫຍໍ້, " +"ນີ້ໝາຍຄວາມວ່າມັນມີສ່ວນ ``type/subtype`` ແລະ ສາມາດມີ ພາລາມິເຕີ (parameters) ເພີ່ມເຕີມໄດ້:" + +#: ../source/specifications/core-metadata.rst:287 +msgid "Format::" +msgstr "ຮູບແບບ::" + +#: ../source/specifications/core-metadata.rst:291 +msgid "The ``type/subtype`` part has only a few legal values:" +msgstr "ສ່ວນຂອງ ``type/subtype`` ມີພຽງແຕ່ບາງຄ່າເທົ່ານັ້ນທີ່ຖືກຕ້ອງຕາມຂໍ້ກຳນົດ:" + +#: ../source/specifications/core-metadata.rst:293 +msgid "``text/plain``" +msgstr "``text/plain``" + +#: ../source/specifications/core-metadata.rst:294 +msgid "``text/x-rst``" +msgstr "``text/x-rst``" + +#: ../source/specifications/core-metadata.rst:295 +msgid "``text/markdown``" +msgstr "``text/markdown``" + +#: ../source/specifications/core-metadata.rst:297 +msgid "" +"The ``charset`` parameter can be used to specify the character encoding of " +"the description. The only legal value is ``UTF-8``. If omitted, it is " +"assumed to be ``UTF-8``." +msgstr "" +"ພາລາມິເຕີ ``charset`` ສາມາດໃຊ້ເພື່ອລະບຸການເຂົ້າລະຫັດຕົວອັກສອນຂອງຄຳອະທິບາຍ. " +"ຄ່າດຽວທີ່ຖືກຕ້ອງແມ່ນ ``UTF-8``. ຖ້າຫາກລະໄວ້, ຈະຖືວ່າເປັນ ``UTF-8`` ໂດຍອັດຕະໂນມັດ." + +#: ../source/specifications/core-metadata.rst:301 +msgid "" +"Other parameters might be specific to the chosen subtype. For example, for " +"the ``markdown`` subtype, there is an optional ``variant`` parameter that " +"allows specifying the variant of Markdown in use (defaults to ``GFM`` if not " +"specified). Currently, two variants are recognized:" +msgstr "" +"ພາລາມິເຕີອື່ນໆ ອາດຈະສະເພາະເຈາະຈົງກັບປະເພດຍ່ອຍ (subtype) ທີ່ເລືອກ. ຕົວຢ່າງ, ສຳລັບ ປະເພດຍ່ອຍ " +"``markdown``, ຈະມີພາລາມິເຕີ ``variant`` ທີ່ສາມາດລະບຸຮູບແບບຂອງ Markdown ທີ່ໃຊ້ໄດ້ " +"(ຄ່າເລີ່ມຕົ້ນແມ່ນ ``GFM`` ຖ້າບໍ່ໄດ້ລະບຸ). ໃນປັດຈຸບັນ, ມີສອງຮູບແບບທີ່ຮອງຮັບ:" + +#: ../source/specifications/core-metadata.rst:306 +msgid "``GFM`` for :rfc:`GitHub-flavored Markdown <7764#section-3.2>`" +msgstr "``GFM`` ສຳລັບ :rfc:`GitHub-flavored Markdown <7764#section-3.2>`" + +#: ../source/specifications/core-metadata.rst:307 +msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" +msgstr "``CommonMark`` ສຳລັບ :rfc:`CommonMark <7764#section-3.5>`" + +#: ../source/specifications/core-metadata.rst:325 +msgid "" +"If a ``Description-Content-Type`` is not specified, then applications should " +"attempt to render it as ``text/x-rst; charset=UTF-8`` and fall back to " +"``text/plain`` if it is not valid rst." +msgstr "" +"ຖ້າບໍ່ໄດ້ລະບຸ ``Description-Content-Type``, ແອັບພລິເຄຊັນຄວນພະຍາຍາມ ສະແດງຜົນເປັນ ``text/" +"x-rst; charset=UTF-8`` ແລະ ຖ້າຫາກບໍ່ແມ່ນ rst ທີ່ຖືກຕ້ອງ ໃຫ້ກັບໄປໃຊ້ ``text/plain`` ແທນ." + +#: ../source/specifications/core-metadata.rst:329 +msgid "" +"If a ``Description-Content-Type`` is an unrecognized value, then the assumed " +"content type is ``text/plain`` (Although PyPI will probably reject anything " +"with an unrecognized value)." +msgstr "" +"ຖ້າ ``Description-Content-Type`` ເປັນຄ່າທີ່ບໍ່ຮູ້ຈັກ, ຈະຖືວ່າປະເພດເນື້ອຫາແມ່ນ ``text/" +"plain`` (ເຖິງແມ່ນວ່າ PyPI ອາດຈະປະຕິເສດທຸກຢ່າງທີ່ມີຄ່າທີ່ບໍ່ຮູ້ຈັກກໍຕາມ)." + +#: ../source/specifications/core-metadata.rst:333 +msgid "" +"If the ``Description-Content-Type`` is ``text/markdown`` and ``variant`` is " +"not specified or is set to an unrecognized value, then the assumed " +"``variant`` is ``GFM``." +msgstr "" +"ຖ້າ ``Description-Content-Type`` ແມ່ນ ``text/markdown`` ແລະ ບໍ່ໄດ້ລະບຸ ``variant`` " +"ຫຼື ລະບຸເປັນຄ່າທີ່ບໍ່ຮູ້ຈັກ, ຈະຖືວ່າ ``variant`` ແມ່ນ ``GFM``." + +#: ../source/specifications/core-metadata.rst:337 +msgid "" +"So for the last example above, the ``charset`` defaults to ``UTF-8`` and the " +"``variant`` defaults to ``GFM`` and thus it is equivalent to the example " +"before it." +msgstr "" +"ດັ່ງນັ້ນ, ສຳລັບຕົວຢ່າງສຸດທ້າຍຂ້າງເທິງ, ``charset`` ຈະເປັນ ``UTF-8`` ແລະ ``variant`` " +"ຈະເປັນ ``GFM`` ໂດຍເລີ່ມຕົ້ນ, ເຊິ່ງມັນຈະມີຄ່າເທົ່າກັບຕົວຢ່າງກ່ອນໜ້ານັ້ນ." + +#: ../source/specifications/core-metadata.rst:346 +msgid "Keywords" +msgstr "ຄຳສັບຫຼັກ" + +#: ../source/specifications/core-metadata.rst:350 +msgid "" +"A list of additional keywords, separated by commas, to be used to assist " +"searching for the distribution in a larger catalog." +msgstr "" +"ລາຍຊື່ຄຳສັບຫຼັກເພີ່ມເຕີມ, ແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ, ເພື່ອໃຊ້ຊ່ວຍໃນການຄົ້ນຫາ ຊຸດໂປຣແກຣມ " +"(distribution) ໃນບັນຊີລາຍຊື່ທີ່ໃຫຍ່ກວ່າ." + +#: ../source/specifications/core-metadata.rst:359 +msgid "" +"The specification previously showed keywords separated by spaces, but " +"distutils and setuptools implemented it with commas. These tools have been " +"very widely used for many years, so it was easier to update the " +"specification to match the de facto standard." +msgstr "" +"ໃນເມື່ອກ່ອນ ຂໍ້ກຳນົດໄດ້ສະແດງຄຳສັບຫຼັກໂດຍແຍກດ້ວຍຍະຫວ່າງ, ແຕ່ distutils ແລະ setuptools " +"ໄດ້ນຳໃຊ້ເຄື່ອງໝາຍຈຸດແທນ. ເນື່ອງຈາກເຄື່ອງມືເຫຼົ່ານີ້ຖືກນຳໃຊ້ຢ່າງກວ້າງຂວາງ ມາເປັນເວລາຫຼາຍປີ, " +"ມັນຈຶ່ງງ່າຍກວ່າທີ່ຈະປັບປຸງຂໍ້ກຳນົດໃຫ້ກົງກັບມາດຕະຖານທີ່ໃຊ້ກັນແທ້." + +#: ../source/specifications/core-metadata.rst:368 +msgid "Author" +msgstr "ຜູ້ຂຽນ" + +#: ../source/specifications/core-metadata.rst:372 +msgid "" +"A string containing the author's name at a minimum; additional contact " +"information may be provided." +msgstr "ຂໍ້ຄວາມທີ່ລະບຸຊື່ຂອງຜູ້ຂຽນເປັນຢ່າງໜ້ອຍ; ສາມາດໃຫ້ຂໍ້ມູນການຕິດຕໍ່ເພີ່ມເຕີມໄດ້." + +#: ../source/specifications/core-metadata.rst:385 +msgid "Author-email" +msgstr "ອີເມລຜູ້ຂຽນ" + +#: ../source/specifications/core-metadata.rst:389 +msgid "" +"A string containing the author's e-mail address. It can contain a name and " +"e-mail address in the legal forms for a RFC-822 ``From:`` header." +msgstr "" +"ຂໍ້ຄວາມທີ່ລະບຸທີ່ຢູ່ນຳເມລຂອງຜູ້ຂຽນ. ສາມາດປະກອບມີຊື່ ແລະ ອີເມລ ໃນຮູບແບບທີ່ຖືກຕ້ອງ ຕາມສ່ວນຫົວ " +"``From:`` ຂອງ RFC-822." + +#: ../source/specifications/core-metadata.rst:397 +#: ../source/specifications/core-metadata.rst:444 +msgid "" +"Per RFC-822, this field may contain multiple comma-separated e-mail " +"addresses::" +msgstr "ຕາມ RFC-822, ຊ່ອງຂໍ້ມູນນີ້ອາດຈະມີຫຼາຍອີເມລ ໂດຍແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ::" + +#: ../source/specifications/core-metadata.rst:407 +msgid "Maintainer" +msgstr "ຜູ້ດູແລ" + +#: ../source/specifications/core-metadata.rst:411 +msgid "" +"A string containing the maintainer's name at a minimum; additional contact " +"information may be provided." +msgstr "ຂໍ້ຄວາມທີ່ລະບຸຊື່ຂອງຜູ້ດູແລເປັນຢ່າງໜ້ອຍ; ສາມາດໃຫ້ຂໍ້ມູນການຕິດຕໍ່ເພີ່ມເຕີມໄດ້." + +#: ../source/specifications/core-metadata.rst:414 +msgid "" +"Note that this field is intended for use when a project is being maintained " +"by someone other than the original author: it should be omitted if it is " +"identical to ``Author``." +msgstr "" +"ໝາຍເຫດ: ຊ່ອງຂໍ້ມູນນີ້ມີໄວ້ສຳລັບໃຊ້ໃນກໍລະນີທີ່ໂຄງການຖືກດູແລໂດຍບຸກຄົນອື່ນທີ່ບໍ່ແມ່ນ ຜູ້ຂຽນດັ້ງເດີມ: " +"ຄວນລະໄວ້ຖ້າຫາກວ່າມັນຄືກັນກັບ ``Author``." + +#: ../source/specifications/core-metadata.rst:428 +msgid "Maintainer-email" +msgstr "ອີເມລຜູ້ດູແລ" + +#: ../source/specifications/core-metadata.rst:432 +msgid "" +"A string containing the maintainer's e-mail address. It can contain a name " +"and e-mail address in the legal forms for a RFC-822 ``From:`` header." +msgstr "" +"ຂໍ້ຄວາມທີ່ລະບຸທີ່ຢູ່ນຳເມລຂອງຜູ້ດູແລ. ສາມາດປະກອບມີຊື່ ແລະ ອີເມລ ໃນຮູບແບບທີ່ຖືກຕ້ອງ ຕາມສ່ວນຫົວ " +"``From:`` ຂອງ RFC-822." + +#: ../source/specifications/core-metadata.rst:436 +msgid "" +"Note that this field is intended for use when a project is being maintained " +"by someone other than the original author: it should be omitted if it is " +"identical to ``Author-email``." +msgstr "" +"ໝາຍເຫດ: ຊ່ອງຂໍ້ມູນນີ້ມີໄວ້ສຳລັບໃຊ້ໃນກໍລະນີທີ່ໂຄງການຖືກດູແລໂດຍບຸກຄົນອື່ນທີ່ບໍ່ແມ່ນ ຜູ້ຂຽນດັ້ງເດີມ: " +"ຄວນລະໄວ້ຖ້າຫາກວ່າມັນຄືກັນກັບ ``Author-email``." + +#: ../source/specifications/core-metadata.rst:454 +msgid "License" +msgstr "ໃບອະນຸຍາດ" + +#: ../source/specifications/core-metadata.rst:457 +msgid "in favour of ``License-Expression``." +msgstr "ເພື່ອສະໜັບສະໜູນ ``License-Expression``." + +#: ../source/specifications/core-metadata.rst:461 +msgid "" +"As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " +"exclusive. If both are specified, tools which parse metadata will disregard " +"``License`` and PyPI will reject uploads. See `PEP 639 `__." +msgstr "" +"ຕັ້ງແຕ່ Metadata 2.4 ເປັນຕົ້ນໄປ, ``License`` ແລະ ``License-Expression`` ບໍ່ສາມາດ " +"ໃຊ້ຮ່ວມກັນໄດ້. ຖ້າລະບຸທັງສອງຢ່າງ, ເຄື່ອງມືທີ່ອ່ານຂໍ້ມູນກຳກັບຈະບໍ່ສົນໃຈ ``License`` ແລະ PyPI " +"ຈະປະຕິເສດການອັບໂຫຼດ. ເບິ່ງ `PEP 639 `__." + +#: ../source/specifications/core-metadata.rst:466 +msgid "" +"Text indicating the license covering the distribution where the license is " +"not a selection from the \"License\" Trove classifiers. " +"See :ref:`\"Classifier\" ` below. This field may also " +"be used to specify a particular version of a license which is named via the " +"``Classifier`` field, or to indicate a variation or exception to such a " +"license." +msgstr "" +"ຂໍ້ຄວາມທີ່ລະບຸໃບອະນຸຍາດທີ່ຄຸ້ມຄອງຊຸດໂປຣແກຣມ ໃນກໍລະນີທີ່ໃບອະນຸຍາດນັ້ນບໍ່ມີໃຫ້ເລືອກ ໃນ \"License\" " +"Trove classifiers. ເບິ່ງ :ref:`\"Classifier\" ` ດ້ານລຸ່ມ. " +"ຊ່ອງຂໍ້ມູນນີ້ຍັງສາມາດໃຊ້ເພື່ອລະບຸເວີຊັນສະເພາະຂອງໃບອະນຸຍາດ ທີ່ຖືກລະບຸຜ່ານຊ່ອງ ``Classifier``, ຫຼື " +"ເພື່ອລະບຸການປ່ຽນແປງ ຫຼື ຂໍ້ຍົກເວັ້ນຂອງໃບອະນຸຍາດດັ່ງກ່າວ." + +#: ../source/specifications/core-metadata.rst:486 +msgid "License-Expression" +msgstr "ການລະບຸໃບອະນຸຍາດ (License-Expression)" + +#: ../source/specifications/core-metadata.rst:490 +msgid "" +"Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." +msgstr "" +"ຂໍ້ຄວາມທີ່ເປັນ SPDX :term:`license expression ` ທີ່ຖືກຕ້ອງ, " +"ຕາມທີ່ລະບຸໄວ້ໃນ :doc:`/specifications/license-expression`." + +#: ../source/specifications/core-metadata.rst:494 +msgid "" +"Note that the expression in this field only applies to " +"the :term:`Distribution Archive` containing the metadata with this field " +"(e.g., :term:`Source Distribution ` " +"or :term:`Wheel`), not the project overall or other files related to the " +"project (including other distribution archives)." +msgstr "" +"ໝາຍເຫດ: ການລະບຸໃນຊ່ອງຂໍ້ມູນນີ້ມີຜົນສະເພາະກັບ :term:`Distribution Archive` " +"ທີ່ບັນຈຸຂໍ້ມູນກຳກັບນີ້ເທົ່ານັ້ນ (ເຊັ່ນ: :term:`Source Distribution ` ຫຼື :term:`Wheel`), ບໍ່ມີຜົນກັບໂຄງການໂດຍລວມ ຫຼື ໄຟລ໌ອື່ນໆ ທີ່ກ່ຽວຂ້ອງກັບໂຄງການ " +"(ລວມເຖິງ distribution archives ອື່ນໆ)." + +#: ../source/specifications/core-metadata.rst:515 +msgid "License-File (multiple use)" +msgstr "ໄຟລ໌ໃບອະນຸຍາດ (License-File) (ໃຊ້ໄດ້ຫຼາຍຄັ້ງ)" + +#: ../source/specifications/core-metadata.rst:519 +msgid "" +"Each entry is a string representation of the path of a license-related file. " +"The path is located within the project source tree, relative to the project " +"root directory. For details see :pep:`639`." +msgstr "" +"ແຕ່ລະລາຍການແມ່ນຂໍ້ຄວາມທີ່ລະບຸເສັ້ນທາງ (path) ຂອງໄຟລ໌ທີ່ກ່ຽວຂ້ອງກັບໃບອະນຸຍາດ. " +"ເສັ້ນທາງດັ່ງກ່າວຕ້ອງຢູ່ໃນໂຄງສ້າງໄຟລ໌ຂອງໂຄງການ, ໂດຍທຽບກັບໂຟນເດີຫຼັກຂອງໂຄງການ. " +"ເບິ່ງລາຍລະອຽດໃນ :pep:`639`." + +#: ../source/specifications/core-metadata.rst:536 +msgid "Classifier (multiple use)" +msgstr "ການຈັດປະເພດ (Classifier) (ໃຊ້ໄດ້ຫຼາຍຄັ້ງ)" + +#: ../source/specifications/core-metadata.rst:540 +msgid "" +"Each entry is a string giving a single classification value for the " +"distribution. Classifiers are described in :pep:`301`, and the Python " +"Package Index publishes a dynamic list of `currently defined classifiers " +"`__." +msgstr "" +"ແຕ່ລະລາຍການແມ່ນຂໍ້ຄວາມທີ່ລະບຸຄ່າການຈັດປະເພດຢ່າງໃດຢ່າງໜຶ່ງສຳລັບຊຸດໂປຣແກຣມ. " +"ການຈັດປະເພດຖືກອະທິບາຍໄວ້ໃນ :pep:`301`, ແລະ Python Package Index ຈະເຜີຍແຜ່ " +"ລາຍຊື່ການຈັດປະເພດທີ່ກຳນົດໄວ້ໃນປັດຈຸບັນທີ່ `https://pypi.org/classifiers/`." + +#: ../source/specifications/core-metadata.rst:546 +msgid "" +"The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " +"``License-Expression`` instead. See `PEP 639 `_." +msgstr "" +"ການໃຊ້ ``License ::`` classifiers ແມ່ນຖືກຍົກເລີກແລ້ວຕັ້ງແຕ່ Metadata 2.4, ໃຫ້ໃຊ້ " +"``License-Expression`` ແທນ. ເບິ່ງ `PEP 639 `_." + +#: ../source/specifications/core-metadata.rst:550 +#: ../source/specifications/core-metadata.rst:640 +#: ../source/specifications/core-metadata.rst:879 +#: ../source/specifications/core-metadata.rst:904 +msgid "This field may be followed by an environment marker after a semicolon." +msgstr "ຊ່ອງຂໍ້ມູນນີ້ອາດຈະຕາມດ້ວຍ environment marker ຫຼັງເຄື່ອງໝາຍຈຳເມັດ (semicolon)." + +#: ../source/specifications/core-metadata.rst:561 +msgid "Requires-Dist (multiple use)" +msgstr "ຕ້ອງການ-ຊຸດໂປຣແກຣມ (Requires-Dist) (ໃຊ້ໄດ້ຫຼາຍຄັ້ງ)" + +#: ../source/specifications/core-metadata.rst:564 +#: ../source/specifications/core-metadata.rst:627 +#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:893 +msgid "" +"The field format specification was relaxed to accept the syntax used by " +"popular publishing tools." +msgstr "" +"ຂໍ້ກຳນົດຮູບແບບຂອງຊ່ອງຂໍ້ມູນຖືກປັບປ່ຽນໃຫ້ຢືດຢຸ່ນຂຶ້ນ ເພື່ອຮອງຮັບຮູບແບບໄວຍາກອນ " +"ທີ່ໃຊ້ໂດຍເຄື່ອງມືເຜີຍແຜ່ຍອດນິຍົມ." + +#: ../source/specifications/core-metadata.rst:568 +msgid "" +"Each entry contains a string naming some other distutils project required by " +"this distribution." +msgstr "" +"ແຕ່ລະລາຍການປະກອບມີຂໍ້ຄວາມທີ່ລະບຸຊື່ຂອງໂຄງການ distutils ອື່ນໆ ທີ່ຊຸດໂປຣແກຣມນີ້ ຈຳເປັນຕ້ອງໃຊ້." + +#: ../source/specifications/core-metadata.rst:571 +msgid "The format of a requirement string contains from one to four parts:" +msgstr "ຮູບແບບຂອງຂໍ້ຄວາມຄວາມຕ້ອງການ (requirement string) ປະກອບມີແຕ່ 1 ຫາ 4 ສ່ວນ:" + +#: ../source/specifications/core-metadata.rst:573 +msgid "" +"A project name, in the same format as the ``Name:`` field. The only " +"mandatory part." +msgstr "ຊື່ໂຄງການ, ໃນຮູບແບບດຽວກັນກັບຊ່ອງຂໍ້ມູນ ``Name:``. ເປັນສ່ວນດຽວທີ່ຕ້ອງມີ." + +#: ../source/specifications/core-metadata.rst:575 +msgid "" +"A comma-separated list of 'extra' names. These are defined by the required " +"project, referring to specific features which may need extra dependencies. " +"The names MUST conform to the restrictions specified by the ``Provides-" +"Extra:`` field." +msgstr "" +"ລາຍຊື່ 'extra' ແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ. ສິ່ງເຫຼົ່ານີ້ຖືກກຳນົດໂດຍໂຄງການທີ່ຖືກຮຽກໃຊ້, " +"ໂດຍອ້າງອີງເຖິງຟີເຈີສະເພາະທີ່ອາດຕ້ອງການສິ່ງທີ່ຈຳເປັນເພີ່ມເຕີມ. ຊື່ເຫຼົ່ານີ້ຕ້ອງເປັນໄປຕາມ " +"ຂໍ້ຈຳກັດທີ່ລະບຸໄວ້ໃນຊ່ອງຂໍ້ມູນ ``Provides-Extra:``." + +#: ../source/specifications/core-metadata.rst:579 +msgid "" +"A version specifier. Tools parsing the format should accept optional " +"parentheses around this, but tools generating it should not use parentheses." +msgstr "" +"ການລະບຸເວີຊັນ. ເຄື່ອງມືທີ່ອ່ານຮູບແບບນີ້ຄວນຮອງຮັບວົງເລັບອ້ອມຮອບ, ແຕ່ເຄື່ອງມືທີ່ ສ້າງຂໍ້ມູນນີ້ບໍ່ຄວນໃຊ້ວົງເລັບ." + +#: ../source/specifications/core-metadata.rst:582 +msgid "" +"An environment marker after a semicolon. This means that the requirement is " +"only needed in the specified conditions." +msgstr "" +"ຕົວໝາຍສະພາວະແວດລ້ອມຫຼັງເຄື່ອງໝາຍຈ້ຳຈຸດ. ນີ້ໝາຍຄວາມວ່າຂໍ້ກຳນົດນັ້ນແມ່ນຈຳເປັນໃນເງື່ອນໄຂທີ່ລະບຸໄວ້ເທົັ້ນັ້ນ." + +#: ../source/specifications/core-metadata.rst:585 +msgid "" +"The project names should correspond to names as found on the `Python Package " +"Index`_." +msgstr "ຊື່ໂຄງການຄວນກົງກັບຊື່ທີ່ພົບໃນ `Python Package Index`_." + +#: ../source/specifications/core-metadata.rst:588 +msgid "" +"Version specifiers must follow the rules described in :doc:`version-" +"specifiers`." +msgstr "ການລະບຸເວີຊັນຕ້ອງປະຕິບັດຕາມກົດເກນທີ່ອະທິບາຍໄວ້ໃນ :doc:`version-specifiers`." + +#: ../source/specifications/core-metadata.rst:591 +msgid "" +"See :ref:`dependency-specifiers` for full details of the allowed format." +msgstr "ເບິ່ງ :ref:`dependency-specifiers` ສຳລັບລາຍລະອຽດທັງໝົດຂອງຮູບແບບທີ່ອະນຸຍາດ." + +#: ../source/specifications/core-metadata.rst:604 +msgid "Requires-Python" +msgstr "" + +#: ../source/specifications/core-metadata.rst:608 +msgid "" +"This field specifies the Python version(s) that the distribution is " +"compatible with. Installation tools may look at this when picking which " +"version of a project to install." +msgstr "" +"ຊ່ອງຂໍ້ມູນນີ້ລະບຸເວີຊັນຂອງ Python ທີ່ຊຸດໂປຣແກຣມນີ້ຮອງຮັບ. ເຄື່ອງມືໃນການຕິດຕັ້ງ " +"ອາດຈະກວດເບິ່ງສ່ວນນີ້ໃນເວລາເລືອກເວີຊັນຂອງໂຄງການທີ່ຈະຕິດຕັ້ງ." + +#: ../source/specifications/core-metadata.rst:612 +msgid "The value must be in the format specified in :doc:`version-specifiers`." +msgstr "ຄ່າຕ້ອງຢູ່ໃນຮູບແບບທີ່ລະບຸໄວ້ໃນ :doc:`version-specifiers`." + +#: ../source/specifications/core-metadata.rst:614 +msgid "" +"For example, if a distribution uses :ref:`f-strings ` " +"then it may prevent installation on Python < 3.6 by specifying::" +msgstr "" +"ຕົວຢ່າງ, ຖ້າຊຸດໂປຣແກຣມໃຊ້ :ref:`f-strings `, ມັນອາດຈະ " +"ປ້ອງກັນການຕິດຕັ້ງໃນ Python ທີ່ຕ່ຳກວ່າ 3.6 ໂດຍການລະບຸ::" + +#: ../source/specifications/core-metadata.rst:619 +msgid "This field cannot be followed by an environment marker." +msgstr "ຊ່ອງຂໍ້ມູນນີ້ບໍ່ສາມາດຕາມດ້ວຍ environment marker ໄດ້." + +#: ../source/specifications/core-metadata.rst:624 +msgid "Requires-External (multiple use)" +msgstr "ຕ້ອງການ-ພາຍນອກ (Requires-External) (ໃຊ້ໄດ້ຫຼາຍຄັ້ງ)" + +#: ../source/specifications/core-metadata.rst:631 +msgid "" +"Each entry contains a string describing some dependency in the system that " +"the distribution is to be used. This field is intended to serve as a hint " +"to downstream project maintainers, and has no semantics which are meaningful " +"to the ``distutils`` distribution." +msgstr "" +"ແຕ່ລະລາຍການປະກອບມີຂໍ້ຄວາມທີ່ອະທິບາຍເຖິງສິ່ງທີ່ຈຳເປັນບາງຢ່າງໃນລະບົບທີ່ຊຸດໂປຣແກຣມ ຕ້ອງການໃຊ້. " +"ຊ່ອງຂໍ້ມູນນີ້ມີຈຸດປະສົງເພື່ອເປັນຄຳແນະນຳໃຫ້ກັບຜູ້ດູແລໂຄງການປາຍທາງ, ແລະ " +"ບໍ່ມີຄວາມໝາຍທາງໄວຍາກອນສຳລັບຊຸດໂປຣແກຣມ ``distutils``." + +#: ../source/specifications/core-metadata.rst:636 +msgid "" +"The format of a requirement string is a name of an external dependency, " +"optionally followed by a version declaration within parentheses." +msgstr "" +"ຮູບແບບຂອງຂໍ້ຄວາມຄວາມຕ້ອງການແມ່ນຊື່ຂອງສິ່ງທີ່ຈຳເປັນພາຍນອກ, ແລະ ສາມາດຕາມດ້ວຍ " +"ການລະບຸເວີຊັນພາຍໃນວົງເລັບໄດ້." + +#: ../source/specifications/core-metadata.rst:642 +msgid "" +"Because they refer to non-Python software releases, version numbers for this " +"field are **not** required to conform to the format specified in " +"the :ref:`Version specifier specification `: they should " +"correspond to the version scheme used by the external dependency." +msgstr "" +"ເນື່ອງຈາກມັນອ້າງອີງເຖິງຊອບແວທີ່ບໍ່ແມ່ນ Python, ເລກເວີຊັນສຳລັບຊ່ອງຂໍ້ມູນນີ້ **ບໍ່ຈຳເປັນ** " +"ຕ້ອງເປັນໄປຕາມຮູບແບບທີ່ລະບຸໄວ້ໃນ :ref:`Version specifier specification `: ແຕ່ຄວນກົງກັບຮູບແບບເວີຊັນທີ່ໃຊ້ໂດຍຊອບແວພາຍນອກນັ້ນ." + +#: ../source/specifications/core-metadata.rst:647 +msgid "Notice that there is no particular rule on the strings to be used." +msgstr "ສັງເກດວ່າບໍ່ມີກົດເກນສະເພາະເຈາະຈົງກ່ຽວກັບຂໍ້ຄວາມທີ່ຈະນຳໃຊ້." + +#: ../source/specifications/core-metadata.rst:659 +msgid "Project-URL (multiple-use)" +msgstr "Project-URL (ໃຊ້ໄດ້ຫຼາຍຄັ້ງ)" + +#: ../source/specifications/core-metadata.rst:663 +msgid "" +"A string containing a browsable URL for the project and a label for it, " +"separated by a comma." +msgstr "" +"ຂໍ້ຄວາມທີ່ປະກອບມີ URL ຂອງໂຄງການທີ່ສາມາດເຂົ້າເບິ່ງໄດ້ ແລະ ປ້າຍຊື່ (label), ແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ." + +#: ../source/specifications/core-metadata.rst:670 +msgid "The label is free text limited to 32 characters." +msgstr "ປ້າຍຊື່ແມ່ນຂໍ້ຄວາມທົ່ວໄປທີ່ຈຳກັດໄວ້ບໍ່ເກີນ 32 ຕົວອັກສອນ." + +#: ../source/specifications/core-metadata.rst:672 +msgid "" +"Starting with :pep:`753`, project metadata consumers (such as the Python " +"Package Index) can use a standard normalization process to discover \"well-" +"known\" labels, which can then be given special presentations when being " +"rendered for human consumption. See :ref:`well-known-project-urls`." +msgstr "" +"ເລີ່ມຕັ້ງແຕ່ :pep:`753`, ຜູ້ໃຊ້ຂໍ້ມູນກຳກັບຂອງໂຄງການ (ເຊັ່ນ Python Package Index) " +"ສາມາດໃຊ້ຂະບວນການປັບໃຫ້ເປັນມາດຕະຖານ (normalization) ເພື່ອຄົ້ນຫາປ້າຍຊື່ທີ່ \"ເປັນທີ່ຮູ້ຈັກດີ\", " +"ເຊິ່ງສາມາດສະແດງຜົນໃນຮູບແບບພິເສດເພື່ອໃຫ້ມະນຸດອ່ານໄດ້ງ່າຍ. ເບິ່ງ :ref:`well-known-project-" +"urls`." + +#: ../source/specifications/core-metadata.rst:682 +msgid "Provides-Extra (multiple use)" +msgstr "ໃຫ້-Extra (Provides-Extra) (ໃຊ້ໄດ້ຫຼາຍຄັ້ງ)" + +#: ../source/specifications/core-metadata.rst:685 +msgid "" +":pep:`685` restricted valid values to be unambiguous (i.e. no normalization " +"required). For older metadata versions, value restrictions were brought into " +"line with ``Name:`` and normalization rules were introduced." +msgstr "" +":pep:`685` ໄດ້ຈຳກັດຄ່າທີ່ຖືກຕ້ອງເພື່ອບໍ່ໃຫ້ເກີດຄວາມກຳກວມ (ເຊັ່ນ: ບໍ່ຕ້ອງມີການປັບຄ່າມາດຕະຖານ). " +"ສຳລັບ metadata ເວີຊັນເກົ່າ, ຂໍ້ຈຳກັດຂອງຄ່າຖືກປັບໃຫ້ສອດຄ່ອງກັບ ``Name:`` ແລະ " +"ໄດ້ມີການນຳໃຊ້ກົດເກນການປັບຄ່າມາດຕະຖານ." + +#: ../source/specifications/core-metadata.rst:690 +msgid "" +"A string containing the name of an optional feature. A valid name consists " +"only of lowercase ASCII letters, ASCII numbers, and hyphen. It must start " +"and end with a letter or number. Hyphens cannot be followed by another " +"hyphen. Names are limited to those which match the following regex (which " +"guarantees unambiguity)::" +msgstr "" +"ຂໍ້ຄວາມທີ່ລະບຸຊື່ຂອງຟີເຈີເສີມ. ຊື່ທີ່ຖືກຕ້ອງຕ້ອງປະກອບມີພຽງແຕ່ຕົວອັກສອນ ASCII ຕົວພິມນ້ອຍ, ຕົວເລກ " +"ASCII, ແລະ ເຄື່ອງໝາຍຂີດກາງ (-). ມັນຕ້ອງເລີ່ມຕົ້ນ ແລະ ລົງທ້າຍດ້ວຍຕົວອັກສອນ ຫຼື ຕົວເລກ. " +"ບໍ່ສາມາດໃຊ້ເຄື່ອງໝາຍຂີດກາງສອງອັນຕໍ່ກັນໄດ້. ຊື່ຖືກຈຳກັດໃຫ້ກົງກັບ regex ຕໍ່ໄປນີ້ " +"(ເຊິ່ງຮັບປະກັນວ່າຈະບໍ່ມີຄວາມກຳກວມ)::" + +#: ../source/specifications/core-metadata.rst:698 +msgid "" +"The specified name may be used to make a dependency conditional on whether " +"the optional feature has been requested." +msgstr "" +"ຊື່ທີ່ລະບຸໄວ້ອາດຖືກໃຊ້ເພື່ອເຮັດໃຫ້ສິ່ງທີ່ຈຳເປັນ (dependency) ຂຶ້ນກັບເງື່ອນໄຂ " +"ວ່າໄດ້ມີການຮ້ອງຂໍຟີເຈີເສີມນັ້ນຫຼືບໍ່." + +#: ../source/specifications/core-metadata.rst:706 +msgid "" +"A second distribution requires an optional dependency by placing it inside " +"square brackets, and can request multiple features by separating them with a " +"comma (,). The requirements are evaluated for each requested feature and " +"added to the set of requirements for the distribution." +msgstr "" +"ຊຸດໂປຣແກຣມອື່ນສາມາດຮ້ອງຂໍສິ່ງທີ່ຈຳເປັນເສີມ ໂດຍການໃສ່ມັນໄວ້ໃນວົງເລັບຫຼ່ຽມ [], ແລະ " +"ສາມາດຮ້ອງຂໍຫຼາຍຟີເຈີໄດ້ໂດຍແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ (,). ຄວາມຕ້ອງການຈະຖືກ " +"ປະເມີນສຳລັບແຕ່ລະຟີເຈີທີ່ຮ້ອງຂໍ ແລະ ຈະຖືກເພີ່ມເຂົ້າໃນຊຸດຄວາມຕ້ອງການຂອງຊຸດໂປຣແກຣມ." + +#: ../source/specifications/core-metadata.rst:716 +msgid "" +"Two feature names ``test`` and ``doc`` are reserved to mark dependencies " +"that are needed for running automated tests and generating documentation, " +"respectively." +msgstr "" +"ຊື່ຟີເຈີສອງຢ່າງຄື ``test`` ແລະ ``doc`` ແມ່ນຖືກສະຫງວນໄວ້ເພື່ອໝາຍເຖິງ " +"ສິ່ງທີ່ຈຳເປັນສຳລັບການທົດສອບອັດຕະໂນມັດ ແລະ ການສ້າງເອກະສານ ຕາມລຳດັບ." + +#: ../source/specifications/core-metadata.rst:720 +msgid "" +"It is legal to specify ``Provides-Extra:`` without referencing it in any " +"``Requires-Dist:``." +msgstr "" +"ມັນຖືກຕ້ອງຕາມຂໍ້ກຳນົດທີ່ຈະລະບຸ ``Provides-Extra:`` ໂດຍທີ່ບໍ່ໄດ້ອ້າງອີງເຖິງມັນ ໃນ ``Requires-" +"Dist:`` ໃດໆ." + +#: ../source/specifications/core-metadata.rst:723 +msgid "" +"When writing data for older metadata versions, names MUST be normalized " +"following the same rules used for the ``Name:`` field when performing " +"comparisons. Tools writing metadata MUST raise an error if two ``Provides-" +"Extra:`` entries would clash after being normalized." +msgstr "" +"ເມື່ອຂຽນຂໍ້ມູນສຳລັບ metadata ເວີຊັນເກົ່າ, ຊື່ຕ້ອງຖືກປັບຄ່າມາດຕະຖານຕາມກົດເກນດຽວກັນ ທີ່ໃຊ້ກັບຊ່ອງຂໍ້ມູນ " +"``Name:`` ເວລາເຮັດການປຽບທຽບ. ເຄື່ອງມືທີ່ຂຽນ metadata ຕ້ອງ ແຈ້ງຂໍ້ຜິດພາດ (raise an " +"error) ຖ້າຫາກມີສອງລາຍການໃນ ``Provides-Extra:`` ທີ່ຊ້ຳກັນຫຼັງຈາກປັບຄ່າມາດຕະຖານແລ້ວ." + +#: ../source/specifications/core-metadata.rst:728 +msgid "" +"When reading data for older metadata versions, tools SHOULD warn when values " +"for this field would be invalid under newer metadata versions. If a value " +"would be invalid following the rules for ``Name:`` in any core metadata " +"version, the user SHOULD be warned and the value ignored to avoid ambiguity. " +"Tools MAY choose to raise an error when reading an invalid name for older " +"metadata versions." +msgstr "" +"ເມື່ອອ່ານຂໍ້ມູນສຳລັບ metadata ເວີຊັນເກົ່າ, ເຄື່ອງມືຄວນຈະເຕືອນເມື່ອຄ່າໃນຊ່ອງນີ້ ບໍ່ຖືກຕ້ອງຕາມ metadata " +"ເວີຊັນໃໝ່. ຖ້າຄ່າໃດນັ້ນບໍ່ຖືກຕ້ອງຕາມກົດເກນຂອງ ``Name:`` ໃນ core metadata ເວີຊັນໃດໜຶ່ງ, " +"ຄວນເຕືອນຜູ້ໃຊ້ ແລະ ບໍ່ສົນໃຈຄ່ານັ້ນເພື່ອຫຼີກລ່ຽງ ຄວາມກຳກວມ. " +"ເຄື່ອງມືອາດຈະເລືອກແຈ້ງຂໍ້ຜິດພາດເມື່ອອ່ານຊື່ທີ່ບໍ່ຖືກຕ້ອງສຳລັບ metadata ເວີຊັນເກົ່າ." + +#: ../source/specifications/core-metadata.rst:738 +msgid "Import-Name (multiple use)" +msgstr "ຊື່ການນຳເຂົ້າ (Import-Name) (ໃຊ້ໄດ້ຫຼາຍຄັ້ງ)" + +#: ../source/specifications/core-metadata.rst:742 +msgid "" +"A string containing an import name that the project exclusively provides " +"when installed. The specified import name MUST be a valid Python identifier " +"or can be empty. The import names listed in this field MUST be importable " +"when the project is installed on *some* platform for the same version of the " +"project. This implies that the metadata MUST be consistent across all sdists " +"and wheels for a project release." +msgstr "" +"ຂໍ້ຄວາມທີ່ລະບຸຊື່ການນຳເຂົ້າ (import name) ທີ່ໂຄງການນີ້ສະໜອງໃຫ້ໂດຍສະເພາະ ເມື່ອຖືກຕິດຕັ້ງ. " +"ຊື່ການນຳເຂົ້າທີ່ລະບຸຕ້ອງເປັນ Python identifier ທີ່ຖືກຕ້ອງ ຫຼື ສາມາດປະຫວ່າງໄວ້ໄດ້. " +"ຊື່ການນຳເຂົ້າທີ່ລະບຸໃນຊ່ອງນີ້ຕ້ອງສາມາດນຳເຂົ້າ (import) ໄດ້ " +"ເມື່ອໂຄງການຖືກຕິດຕັ້ງໃນບາງແພລັດຟອມສຳລັບເວີຊັນດຽວກັນ. ນີ້ໝາຍຄວາມວ່າ metadata " +"ຕ້ອງສອດຄ່ອງກັນໃນທຸກໆ sdist ແລະ wheel ສຳລັບການປ່ອຍໂຄງການນັ້ນ." + +#: ../source/specifications/core-metadata.rst:749 +#: ../source/specifications/core-metadata.rst:804 +msgid "" +"An import name MAY be followed by a semicolon and the term \"private\" (e.g. " +"``; private``) with any amount of whitespace surrounding the semicolon. This " +"signals to tools that the import name is not part of the public API for the " +"project." +msgstr "" +"ຊື່ການນຳເຂົ້າອາດຈະຕາມດ້ວຍເຄື່ອງໝາຍຈຳເມັດ (semicolon) ແລະ ຄຳວ່າ \"private\" (ເຊັ່ນ: ``; " +"private``). ນີ້ເປັນການສົ່ງສັນຍານໃຫ້ເຄື່ອງມືຮູ້ວ່າຊື່ການນຳເຂົ້ານີ້ ບໍ່ແມ່ນສ່ວນໜຶ່ງຂອງ public API " +"ຂອງໂຄງການ." + +#: ../source/specifications/core-metadata.rst:754 +#: ../source/specifications/core-metadata.rst:809 +msgid "" +"Projects SHOULD list all the shortest import names that are exclusively " +"provided by the project. If any of the shortest names are dotted names, all " +"intervening names from that name to the top-level name SHOULD also be listed " +"appropriately in ``Import-Name`` and/or ``Import-Namespace``." +msgstr "" +"ໂຄງການຄວນລະບຸຊື່ການນຳເຂົ້າທີ່ສັ້ນທີ່ສຸດທັງໝົດທີ່ໂຄງການສະໜອງໃຫ້ໂດຍສະເພາະ. ຖ້າຊື່ທີ່ສັ້ນທີ່ສຸດເປັນ dotted " +"names, ຊື່ທັງໝົດທີ່ຢູ່ລະຫວ່າງກາງຈົນຮອດຊື່ລະດັບສູງສຸດ ກໍຄວນຖືກລະບຸໄວ້ຢ່າງເໝາະສົມໃນ ``Import-Name`` " +"ແລະ/ຫຼື ``Import-Namespace``." + +#: ../source/specifications/core-metadata.rst:759 +#: ../source/specifications/core-metadata.rst:819 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" +"ຖ້າໂຄງການລະບຸຊື່ດຽວກັນໃນທັງ ``Import-Name`` ແລະ ``Import-Namespace``, " +"ເຄື່ອງມືຕ້ອງແຈ້ງຂໍ້ຜິດພາດເນື່ອງຈາກມີຄວາມກຳກວມ." + +#: ../source/specifications/core-metadata.rst:762 +msgid "" +"Tools SHOULD raise an error when two projects that are about to be installed " +"list names that overlap in each other's ``Import-Name`` entries, or when a " +"project has an entry in ``Import-Name`` that overlaps with another project's " +"``Import-Namespace`` entries. This is to avoid projects unexpectedly " +"shadowing another project's code. Tools MAY warn or raise an error when " +"installing a project into a preexisting environment where there is import " +"name overlap with a project that is already installed." +msgstr "" +"ເຄື່ອງມືຄວນແຈ້ງຂໍ້ຜິດພາດເມື່ອມີສອງໂຄງການທີ່ຈະຕິດຕັ້ງມີຊື່ທີ່ທັບຊ້ອນກັນໃນ ລາຍການ ``Import-Name`` " +"ຂອງກັນແລະກັນ, ຫຼື ເມື່ອໂຄງການໜຶ່ງມີລາຍການໃນ ``Import-Name`` ທີ່ທັບຊ້ອນກັບ ``Import-" +"Namespace`` ຂອງອີກໂຄງການໜຶ່ງ. ທັງນີ້ກໍເພື່ອຫຼີກລ່ຽງການທີ່ໂຄງການໜຶ່ງໄປທັບ (shadowing) " +"ໂຄ້ດຂອງອີກໂຄງການໜຶ່ງ ໂດຍບໍ່ຕັ້ງໃຈ. ເຄື່ອງມືອາດຈະເຕືອນ ຫຼື ແຈ້ງຂໍ້ຜິດພາດເມື່ອຕິດຕັ້ງໂຄງການລົງໃນ " +"ສະພາບແວດລ້ອມທີ່ມີຊື່ການນຳເຂົ້າທັບຊ້ອນກັບໂຄງການທີ່ຕິດຕັ້ງໄວ້ກ່ອນແລ້ວ." + +#: ../source/specifications/core-metadata.rst:770 +msgid "" +"Projects MAY have an empty ``Import-Name`` field in their metadata to " +"represent a project with no import names (i.e. there are no Python modules " +"of any kind in the distribution file)." +msgstr "" +"ໂຄງການອາດຈະປະຊ່ອງຂໍ້ມູນ ``Import-Name`` ໃຫ້ວ່າງໄວ້ ເພື່ອສະແດງວ່າໂຄງການນັ້ນ ບໍ່ມີຊື່ການນຳເຂົ້າ " +"(ເຊັ່ນ: ບໍ່ມີ Python module ໃດໆ ໃນໄຟລ໌ຊຸດໂປຣແກຣມ)." + +#: ../source/specifications/core-metadata.rst:774 +msgid "" +"Since projects MAY have no ``Import-Name`` metadata (either because the " +"project uses an older metadata version, or because it didn't specify any), " +"then tools have no information about what names the project provides. " +"However, in practice the majority of projects have their project name match " +"what their import name would be. As such, it is a reasonable assumption to " +"make that a project name that is normalized in some way to an import name " +"(e.g. ``packaging.utils.canonicalize_name(name, validate=True).replace(\"-" +"\", \"_\")``) can be used if some answer is needed." +msgstr "" +"ເນື່ອງຈາກໂຄງການອາດຈະບໍ່ມີ metadata ``Import-Name`` (ບໍ່ວ່າຍ້ອນໃຊ້ metadata ເວີຊັນເກົ່າ ຫຼື " +"ບໍ່ໄດ້ລະບຸໄວ້), ເຄື່ອງມືຈຶ່ງບໍ່ມີຂໍ້ມູນວ່າໂຄງການນັ້ນສະໜອງຊື່ອັນໃດແດ່. ເຖິງຢ່າງໃດກໍຕາມ, ໃນທາງປະຕິບັດ " +"ໂຄງການສ່ວນໃຫຍ່ມັກຈະມີຊື່ໂຄງການກົງກັບຊື່ການນຳເຂົ້າ. ດັ່ງນັ້ນ, ມັນຈຶ່ງເປັນ ການຄາດເດົາທີ່ສົມເຫດສົມຜົນວ່າ " +"ຊື່ໂຄງການທີ່ຖືກປັບຮູບແບບໃຫ້ເປັນຊື່ການນຳເຂົ້າ (ເຊັ່ນ: ການປ່ຽນ \"-\" ເປັນ \"_\") ສາມາດນຳມາໃຊ້ໄດ້ " +"ຫາກຕ້ອງການຂໍ້ມູນດັ່ງກ່າວ." + +#: ../source/specifications/core-metadata.rst:794 +msgid "Import-Namespace (multiple use)" +msgstr "ເນມສະເປດການນຳເຂົ້າ (Import-Namespace) (ໃຊ້ໄດ້ຫຼາຍຄັ້ງ)" + +#: ../source/specifications/core-metadata.rst:798 +msgid "" +"A string containing an import name that the project provides when installed, " +"but not exclusively. The specified import name MUST be a valid Python " +"identifier. This field is used for namespace packages where multiple " +"projects can contribute to the same import namespace. Projects all listing " +"the same import name in ``Import-Namespace`` can be installed together " +"without shadowing each other." +msgstr "" +"ຂໍ້ຄວາມທີ່ລະບຸຊື່ການນຳເຂົ້າທີ່ໂຄງການສະໜອງໃຫ້ເມື່ອຕິດຕັ້ງ, ແຕ່ບໍ່ໄດ້ສະໜອງໃຫ້ ໂດຍສະເພາະພຽງຜູ້ດຽວ. " +"ຊື່ການນຳເຂົ້າທີ່ລະບຸຕ້ອງເປັນ Python identifier ທີ່ຖືກຕ້ອງ. ຊ່ອງຂໍ້ມູນນີ້ໃຊ້ສຳລັບ namespace " +"packages ທີ່ຫຼາຍໂຄງການສາມາດໃຊ້ import namespace ຮ່ວມກັນໄດ້. ທຸກໂຄງການທີ່ລະບຸຊື່ດຽວກັນໃນ " +"``Import-Namespace`` ສາມາດຕິດຕັ້ງ ຮ່ວມກັນໄດ້ໂດຍບໍ່ມີການທັບຊ້ອນກັນ." + +#: ../source/specifications/core-metadata.rst:814 +msgid "" +"The import names listed in this field MUST be importable when the project is " +"installed on *some* platform for the same version of the project. This " +"implies that the metadata MUST be consistent across all sdists and wheels " +"for a project release." +msgstr "" +"ຊື່ການນຳເຂົ້າທີ່ລະບຸໃນຊ່ອງນີ້ຕ້ອງສາມາດນຳເຂົ້າໄດ້ ເມື່ອໂຄງການຖືກຕິດຕັ້ງໃນບາງ " +"ແພລັດຟອມສຳລັບເວີຊັນດຽວກັນ. ນີ້ໝາຍຄວາມວ່າ metadata ຕ້ອງສອດຄ່ອງກັນໃນ ທຸກ sdist ແລະ wheel " +"ສຳລັບການປ່ອຍໂຄງການນັ້ນ." + +#: ../source/specifications/core-metadata.rst:822 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "ໝາຍເຫດ: ``Import-Namespace`` ບໍ່ສາມາດປະວ່າງໄດ້ຄືກັບ ``Import-Name``." + +#: ../source/specifications/core-metadata.rst:831 +msgid "Rarely Used Fields" +msgstr "ຊ່ອງຂໍ້ມູນທີ່ບໍ່ຄ່ອຍໄດ້ໃຊ້" + +#: ../source/specifications/core-metadata.rst:833 +msgid "" +"The fields in this section are currently rarely used, as their design was " +"inspired by comparable mechanisms in Linux package management systems, and " +"it isn't at all clear how tools should interpret them in the context of an " +"open index server such as `PyPI `__." +msgstr "" +"ຊ່ອງຂໍ້ມູນໃນສ່ວນນີ້ແມ່ນບໍ່ຄ່ອຍໄດ້ໃຊ້ໃນປັດຈຸບັນ, ເນື່ອງຈາກການອອກແບບຂອງມັນ " +"ໄດ້ຮັບແຮງບັນດານໃຈມາຈາກລະບົບການຈັດການຊຸດໂປຣແກຣມໃນ Linux, ແລະ ມັນຍັງ ບໍ່ຊັດເຈນວ່າເຄື່ອງມືຕ່າງໆ " +"ຄວນຕີຄວາມໝາຍພວກມັນແນວໃດ ໃນບໍລິບົດຂອງເຊີເວີດັດຊະນີ ແບບເປີດເຊັ່ນ `PyPI `__." + +#: ../source/specifications/core-metadata.rst:838 +msgid "" +"As a result, popular installation tools ignore them completely, which in " +"turn means there is little incentive for package publishers to set them " +"appropriately. However, they're retained in the metadata specification, as " +"they're still potentially useful for informational purposes, and can also be " +"used for their originally intended purpose in combination with a curated " +"package repository." +msgstr "" +"ດ້ວຍເຫດນີ້, ເຄື່ອງມືຕິດຕັ້ງທີ່ເປັນທີ່ນິຍົມຈຶ່ງບໍ່ສົນໃຈພວກມັນເລີຍ, ເຊິ່ງເຮັດໃຫ້ " +"ຜູ້ເຜີຍແຜ່ຊຸດໂປຣແກຣມບໍ່ມີແຮງຈູງໃຈທີ່ຈະຕັ້ງຄ່າພວກມັນ. ເຖິງຢ່າງໃດກໍຕາມ, ພວກມັນ ຍັງຖືກເກັບໄວ້ໃນຂໍ້ກຳນົດ " +"metadata ເນື່ອງຈາກຍັງອາດມີປະໂຫຍດໃນການໃຫ້ຂໍ້ມູນ, ແລະ " +"ສາມາດໃຊ້ເພື່ອຈຸດປະສົງເດີມຂອງມັນຮ່ວມກັບຄັງຊຸດໂປຣແກຣມທີ່ຖືກຄັດສັນເປັນພິເສດ." + +#: ../source/specifications/core-metadata.rst:848 +msgid "Provides-Dist (multiple use)" +msgstr "ໃຫ້-ຊຸດໂປຣແກຣມ (Provides-Dist) (ໃຊ້ໄດ້ຫຼາຍຄັ້ງ)" + +#: ../source/specifications/core-metadata.rst:855 +msgid "" +"Each entry contains a string naming a Distutils project which is contained " +"within this distribution. This field *must* include the project identified " +"in the ``Name`` field, followed by the version : Name (Version)." +msgstr "" +"ແຕ່ລະລາຍການປະກອບມີຂໍ້ຄວາມທີ່ລະບຸຊື່ໂຄງການ Distutils ທີ່ລວມຢູ່ໃນຊຸດໂປຣແກຣມນີ້. ຊ່ອງຂໍ້ມູນນີ້ *ຕ້ອງ* " +"ລວມເອົາໂຄງການທີ່ລະບຸໄວ້ໃນຊ່ອງ ``Name``, ຕາມດ້ວຍເວີຊັນ: ຊື່ (ເວີຊັນ)." + +#: ../source/specifications/core-metadata.rst:860 +msgid "" +"A distribution may provide additional names, e.g. to indicate that multiple " +"projects have been bundled together. For instance, source distributions of " +"the ``ZODB`` project have historically included the ``transaction`` project, " +"which is now available as a separate distribution. Installing such a source " +"distribution satisfies requirements for both ``ZODB`` and ``transaction``." +msgstr "" +"ຊຸດໂປຣແກຣມອາດຈະລະບຸຊື່ອື່ນໆ ເພີ່ມເຕີມ, ເຊັ່ນ: ເພື່ອບອກວ່າຫຼາຍໂຄງການຖືກລວມເຂົ້າ ໄວ້ນຳກັນ. ຕົວຢ່າງ, " +"source distributions ຂອງໂຄງການ ``ZODB`` ໃນເມື່ອກ່ອນເຄີຍ ລວມເອົາໂຄງການ " +"``transaction`` ໄວ້, ເຊິ່ງຕອນນີ້ມີແຍກເປັນຊຸດໂປຣແກຣມຕ່າງຫາກ. ການຕິດຕັ້ງ source " +"distribution ດັ່ງກ່າວຈະຖືວ່າຕອບສະໜອງຄວາມຕ້ອງການຂອງທັງ ``ZODB`` ແລະ ``transaction``." + +#: ../source/specifications/core-metadata.rst:867 +msgid "" +"A distribution may also provide a \"virtual\" project name, which does not " +"correspond to any separately-distributed project: such a name might be used " +"to indicate an abstract capability which could be supplied by one of " +"multiple projects. E.g., multiple projects might supply RDBMS bindings for " +"use by a given ORM: each project might declare that it provides ``ORM-" +"bindings``, allowing other projects to depend only on having at most one of " +"them installed." +msgstr "" +"ຊຸດໂປຣແກຣມຍັງອາດຈະລະບຸຊື່ໂຄງການ \"ສະເມືອນ\" (virtual), ເຊິ່ງບໍ່ກົງກັບ " +"ໂຄງການໃດທີ່ແຍກແຈກຢາຍຕ່າງຫາກ: ຊື່ດັ່ງກ່າວອາດໃຊ້ເພື່ອບອກເຖິງຄວາມສາມາດ " +"ໃນທາງນາມມະທຳທີ່ຫຼາຍໂຄງການສາມາດເຮັດໄດ້. ຕົວຢ່າງ: ຫຼາຍໂຄງການອາດສະໜອງ RDBMS bindings " +"ສຳລັບໃຊ້ກັບ ORM ໃດໜຶ່ງ: ແຕ່ລະໂຄງການອາດປະກາດວ່າມັນໃຫ້ ``ORM-bindings``, " +"ເຊິ່ງຊ່ວຍໃຫ້ໂຄງການອື່ນໆ ຕ້ອງການພຽງແຕ່ໃຫ້ມີໂຄງການໃດໜຶ່ງ ໃນນັ້ນຕິດຕັ້ງໄວ້ກໍພໍ." + +#: ../source/specifications/core-metadata.rst:875 +msgid "" +"A version declaration may be supplied and must follow the rules described " +"in :doc:`version-specifiers`. The distribution's version number will be " +"implied if none is specified." +msgstr "" +"ສາມາດລະບຸເວີຊັນໄດ້ ແລະ ຕ້ອງປະຕິບັດຕາມກົດເກນໃນ :doc:`version-specifiers`. ຖ້າບໍ່ໄດ້ລະບຸ, " +"ຈະຖືວ່າເປັນເວີຊັນດຽວກັນກັບຊຸດໂປຣແກຣມນັ້ນ." + +#: ../source/specifications/core-metadata.rst:890 +msgid "Obsoletes-Dist (multiple use)" +msgstr "ແທນທີ່-ຊຸດໂປຣແກຣມ (Obsoletes-Dist) (ໃຊ້ໄດ້ຫຼາຍຄັ້ງ)" + +#: ../source/specifications/core-metadata.rst:897 +msgid "" +"Each entry contains a string describing a distutils project's distribution " +"which this distribution renders obsolete, meaning that the two projects " +"should not be installed at the same time." +msgstr "" +"ແຕ່ລະລາຍການປະກອບມີຂໍ້ຄວາມທີ່ລະບຸຊື່ຊຸດໂປຣແກຣມຂອງ distutils ທີ່ຊຸດໂປຣແກຣມນີ້ ເຮັດໃຫ້ລ້າສະໄໝ ຫຼື " +"ເຂົ້າມາແທນທີ່, ໝາຍຄວາມວ່າສອງໂຄງການນີ້ບໍ່ຄວນຕິດຕັ້ງ ພ້ອມກັນໃນເວລາດຽວກັນ." + +#: ../source/specifications/core-metadata.rst:901 +msgid "" +"Version declarations can be supplied. Version numbers must be in the format " +"specified in :doc:`version-specifiers`." +msgstr "ສາມາດລະບຸເວີຊັນໄດ້. ເລກເວີຊັນຕ້ອງຢູ່ໃນຮູບແບບທີ່ລະບຸໄວ້ໃນ :doc:`version-specifiers`." + +#: ../source/specifications/core-metadata.rst:906 +msgid "" +"The most common use of this field will be in case a project name changes, " +"e.g. Gorgon 2.3 gets subsumed into Torqued Python 1.0. When you install " +"Torqued Python, the Gorgon distribution should be removed." +msgstr "" +"ກໍລະນີທີ່ໃຊ້ເລື້ອຍທີ່ສຸດແມ່ນເມື່ອໂຄງການປ່ຽນຊື່, ເຊັ່ນ: Gorgon 2.3 ຖືກປ່ຽນເປັນ Torqued Python 1.0. " +"ເມື່ອທ່ານຕິດຕັ້ງ Torqued Python, ຊຸດໂປຣແກຣມ Gorgon ກໍຄວນຈະຖືກຖອນອອກ." + +#: ../source/specifications/core-metadata.rst:919 +msgid "Deprecated Fields" +msgstr "ຊ່ອງຂໍ້ມູນທີ່ຖືກຍົກເລີກ" + +#: ../source/specifications/core-metadata.rst:921 +msgid "" +"Deprecated fields should be avoided, but they are valid metadata fields. " +"They may be removed in future versions of the core metadata standard (at " +"which point they will only be valid in files that specify a metadata version " +"prior to the removal). Tools SHOULD warn users when deprecated fields are " +"used." +msgstr "" +"ຊ່ອງຂໍ້ມູນທີ່ຖືກຍົກເລີກ (deprecated) ຄວນຫຼີກລ່ຽງການນຳໃຊ້, ແຕ່ພວກມັນຍັງເປັນຊ່ອງ metadata " +"ທີ່ໃຊ້ໄດ້ຢູ່. ພວກມັນອາດຈະຖືກຕັດອອກໃນເວີຊັນຕໍ່ໆ ໄປຂອງມາດຕະຖານ core metadata. " +"ເຄື່ອງມືຄວນຈະເຕືອນຜູ້ໃຊ້ເມື່ອມີການນຳໃຊ້ຊ່ອງຂໍ້ມູນເຫຼົ່ານີ້." + +#: ../source/specifications/core-metadata.rst:930 +msgid "Home-page" +msgstr "ໜ້າຫຼັກ (Home-page)" + +#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:953 +msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." +msgstr "ຕາມ :pep:`753`, ໃຫ້ໃຊ້ :ref:`core-metadata-project-url` ແທນ." + +#: ../source/specifications/core-metadata.rst:938 +msgid "A string containing the URL for the distribution's home page." +msgstr "ຂໍ້ຄວາມທີ່ລະບຸ URL ສຳລັບໜ້າຫຼັກຂອງຊຸດໂປຣແກຣມ." + +#: ../source/specifications/core-metadata.rst:947 +msgid "Download-URL" +msgstr "URL-ດາວໂຫຼດ (Download-URL)" + +#: ../source/specifications/core-metadata.rst:955 +msgid "" +"A string containing the URL from which this version of the distribution can " +"be downloaded. (This means that the URL can't be something like \"``.../" +"BeagleVote-latest.tgz``\", but instead must be \"``.../" +"BeagleVote-0.45.tgz``\".)" +msgstr "" +"ຂໍ້ຄວາມທີ່ລະບຸ URL ທີ່ສາມາດດາວໂຫຼດຊຸດໂປຣແກຣມເວີຊັນນີ້ໄດ້. (ໝາຍຄວາມວ່າ URL ບໍ່ຄວນເປັນແບບ " +"\"``.../BeagleVote-latest.tgz``\", ແຕ່ຕ້ອງເປັນແບບ \"``.../" +"BeagleVote-0.45.tgz``\".)" + +#: ../source/specifications/core-metadata.rst:961 +msgid "Requires" +msgstr "ຕ້ອງການ" + +#: ../source/specifications/core-metadata.rst:964 +msgid "in favour of ``Requires-Dist``" +msgstr "ເພື່ອສະໜັບສະໜູນ ``Requires-Dist``" + +#: ../source/specifications/core-metadata.rst:967 +msgid "" +"Each entry contains a string describing some other module or package " +"required by this package." +msgstr "ແຕ່ລະລາຍການປະກອບມີຂໍ້ຄວາມທີ່ລະບຸ module ຫຼື package ອື່ນໆ ທີ່ package ນີ້ຕ້ອງການ." + +#: ../source/specifications/core-metadata.rst:970 +msgid "" +"The format of a requirement string is identical to that of a module or " +"package name usable with the ``import`` statement, optionally followed by a " +"version declaration within parentheses." +msgstr "" +"ຮູບແບບຂອງຂໍ້ຄວາມຄວາມຕ້ອງການແມ່ນຄືກັນກັບຊື່ module ຫຼື package ທີ່ໃຊ້ໃນຄຳສັ່ງ ``import``, ແລະ " +"ສາມາດຕາມດ້ວຍການລະບຸເວີຊັນພາຍໃນວົງເລັບໄດ້." + +#: ../source/specifications/core-metadata.rst:974 +msgid "" +"A version declaration is a series of conditional operators and version " +"numbers, separated by commas. Conditional operators must be one of \"<\", " +"\">\"', \"<=\", \">=\", \"==\", and \"!=\". Version numbers must be in the " +"format accepted by the ``distutils.version.StrictVersion`` class: two or " +"three dot-separated numeric components, with an optional \"pre-release\" tag " +"on the end consisting of the letter 'a' or 'b' followed by a number. Example " +"version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," +msgstr "" +"ການລະບຸເວີຊັນແມ່ນຊຸດຂອງຕົວດຳເນີນການເງື່ອນໄຂ ແລະ ເລກເວີຊັນ, ແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ. " +"ຕົວດຳເນີນການເງື່ອນໄຂຕ້ອງແມ່ນ \"<\", \">\", \"<=\", \">=\", \"==\", ແລະ \"!=\". " +"ເລກເວີຊັນຕ້ອງຢູ່ໃນຮູບແບບທີ່ຮອງຮັບໂດຍຄລາສ ``distutils.version.StrictVersion``." + +#: ../source/specifications/core-metadata.rst:982 +msgid "" +"Any number of conditional operators can be specified, e.g. the string " +"\">1.0, !=1.3.4, <2.0\" is a legal version declaration." +msgstr "" +"ສາມາດລະບຸຕົວດຳເນີນການເງື່ອນໄຂຈັກອັນກໍໄດ້, ເຊັ່ນ: ຂໍ້ຄວາມ \">1.0, !=1.3.4, <2.0\" " +"ແມ່ນການລະບຸເວີຊັນທີ່ຖືກຕ້ອງ." + +#: ../source/specifications/core-metadata.rst:985 +msgid "" +"All of the following are possible requirement strings: \"rfc822\", \"zlib " +"(>=1.1.4)\", \"zope\"." +msgstr "" +"ຕົວຢ່າງຂໍ້ຄວາມຄວາມຕ້ອງການທີ່ເປັນໄປໄດ້: \"rfc822\", \"zlib (>=1.1.4)\", \"zope\"." + +#: ../source/specifications/core-metadata.rst:988 +msgid "" +"There’s no canonical list of what strings should be used; the Python " +"community is left to choose its own standards." +msgstr "" +"ບໍ່ມີລາຍຊື່ມາດຕະຖານຕາຍຕົວວ່າຄວນໃຊ້ຂໍ້ຄວາມໃດ; ຊຸມຊົນ Python ສາມາດເລືອກ ມາດຕະຖານຂອງຕົນເອງໄດ້." + +#: ../source/specifications/core-metadata.rst:1001 +msgid "Provides" +msgstr "ສະໜອງໃຫ້" + +#: ../source/specifications/core-metadata.rst:1004 +msgid "in favour of ``Provides-Dist``" +msgstr "ເພື່ອສະໜັບສະໜູນ ``Provides-Dist``" + +#: ../source/specifications/core-metadata.rst:1007 +msgid "" +"Each entry contains a string describing a package or module that will be " +"provided by this package once it is installed. These strings should match " +"the ones used in Requirements fields. A version declaration may be supplied " +"(without a comparison operator); the package’s version number will be " +"implied if none is specified." +msgstr "" +"ແຕ່ລະລາຍການປະກອບມີຂໍ້ຄວາມທີ່ລະບຸ package ຫຼື module ທີ່ package ນີ້ຈະສະໜອງໃຫ້ ເມື່ອມັນຖືກຕິດຕັ້ງ. " +"ຂໍ້ຄວາມເຫຼົ່ານີ້ຄວນກົງກັບທີ່ໃຊ້ໃນຊ່ອງຄວາມຕ້ອງການ (Requirements). ສາມາດລະບຸເວີຊັນໄດ້ " +"(ໂດຍບໍ່ຕ້ອງມີຕົວດຳເນີນການປຽບທຽບ); ຖ້າບໍ່ໄດ້ລະບຸ, ຈະຖືວ່າ ເປັນເວີຊັນດຽວກັນກັບ package ນັ້ນ." + +#: ../source/specifications/core-metadata.rst:1023 +msgid "Obsoletes" +msgstr "ເຮັດໃຫ້ລ້າສະໄໝ/ແທນທີ່" + +#: ../source/specifications/core-metadata.rst:1026 +msgid "in favour of ``Obsoletes-Dist``" +msgstr "ເພື່ອສະໜັບສະໜູນ ``Obsoletes-Dist``" + +#: ../source/specifications/core-metadata.rst:1029 +msgid "" +"Each entry contains a string describing a package or module that this " +"package renders obsolete, meaning that the two packages should not be " +"installed at the same time. Version declarations can be supplied." +msgstr "" +"ແຕ່ລະລາຍການປະກອບມີຂໍ້ຄວາມທີ່ລະບຸ package ຫຼື module ທີ່ package ນີ້ເຮັດໃຫ້ ລ້າສະໄໝ, " +"ໝາຍຄວາມວ່າສອງ package ນີ້ບໍ່ຄວນຕິດຕັ້ງພ້ອມກັນ. ສາມາດລະບຸເວີຊັນໄດ້." + +#: ../source/specifications/core-metadata.rst:1033 +msgid "" +"The most common use of this field will be in case a package name changes, " +"e.g. Gorgon 2.3 gets subsumed into Torqued Python 1.0. When you install " +"Torqued Python, the Gorgon package should be removed." +msgstr "" +"ກໍລະນີທີ່ໃຊ້ເລື້ອຍທີ່ສຸດແມ່ນເມື່ອ package ປ່ຽນຊື່, ເຊັ່ນ: Gorgon 2.3 ຖືກປ່ຽນເປັນ Torqued Python " +"1.0. ເມື່ອທ່ານຕິດຕັ້ງ Torqued Python, package Gorgon ກໍຄວນຈະຖືກຖອນອອກ." + +#: ../source/specifications/core-metadata.rst:1045 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +msgstr "ມີນາ 2001: Core metadata 1.0 ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`241`." + +#: ../source/specifications/core-metadata.rst:1047 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." +msgstr "ເມສາ 2003: Core metadata 1.1 ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`314`." + +#: ../source/specifications/core-metadata.rst:1049 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +msgstr "ກຸມພາ 2010: Core metadata 1.2 ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`345`." + +#: ../source/specifications/core-metadata.rst:1051 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +msgstr "ກຸມພາ 2018: Core metadata 2.1 ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`566`." + +#: ../source/specifications/core-metadata.rst:1053 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +msgstr "ເພີ່ມ ``Description-Content-Type`` ແລະ ``Provides-Extra``." + +#: ../source/specifications/core-metadata.rst:1054 +msgid "Added canonical method for transforming metadata to JSON." +msgstr "ເພີ່ມວິທີມາດຕະຖານໃນການແປງ metadata ເປັນ JSON." + +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "ຈຳກັດໄວຍາກອນຂອງຊ່ອງຂໍ້ມູນ ``Name``." + +#: ../source/specifications/core-metadata.rst:1057 +msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." +msgstr "ຕຸລາ 2020: Core metadata 2.2 ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`643`." + +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``Dynamic`` field." +msgstr "ເພີ່ມຊ່ອງຂໍ້ມູນ ``Dynamic``." + +#: ../source/specifications/core-metadata.rst:1061 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +msgstr "ມີນາ 2022: Core metadata 2.3 ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`685`." + +#: ../source/specifications/core-metadata.rst:1063 +msgid "Restricted extra names to be normalized." +msgstr "ກຳນົດໃຫ້ຊື່ extra ຕ້ອງຖືກປັບຄ່າມາດຕະຖານ (normalized)." + +#: ../source/specifications/core-metadata.rst:1065 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +msgstr "ສິງຫາ 2024: Core metadata 2.4 ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`639`." + +#: ../source/specifications/core-metadata.rst:1067 +msgid "Added the ``License-Expression`` field." +msgstr "ເພີ່ມຊ່ອງຂໍ້ມູນ ``License-Expression``." + +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``License-File`` field." +msgstr "ເພີ່ມຊ່ອງຂໍ້ມູນ ``License-File``." + +#: ../source/specifications/core-metadata.rst:1070 +msgid "" +"August 2025: Clarified that ``Dynamic`` only affects how fields must be " +"treated when building a wheel from a sdist, not when modifying a wheel." +msgstr "" +"ສິງຫາ 2025: ຊີ້ແຈງວ່າ ``Dynamic`` ມີຜົນສະເພາະກັບວິທີການຈັດການຊ່ອງຂໍ້ມູນເມື່ອສ້າງ wheel ຈາກ " +"sdist ເທົ່ານັ້ນ, ບໍ່ມີຜົນເມື່ອແກ້ໄຂ wheel." + +#: ../source/specifications/core-metadata.rst:1074 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." +msgstr "ກັນຍາ 2025: Core metadata 2.5 ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`794`." + +#: ../source/specifications/core-metadata.rst:1076 +msgid "Added the ``Import-Name`` field." +msgstr "ເພີ່ມຊ່ອງຂໍ້ມູນ ``Import-Name``." + +#: ../source/specifications/core-metadata.rst:1077 +msgid "Added the ``Import-Namespace`` field." +msgstr "ເພີ່ມຊ່ອງຂໍ້ມູນ ``Import-Namespace``." + +#: ../source/specifications/core-metadata.rst:1079 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" +"ຕຸລາ 2025: ຊີ້ແຈງວ່າ ``License-Expression`` ມີຜົນກັບໄຟລ໌ຊຸດໂປຣແກຣມທີ່ບັນຈຸ ມັນຢູ່ ແລະ " +"ບໍ່ມີຜົນກັບຕົວໂຄງການໂດຍກົງ." + +#: ../source/specifications/core-metadata.rst:1082 +#: ../source/specifications/pyproject-toml.rst:715 +msgid "" +"January 2026: Replaced outdated direct reference to :pep:`508` with a " +"reference to :ref:`dependency-specifiers`." +msgstr "" +"ມັງກອນ 2026: ປ່ຽນການອ້າງອີງໂດຍກົງເຖິງ :pep:`508` ທີ່ລ້າສະໄໝ ໄປເປັນການອ້າງອີງ " +"ເຖິງ :ref:`dependency-specifiers` ແທນ." + +#: ../source/specifications/core-metadata.rst:1085 +msgid "May 2026: Core metadata 2.6 was approved through :pep:`808`." +msgstr "ພຶດສະພາ 2026: Core metadata 2.6 ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`808`." + +#: ../source/specifications/core-metadata.rst:1087 +msgid "" +"Allowed a multiple use field marked ``Dynamic`` to be appended to in a wheel " +"built from a sdist, requiring the wheel to preserve the value(s) present in " +"the sdist." +msgstr "" +"ອະນຸຍາດໃຫ້ຊ່ອງຂໍ້ມູນທີ່ໃຊ້ໄດ້ຫຼາຍຄັ້ງເຊິ່ງຖືກໝາຍວ່າ ``Dynamic`` ສາມາດເພີ່ມຄ່າໄດ້ ໃນ wheel ທີ່ສ້າງຈາກ " +"sdist, ໂດຍກຳນົດໃຫ້ wheel ຕ້ອງຮັກສາຄ່າທີ່ມີຢູ່ໃນ sdist ໄວ້." + +#: ../source/specifications/core-metadata.rst:1093 +msgid "reStructuredText markup: https://docutils.sourceforge.io/" +msgstr "reStructuredText markup: https://docutils.sourceforge.io/" + +#: ../source/specifications/core-metadata.rst:1098 +msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" +msgstr "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" + +#: ../source/specifications/dependency-groups.rst:5 +msgid "Dependency Groups" +msgstr "ກຸ່ມສິ່ງທີ່ຈຳເປັນ (Dependency Groups)" + +#: ../source/specifications/dependency-groups.rst:7 +msgid "" +"This specification defines dependency groups, a mechanism for storing " +"package requirements in ``pyproject.toml`` files such that they are not " +"included in project metadata when it is built." +msgstr "" +"ຂໍ້ກຳນົດນີ້ລະບຸກຸ່ມສິ່ງທີ່ຈຳເປັນ, ເຊິ່ງແມ່ນກົນໄກໃນການເກັບຄວາມຕ້ອງການຂອງ package ໃນໄຟລ໌ " +"``pyproject.toml`` ໂດຍທີ່ພວກມັນຈະບໍ່ຖືກລວມເຂົ້າໃນ metadata ຂອງໂຄງການ ໃນເວລາສ້າງ " +"(build)." + +#: ../source/specifications/dependency-groups.rst:11 +msgid "" +"Dependency groups are suitable for internal development use-cases like " +"linting and testing, as well as for projects which are not built for " +"distribution, like collections of related scripts." +msgstr "" +"ກຸ່ມສິ່ງທີ່ຈຳເປັນເໝາະສຳລັບການນຳໃຊ້ພາຍໃນໃນລະຫວ່າງການພັດທະນາ ເຊັ່ນການກວດສອບໂຄ້ດ (linting) " +"ແລະ ການທົດສອບ, ລວມເຖິງໂຄງການທີ່ບໍ່ໄດ້ສ້າງຂຶ້ນເພື່ອແຈກຢາຍ ເຊັ່ນຊຸດຂອງສະຄຣິບຕ່າງໆ." + +#: ../source/specifications/dependency-groups.rst:15 +msgid "" +"Fundamentally, dependency groups should be thought of as being a " +"standardized subset of the capabilities of ``requirements.txt`` files (which " +"are ``pip``-specific)." +msgstr "" +"ໂດຍພື້ນຖານແລ້ວ, ຄວນຖືວ່າກຸ່ມສິ່ງທີ່ຈຳເປັນແມ່ນສ່ວນຍ່ອຍທີ່ເປັນມາດຕະຖານຂອງຄວາມສາມາດ ໃນໄຟລ໌ " +"``requirements.txt`` (ເຊິ່ງເປັນສິ່ງສະເພາະຂອງ ``pip``)." + +#: ../source/specifications/dependency-groups.rst:25 +msgid "This is a simple table which shows ``docs`` and ``test`` groups::" +msgstr "ນີ້ແມ່ນຕາຕະລາງງ່າຍໆ ທີ່ສະແດງກຸ່ມ ``docs`` ແລະ ``test``::" + +#: ../source/specifications/dependency-groups.rst:31 +msgid "" +"and a similar table which defines ``docs``, ``test``, and ``coverage`` " +"groups::" +msgstr "ແລະ ຕາຕະລາງທີ່ຄ້າຍຄືກັນເຊິ່ງລະບຸກຸ່ມ ``docs``, ``test``, ແລະ ``coverage``::" + +#: ../source/specifications/dependency-groups.rst:39 +msgid "The ``[dependency-groups]`` Table" +msgstr "ຕາຕະລາງ ``[dependency-groups]``" + +#: ../source/specifications/dependency-groups.rst:41 +msgid "" +"Dependency groups are defined as a table in ``pyproject.toml`` named " +"``dependency-groups``. The ``dependency-groups`` table contains an arbitrary " +"number of user-defined keys, each of which has, as its value, a list of " +"requirements." +msgstr "" +"ກຸ່ມສິ່ງທີ່ຈຳເປັນຖືກກຳນົດເປັນຕາຕະລາງໃນ ``pyproject.toml`` ທີ່ຊື່ວ່າ ``dependency-groups``. " +"ຕາຕະລາງນີ້ປະກອບມີຄີ (keys) ທີ່ຜູ້ໃຊ້ກຳນົດເອງ ຈຳນວນເທົ່າໃດກໍໄດ້, " +"ເຊິ່ງແຕ່ລະຄີຈະມີຄ່າເປັນລາຍຊື່ຂອງຄວາມຕ້ອງການ (requirements)." + +#: ../source/specifications/dependency-groups.rst:46 +msgid "" +"``[dependency-groups]`` keys, sometimes also called \"group names\", must " +"be :ref:`valid non-normalized names `. Tools which handle " +"Dependency Groups MUST :ref:`normalize ` these names " +"before comparisons." +msgstr "" +"ຄີໃນ ``[dependency-groups]`` ຫຼື ບາງຄັ້ງເອີ້ນວ່າ \"ຊື່ກຸ່ມ\", " +"ຕ້ອງເປັນ :ref:`ຊື່ທີ່ຖືກຕ້ອງແບບບໍ່ປັບຄ່າມາດຕະຖານ `. ເຄື່ອງມືທີ່ຈັດການ Dependency " +"Groups ຕ້ອງ :ref:`ປັບຄ່າມາດຕະຖານ ` ຊື່ເຫຼົ່ານີ້ ກ່ອນທີ່ຈະເຮັດການປຽບທຽບ." + +#: ../source/specifications/dependency-groups.rst:51 +msgid "" +"Tools SHOULD prefer to present the original, non-normalized name to users, " +"and if duplicate names are detected after normalization, tools SHOULD emit " +"an error." +msgstr "" +"ເຄື່ອງມືຄວນສະແດງຊື່ເດີມທີ່ບໍ່ໄດ້ປັບຄ່າມາດຕະຖານໃຫ້ຜູ້ໃຊ້ເຫັນ, ແລະ ຖ້າພົບຊື່ທີ່ຊ້ຳກັນ " +"ຫຼັງຈາກປັບຄ່າມາດຕະຖານແລ້ວ, ເຄື່ອງມືຄວນແຈ້ງຂໍ້ຜິດພາດ." + +#: ../source/specifications/dependency-groups.rst:55 +msgid "" +"Requirement lists, the values in ``[dependency-groups]``, may contain " +"strings, tables (``dict`` in Python), or a mix of strings and tables. " +"Strings must be valid :ref:`dependency specifiers `, " +"and tables must be valid Dependency Group Includes." +msgstr "" +"ລາຍຊື່ຄວາມຕ້ອງການ ເຊິ່ງແມ່ນຄ່າໃນ ``[dependency-groups]``, ອາດຈະປະກອບມີຂໍ້ຄວາມ, ຕາຕະລາງ " +"(``dict`` ໃນ Python), ຫຼື ປະສົມກັນ. ຂໍ້ຄວາມຕ້ອງເປັນ :ref:`dependency specifiers " +"` ທີ່ຖືກຕ້ອງ, ແລະ ຕາຕະລາງຕ້ອງເປັນ Dependency Group Includes " +"ທີ່ຖືກຕ້ອງ." + +#: ../source/specifications/dependency-groups.rst:61 +msgid "Dependency Group Include" +msgstr "ການລວມກຸ່ມສິ່ງທີ່ຈຳເປັນ (Dependency Group Include)" + +#: ../source/specifications/dependency-groups.rst:63 +msgid "" +"A Dependency Group Include includes another Dependency Group in the current " +"group." +msgstr "Dependency Group Include ແມ່ນການລວມເອົາກຸ່ມສິ່ງທີ່ຈຳເປັນອື່ນເຂົ້າມາໄວ້ໃນກຸ່ມປັດຈຸບັນ." + +#: ../source/specifications/dependency-groups.rst:66 +msgid "" +"An include is a table with exactly one key, ``\"include-group\"``, whose " +"value is a string, the name of another Dependency Group." +msgstr "" +"ການລວມ (include) ແມ່ນຕາຕະລາງທີ່ມີພຽງຄີດຽວຄື ``\"include-group\"``, ເຊິ່ງມີຄ່າ " +"ເປັນຂໍ້ຄວາມລະບຸຊື່ຂອງກຸ່ມສິ່ງທີ່ຈຳເປັນອື່ນ." + +#: ../source/specifications/dependency-groups.rst:69 +msgid "" +"Includes are defined to be exactly equivalent to the contents of the named " +"Dependency Group, inserted into the current group at the location of the " +"include. For example, if ``foo = [\"a\", \"b\"]`` is one group, and ``bar = " +"[\"c\", {include-group = \"foo\"}, \"d\"]`` is another, then ``bar`` should " +"evaluate to ``[\"c\", \"a\", \"b\", \"d\"]`` when Dependency Group Includes " +"are expanded." +msgstr "" +"ການລວມຖືກກຳນົດໃຫ້ມີຄ່າເທົ່າກັບເນື້ອຫາຂອງກຸ່ມສິ່ງທີ່ຈຳເປັນທີ່ຖືກອ້າງເຖິງ, ໂດຍຈະ " +"ຖືກແຊກເຂົ້າໃນກຸ່ມປັດຈຸບັນຕາມຕຳແໜ່ງທີ່ລະບຸ. ຕົວຢ່າງ: ຖ້າ ``foo = [\"a\", \"b\"]`` ແລະ ``bar " +"= [\"c\", {include-group = \"foo\"}, \"d\"]``, ເມື່ອຂະຫຍາຍອອກ ``bar`` ຈະມີຄ່າເປັນ " +"``[\"c\", \"a\", \"b\", \"d\"]``." + +#: ../source/specifications/dependency-groups.rst:75 +msgid "" +"Dependency Group Includes may specify the same package multiple times. Tools " +"SHOULD NOT deduplicate or otherwise alter the list contents produced by the " +"include. For example, given the following table:" +msgstr "" +"Dependency Group Includes ອາດຈະລະບຸ package ດຽວກັນຫຼາຍຄັ້ງ. ເຄື່ອງມືບໍ່ຄວນ " +"ຕັດລາຍການທີ່ຊ້ຳອອກ ຫຼື ປ່ຽນແປງເນື້ອຫາຂອງລາຍຊື່ທີ່ເກີດຈາກການລວມ. ຕົວຢ່າງ ຈາກຕາຕະລາງຕໍ່ໄປນີ້:" + +#: ../source/specifications/dependency-groups.rst:92 +msgid "" +"The resolved value of ``all`` SHOULD be ``[\"foo\", \"foo\", \"foo>1.0\", " +"\"foo<1.0\"]``. Tools should handle such a list exactly as they would handle " +"any other case in which they are asked to process the same requirement " +"multiple times with different version constraints." +msgstr "" +"ຄ່າທີ່ໄດ້ຂອງ ``all`` ຄວນຈະເປັນ ``[\"foo\", \"foo\", \"foo>1.0\", \"foo<1.0\"]``. " +"ເຄື່ອງມືຄວນຈັດການກັບລາຍຊື່ດັ່ງກ່າວຄືກັນກັບກໍລະນີອື່ນໆ ທີ່ມີການປະມວນຜົນຄວາມຕ້ອງການ " +"ດຽວກັນຫຼາຍຄັ້ງດ້ວຍຂໍ້ຈຳກັດເວີຊັນທີ່ແຕກຕ່າງກັນ." + +#: ../source/specifications/dependency-groups.rst:97 +msgid "" +"Dependency Group Includes may include groups containing Dependency Group " +"Includes, in which case those includes should be expanded as well. " +"Dependency Group Includes MUST NOT include cycles, and tools SHOULD report " +"an error if they detect a cycle." +msgstr "" +"Dependency Group Includes ສາມາດລວມເອົາກຸ່ມອື່ນທີ່ມີ Dependency Group Includes " +"ຢູ່ພາຍໃນໄດ້, ເຊິ່ງໃນກໍລະນີນັ້ນການລວມກໍຈະຖືກຂະຫຍາຍອອກທັງໝົດ. ແຕ່ຫ້າມບໍ່ໃຫ້ເກີດ ການລວມກັນເປັນວົງຈອນ " +"(cycles), ແລະ ເຄື່ອງມືຄວນແຈ້ງຂໍ້ຜິດພາດຖ້າພົບວົງຈອນດັ່ງກ່າວ." + +#: ../source/specifications/dependency-groups.rst:102 +msgid "Package Building" +msgstr "ການສ້າງ Package" + +#: ../source/specifications/dependency-groups.rst:104 +msgid "" +"Build backends MUST NOT include Dependency Group data in built distributions " +"as package metadata. This means that sdist ``PKG-INFO`` and wheel " +"``METADATA`` files should not include referenceable fields containing " +"dependency groups." +msgstr "" +"Build backends ຕ້ອງບໍ່ລວມເອົາຂໍ້ມູນກຸ່ມສິ່ງທີ່ຈຳເປັນເຂົ້າໃນ metadata ຂອງ package " +"ໃນຊຸດໂປຣແກຣມທີ່ສ້າງແລ້ວ. ນີ້ໝາຍຄວາມວ່າໄຟລ໌ ``PKG-INFO`` ໃນ sdist ແລະ ``METADATA`` ໃນ " +"wheel ບໍ່ຄວນມີຊ່ອງຂໍ້ມູນທີ່ອ້າງອີງເຖິງກຸ່ມສິ່ງທີ່ຈຳເປັນ." + +#: ../source/specifications/dependency-groups.rst:108 +msgid "" +"It is, however, valid to use dependency groups in the evaluation of dynamic " +"metadata, and ``pyproject.toml`` files included in sdists will still contain " +"``[dependency-groups]``. However, the table's contents are not part of a " +"built package's interfaces." +msgstr "" +"ເຖິງຢ່າງໃດກໍຕາມ, ມັນສາມາດໃຊ້ກຸ່ມສິ່ງທີ່ຈຳເປັນໃນການປະເມີນຄ່າ metadata ແບບໄດນາມິກໄດ້, ແລະ ໄຟລ໌ " +"``pyproject.toml`` ທີ່ລວມຢູ່ໃນ sdist ຈະຍັງຄົງມີ ``[dependency-groups]``. " +"ແຕ່ເນື້ອຫາໃນຕາຕະລາງນັ້ນຈະບໍ່ຖືວ່າເປັນສ່ວນໜຶ່ງຂອງອິນເຕີເຟດຂອງ package ທີ່ສ້າງແລ້ວ." + +#: ../source/specifications/dependency-groups.rst:114 +msgid "Installing Dependency Groups & Extras" +msgstr "ການຕິດຕັ້ງກຸ່ມສິ່ງທີ່ຈຳເປັນ ແລະ Extras" + +#: ../source/specifications/dependency-groups.rst:116 +msgid "" +"There is no syntax or specification-defined interface for installing or " +"referring to dependency groups. Tools are expected to provide dedicated " +"interfaces for this purpose." +msgstr "" +"ບໍ່ມີໄວຍາກອນ ຫຼື ອິນເຕີເຟດທີ່ກຳນົດໄວ້ໃນຂໍ້ກຳນົດສຳລັບການຕິດຕັ້ງ ຫຼື ອ້າງອີງເຖິງ ກຸ່ມສິ່ງທີ່ຈຳເປັນ. " +"ເຄື່ອງມືຕ່າງໆ ຄວນຈະມີອິນເຕີເຟດສະເພາະສຳລັບຈຸດປະສົງນີ້ເອງ." + +#: ../source/specifications/dependency-groups.rst:120 +msgid "" +"Tools MAY choose to provide the same or similar interfaces for interacting " +"with dependency groups as they do for managing extras. Tools authors are " +"advised that the specification does not forbid having an extra whose name " +"matches a Dependency Group. Separately, users are advised to avoid creating " +"dependency groups whose names match extras, and tools MAY treat such " +"matching as an error." +msgstr "" +"ເຄື່ອງມືອາດຈະເລືອກໃຊ້ອິນເຕີເຟດດຽວກັນ ຫຼື ຄ້າຍຄືກັນໃນການຈັດການກຸ່ມສິ່ງທີ່ຈຳເປັນ ຄືກັບການຈັດການ " +"extras. ຜູ້ພັດທະນາເຄື່ອງມືຄວນຊາບວ່າຂໍ້ກຳນົດບໍ່ໄດ້ຫ້າມການຕັ້ງຊື່ extra ໃຫ້ກົງກັບຊື່ກຸ່ມສິ່ງທີ່ຈຳເປັນ. " +"ຢ່າງໃດກໍຕາມ, ຜູ້ໃຊ້ຄວນຫຼີກລ່ຽງການຕັ້ງຊື່ໃຫ້ ຊ້ຳກັນ, ແລະ ເຄື່ອງມືອາດຈະຖືວ່າການທີ່ຊື່ຊ້ຳກັນນັ້ນເປັນຂໍ້ຜິດພາດ." + +#: ../source/specifications/dependency-groups.rst:128 +msgid "Validation and Compatibility" +msgstr "ການກວດສອບ ແລະ ຄວາມເຂົ້າກັນໄດ້" + +#: ../source/specifications/dependency-groups.rst:130 +msgid "" +"Tools supporting dependency groups may want to validate data before using " +"it. When implementing such validation, authors should be aware of the " +"possibility of future extensions to the specification, so that they do not " +"unnecessarily emit errors or warnings." +msgstr "" +"ເຄື່ອງມືທີ່ຮອງຮັບກຸ່ມສິ່ງທີ່ຈຳເປັນອາດຈະຕ້ອງການກວດສອບຂໍ້ມູນກ່ອນການນຳໃຊ້. ເມື່ອນຳໃຊ້ ການກວດສອບດັ່ງກ່າວ, " +"ຜູ້ພັດທະນາຄວນຄຳນຶງເຖິງຄວາມເປັນໄປໄດ້ໃນການຂະຫຍາຍຂໍ້ກຳນົດ ໃນອະນາຄົດ ເພື່ອບໍ່ໃຫ້ມີການແຈ້ງຂໍ້ຜິດພາດ ຫຼື " +"ຄຳເຕືອນໂດຍບໍ່ຈຳເປັນ." + +#: ../source/specifications/dependency-groups.rst:135 +msgid "" +"Tools SHOULD error when evaluating or processing unrecognized data in " +"dependency groups." +msgstr "ເຄື່ອງມືຄວນແຈ້ງຂໍ້ຜິດພາດເມື່ອມີການປະເມີນ ຫຼື ປະມວນຜົນຂໍ້ມູນທີ່ບໍ່ຮູ້ຈັກໃນ ກຸ່ມສິ່ງທີ່ຈຳເປັນ." + +#: ../source/specifications/dependency-groups.rst:138 +msgid "" +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " +"unless they have a need to do so." +msgstr "ເຄື່ອງມືບໍ່ຄວນກວດສອບເນື້ອຫາຂອງ *ທຸກໆ* ກຸ່ມສິ່ງທີ່ຈຳເປັນ ຖ້າຫາກບໍ່ມີຄວາມຈຳເປັນຕ້ອງໃຊ້." + +#: ../source/specifications/dependency-groups.rst:141 +msgid "" +"This means that in the presence of the following data, most tools should " +"allow the ``foo`` group to be used and only error if the ``bar`` group is " +"used:" +msgstr "" +"ນີ້ໝາຍຄວາມວ່າຖ້າມີຂໍ້ມູນຕໍ່ໄປນີ້, ເຄື່ອງມືສ່ວນໃຫຍ່ຄວນອະນຸຍາດໃຫ້ໃຊ້ກຸ່ມ ``foo`` ແລະ " +"ຈະແຈ້ງຂໍ້ຜິດພາດສະເພາະເມື່ອມີການໃຊ້ກຸ່ມ ``bar`` ເທົ່ານັ້ນ:" + +#: ../source/specifications/dependency-groups.rst:152 +msgid "" +"There are several known cases of tools which have good cause to be stricter. " +"Linters and validators are an example, as their purpose is to validate the " +"contents of all dependency groups." +msgstr "" +"ມີເຄື່ອງມືບາງປະເພດທີ່ມີເຫດຜົນພຽງພໍທີ່ຈະກວດສອບຢ່າງເຂັ້ມງວດ. ເຊັ່ນ Linters ແລະ " +"ເຄື່ອງມືກວດສອບຄວາມຖືກຕ້ອງ, ເພາະຈຸດປະສົງຂອງພວກມັນແມ່ນເພື່ອມວດສອບເນື້ອຫາ ຂອງທຸກໆ ກຸ່ມສິ່ງທີ່ຈຳເປັນ." + +#: ../source/specifications/dependency-groups.rst:157 +#: ../source/specifications/inline-script-metadata.rst:134 +msgid "Reference Implementation" +msgstr "ຕົວຢ່າງການນຳໃຊ້ (Reference Implementation)" + +#: ../source/specifications/dependency-groups.rst:159 +msgid "" +"The following Reference Implementation prints the contents of a Dependency " +"Group to stdout, newline delimited. The output is therefore valid " +"``requirements.txt`` data." +msgstr "" +"ຕົວຢ່າງການນຳໃຊ້ຕໍ່ໄປນີ້ຈະສະແດງເນື້ອຫາຂອງກຸ່ມສິ່ງທີ່ຈຳເປັນອອກທາງ stdout, " +"ໂດຍແຍກແຕ່ລະລາຍການດ້ວຍຂຶ້ນແຖວໃໝ່. ຜົນທີ່ໄດ້ຈຶ່ງເປັນຂໍ້ມູນທີ່ຖືກຕ້ອງຕາມ ຮູບແບບຂອງ " +"``requirements.txt``." + +#: ../source/specifications/dependency-groups.rst:252 +msgid "October 2024: This specification was approved through :pep:`735`." +msgstr "ຕຸລາ 2024: ຂໍ້ກຳນົດນີ້ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`735`." + +#: ../source/specifications/dependency-specifiers.rst:7 +msgid "Dependency specifiers" +msgstr "ຕົວລະບຸສິ່ງທີ່ຈຳເປັນ (Dependency specifiers)" + +#: ../source/specifications/dependency-specifiers.rst:9 +msgid "" +"This document defines the format used to specify dependencies on other " +"projects. The language defined is a compact line based format which was " +"adapted from the format originally used in ``pip`` requirements files." +msgstr "" +"ເອກະສານນີ້ກຳນົດຮູບແບບທີ່ໃຊ້ໃນການລະບຸສິ່ງທີ່ຈຳເປັນ (dependencies) ຕໍ່ໂຄງການອື່ນ. " +"ພາສາທີ່ກຳນົດແມ່ນຮູບແບບແຖວຂໍ້ຄວາມທີ່ກະທັດຮັດ ເຊິ່ງຖືກປັບປຸງມາຈາກຮູບແບບທີ່ໃຊ້ ໃນໄຟລ໌ requirements " +"ຂອງ ``pip``." + +#: ../source/specifications/dependency-specifiers.rst:13 +msgid "" +"The job of a dependency is to enable tools like pip [#pip]_ to find the " +"right package to install. Sometimes this is very loose - just specifying a " +"name, and sometimes very specific - referring to a specific file to install. " +"Sometimes dependencies are only relevant on one platform, or only some " +"versions are acceptable, so the language permits describing all these cases." +msgstr "" +"ໜ້າທີ່ຂອງສິ່ງທີ່ຈຳເປັນແມ່ນເພື່ອຊ່ວຍໃຫ້ເຄື່ອງມືເຊັ່ນ pip ຄົ້ນຫາ package ທີ່ ຖືກຕ້ອງມາຕິດຕັ້ງ. " +"ບາງຄັ້ງມັນອາດຈະກຳນົດແບບກວ້າງໆ ພຽງແຕ່ຊື່, ແລະ ບາງຄັ້ງ ກໍລະບຸເຈາະຈົງເຖິງໄຟລ໌ທີ່ຈະຕິດຕັ້ງ. " +"ບາງຄັ້ງສິ່ງທີ່ຈຳເປັນອາດກ່ຽວຂ້ອງກັບພຽງ ແພລັດຟອມດຽວ ຫຼື ຮອງຮັບບາງເວີຊັນເທົ່ານັ້ນ, " +"ພາສານີ້ຈຶ່ງອະນຸຍາດໃຫ້ລະບຸ ກໍລະນີເຫຼົ່ານີ້ໄດ້ທັງໝົດ." + +#: ../source/specifications/dependency-specifiers.rst:19 +msgid "" +"Whether tools should be strict or permissive in their processing of " +"dependency specifiers is largely dependent on the role of the tool in the " +"wider ecosystem:" +msgstr "" +"ການທີ່ເຄື່ອງມືຄວນຈະກວດສອບຢ່າງເຂັ້ມງວດ ຫຼື ຜ່ອນຜັນໃນການປະມວນຜົນຕົວລະບຸ ສິ່ງທີ່ຈຳເປັນນັ້ນ " +"ແມ່ນຂຶ້ນກັບບົດບາດຂອງເຄື່ອງມືນັ້ນໃນລະບົບນິເວດ:" + +#: ../source/specifications/dependency-specifiers.rst:22 +msgid "" +"publishing tools and index servers SHOULD be strict in their processing for " +"new releases, encouraging the consistency of published specifiers to improve " +"over time" +msgstr "" +"ເຄື່ອງມືເຜີຍແຜ່ ແລະ ເຊີເວີດັດຊະນີ ຄວນຈະເຂັ້ມງວດໃນການປະມວນຜົນສຳລັບການ ປ່ອຍເວີຊັນໃໝ່, " +"ເພື່ອສົ່ງເສີມຄວາມສອດຄ່ອງຂອງຕົວລະບຸໃຫ້ດີຂຶ້ນເລື້ອຍໆ." + +#: ../source/specifications/dependency-specifiers.rst:25 +msgid "" +"locking and installation tools MAY be permissive in their processing, " +"allowing consumption of older packages which may contain dependency " +"specifiers that are arguably nonsensical" +msgstr "" +"ເຄື່ອງມືໃນການລັອກເວີຊັນ ແລະ ການຕິດຕັ້ງ ອາດຈະຜ່ອນຜັນໃນການປະມວນຜົນ, ເພື່ອໃຫ້ສາມາດໃຊ້ package " +"ເກົ່າໆ ທີ່ອາດມີຕົວລະບຸສິ່ງທີ່ຈຳເປັນທີ່ບໍ່ສົມເຫດສົມຜົນ." + +#: ../source/specifications/dependency-specifiers.rst:35 +msgid "All features of the language shown with a name based lookup::" +msgstr "ຄຸນສົມບັດທັງໝົດຂອງພາສາທີ່ສະແດງດ້ວຍການຄົ້ນຫາຕາມຊື່::" + +#: ../source/specifications/dependency-specifiers.rst:39 +msgid "A minimal URL based lookup::" +msgstr "ການຄົ້ນຫາຕາມ URL ແບບພື້ນຖານ::" + +#: ../source/specifications/dependency-specifiers.rst:44 +msgid "Concepts" +msgstr "ແນວຄິດ" + +#: ../source/specifications/dependency-specifiers.rst:46 +msgid "" +"A dependency specification always specifies a distribution name. It may " +"include extras, which expand the dependencies of the named distribution to " +"enable optional features. The version installed can be controlled using " +"version limits, or giving the URL to a specific artifact to install. Finally " +"the dependency can be made conditional using environment markers." +msgstr "" +"ການລະບຸສິ່ງທີ່ຈຳເປັນຈະຕ້ອງລະບຸຊື່ຊຸດໂປຣແກຣມສະເໝີ. ມັນອາດຈະລວມເອົາ extras " +"ເຊິ່ງຊ່ວຍຂະຫຍາຍສິ່ງທີ່ຈຳເປັນເພື່ອເປີດໃຊ້ຟີເຈີເສີມ. ເວີຊັນທີ່ຕິດຕັ້ງສາມາດຄວບຄຸມໄດ້ " +"ໂດຍການກຳນົດຂອບເຂດເວີຊັນ ຫຼື ການໃຫ້ URL ຂອງໄຟລ໌ທີ່ຈະຕິດຕັ້ງ. ສຸດທ້າຍ, " +"ສິ່ງທີ່ຈຳເປັນສາມາດກຳນົດເງື່ອນໄຂໄດ້ໂດຍໃຊ້ environment markers." + +#: ../source/specifications/dependency-specifiers.rst:53 +msgid "Grammar" +msgstr "ໄວຍາກອນ" + +#: ../source/specifications/dependency-specifiers.rst:55 +msgid "" +"We first cover the grammar briefly and then drill into the semantics of each " +"section later." +msgstr "ພວກເຮົາຈະເວົ້າເຖິງໄວຍາກອນໂດຍຫຍໍ້ກ່ອນ ແລະ ຈະລົງເລິກເຖິງຄວາມໝາຍຂອງແຕ່ລະ ສ່ວນໃນພາຍຫຼັງ." + +#: ../source/specifications/dependency-specifiers.rst:58 +msgid "" +"A distribution specification is written in ASCII text. We use a parsley " +"[#parsley]_ grammar to provide a precise grammar. It is expected that the " +"specification will be embedded into a larger system which offers framing " +"such as comments, multiple line support via continuations, or other such " +"features." +msgstr "" +"ການລະບຸຊຸດໂປຣແກຣມແມ່ນຂຽນເປັນຂໍ້ຄວາມ ASCII. ພວກເຮົາໃຊ້ໄວຍາກອນ parsley " +"ເພື່ອໃຫ້ໄດ້ໄວຍາກອນທີ່ຊັດເຈນ. ຂໍ້ກຳນົດນີ້ຄາດວ່າຈະຖືກນຳໄປລວມໄວ້ໃນລະບົບ ທີ່ໃຫຍ່ກວ່າ " +"ເຊິ່ງຮອງຮັບການໃສ່ຄຳເຫັນ (comments), ການຂຽນຫຼາຍແຖວ ແລະ ອື່ນໆ." + +#: ../source/specifications/dependency-specifiers.rst:63 +msgid "" +"The full grammar including annotations to build a useful parse tree is " +"included at the end of this document." +msgstr "ໄວຍາກອນທັງໝົດ ລວມເຖິງຄຳອະທິບາຍເພື່ອສ້າງ parse tree ແມ່ນຢູ່ທ້າຍເອກະສານນີ້." + +#: ../source/specifications/dependency-specifiers.rst:66 +msgid "" +"Versions may be specified according to the rules of the :ref:`Version " +"specifier specification `. (Note: URI is defined " +"in :rfc:`std-66 <3986>`)::" +msgstr "" +"ເວີຊັນສາມາດລະບຸໄດ້ຕາມກົດເກນຂອງ :ref:`Version specifier specification `. (ໝາຍເຫດ: URI ຖືກກຳນົດໃນ :rfc:`std-66 <3986>`)::" + +#: ../source/specifications/dependency-specifiers.rst:77 +msgid "" +"Environment markers allow making a specification only take effect in some " +"environments::" +msgstr "Environment markers ຊ່ວຍໃຫ້ການລະບຸມີຜົນສະເພາະໃນບາງສະພາບແວດລ້ອມເທົ່ານັ້ນ::" + +#: ../source/specifications/dependency-specifiers.rst:106 +msgid "" +"Optional components of a distribution may be specified using the extras " +"field::" +msgstr "ສ່ວນປະກອບເສີມຂອງຊຸດໂປຣແກຣມສາມາດລະບຸໄດ້ໂດຍໃຊ້ຊ່ອງຂໍ້ມູນ extras::" + +#: ../source/specifications/dependency-specifiers.rst:115 +msgid "Giving us a rule for name based requirements::" +msgstr "ນີ້ແມ່ນກົດເກນສຳລັບຄວາມຕ້ອງການທີ່ອີງຕາມຊື່::" + +#: ../source/specifications/dependency-specifiers.rst:119 +msgid "And a rule for direct reference specifications::" +msgstr "ແລະ ກົດເກນສຳລັບການລະບຸແບບອ້າງອີງໂດຍກົງ::" + +#: ../source/specifications/dependency-specifiers.rst:123 +msgid "Leading to the unified rule that can specify a dependency.::" +msgstr "ນຳໄປສູ່ກົດເກນລວມທີ່ສາມາດລະບຸສິ່ງທີ່ຈຳເປັນໄດ້.::" + +#: ../source/specifications/dependency-specifiers.rst:128 +msgid "Whitespace" +msgstr "ຍະຫວ່າງ (Whitespace)" + +#: ../source/specifications/dependency-specifiers.rst:130 +msgid "" +"Non line-breaking whitespace is mostly optional with no semantic meaning. " +"The sole exceptions are detecting the end of a URL requirement and inside " +"user supplied constants in environment markers." +msgstr "" +"ຍະຫວ່າງທີ່ບໍ່ແມ່ນການຂຶ້ນແຖວໃໝ່ສ່ວນໃຫຍ່ແມ່ນບໍ່ບັງຄັບ ແລະ ບໍ່ມີຄວາມໝາຍທາງໄວຍາກອນ. " +"ຂໍ້ຍົກເວັ້ນດຽວແມ່ນການກວດຫາຈຸດສິ້ນສຸດຂອງ URL ແລະ ພາຍໃນຄ່າຄົງທີ່ທີ່ຜູ້ໃຊ້ກຳນົດ ໃນ environment " +"markers." + +#: ../source/specifications/dependency-specifiers.rst:137 +msgid "Names" +msgstr "ຊື່" + +#: ../source/specifications/dependency-specifiers.rst:139 +msgid "" +"Distribution names are defined in the :ref:`Core metadata `. Names act as the primary identifier for distributions. They are " +"present in all dependency specifications, and are sufficient to be a " +"specification on their own." +msgstr "" +"ຊື່ຊຸດໂປຣແກຣມຖືກກຳນົດໃນ :ref:`Core metadata `. ຊື່ເຮັດໜ້າທີ່ " +"ເປັນຕົວລະບຸຫຼັກສຳລັບຊຸດໂປຣແກຣມ. ພວກມັນມີຢູ່ໃນທຸກການລະບຸສິ່ງທີ່ຈຳເປັນ, ແລະ " +"ພຽງແຕ່ຊື່ຢ່າງດຽວກໍພຽງພໍທີ່ຈະເປັນການລະບຸໄດ້." + +#: ../source/specifications/dependency-specifiers.rst:144 +msgid "" +"Valid distribution names are defined in the :ref:`name format specification " +"`." +msgstr "" +"ຊື່ຊຸດໂປຣແກຣມທີ່ຖືກຕ້ອງຖືກກຳນົດໃນ :ref:`name format specification `." + +#: ../source/specifications/dependency-specifiers.rst:151 +msgid "Extras" +msgstr "Extras (ຟີເຈີເສີມ)" + +#: ../source/specifications/dependency-specifiers.rst:153 +msgid "" +"An extra is an optional part of a distribution. Distributions can specify as " +"many extras as they wish, and each extra results in the declaration of " +"additional dependencies of the distribution **when** the extra is used in a " +"dependency specification. For instance::" +msgstr "" +"ສ່ວນເສີມແມ່ນສ່ວນທາງເລືອກຂອງການແຈກຈ່າຍ. ການແຈກຈ່າຍສາມາດລະບຸສ່ວນເສີມໄດ້ຫຼາຍເທົ່າທີ່ຕ້ອງການ, ແລະ " +"ແຕ່ລະສ່ວນເສີມຈະສົ່ງຜົນໃຫ້ມີການປະກາດສ່ວນທີ່ຈຳເປັນຕ້ອງໃຊ້ເພີ່ມເຕີມຂອງການແຈກຈ່າຍ **ເມື່ອ** " +"ມີການໃຊ້ສ່ວນເສີມນັ້ນໃນການລະບຸສ່ວນທີ່ຈຳເປັນຕ້ອງໃຊ້. ຕົວຢ່າງເຊັ່ນ::" + +#: ../source/specifications/dependency-specifiers.rst:160 +msgid "" +"Extras union in the dependencies they define with the dependencies of the " +"distribution they are attached to. The example above would result in " +"requests being installed, and requests own dependencies, and also any " +"dependencies that are listed in the \"security\" extra of requests." +msgstr "" +"Extras ຈະລວມເອົາສິ່ງທີ່ຈຳເປັນທີ່ພວກມັນກຳນົດເຂົ້າກັບສິ່ງທີ່ຈຳເປັນຫຼັກຂອງຊຸດໂປຣແກຣມ. " +"ຕົວຢ່າງຂ້າງເທິງຈະເຮັດໃຫ້ມີການຕິດຕັ້ງ requests, ສິ່ງທີ່ຈຳເປັນຂອງ requests ເອງ, ແລະ " +"ສິ່ງທີ່ຈຳເປັນໃດໆ ທີ່ລະບຸໄວ້ໃນ extra \"security\" ຂອງ requests." + +#: ../source/specifications/dependency-specifiers.rst:165 +msgid "" +"If multiple extras are listed, all the dependencies are unioned together." +msgstr "ຖ້າລະບຸຫຼາຍ extras, ສິ່ງທີ່ຈຳເປັນທັງໝົດຈະຖືກລວມເຂົ້າກັນ." + +#: ../source/specifications/dependency-specifiers.rst:167 +msgid "" +"Restrictions on names for extras are defined in the :ref:`Core metadata " +"specification `. Publication tools SHOULD " +"enforce these restrictions in dependency specifiers, while locking and " +"installation tools MAY normalize invalid extra names in order to accept " +"published metadata using core metadata versions prior to 2.3." +msgstr "" +"ຂໍ້ຈຳກັດຂອງຊື່ extras ຖືກກຳນົດໃນ :ref:`Core metadata specification `. ເຄື່ອງມືເຜີຍແຜ່ຄວນບັງຄັບໃຊ້ຂໍ້ຈຳກັດເຫຼົ່ານີ້, ໃນຂະນະທີ່ເຄື່ອງມືຕິດຕັ້ງອາດຈະ " +"ປັບຄ່າມາດຕະຖານຊື່ທີ່ບໍ່ຖືກຕ້ອງ ເພື່ອໃຫ້ຮອງຮັບ metadata ທີ່ເຜີຍແຜ່ກ່ອນເວີຊັນ 2.3." + +#: ../source/specifications/dependency-specifiers.rst:176 +msgid "Versions" +msgstr "ເວີຊັນ" + +#: ../source/specifications/dependency-specifiers.rst:178 +msgid "" +"See the :ref:`Version specifier specification ` for more " +"detail on both version numbers and version comparisons. Version " +"specifications limit the versions of a distribution that can be used. They " +"only apply to distributions looked up by name, rather than via a URL. " +"Version comparisons are also used in environment markers. The optional " +"brackets around a version are present for compatibility with :pep:`345` but " +"should not be generated, only accepted." +msgstr "" +"ເບິ່ງ :ref:`Version specifier specification ` ສຳລັບລາຍລະອຽດ " +"ຂອງເລກເວີຊັນ ແລະ ການປຽບທຽບເວີຊັນ. ການລະບຸເວີຊັນຈະຈຳກັດເວີຊັນຂອງຊຸດໂປຣແກຣມ ທີ່ສາມາດໃຊ້ໄດ້. " +"ພວກມັນມີຜົນກັບການຄົ້ນຫາຕາມຊື່ເທົ່ານັ້ນ, ບໍ່ແມ່ນຜ່ານ URL. ການປຽບທຽບເວີຊັນຍັງຖືກໃຊ້ໃນ environment " +"markers ອີກດ້ວຍ." + +#: ../source/specifications/dependency-specifiers.rst:189 +msgid "Environment Markers" +msgstr "Environment Markers (ຕົວໝາຍສະພາບແວດລ້ອມ)" + +#: ../source/specifications/dependency-specifiers.rst:191 +msgid "" +"Environment markers allow a dependency specification to provide a rule that " +"describes when the dependency should be used. For instance, consider a " +"package that needs ``pywin32`` when running on Windows. This can be " +"expressed as::" +msgstr "" +"Environment markers ຊ່ວຍໃຫ້ການລະບຸສິ່ງທີ່ຈຳເປັນມີກົດເກນທີ່ບອກວ່າ ຄວນໃຊ້ສິ່ງທີ່ຈຳເປັນນັ້ນເມື່ອໃດ. " +"ຕົວຢ່າງ: package ທີ່ຕ້ອງການ ``pywin32`` ເມື່ອເຮັດວຽກເທິງ Windows ສາມາດຂຽນໄດ້ວ່າ::" + +#: ../source/specifications/dependency-specifiers.rst:197 +msgid "" +"A marker expression evaluates to either True or False for a given deployment " +"environment. When it evaluates to False, the dependency should be ignored." +msgstr "" +"ນິພົດຂອງ marker ຈະໃຫ້ຜົນເປັນ True ຫຼື False ສຳລັບສະພາບແວດລ້ອມນັ້ນໆ. ຖ້າເປັນ False, " +"ສິ່ງທີ່ຈຳເປັນນັ້ນຈະຖືກລະເລີຍ." + +#: ../source/specifications/dependency-specifiers.rst:200 +msgid "" +"The marker language is inspired by Python itself, chosen for the ability to " +"safely evaluate it without running arbitrary code that could become a " +"security vulnerability." +msgstr "" +"ພາສາຂອງ marker ໄດ້ແຮງບັນດານໃຈມາຈາກ Python, ເຊິ່ງເລືອກຍ້ອນຄວາມສາມາດ " +"ໃນການປະເມີນຄ່າຢ່າງປອດໄພ ໂດຍບໍ່ຕ້ອງລັນໂຄ້ດທີ່ອາດເປັນຊ່ອງໂຫວ່ດ້ານຄວາມປອດໄພ." + +#: ../source/specifications/dependency-specifiers.rst:204 +msgid "" +"Markers were first defined in :pep:`345`, formally specified in :pep:`508`, " +"then subsequently amended over time (amendments since :pep:`508` are " +"recorded :ref:`at the end of this specification `)." +msgstr "" +"Markers ຖືກກຳນົດຄັ້ງທຳອິດໃນ :pep:`345`, ກຳນົດເປັນທາງການໃນ :pep:`508`, ແລະ " +"ຖືກປັບປຸງມາເລື້ອຍໆ." + +#: ../source/specifications/dependency-specifiers.rst:209 +msgid "Marker field types" +msgstr "ປະເພດຊ່ອງຂໍ້ມູນຂອງ Marker" + +#: ../source/specifications/dependency-specifiers.rst:211 +msgid "" +"Environment marker fields are each defined as one of the following types:" +msgstr "ຊ່ອງຂໍ້ມູນຂອງ Environment marker ແຕ່ລະອັນຖືກກຳນົດເປັນປະເພດໃດໜຶ່ງດັ່ງນີ້:" + +#: ../source/specifications/dependency-specifiers.rst:213 +msgid "" +"``String``: the contents of the field are always treated as an opaque string." +msgstr "``String``: ເນື້ອຫາໃນຊ່ອງນີ້ຈະຖືກຖືວ່າເປັນຂໍ້ຄວາມ (string) ສະເໝີ." + +#: ../source/specifications/dependency-specifiers.rst:214 +msgid "" +"``Set of strings``: the contents of the field are always treated as a set " +"containing opaque strings. In comparisons, the user supplied constant MUST " +"still be a single string (as set literals are not part of the marker syntax)." +msgstr "" +"``Set of strings``: ເນື້ອຫາຈະຖືກຖືວ່າເປັນກຸ່ມຂອງຂໍ້ຄວາມ (set). ໃນການປຽບທຽບ, " +"ຄ່າຄົງທີ່ທີ່ຜູ້ໃຊ້ໃຫ້ມາຕ້ອງຍັງຄົງເປັນຂໍ້ຄວາມດຽວ." + +#: ../source/specifications/dependency-specifiers.rst:217 +msgid "" +"``Version``: the contents of the field are always expected to be a " +"valid :ref:`version specifier `. Publishing tools SHOULD " +"emit an error if that is not the case, but installation tools MAY fall back " +"to treating the field as a string field." +msgstr "" +"``Version``: ເນື້ອຫາຄາດວ່າຈະເປັນ :ref:`ຕົວລະບຸເວີຊັນ ` ທີ່ຖືກຕ້ອງ. " +"ເຄື່ອງມືເຜີຍແຜ່ຄວນແຈ້ງຂໍ້ຜິດພາດຖ້າບໍ່ຖືກຕ້ອງ, ແຕ່ເຄື່ອງມືຕິດຕັ້ງອາດຈະ ຖືວ່າເປັນຂໍ້ຄວາມທົ່ວໄປແທນ." + +#: ../source/specifications/dependency-specifiers.rst:221 +msgid "" +"``Version | String``: the contents of the field are expected to be a " +"valid :ref:`version specifier ` on some platforms, but " +"an opaque string on others. The specifics of this distinction are field " +"dependent and whether or not tools actually make the distinction will be " +"tool dependent." +msgstr "" +"``Version | String``: ເນື້ອຫາອາດຈະເປັນເວີຊັນທີ່ຖືກຕ້ອງໃນບາງແພລັດຟອມ, ແຕ່ " +"ເປັນຂໍ້ຄວາມທົ່ວໄປໃນແພລັດຟອມອື່ນ." + +#: ../source/specifications/dependency-specifiers.rst:227 +msgid "Marker comparisons" +msgstr "ການປຽບທຽບ Marker" + +#: ../source/specifications/dependency-specifiers.rst:229 +msgid "" +"All marker comparison expressions are expected to compare a named marker " +"field against a given user supplied constant. The type of the comparison is " +"determined by the comparison operator used and the type of the named field " +"as given in :ref:`the table below `. Tools MAY " +"emit an error if no marker field is referenced in a comparison (that is, " +"both operands are given as constants)." +msgstr "" +"ການປຽບທຽບ marker ແມ່ນການປຽບທຽບຊ່ອງຂໍ້ມູນກັບຄ່າຄົງທີ່ທີ່ຜູ້ໃຊ້ໃຫ້ມາ. " +"ປະເພດຂອງການປຽບທຽບແມ່ນຂຶ້ນກັບຕົວດຳເນີນການ ແລະ ປະເພດຂອງຊ່ອງຂໍ້ມູນ." + +#: ../source/specifications/dependency-specifiers.rst:236 +msgid "" +"The follow comparison operations are defined in the marker expression " +"grammar:" +msgstr "ຕົວດຳເນີນການປຽບທຽບຕໍ່ໄປນີ້ຖືກກຳນົດໄວ້ໃນໄວຍາກອນ:" + +#: ../source/specifications/dependency-specifiers.rst:238 +msgid "``==`` (for example, ``sys_platform == \"win32\"``)" +msgstr "``==`` (ຕົວຢ່າງ: ``sys_platform == \"win32\"``)" + +#: ../source/specifications/dependency-specifiers.rst:239 +msgid "``!=`` (for example, ``sys_platform != \"win32\"``)" +msgstr "``!=`` (ຕົວຢ່າງ: ``sys_platform != \"win32\"``)" + +#: ../source/specifications/dependency-specifiers.rst:240 +msgid "``>`` (for example, ``python_version > \"3.10\"``)" +msgstr "``>`` (ຕົວຢ່າງ: ``python_version > \"3.10\"``)" + +#: ../source/specifications/dependency-specifiers.rst:241 +msgid "``>=`` (for example, ``python_version >= \"3.10\"``)" +msgstr "``>=`` (ຕົວຢ່າງ: ``python_version >= \"3.10\"``)" + +#: ../source/specifications/dependency-specifiers.rst:242 +msgid "``<`` (for example, ``python_version < \"3.10\"``)" +msgstr "``<`` (ຕົວຢ່າງ: ``python_version < \"3.10\"``)" + +#: ../source/specifications/dependency-specifiers.rst:243 +msgid "``<=`` (for example, ``python_version <= \"3.10\"``)" +msgstr "``<=`` (ຕົວຢ່າງ: ``python_version <= \"3.10\"``)" + +#: ../source/specifications/dependency-specifiers.rst:244 +msgid "``~=`` (for example, ``python_version ~= \"3\"``)" +msgstr "``~=`` (ຕົວຢ່າງ: ``python_version ~= \"3\"``)" + +#: ../source/specifications/dependency-specifiers.rst:245 +msgid "" +"``===`` (for example, ``implementation_version === \"not.a.valid.version\"``)" +msgstr "" +"``===`` (ຕົວຢ່າງ: ``implementation_version === \"not.a.valid.version\"``)" + +#: ../source/specifications/dependency-specifiers.rst:246 +msgid "" +"``in`` (for example, ``\"gui\" in extras``, ``\"SMP\" in platform_version``)" +msgstr "``in`` (ຕົວຢ່າງ: ``\"gui\" in extras``, ``\"SMP\" in platform_version``)" + +#: ../source/specifications/dependency-specifiers.rst:247 +msgid "``not in`` (for example, ``\"dev\" not in dependency_groups``)" +msgstr "``not in`` (ຕົວຢ່າງ: ``\"dev\" not in dependency_groups``)" + +#: ../source/specifications/dependency-specifiers.rst:249 +msgid "" +"For ``String`` fields, ``==``, ``!=``, ``in``, and ``not in`` are defined as " +"they are for Python strings (case sensitive, with no value normalization of " +"any kind). The use of ``~=`` or ``===`` with string fields is explicitly " +"discouraged and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools MAY instead interpret them as equivalent to ``==``. The " +"use of ordered comparisons (``<``, ``<=``, ``>``, ``>=``) with string fields " +"is explicitly discouraged (as it makes no semantic sense in the packaging " +"context) and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD implement the following behavior:" +msgstr "" +"ສໍາລັບຟິວ ``String``, ``==``, ``!=``, ``in``, ແລະ ``not in`` " +"ແມ່ນຖືກກໍານົດໄວ້ຄືກັນກັບສະຕຣິງຂອງ Python (ຈຳແນກຕົວອັກສອນໃຫຍ່-ນ້ອຍ, " +"ໂດຍບໍ່ມີການປັບຄ່າໃຫ້ເປັນມາດຕະຖານໃດໆ). ການນຳໃຊ້ ``~=`` ຫຼື ``===`` " +"ກັບຟິວສະຕຣິງແມ່ນບໍ່ແນະນໍາຢ່າງເດັດຂາດ ແລະ ເຄື່ອງມືການເຜີຍແຜ່ ຄວນ (SHOULD) ສະແດງຂໍ້ຜິດພາດ, " +"ເຊີບເວີດັດຊະນີ ອາດຈະ (MAY) ບໍ່ອະນຸຍາດໃຫ້ອັບໂຫຼດທີ່ມີ environment markers ດັ່ງກ່າວ, " +"ໃນຂະນະທີ່ເຄື່ອງມືລັອກ ແລະ ການຕິດຕັ້ງ ອາດຈະ (MAY) ຕີຄວາມໝາຍວ່າພວກມັນທຽບເທົ່າກັບ ``==``. " +"ການນຳໃຊ້ການປຽບທຽບແບບມີລໍາດັບ (``<``, ``<=``, ``>``, ``>=``) " +"ກັບຟິວສະຕຣິງແມ່ນບໍ່ແນະນໍາຢ່າງເດັດຂາດ (ເນື່ອງຈາກມັນບໍ່ມີຄວາມໝາຍທາງດ້ານບໍລິບົດຂອງການເຮັດແພັກເກັດ) " +"ແລະ ເຄື່ອງມືການເຜີຍແຜ່ ຄວນ (SHOULD) ສະແດງຂໍ້ຜິດພາດ, ເຊີບເວີດັດຊະນີ ອາດຈະ (MAY) " +"ບໍ່ອະນຸຍາດໃຫ້ອັບໂຫຼດທີ່ມີ environment markers ດັ່ງກ່າວ, ໃນຂະນະທີ່ເຄື່ອງມືລັອກ ແລະ ການຕິດຕັ້ງ ຄວນ " +"(SHOULD) ປະຕິບັດຕາມພຶດຕິກໍາດັ່ງຕໍ່ໄປນີ້:" + +#: ../source/specifications/dependency-specifiers.rst:261 +msgid "treat ``>=`` and ``<=`` as equivalent to ``==``" +msgstr "ຖືວ່າ ``>=`` ແລະ ``<=`` ມີຄ່າເທົ່າກັບ ``==``" + +#: ../source/specifications/dependency-specifiers.rst:262 +msgid "treat ``>`` and ``<`` as always being False" +msgstr "ຖືວ່າ ``>`` ແລະ ``<`` ເປັນ False ສະເໝີ" + +#: ../source/specifications/dependency-specifiers.rst:264 +msgid "" +"For ``Set of String`` fields, as there is no marker syntax for set literals, " +"the only valid operations are ``in`` and ``not in`` comparisons with a user " +"supplied string literal as the left operand. Publishing tools SHOULD emit an " +"error if environment markers attempt to use any other comparison operations " +"on these fields and index servers MAY disallow uploads containing such " +"environment markers, while locking and installation tools SHOULD treat such " +"operations as always being False." +msgstr "" +"ສຳລັບຊ່ອງຂໍ້ມູນ ``Set of String``, ການດຳເນີນການທີ່ໃຊ້ໄດ້ມີພຽງແຕ່ ``in`` ແລະ ``not in`` " +"ເທົ່ານັ້ນ." + +#: ../source/specifications/dependency-specifiers.rst:272 +msgid "" +"For ``Version`` fields, the comparison operations are defined by " +"the :ref:`Version specifier specification ` when either " +"both the marker field value and the user supplied constant can be parsed as " +"valid version specifiers or the ``===`` arbitrary equivalence comparison " +"operator is used. When an operator other than ``===`` is used, publishing " +"tools SHOULD emit an error if the user supplied constant cannot be parsed as " +"a valid version specifier, index servers MAY disallow uploads containing " +"such environment markers, while locking and installation tools MAY either " +"emit an error or else fall back to ``String`` field comparison logic if " +"either the marker field value or the user supplied constant cannot be parsed " +"as a valid version specifier. Note that ``in`` and ``not in`` containment " +"checks are NOT valid for ``Version`` fields and publishing tools SHOULD emit " +"an error, index servers MAY disallow uploads containing such environment " +"markers, while locking and installation tools MAY treat them as always being " +"False." +msgstr "" +"ສຳລັບຊ່ອງຂໍ້ມູນ ``Version``, ການປຽບທຽບຈະເປັນໄປຕາມ :ref:`Version specifier " +"specification `." + +#: ../source/specifications/dependency-specifiers.rst:287 +msgid "" +"For ``Version | String`` fields, comparison operations are defined as they " +"are for ``Version`` fields, while ``in`` and ``not in`` containment checks " +"are defined as they are for ``String`` fields. However, there is no " +"consistent cross-platform expectation that the parsing of the marker field " +"value or the user supplied constant as a valid version will succeed, so " +"tools SHOULD fall back to processing the field as a ``String`` field if " +"parsing either value as a version fails. Tools MAY emit a warning if the " +"field is expected to contain a valid version on a given platform but does " +"not in fact do so. Tools SHOULD NOT unconditionally treat such fields as " +"``String`` fields, as doing so may give incorrect answers for environment " +"markers that are appropriately scoped to the relevant platforms before " +"performing a version based comparison." +msgstr "" +"ສຳລັບຊ່ອງຂໍ້ມູນ ``Version | String``, ການປຽບທຽບຈະເຮັດຄືກັບ ``Version``, " +"ແຕ່ຖ້າການອ່ານຄ່າເວີຊັນລົ້ມເຫຼວ ໃຫ້ກັບໄປໃຊ້ການປຽບທຽບແບບ ``String`` ແທນ." + +#: ../source/specifications/dependency-specifiers.rst:301 +msgid "Composing marker expressions" +msgstr "ການປະກອບນິພົດ marker" + +#: ../source/specifications/dependency-specifiers.rst:303 +msgid "" +"More complex marker expressions may be composed using the ``and`` and ``or`` " +"logical operators. Parentheses may be used as necessary to control operand " +"precedence (with all comparison operations having a higher precedence)." +msgstr "" +"ນິພົດ marker ທີ່ຊັບຊ້ອນສາມາດໃຊ້ຕົວດຳເນີນການທາງຕັກກະສາດ ``and`` ແລະ ``or`` ແລະ " +"ສາມາດໃຊ້ວົງເລັບເພື່ອຈັດລຳດັບຄວາມສຳຄັນໄດ້." + +#: ../source/specifications/dependency-specifiers.rst:307 +#: ../source/specifications/version-specifiers.rst:200 +msgid "For example::" +msgstr "ຕົວຢ່າງ::" + +#: ../source/specifications/dependency-specifiers.rst:313 +msgid "" +"Python's comparison chaining (such as ``3.4 < python_version < 3.9``) is NOT " +"supported in environment markers (such expressions must instead be written " +"out as two separate comparisons joined by ``and``)." +msgstr "" +"ການປຽບທຽບແບບຕໍ່ເນື່ອງຂອງ Python (ເຊັ່ນ ``3.4 < python_version < 3.9``) ແມ່ນ " +"**ບໍ່ຮອງຮັບ** ໃນ environment markers (ຕ້ອງຂຽນແຍກເປັນສອງອັນແລ້ວເຊື່ອມດ້ວຍ ``and``)." + +#: ../source/specifications/dependency-specifiers.rst:318 +msgid "User supplied constants" +msgstr "ຄ່າຄົງທີ່ທີ່ຜູ້ໃຊ້ກຳນົດ" + +#: ../source/specifications/dependency-specifiers.rst:320 +msgid "" +"User supplied constants are always given as strings within either ``'`` or " +"``\"`` quote marks. Triple-quoted multi-line strings are NOT permitted." +msgstr "" +"ຄ່າຄົງທີ່ທີ່ຜູ້ໃຊ້ໃຫ້ມາຕ້ອງຢູ່ໃນເຄື່ອງໝາຍຄຳເວົ້າ ``'`` ຫຼື ``\"``. ຫ້າມໃຊ້ ເຄື່ອງໝາຍຄຳເວົ້າສາມອັນ." + +#: ../source/specifications/dependency-specifiers.rst:323 +msgid "" +"Backslash escapes are not specified, although tools MAY support them. They " +"are not included in the specification because they add complexity and there " +"is currently no known need for treating user supplied constants as anything " +"other than either opaque strings or valid version specifiers." +msgstr "ການໃຊ້ backslash (\\) ບໍ່ໄດ້ກຳນົດໄວ້ໃນຂໍ້ກຳນົດນີ້ ຍ້ອນມັນເຮັດໃຫ້ເກີດຄວາມຊັບຊ້ອນ." + +#: ../source/specifications/dependency-specifiers.rst:328 +msgid "" +"Similarly, non-ASCII character support is not specified, but tools MAY " +"accept them (usually based on the text encoding of the file or stream " +"containing the dependency specifier). This may be revisited in the future if " +"it becomes more common for the runtime variables typically referenced in " +"environment markers to contain non-ASCII text that users wish to perform " +"comparisons against." +msgstr "" +"ເຊັ່ນດຽວກັນ, ການຮອງຮັບຕົວອັກສອນທີ່ບໍ່ແມ່ນ ASCII ແມ່ນບໍ່ໄດ້ກຳນົດໄວ້, ແຕ່ເຄື່ອງມື " +"ອາດຈະຍອມຮັບໄດ້ຂຶ້ນກັບການເຂົ້າລະຫັດໄຟລ໌." + +#: ../source/specifications/dependency-specifiers.rst:335 +msgid "Unknown marker fields" +msgstr "ຊ່ອງຂໍ້ມູນ marker ທີ່ບໍ່ຮູ້ຈັກ" + +#: ../source/specifications/dependency-specifiers.rst:337 +msgid "" +"References to unknown marker fields SHOULD render a package version " +"ineligible for installation or inclusion in a locked dependency tree rather " +"than resulting in a comparison that evaluates to True or False. This is so " +"that published package versions with unknown marker fields are either " +"ignored when resolving dependencies or emit a descriptive installation " +"failure, rather than producing an apparently successful installation that " +"then fails at runtime due to missing dependencies (if the unknown marker is " +"treated as False) or a potentially cryptic installation failure of a " +"dependency that is not valid for the current platform (if the unknown marker " +"is treated as True)." +msgstr "" +"ການອ້າງອີງເຖິງຊ່ອງຂໍ້ມູນ marker ທີ່ບໍ່ຮູ້ຈັກ ຄວນເຮັດໃຫ້ເວີຊັນຂອງ package ນັ້ນ ບໍ່ສາມາດຕິດຕັ້ງໄດ້ " +"ແທນທີ່ຈະໃຫ້ຜົນການປຽບທຽບເປັນ True ຫຼື False." + +#: ../source/specifications/dependency-specifiers.rst:347 +msgid "" +"Variables whose value cannot be calculated on a given Python implementation " +"should evaluate to ``0`` for ``Version`` fields, and an empty string for all " +"other variables (including ``Version | String`` fields)." +msgstr "" +"ຕົວປ່ຽນທີ່ບໍ່ສາມາດຄິດໄລ່ຄ່າໄດ້ໃນ Python ບາງເວີຊັນ ຄວນມີຄ່າເປັນ ``0`` ສຳລັບ ຊ່ອງ ``Version``, " +"ແລະ ເປັນຂໍ້ຄວາມວ່າງສຳລັບຊ່ອງອື່ນໆ." + +#: ../source/specifications/dependency-specifiers.rst:355 +msgid "Defined environment marker fields" +msgstr "ຊ່ອງຂໍ້ມູນ environment marker ທີ່ກຳນົດໄວ້" + +#: ../source/specifications/dependency-specifiers.rst:357 +msgid "" +"Unless otherwise noted below, marker evaluation environments MUST support " +"all of the following marker fields:" +msgstr "" +"ນອກຈາກຈະລະບຸໄວ້ເປັນຢ່າງອື່ນ, ສະພາວະການປະເມີນຄ່າ marker ຕ້ອງຮອງຮັບ ຊ່ອງຂໍ້ມູນທັງໝົດຕໍ່ໄປນີ້:" + +#: ../source/specifications/dependency-specifiers.rst:363 +msgid "Marker" +msgstr "Marker" + +#: ../source/specifications/dependency-specifiers.rst:364 +msgid "Python equivalent" +msgstr "ທຽບເທົ່າໃນ Python" + +#: ../source/specifications/dependency-specifiers.rst:365 +msgid "Type" +msgstr "ປະເພດ" + +#: ../source/specifications/dependency-specifiers.rst:366 +msgid "Sample values & notes" +msgstr "ຕົວຢ່າງຄ່າ ແລະ ໝາຍເຫດ" + +#: ../source/specifications/dependency-specifiers.rst:367 +msgid "``os_name``" +msgstr "``os_name``" + +#: ../source/specifications/dependency-specifiers.rst:368 +msgid ":py:data:`os.name`" +msgstr ":py:data:`os.name`" + +#: ../source/specifications/dependency-specifiers.rst:369 +#: ../source/specifications/dependency-specifiers.rst:373 +#: ../source/specifications/dependency-specifiers.rst:379 +#: ../source/specifications/dependency-specifiers.rst:385 +#: ../source/specifications/dependency-specifiers.rst:394 +#: ../source/specifications/dependency-specifiers.rst:414 +msgid "String" +msgstr "String" + +#: ../source/specifications/dependency-specifiers.rst:370 +msgid "``posix``, ``java``" +msgstr "``posix``, ``java``" + +#: ../source/specifications/dependency-specifiers.rst:371 +msgid "``sys_platform``" +msgstr "``sys_platform``" + +#: ../source/specifications/dependency-specifiers.rst:372 +msgid ":py:data:`sys.platform`" +msgstr ":py:data:`sys.platform`" + +#: ../source/specifications/dependency-specifiers.rst:374 +msgid "" +"``linux``, ``win32``, ``darwin``, ``java1.8.0_51`` (note that this is the " +"most well defined field for use when declaring platform specific " +"dependencies)" +msgstr "" +"``linux``, ``win32``, ``darwin``, ``java1.8.0_51`` (ໝາຍເຫດ: ນີ້ແມ່ນຊ່ອງຂໍ້ມູນ " +"ທີ່ຊັດເຈນທີ່ສຸດສຳລັບໃຊ້ລະບຸສິ່ງທີ່ຈຳເປັນສະເພາະແພລັດຟອມ)" + +#: ../source/specifications/dependency-specifiers.rst:377 +msgid "``platform_machine``" +msgstr "``platform_machine``" + +#: ../source/specifications/dependency-specifiers.rst:378 +msgid ":py:func:`platform.machine()`" +msgstr ":py:func:`platform.machine()`" + +#: ../source/specifications/dependency-specifiers.rst:380 +msgid "" +"``x86_64``, ``aarch64``, ``AMD64``, ``arm64`` (note that this value is " +"provided by the operating system, so the same CPU architecture may use " +"different strings on different platforms)" +msgstr "``x86_64``, ``aarch64``, ``AMD64``, ``arm64``" + +#: ../source/specifications/dependency-specifiers.rst:383 +msgid "``platform_python_implementation``" +msgstr "``platform_python_implementation``" + +#: ../source/specifications/dependency-specifiers.rst:384 +msgid ":py:func:`platform.python_implementation()`" +msgstr ":py:func:`platform.python_implementation()`" + +#: ../source/specifications/dependency-specifiers.rst:386 +msgid "``CPython``, ``PyPy``" +msgstr "``CPython``, ``PyPy``" + +#: ../source/specifications/dependency-specifiers.rst:387 +msgid "``platform_release``" +msgstr "``platform_release``" + +#: ../source/specifications/dependency-specifiers.rst:388 +msgid ":py:func:`platform.release()`" +msgstr ":py:func:`platform.release()`" + +#: ../source/specifications/dependency-specifiers.rst:389 +#: ../source/specifications/dependency-specifiers.rst:398 +msgid "Version | String" +msgstr "Version | String" + +#: ../source/specifications/dependency-specifiers.rst:390 +msgid "" +"``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51`` (may be a valid version " +"field, for example on macOS/darwin)" +msgstr "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" + +#: ../source/specifications/dependency-specifiers.rst:392 +msgid "``platform_system``" +msgstr "``platform_system``" + +#: ../source/specifications/dependency-specifiers.rst:393 +msgid ":py:func:`platform.system()`" +msgstr ":py:func:`platform.system()`" + +#: ../source/specifications/dependency-specifiers.rst:395 +msgid "``Linux``, ``Windows``, ``Java``" +msgstr "``Linux``, ``Windows``, ``Java``" + +#: ../source/specifications/dependency-specifiers.rst:396 +msgid "``platform_version``" +msgstr "``platform_version``" + +#: ../source/specifications/dependency-specifiers.rst:397 +msgid ":py:func:`platform.version()`" +msgstr ":py:func:`platform.version()`" + +#: ../source/specifications/dependency-specifiers.rst:399 +msgid "" +"``#1 SMP Fri Apr 25 13:07:35 EDT 2014`` ``Java HotSpot(TM) 64-Bit Server VM, " +"25.51-b03, Oracle Corporation`` ``Darwin Kernel Version 14.5.0: Wed Jul 29 " +"02:18:53 PDT 2015; root:xnu-2782.40.9~2/RELEASE_X86_64`` ``13`` (may be a " +"valid version field, for example on iOS or Android)" +msgstr "``#1 SMP Fri Apr 25 13:07:35 EDT 2014``" + +#: ../source/specifications/dependency-specifiers.rst:404 +msgid "``python_version``" +msgstr "``python_version``" + +#: ../source/specifications/dependency-specifiers.rst:405 +msgid "``'.'.join(platform.python_version_tuple()[:2])``" +msgstr "``'.'.join(platform.python_version_tuple()[:2])``" + +#: ../source/specifications/dependency-specifiers.rst:406 +#: ../source/specifications/dependency-specifiers.rst:410 +#: ../source/specifications/dependency-specifiers.rst:418 +msgid ":ref:`Version `" +msgstr ":ref:`Version `" + +#: ../source/specifications/dependency-specifiers.rst:407 +msgid "``3.9``, ``3.15``" +msgstr "``3.9``, ``3.15``" + +#: ../source/specifications/dependency-specifiers.rst:408 +msgid "``python_full_version``" +msgstr "``python_full_version``" + +#: ../source/specifications/dependency-specifiers.rst:409 +msgid ":py:func:`platform.python_version()`" +msgstr ":py:func:`platform.python_version()`" + +#: ../source/specifications/dependency-specifiers.rst:411 +msgid "``3.10.12``, ``3.15.0a1``" +msgstr "``3.10.12``, ``3.15.0a1``" + +#: ../source/specifications/dependency-specifiers.rst:412 +msgid "``implementation_name``" +msgstr "``implementation_name``" + +#: ../source/specifications/dependency-specifiers.rst:413 +msgid ":py:data:`sys.implementation.name `" +msgstr ":py:data:`sys.implementation.name `" + +#: ../source/specifications/dependency-specifiers.rst:415 +msgid "``cpython``, ``pypy``" +msgstr "``cpython``, ``pypy``" + +#: ../source/specifications/dependency-specifiers.rst:416 +msgid "``implementation_version``" +msgstr "``implementation_version``" + +#: ../source/specifications/dependency-specifiers.rst:417 +msgid "see definition below" +msgstr "ເບິ່ງຄຳນິຍາມດ້ານລຸ່ມ" + +#: ../source/specifications/dependency-specifiers.rst:419 +msgid "" +"``3.10.12``, ``7.3.17`` (examples are for CPython and PyPy respectively)" +msgstr "``3.10.12``, ``7.3.17`` (ຕົວຢ່າງສຳລັບ CPython ແລະ PyPy ຕາມລຳດັບ)" + +#: ../source/specifications/dependency-specifiers.rst:421 +msgid "``extra``" +msgstr "``extra``" + +#: ../source/specifications/dependency-specifiers.rst:422 +msgid "" +"Used to indicate optional dependencies in project dependency metadata. An " +"error except when defined by the context interpreting the specifier." +msgstr "" +"ໃຊ້ເພື່ອລະບຸສິ່ງທີ່ຈຳເປັນເສີມໃນ metadata. ຈະແຈ້ງຂໍ້ຜິດພາດ ຍົກເວັ້ນແຕ່ຈະຖືກ " +"ກຳນົດໂດຍບໍລິບົດທີ່ກຳລັງອ່ານຕົວລະບຸນັ້ນ." + +#: ../source/specifications/dependency-specifiers.rst:425 +msgid "Special (see below)" +msgstr "ພິເສດ (ເບິ່ງດ້ານລຸ່ມ)" + +#: ../source/specifications/dependency-specifiers.rst:426 +msgid "``toml`` (publishing tools SHOULD permit use of this field)" +msgstr "``toml`` (ເຄື່ອງມືເຜີຍແຜ່ຄວນອະນຸຍາດໃຫ້ໃຊ້ຊ່ອງຂໍ້ມູນນີ້)" + +#: ../source/specifications/dependency-specifiers.rst:428 +#: ../source/specifications/pylock-toml.rst:108 +msgid "``extras``" +msgstr "``extras``" + +#: ../source/specifications/dependency-specifiers.rst:429 +msgid "" +"Used to indicate optional public dependencies in lock files. An error except " +"when defined by the context interpreting the specifier." +msgstr "" +"ໃຊ້ເພື່ອລະບຸສິ່ງທີ່ຈຳເປັນເສີມແບບສາທາລະນະໃນໄຟລ໌ lock. ຈະແຈ້ງຂໍ້ຜິດພາດ " +"ຍົກເວັ້ນແຕ່ຈະຖືກກຳນົດໂດຍບໍລິບົດທີ່ອ່ານ." + +#: ../source/specifications/dependency-specifiers.rst:431 +#: ../source/specifications/dependency-specifiers.rst:439 +msgid "Set of strings" +msgstr "Set of strings" + +#: ../source/specifications/dependency-specifiers.rst:432 +msgid "" +"``{\"toml\"}`` (publishing tools SHOULD NOT permit use of this field and " +"index servers SHOULD NOT accept uploads containing such environment markers)" +msgstr "``{\"toml\"}``" + +#: ../source/specifications/dependency-specifiers.rst:435 +msgid "``dependency_groups``" +msgstr "``dependency_groups``" + +#: ../source/specifications/dependency-specifiers.rst:436 +msgid "" +"Used to indicate optional project internal dependencies in lock files. An " +"error except when defined by the context interpreting the specifier." +msgstr "" +"ໃຊ້ເພື່ອລະບຸສິ່ງທີ່ຈຳເປັນເສີມພາຍໃນໂຄງການໃນໄຟລ໌ lock. ຈະແຈ້ງຂໍ້ຜິດພາດ " +"ຍົກເວັ້ນແຕ່ຈະຖືກກຳນົດໂດຍບໍລິບົດທີ່ອ່ານ." + +#: ../source/specifications/dependency-specifiers.rst:440 +msgid "" +"``{\"test\"}`` (publishing tools SHOULD NOT permit use of this field and " +"index servers SHOULD NOT accept uploads containing such environment markers)" +msgstr "``{\"test\"}``" + +#: ../source/specifications/dependency-specifiers.rst:444 +msgid "" +"For backwards compatibility with older locking and installation tools, the " +"``extras`` and ``dependency_groups`` fields are currently only valid for use " +"in ``packages.marker`` fields in :ref:`lock files `. For " +"these comparisons, the ``extras`` and ``dependency_groups`` sets used for " +"the marker evaluation refer to the *currently selected* extras and " +"dependency groups when installing from the lock file, not the full set of " +"defined extras and dependency groups listed in the corresponding top level " +"lock file fields. The interface for selecting which extras and dependency " +"groups to install is tool dependent. Publishing tools SHOULD emit an error " +"if projects attempt to reference the ``extras`` or ``dependency_groups`` " +"fields in their published dependency declaration metadata, and index servers " +"SHOULD NOT accept uploads referencing these fields. Outside lock file " +"processing, marker evaluation environments DO NOT need to define these " +"fields." +msgstr "" +"ເພື່ອຄວາມເຂົ້າກັນໄດ້ກັບເຄື່ອງມືລຸ້ນເກົ່າ, ຊ່ອງ ``extras`` ແລະ ``dependency_groups`` " +"ໃນປັດຈຸບັນແມ່ນໃຊ້ໄດ້ສະເພາະໃນໄຟລ໌ lock ເທົ່ານັ້ນ." + +#: ../source/specifications/dependency-specifiers.rst:458 +#, fuzzy +#| msgid "" +#| "The ``extra`` field is also special, as it expects set-like behaviour, " +#| "but predates the addition of ``Set of strings`` as a defined marker field " +#| "type. Accordingly, ``extra == \"name\"`` in a dependency declaration is " +#| "similar to ``\"name\" in extras``, while ``extra != \"name\"`` is similar " +#| "to ``\"name\" not in extras``. For dependency marker evaluations, the set " +#| "of extra names used for these comparisons is the full set of requested " +#| "extras for *that particular package*, whether requested directly in a top " +#| "level dependency declaration, or indirectly in a transitive dependency " +#| "declaration. Other comparison operations on ``extra`` are not defined and " +#| "publishing tools SHOULD emit an error, index servers MAY disallow uploads " +#| "containing such environment markers, while locking and installation tools " +#| "SHOULD evaluate them as False." +msgid "" +"The ``extra`` field is also special, as it expects set-like behaviour, but " +"predates the addition of ``Set of strings`` as a defined marker field type. " +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." +msgstr "ຊ່ອງ ``extra`` ກໍມີຄວາມພິເສດ ເພາະມັນມີມາກ່ອນການກຳນົດປະເພດ ``Set of strings``." + +#: ../source/specifications/dependency-specifiers.rst:471 +msgid "" +"Unlike the newer ``extras`` field, environment markers using this field " +"SHOULD be accepted by both publishing tools and index servers. Marker " +"evaluation environments intended for project dependency declarations will " +"typically need to handle evaluation of ``extra`` field comparisons, while " +"other evaluations of environment markers will not generally need to do so. " +"The legacy ``extra`` comparison syntax is NOT permitted in lock file " +"``packages.marker`` fields, and installation tools SHOULD reject lock files " +"containing such comparisons as invalid." +msgstr "" +"Environment markers ທີ່ໃຊ້ຊ່ອງນີ້ຄວນໄດ້ຮັບການຍອມຮັບຈາກທັງເຄື່ອງມືເຜີຍແຜ່ ແລະ ເຊີເວີດັດຊະນີ." + +#: ../source/specifications/dependency-specifiers.rst:480 +msgid "" +"The ``implementation_version`` marker variable is derived " +"from :py:data:`sys.implementation.version `:" +msgstr "" +"ຕົວປ່ຽນ marker ``implementation_version`` " +"ແມ່ນໄດ້ມາຈາກ :py:data:`sys.implementation.version `:" + +#: ../source/specifications/dependency-specifiers.rst:500 +msgid "Complete Grammar" +msgstr "ໄວຍາກອນທັງໝົດ" + +#: ../source/specifications/dependency-specifiers.rst:502 +msgid "The complete parsley grammar::" +msgstr "ໄວຍາກອນ parsley ທັງໝົດ::" + +#: ../source/specifications/dependency-specifiers.rst:609 +msgid "A test program - if the grammar is in a string ``grammar``:" +msgstr "ໂປຣແກຣມທົດສອບ - ຖ້າໄວຍາກອນຢູ່ໃນຂໍ້ຄວາມ ``grammar``:" + +#: ../source/specifications/dependency-specifiers.rst:683 +msgid "November 2015: This specification was approved through :pep:`508`." +msgstr "ພະຈິກ 2015: ຂໍ້ກຳນົດນີ້ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`508`." + +#: ../source/specifications/dependency-specifiers.rst:684 +msgid "" +"July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " +"``'.'.join(platform.python_version_tuple()[:2])``, to accommodate potential " +"future versions of Python with 2-digit major and minor versions (e.g. 3.10). " +"[#future_versions]_" +msgstr "" +"ກໍລະກົດ 2019: ຄຳນິຍາມຂອງ ``python_version`` ຖືກປ່ຽນເພື່ອຮອງຮັບເວີຊັນ Python " +"ໃນອະນາຄົດທີ່ມີເລກສອງຫຼັກ (ເຊັ່ນ 3.10)." + +#: ../source/specifications/dependency-specifiers.rst:689 +msgid "" +"March 2022: Standardised the normalization of extra names at publication " +"time (for core metadata 2.3 and later) through :pep:`685`" +msgstr "ມີນາ 2022: ປັບມາດຕະຖານການປັບຄ່າຊື່ extra ໃນເວລາເຜີຍແຜ່ຜ່ານ :pep:`685`." + +#: ../source/specifications/dependency-specifiers.rst:691 +msgid "" +"June 2024: The definition of ``version_many`` was changed to allow trailing " +"commas, matching with the behavior of the Python implementation that has " +"been in use since late 2022." +msgstr "ມິຖຸນາ 2024: ຄຳນິຍາມຂອງ ``version_many`` ຖືກປ່ຽນໃຫ້ອະນຸຍາດເຄື່ອງໝາຍຈຸດ ຢູ່ທ້າຍສຸດໄດ້." + +#: ../source/specifications/dependency-specifiers.rst:694 +msgid "" +"April 2025: Added ``extras`` and ``dependency_groups`` marker field " +"for :ref:`lock-file-spec` as approved through :pep:`751`." +msgstr "" +"ເມສາ 2025: ເພີ່ມຊ່ອງ marker ``extras`` ແລະ ``dependency_groups`` " +"ສຳລັບ :ref:`lock-file-spec` ຕາມ :pep:`751`." + +#: ../source/specifications/dependency-specifiers.rst:696 +#: ../source/specifications/name-normalization.rst:56 +msgid "" +"August 2025: The suggested name validation regex was fixed to match the " +"field specification (it previously finished with ``$`` instead of ``\\Z``, " +"incorrectly permitting trailing newlines)" +msgstr "ສິງຫາ 2025: ແກ້ໄຂ regex ໃນການກວດສອບຊື່ໃຫ້ຖືກຕ້ອງຕາມຂໍ້ກຳນົດ." + +#: ../source/specifications/dependency-specifiers.rst:699 +msgid "" +"December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " +"arbitrary equality comparisons to be parsed." +msgstr "ທັນວາ 2025: ຈັດລຳດັບໃຫ້ ``===`` ມາກ່ອນ ``==`` ໃນໄວຍາກອນ." + +#: ../source/specifications/dependency-specifiers.rst:701 +msgid "" +"January 2026: Amend the definition of environment marker comparison " +"operations to restrict version comparison semantics to fields where they " +"make sense, make extra name restrictions more explicit, adjust the way " +"ordered comparisons are defined for strings, and make the fallback from " +"version comparisons to string comparisons when version parsing fails " +"optional. Also provide different tool behaviour recommendations for " +"publishing tools vs installation tools. This brought the nominal " +"specification into line with the way tools actually work. " +"[#marker_comparison_logic]_" +msgstr "" +"ເດືອນມັງກອນ 2026: ປັບປຸງຄໍານິຍາມຂອງການດໍາເນີນການປຽບທຽບ environment marker " +"ເພື່ອຈໍາກັດຄວາມໝາຍຂອງການປຽບທຽບເວີຊັນໃຫ້ໃຊ້ສະເພາະກັບຟິວທີ່ເໝາະສົມ, " +"ເຮັດໃຫ້ການຈໍາກັດຊື່ເພີ່ມເຕີມມີຄວາມຊັດເຈນຂຶ້ນ, ປັບປຸງວິທີການກໍານົດການປຽບທຽບແບບມີລໍາດັບສໍາລັບສະຕຣິງ, " +"ແລະ " +"ເຮັດໃຫ້ການປ່ຽນຈາກການປຽບທຽບເວີຊັນມາເປັນການປຽບທຽບສະຕຣິງເມື່ອການວິເຄາະເວີຊັນຫຼົ້ມເຫຼວນັ້ນເປັນທາງເລືອກ. " +"ນອກຈາກນັ້ນ, ຍັງໃຫ້ຄໍາແນະນໍາກ່ຽວກັບພຶດຕິກໍາຂອງເຄື່ອງມືທີ່ແຕກຕ່າງກັນລະຫວ່າງເຄື່ອງມືການເຜີຍແຜ່ ແລະ " +"ເຄື່ອງມືການຕິດຕັ້ງ. ສິ່ງນີ້ເຮັດໃຫ້ຂໍ້ກໍານົດທາງການສອດຄ່ອງກັບວິທີທີ່ເຄື່ອງມືເຮັດວຽກຕົວຈິງ. " +"[#marker_comparison_logic]_" + +#: ../source/specifications/dependency-specifiers.rst:709 +msgid "" +"January 2026: fix outdated references to other documents that were " +"inadvertently retained from :pep:`508`" +msgstr "ມັງກອນ 2026: ແກ້ໄຂການອ້າງອີງເຖິງເອກະສານອື່ນທີ່ລ້າສະໄໝ." + +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 +msgid "" +"pip, the recommended installer for Python packages (http://" +"pip.readthedocs.org/en/stable/)" +msgstr "" +"pip, ເຄື່ອງມືຕິດຕັ້ງທີ່ແນະນຳສຳລັບ Python packages (http://pip.readthedocs.org/en/" +"stable/)" + +#: ../source/specifications/dependency-specifiers.rst:721 +msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" +msgstr "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" + +#: ../source/specifications/dependency-specifiers.rst:724 +msgid "" +"Future Python versions might be problematic with the definition of " +"Environment Marker Variable ``python_version`` (https://github.com/python/" +"peps/issues/560)" +msgstr "ເວີຊັນ Python ໃນອະນາຄົດອາດມີບັນຫາກັບຄຳນິຍາມຂອງ ``python_version``." + +#: ../source/specifications/dependency-specifiers.rst:728 +msgid "" +"Resolving inconsistencies between actual tool behavior and the nominal " +"definitions of environment marker field comparisons (https://" +"discuss.python.org/t/spec-change-bugfix-dependency-specifiers-simplification-" +"pep-508/105203)" +msgstr "" +"ການແກ້ໄຂຄວາມບໍ່ສອດຄ່ອງກັນລະຫວ່າງການເຮັດວຽກຂອງເຄື່ອງມື ແລະ ຄຳນິຍາມການປຽບທຽບ marker." + +#: ../source/specifications/direct-url.rst:6 +msgid "Recording the Direct URL Origin of installed distributions" +msgstr "ການບັນທຶກແຫຼ່ງທີ່ມາຂອງ URL ໂດຍກົງຂອງຊຸດໂປຣແກຣມທີ່ຕິດຕັ້ງ" + +#: ../source/specifications/direct-url.rst:8 +msgid "" +"This document specifies a :file:`direct_url.json` file in the ``*.dist-" +"info`` directory of an installed distribution, to record the Direct URL " +"Origin of the distribution. The general structure and usage of ``*.dist-" +"info`` directories is described in :ref:`recording-installed-packages`." +msgstr "" +"ເອກະສານນີ້ກຳນົດໄຟລ໌ :file:`direct_url.json` ໃນໂຟນເດີ ``*.dist-info`` " +"ຂອງຊຸດໂປຣແກຣມທີ່ຕິດຕັ້ງ, ເພື່ອບັນທຶກແຫຼ່ງທີ່ມາຂອງ URL ໂດຍກົງ." + +#: ../source/specifications/direct-url.rst:17 +msgid "" +"The :file:`direct_url.json` file MUST be created in the :file:`*.dist-info` " +"directory by installers when installing a distribution from a requirement " +"specifying a direct URL reference (including a VCS URL)." +msgstr "" +"ໄຟລ໌ :file:`direct_url.json` ຕ້ອງຖືກສ້າງຂຶ້ນໂດຍເຄື່ອງມືຕິດຕັ້ງ ເມື່ອມີການຕິດຕັ້ງ ຈາກການອ້າງອີງ " +"URL ໂດຍກົງ (ລວມເຖິງ VCS URL)." + +#: ../source/specifications/direct-url.rst:21 +#: ../source/specifications/recording-installed-packages.rst:222 +msgid "" +"This file MUST NOT be created when installing a distribution from an other " +"type of requirement (i.e. name plus version specifier)." +msgstr "ໄຟລ໌ນີ້ຕ້ອງບໍ່ຖືກສ້າງຂຶ້ນເມື່ອຕິດຕັ້ງຈາກຄວາມຕ້ອງການປະເພດອື່ນ (ເຊັ່ນ: ຊື່ ແລະ ເວີຊັນ)." + +#: ../source/specifications/direct-url.rst:24 +msgid "" +"This JSON file MUST be a UTF-8 encoded, :rfc:`8259` compliant, serialization " +"of the :doc:`direct-url-data-structure`." +msgstr "ໄຟລ໌ JSON ນີ້ຕ້ອງເຂົ້າລະຫັດແບບ UTF-8 ແລະ ເປັນໄປຕາມມາດຕະຖານ :rfc:`8259`." + +#: ../source/specifications/direct-url.rst:29 +msgid "" +"When the requested URL has the file:// scheme and points to a local " +"directory that happens to contain a VCS checkout, installers MUST NOT " +"attempt to infer any VCS information and therefore MUST NOT output any VCS " +"related information (such as ``vcs_info``) in :file:`direct_url.json`." +msgstr "" +"ເມື່ອ URL ທີ່ຮ້ອງຂໍໃຊ້ file:// ແລະ ຊີ້ໄປທີ່ໂຟນເດີພາຍໃນເຄື່ອງທີ່ມີ VCS checkout, " +"ເຄື່ອງມືຕິດຕັ້ງຕ້ອງບໍ່ພະຍາຍາມຄາດເດົາຂໍ້ມູນ VCS ໃດໆ." + +#: ../source/specifications/direct-url.rst:36 +msgid "" +"As a general rule, installers should as much as possible preserve the " +"information that was provided in the requested URL when " +"generating :file:`direct_url.json`. For example user:password environment " +"variables should be preserved and ``requested_revision`` should reflect the " +"revision that was provided in the requested URL as faithfully as possible. " +"This information is however *enriched* with more precise data, such as " +"``commit_id``." +msgstr "ໂດຍທົ່ວໄປແລ້ວ, ເຄື່ອງມືຕິດຕັ້ງຄວນຮັກສາຂໍ້ມູນທີ່ໃຫ້ມາໃນ URL ເດີມໃຫ້ໄດ້ຫຼາຍທີ່ສຸດ." + +#: ../source/specifications/direct-url.rst:45 +msgid "Example pip commands and their effect on direct_url.json" +msgstr "ຕົວຢ່າງຄຳສັ່ງ pip ແລະ ຜົນກະທົບຕໍ່ direct_url.json" + +#: ../source/specifications/direct-url.rst:47 +msgid "Commands that generate a ``direct_url.json``:" +msgstr "ຄຳສັ່ງທີ່ສ້າງ ``direct_url.json``:" + +#: ../source/specifications/direct-url.rst:49 +msgid "``pip install https://example.com/app-1.0.tgz``" +msgstr "" + +#: ../source/specifications/direct-url.rst:50 +msgid "``pip install https://example.com/app-1.0.whl``" +msgstr "" + +#: ../source/specifications/direct-url.rst:51 +msgid "" +"``pip install \"app @ git+https://example.com/repo/" +"app.git#subdirectory=setup\"``" +msgstr "" +"``pip install \"app @ git+https://example.com/repo/" +"app.git#subdirectory=setup\"``" + +#: ../source/specifications/direct-url.rst:52 +msgid "``pip install ./app``" +msgstr "" + +#: ../source/specifications/direct-url.rst:53 +msgid "``pip install file:///home/user/app``" +msgstr "" + +#: ../source/specifications/direct-url.rst:54 +msgid "" +"``pip install --editable \"app @ git+https://example.com/repo/" +"app.git#subdirectory=setup\"`` (in which case, ``url`` will be the local " +"directory where the git repository has been cloned to, and ``dir_info`` will " +"be present with ``\"editable\": true`` and no ``vcs_info`` will be set)" +msgstr "" +"``pip install --editable \"app @ git+https://example.com/repo/" +"app.git#subdirectory=setup\"``" + +#: ../source/specifications/direct-url.rst:58 +msgid "``pip install -e ./app``" +msgstr "" + +#: ../source/specifications/direct-url.rst:60 +msgid "Commands that *do not* generate a ``direct_url.json``" +msgstr "ຄຳສັ່ງທີ່ *ບໍ່ສ້າງ* ``direct_url.json``" + +#: ../source/specifications/direct-url.rst:62 +msgid "``pip install app``" +msgstr "" + +#: ../source/specifications/direct-url.rst:63 +msgid "``pip install app --no-index --find-links https://example.com/``" +msgstr "" + +#: ../source/specifications/direct-url.rst:69 +msgid "March 2020: This specification was approved through :pep:`610`." +msgstr "ມີນາ 2020: ຂໍ້ກຳນົດນີ້ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`610`." + +#: ../source/specifications/direct-url-data-structure.rst:7 +msgid "Direct URL Data Structure" +msgstr "ໂຄງສ້າງຂໍ້ມູນ URL ໂດຍກົງ (Direct URL Data Structure)" + +#: ../source/specifications/direct-url-data-structure.rst:9 +msgid "" +"This document specifies a JSON-serializable abstract data structure that can " +"represent URLs to python projects and distribution artifacts such as VCS " +"source trees, local source trees, source distributions and wheels." +msgstr "" +"ເອກະສານນີ້ກຳນົດໂຄງສ້າງຂໍ້ມູນແບບ JSON ທີ່ສາມາດແທນ URL ຂອງໂຄງການ Python ແລະ " +"ໄຟລ໌ຊຸດໂປຣແກຣມຕ່າງໆ." + +#: ../source/specifications/direct-url-data-structure.rst:13 +msgid "" +"At time of writing, it is not formally specified how to merge the parts of " +"this data structure into a single URL that can be passed to tools. A common " +"representation is the pip URL format (`VCS Support `_), " +"other examples are provided in the :ref:`Version specifier specification " +"`." +msgstr "" +"ໃນປັດຈຸບັນ, ຍັງບໍ່ມີການກຳນົດເປັນທາງການກ່ຽວກັບວິທີການລວມສ່ວນຕ່າງໆ ຂອງໂຄງສ້າງ ຂໍ້ມູນນີ້ເຂົ້າເປັນ URL " +"ດຽວ." + +#: ../source/specifications/direct-url-data-structure.rst:21 +msgid "" +"The Direct URL Data Structure MUST be a dictionary, serializable to JSON " +"according to :rfc:`8259`." +msgstr "ໂຄງສ້າງຂໍ້ມູນ URL ໂດຍກົງຕ້ອງເປັນ dictionary ທີ່ສາມາດແປງເປັນ JSON ໄດ້." + +#: ../source/specifications/direct-url-data-structure.rst:24 +msgid "" +"It MUST contain at least two fields. The first one is ``url``, with type " +"``string``. Its content must be a valid URL according to the `WHATWG URL " +"Standard `_." +msgstr "" +"ມັນຕ້ອງມີຢ່າງໜ້ອຍສອງຊ່ອງຂໍ້ມູນ. ອັນທຳອິດແມ່ນ ``url`` ປະເພດ ``string``. ເນື້ອຫາຕ້ອງເປັນ URL " +"ທີ່ຖືກຕ້ອງ." + +#: ../source/specifications/direct-url-data-structure.rst:28 +msgid "" +"Depending on what ``url`` refers to, the second field MUST be one of " +"``vcs_info`` (if ``url`` is a VCS reference), ``archive_info`` (if ``url`` " +"is a source archive or a wheel), or ``dir_info`` (if ``url`` is a local " +"directory). These info fields have a (possibly empty) subdictionary as " +"value, with the possible keys defined below." +msgstr "" +"ຊ່ອງຂໍ້ມູນທີສອງຕ້ອງແມ່ນ ``vcs_info``, ``archive_info``, ຫຼື ``dir_info`` ຂຶ້ນກັບວ່າ " +"``url`` ອ້າງອີງເຖິງສິ່ງໃດ." + +#: ../source/specifications/direct-url-data-structure.rst:35 +msgid "Security Considerations" +msgstr "ການຄຳນຶງເຖິງຄວາມປອດໄພ" + +#: ../source/specifications/direct-url-data-structure.rst:37 +msgid "" +"When persisted, ``url`` MUST be stripped of any sensitive authentication " +"information, for security reasons." +msgstr "" +"ເມື່ອມີການບັນທຶກ, ``url`` ຕ້ອງຖືກຕັດຂໍ້ມູນການຢືນຢັນຕົວຕົນທີ່ມີຄວາມອ່ອນໄຫວອອກ " +"ເພື່ອເຫດຜົນດ້ານຄວາມປອດໄພ." + +#: ../source/specifications/direct-url-data-structure.rst:40 +msgid "" +"The user:password section of the URL MAY however be composed of environment " +"variables, matching the following regular expression:" +msgstr "" +"ສ່ວນ user:password ຂອງ URL ອາດຈະປະກອບດ້ວຍຕົວປ່ຽນສະພາບແວດລ້ອມ (environment " +"variables)." + +#: ../source/specifications/direct-url-data-structure.rst:48 +msgid "" +"Additionally, the user:password section of the URL MAY be a well-known, non " +"security sensitive string. A typical example is ``git`` in the case of a URL " +"such as ``ssh://git@gitlab.com/user/repo``." +msgstr "" +"ນອກຈາກນັ້ນ, ສ່ວນ user:password ອາດຈະເປັນຂໍ້ຄວາມທົ່ວໄປທີ່ບໍ່ມີຄວາມອ່ອນໄຫວ ດ້ານຄວາມປອດໄພ ເຊັ່ນ " +"``git``." + +#: ../source/specifications/direct-url-data-structure.rst:55 +msgid "VCS URLs" +msgstr "VCS URLs" + +#: ../source/specifications/direct-url-data-structure.rst:57 +msgid "" +"When ``url`` refers to a VCS repository, the ``vcs_info`` key MUST be " +"present as a dictionary with the following keys:" +msgstr "ເມື່ອ ``url`` ອ້າງອີງເຖິງ VCS repository, ຕ້ອງມີຄີ ``vcs_info``." + +#: ../source/specifications/direct-url-data-structure.rst:60 +msgid "" +"A ``vcs`` key (type ``string``) MUST be present, containing the name of the " +"VCS (i.e. one of ``git``, ``hg``, ``bzr``, ``svn``). Other VCS's SHOULD be " +"registered by writing a PEP to amend this specification. The ``url`` value " +"MUST be compatible with the corresponding VCS, so an installer can hand it " +"off without transformation to a checkout/download command of the VCS." +msgstr "ຕ້ອງມີຄີ ``vcs`` ທີ່ລະບຸຊື່ຂອງ VCS (ເຊັ່ນ: ``git``, ``hg``, ``bzr``, ``svn``)." + +#: ../source/specifications/direct-url-data-structure.rst:66 +msgid "" +"A ``requested_revision`` key (type ``string``) MAY be present naming a " +"branch/tag/ref/commit/revision/etc (in a format compatible with the VCS). " +"This field MUST match the revision requested by the user and MUST NOT exist " +"when the user did not select a specific revision." +msgstr "ອາດຈະມີຄີ ``requested_revision`` ເພື່ອລະບຸ branch/tag/commit ທີ່ຮ້ອງຂໍ." + +#: ../source/specifications/direct-url-data-structure.rst:70 +msgid "" +"A ``commit_id`` key (type ``string``) MUST be present, containing the exact " +"commit/revision number that was/is to be installed. If the VCS supports " +"commit-hash based revision identifiers, such commit-hash MUST be used as " +"``commit_id`` in order to reference an immutable version of the source code." +msgstr "ຕ້ອງມີຄີ ``commit_id`` ເຊິ່ງລະບຸເລກ commit/revision ທີ່ແນ່ນອນ." + +#: ../source/specifications/direct-url-data-structure.rst:80 +msgid "Archive URLs" +msgstr "Archive URLs (URL ຂອງໄຟລ໌ບີບອັດ)" + +#: ../source/specifications/direct-url-data-structure.rst:82 +msgid "" +"When ``url`` refers to a source archive or a wheel, the ``archive_info`` key " +"MUST be present as a dictionary with the following keys:" +msgstr "ເມື່ອ ``url`` ອ້າງອີງເຖິງ source archive ຫຼື wheel, ຕ້ອງມີຄີ ``archive_info``." + +#: ../source/specifications/direct-url-data-structure.rst:85 +msgid "" +"A ``hashes`` key SHOULD be present as a dictionary mapping a hash name to a " +"hex encoded digest of the file." +msgstr "ຄວນມີຄີ ``hashes`` ເຊິ່ງເປັນ dictionary ທີ່ຈັບຄູ່ຊື່ຂອງ hash ກັບຄ່າ digest ຂອງໄຟລ໌." + +#: ../source/specifications/direct-url-data-structure.rst:88 +msgid "" +"Multiple hashes can be included, and it is up to the consumer to decide what " +"to do with multiple hashes (it may validate all of them or a subset of them, " +"or nothing at all)." +msgstr "ສາມາດລວມເອົາຫຼາຍ hash ໄດ້." + +#: ../source/specifications/direct-url-data-structure.rst:92 +msgid "These hash names SHOULD always be normalized to be lowercase." +msgstr "ຊື່ hash ເຫຼົ່ານີ້ຄວນຈະຖືກປັບໃຫ້ເປັນຕົວພິມນ້ອຍສະເໝີ." + +#: ../source/specifications/direct-url-data-structure.rst:94 +msgid "" +"Any hash algorithm available via :py:mod:`hashlib` (specifically any that " +"can be passed to :py:func:`hashlib.new()` and do not require additional " +"parameters) can be used as a key for the hashes dictionary. At least one " +"secure algorithm from :py:data:`hashlib.algorithms_guaranteed` SHOULD always " +"be included. At time of writing, ``sha256`` specifically is recommended." +msgstr "ສາມາດໃຊ້ອັນກໍລິທຶມ hash ໃດກໍໄດ້ທີ່ມີໃນ :py:mod:`hashlib`. ແນະນຳໃຫ້ໃຊ້ ``sha256``." + +#: ../source/specifications/direct-url-data-structure.rst:100 +msgid "" +"A deprecated ``hash`` key (type ``string``) MAY be present for backwards " +"compatibility purposes, with value ``=``." +msgstr "ອາດມີຄີ ``hash`` ທີ່ຖືກຍົກເລີກແລ້ວ ເພື່ອຄວາມເຂົ້າກັນໄດ້ກັບເວີຊັນເກົ່າ." + +#: ../source/specifications/direct-url-data-structure.rst:103 +msgid "" +"Producers of the data structure SHOULD emit the ``hashes`` key whether one " +"or multiple hashes are available. Producers SHOULD continue to emit the " +"``hash`` key in contexts where they did so before, so as to keep backwards " +"compatibility for existing clients." +msgstr "ຜູ້ສ້າງໂຄງສ້າງຂໍ້ມູນຄວນລະບຸຄີ ``hashes`` ບໍ່ວ່າຈະມີ hash ດຽວ ຫຼື ຫຼາຍອັນກໍຕາມ." + +#: ../source/specifications/direct-url-data-structure.rst:107 +msgid "" +"When both the ``hash`` and ``hashes`` keys are present, the hash represented " +"in the ``hash`` key MUST also be present in the ``hashes`` dictionary, so " +"consumers can consider the ``hashes`` key only if it is present, and fall " +"back to ``hash`` otherwise." +msgstr "ເມື່ອມີທັງຄີ ``hash`` ແລະ ``hashes``, ຄ່າໃນ ``hash`` ຕ້ອງມີຢູ່ໃນ ``hashes`` ຄືກັນ." + +#: ../source/specifications/direct-url-data-structure.rst:114 +msgid "Local directories" +msgstr "ໂຟນເດີພາຍໃນເຄື່ອງ (Local directories)" + +#: ../source/specifications/direct-url-data-structure.rst:116 +msgid "" +"When ``url`` refers to a local directory, the ``dir_info`` key MUST be " +"present as a dictionary with the following key:" +msgstr "ເມື່ອ ``url`` ອ້າງອີງເຖິງໂຟນເດີພາຍໃນເຄື່ອງ, ຕ້ອງມີຄີ ``dir_info``." + +#: ../source/specifications/direct-url-data-structure.rst:119 +msgid "" +"``editable`` (type: ``boolean``): ``true`` if the distribution was/is to be " +"installed in editable mode, ``false`` otherwise. If absent, default to " +"``false``." +msgstr "" +"``editable``: ເປັນ ``true`` ຖ້າຕິດຕັ້ງໃນໂໝດທີ່ສາມາດແກ້ໄຂໄດ້ (editable mode), " +"ຖ້າບໍ່ມີໃຫ້ຖືວ່າເປັນ ``false``." + +#: ../source/specifications/direct-url-data-structure.rst:122 +msgid "" +"When ``url`` refers to a local directory, it MUST have the ``file`` scheme " +"and be compliant with :rfc:`8089`. In particular, the path component must be " +"absolute. Symbolic links SHOULD be preserved when making relative paths " +"absolute." +msgstr "" +"ເມື່ອ ``url`` ອ້າງອີງເຖິງໂຟນເດີພາຍໃນເຄື່ອງ, ມັນຕ້ອງໃຊ້ ``file`` ແລະ " +"ເປັນໄປຕາມ :rfc:`8089`." + +#: ../source/specifications/direct-url-data-structure.rst:130 +msgid "Projects in subdirectories" +msgstr "ໂຄງການໃນໂຟນເດີຍ່ອຍ" + +#: ../source/specifications/direct-url-data-structure.rst:132 +msgid "" +"A top-level ``subdirectory`` field MAY be present containing a directory " +"path, relative to the root of the VCS repository, source archive or local " +"directory, to specify where ``pyproject.toml`` or ``setup.py`` is located." +msgstr "" +"ອາດມີຊ່ອງຂໍ້ມູນ ``subdirectory`` ເພື່ອລະບຸວ່າ ``pyproject.toml`` ຫຼື ``setup.py`` ຢູ່ໃສ." + +#: ../source/specifications/direct-url-data-structure.rst:139 +msgid "Registered VCS" +msgstr "VCS ທີ່ລົງທະບຽນໄວ້" + +#: ../source/specifications/direct-url-data-structure.rst:141 +msgid "" +"This section lists the registered VCS's; expanded, VCS-specific information " +"on how to use the ``vcs``, ``requested_revision``, and other fields of " +"``vcs_info``; and in some cases additional VCS-specific fields. Tools MAY " +"support other VCS's although it is RECOMMENDED to register them by writing a " +"PEP to amend this specification. The ``vcs`` field SHOULD be the command " +"name (lowercased). Additional fields that would be necessary to support such " +"VCS SHOULD be prefixed with the VCS command name." +msgstr "ສ່ວນນີ້ສະແດງລາຍຊື່ VCS ທີ່ລົງທະບຽນໄວ້ ແລະ ວິທີການນຳໃຊ້." + +#: ../source/specifications/direct-url-data-structure.rst:151 +msgid "Git" +msgstr "Git" + +#: ../source/specifications/direct-url-data-structure.rst:154 +#: ../source/specifications/direct-url-data-structure.rst:181 +#: ../source/specifications/direct-url-data-structure.rst:199 +#: ../source/specifications/direct-url-data-structure.rst:217 +msgid "Home page" +msgstr "ໜ້າຫຼັກ" + +#: ../source/specifications/direct-url-data-structure.rst:154 +msgid "https://git-scm.com/" +msgstr "https://git-scm.com/" + +#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:184 +#: ../source/specifications/direct-url-data-structure.rst:202 +#: ../source/specifications/direct-url-data-structure.rst:220 +msgid "vcs command" +msgstr "ຄຳສັ່ງ vcs" + +#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:160 +msgid "git" +msgstr "git" + +#: ../source/specifications/direct-url-data-structure.rst:160 +#: ../source/specifications/direct-url-data-structure.rst:187 +#: ../source/specifications/direct-url-data-structure.rst:205 +#: ../source/specifications/direct-url-data-structure.rst:223 +msgid "``vcs`` field" +msgstr "ຊ່ອງຂໍ້ມູນ ``vcs``" + +#: ../source/specifications/direct-url-data-structure.rst:164 +#: ../source/specifications/direct-url-data-structure.rst:190 +#: ../source/specifications/direct-url-data-structure.rst:208 +#: ../source/specifications/direct-url-data-structure.rst:227 +msgid "``requested_revision`` field" +msgstr "ຊ່ອງຂໍ້ມູນ ``requested_revision``" + +#: ../source/specifications/direct-url-data-structure.rst:163 +msgid "" +"A tag name, branch name, Git ref, commit hash, shortened commit hash, or " +"other commit-ish." +msgstr "ຊື່ tag, ຊື່ branch, Git ref, commit hash ຫຼື ອື່ນໆ." + +#: ../source/specifications/direct-url-data-structure.rst:167 +#: ../source/specifications/direct-url-data-structure.rst:193 +#: ../source/specifications/direct-url-data-structure.rst:211 +#: ../source/specifications/direct-url-data-structure.rst:232 +msgid "``commit_id`` field" +msgstr "ຊ່ອງຂໍ້ມູນ ``commit_id``" + +#: ../source/specifications/direct-url-data-structure.rst:167 +msgid "A commit hash (40 hexadecimal characters sha1)." +msgstr "commit hash (ຕົວອັກສອນເລກຖານສິບຫົກ 40 ຕົວ)." + +#: ../source/specifications/direct-url-data-structure.rst:171 +msgid "" +"Tools can use the ``git show-ref`` and ``git symbolic-ref`` commands to " +"determine if the ``requested_revision`` corresponds to a Git ref. In turn, a " +"ref beginning with ``refs/tags/`` corresponds to a tag, and a ref beginning " +"with ``refs/remotes/origin/`` after cloning corresponds to a branch." +msgstr "ເຄື່ອງມືສາມາດໃຊ້ຄຳສັ່ງ ``git show-ref`` ເພື່ອກວດສອບ Git ref ໄດ້." + +#: ../source/specifications/direct-url-data-structure.rst:178 +msgid "Mercurial" +msgstr "Mercurial" + +#: ../source/specifications/direct-url-data-structure.rst:181 +msgid "https://www.mercurial-scm.org/" +msgstr "https://www.mercurial-scm.org/" + +#: ../source/specifications/direct-url-data-structure.rst:184 +#: ../source/specifications/direct-url-data-structure.rst:187 +msgid "hg" +msgstr "hg" + +#: ../source/specifications/direct-url-data-structure.rst:190 +msgid "A tag name, branch name, changeset ID, shortened changeset ID." +msgstr "ຊື່ tag, ຊື່ branch, changeset ID." + +#: ../source/specifications/direct-url-data-structure.rst:193 +msgid "A changeset ID (40 hexadecimal characters)." +msgstr "changeset ID (ຕົວອັກສອນເລກຖານສິບຫົກ 40 ຕົວ)." + +#: ../source/specifications/direct-url-data-structure.rst:196 +msgid "Bazaar" +msgstr "Bazaar" + +#: ../source/specifications/direct-url-data-structure.rst:199 +msgid "https://www.breezy-vcs.org/" +msgstr "https://www.breezy-vcs.org/" + +#: ../source/specifications/direct-url-data-structure.rst:202 +#: ../source/specifications/direct-url-data-structure.rst:205 +msgid "bzr" +msgstr "bzr" + +#: ../source/specifications/direct-url-data-structure.rst:208 +msgid "A tag name, branch name, revision id." +msgstr "ຊື່ tag, ຊື່ branch, revision id." + +#: ../source/specifications/direct-url-data-structure.rst:211 +msgid "A revision id." +msgstr "revision id." + +#: ../source/specifications/direct-url-data-structure.rst:214 +msgid "Subversion" +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:217 +msgid "https://subversion.apache.org/" +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:220 +#: ../source/specifications/direct-url-data-structure.rst:223 +msgid "svn" +msgstr "svn" + +#: ../source/specifications/direct-url-data-structure.rst:226 +msgid "" +"``requested_revision`` must be compatible with ``svn checkout`` ``--" +"revision`` option. In Subversion, branch or tag is part of ``url``." +msgstr "" +"``requested_revision`` ຕ້ອງເຂົ້າກັນໄດ້ກັບຕົວເລືອກ ``--revision`` ຂອງ ``svn " +"checkout``." + +#: ../source/specifications/direct-url-data-structure.rst:230 +msgid "" +"Since Subversion does not support globally unique identifiers, this field is " +"the Subversion revision number in the corresponding repository." +msgstr "ເນື່ອງຈາກ Subversion ບໍ່ຮອງຮັບຕົວລະບຸທີ່ເປັນເອກະລັກທົ່ວໂລກ, ຊ່ອງນີ້ຈຶ່ງແມ່ນເລກ revision." + +#: ../source/specifications/direct-url-data-structure.rst:235 +msgid "JSON Schema" +msgstr "JSON Schema" + +#: ../source/specifications/direct-url-data-structure.rst:237 +msgid "" +"The following JSON Schema can be used to validate the contents of " +"``direct_url.json``:" +msgstr "JSON Schema ຕໍ່ໄປນີ້ສາມາດໃຊ້ເພື່ອມວດສອບເນື້ອຫາຂອງ ``direct_url.json``:" + +#: ../source/specifications/direct-url-data-structure.rst:244 +msgid "Source archive:" +msgstr "Source archive:" + +#: ../source/specifications/direct-url-data-structure.rst:257 +msgid "Git URL with tag and commit-hash:" +msgstr "Git URL ພ້ອມ tag ແລະ commit-hash:" + +#: ../source/specifications/direct-url-data-structure.rst:270 +msgid "Local directory:" +msgstr "ໂຟນເດີພາຍໃນເຄື່ອງ:" + +#: ../source/specifications/direct-url-data-structure.rst:279 +msgid "Local directory in editable mode:" +msgstr "ໂຟນເດີພາຍໃນເຄື່ອງໃນໂໝດ editable:" + +#: ../source/specifications/direct-url-data-structure.rst:294 +msgid "" +"March 2020: This specification was approved through :pep:`610`, defining the " +"``direct_url.json`` metadata file." +msgstr "ມີນາ 2020: ຂໍ້ກຳນົດນີ້ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`610`." + +#: ../source/specifications/direct-url-data-structure.rst:296 +msgid "" +"January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." +msgstr "ມັງກອນ 2023: ເພີ່ມຄີ ``archive_info.hashes``." + +#: ../source/specifications/entry-points.rst:5 +msgid "Entry points specification" +msgstr "ຂໍ້ກຳນົດ Entry points" + +#: ../source/specifications/entry-points.rst:7 +msgid "" +"*Entry points* are a mechanism for an installed distribution to advertise " +"components it provides to be discovered and used by other code. For example:" +msgstr "" +"*Entry points* ແມ່ນກົນໄກສຳລັບຊຸດໂປຣແກຣມທີ່ຕິດຕັ້ງແລ້ວ ເພື່ອປະກາດສ່ວນປະກອບ ທີ່ມັນສະໜອງໃຫ້ " +"ເພື່ອໃຫ້ໂຄ້ດອື່ນໆ ສາມາດຄົ້ນຫາ ແລະ ນຳໃຊ້ໄດ້. ຕົວຢ່າງ:" + +#: ../source/specifications/entry-points.rst:11 +msgid "" +"Distributions can specify ``console_scripts`` entry points, each referring " +"to a function. When *pip* (or another console_scripts aware installer) " +"installs the distribution, it will create a command-line wrapper for each " +"entry point." +msgstr "" +"ຊຸດໂປຣແກຣມສາມາດລະບຸ entry points ຂອງ ``console_scripts``, ເຊິ່ງແຕ່ລະອັນຈະ " +"ອ້າງອີງເຖິງຟັງຊັນໃດໜຶ່ງ. ເມື່ອ *pip* ຕິດຕັ້ງຊຸດໂປຣແກຣມ, ມັນຈະສ້າງ command-line wrapper " +"ໃຫ້ສຳລັບແຕ່ລະ entry point." + +#: ../source/specifications/entry-points.rst:14 +msgid "" +"Applications can use entry points to load plugins; e.g. Pygments (a syntax " +"highlighting tool) can use additional lexers and styles from separately " +"installed packages. For more about this, see :doc:`/guides/creating-and-" +"discovering-plugins`." +msgstr "" +"ແອັບພລິເຄຊັນສາມາດໃຊ້ entry points ເພື່ອໂຫລດປັກອິນ; ຕົວຢ່າງ: Pygments (ເຄື່ອງມືເນັ້ນ syntax) " +"ສາມາດໃຊ້ lexers ແລະ styles ເພີ່ມເຕີມຈາກແພັກເກດທີ່ຕິດຕັ້ງແຍກຕ່າງຫາກ. ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ, " +"ເບິ່ງ :doc:`/guides/creating-and-discovering-plugins`." + +#: ../source/specifications/entry-points.rst:19 +msgid "" +"The entry point file format was originally developed to allow packages built " +"with setuptools to provide integration point metadata that would be read at " +"runtime with :py:mod:`importlib.metadata`. It is now defined as a PyPA " +"interoperability specification in order to allow build tools other than " +"``setuptools`` to publish :py:mod:`importlib.metadata` compatible entry " +"point metadata, and runtime libraries other " +"than :py:mod:`importlib.metadata` to portably read published entry point " +"metadata (potentially with different caching and conflict resolution " +"strategies)." +msgstr "" +"ຮູບແບບໄຟລ໌ entry point ໄດ້ຖືກພັດທະນາຂຶ້ນໃນເບື້ອງຕົ້ນເພື່ອໃຫ້ແພັກເກດທີ່ສ້າງດ້ວຍ setuptools " +"ສາມາດສະໜອງຂໍ້ມູນເມຕາຈຸດເຊື່ອມຕໍ່ທີ່ຈະຖືກອ່ານໃນເວລາເຮັດວຽກດ້ວຍ :py:mod:`importlib.metadata`. " +"ປະຈຸບັນມັນຖືກກຳນົດເປັນຂໍ້ກຳນົດການເຮັດວຽກຮ່ວມກັນຂອງ PyPA ເພື່ອໃຫ້ເຄື່ອງມືສ້າງອື່ນໆນອກເໜືອຈາກ " +"``setuptools`` ສາມາດເຜີຍແຜ່ຂໍ້ມູນເມຕາ entry point " +"ທີ່ເຂົ້າກັນໄດ້ກັບ :py:mod:`importlib.metadata`, ແລະ " +"ໄລບຣາຣີເວລາເຮັດວຽກອື່ນໆນອກເໜືອຈາກ :py:mod:`importlib.metadata` ສາມາດອ່ານຂໍ້ມູນເມຕາ " +"entry point ທີ່ເຜີຍແຜ່ໄດ້ຢ່າງສະດວກ (ອາດຈະມີກົນໄກການເຮັດ cache ແລະ " +"ການແກ້ໄຂຂໍ້ຂັດແຍ່ງທີ່ແຕກຕ່າງກັນ)." + +#: ../source/specifications/entry-points.rst:28 +msgid "Data model" +msgstr "ແບບຈຳລອງຂໍ້ມູນ" + +#: ../source/specifications/entry-points.rst:30 +msgid "Conceptually, an entry point is defined by three required properties:" +msgstr "ຕາມຫຼັກການແລ້ວ, entry point ຖືກກຳນົດໂດຍສາມຄຸນສົມບັດທີ່ຈຳເປັນ:" + +#: ../source/specifications/entry-points.rst:32 +msgid "" +"The **group** that an entry point belongs to indicates what sort of object " +"it provides. For instance, the group ``console_scripts`` is for entry points " +"referring to functions which can be used as a command, while " +"``pygments.styles`` is the group for classes defining pygments styles. The " +"consumer typically defines the expected interface. To avoid clashes, " +"consumers defining a new group should use names starting with a PyPI name " +"owned by the consumer project, followed by ``.``. Group names must be one or " +"more groups of letters, numbers and underscores, separated by dots (regex " +"``^\\w+(\\.\\w+)*$``)." +msgstr "" +"**ກຸ່ມ (group)** ທີ່ entry point ສັງກັດຢູ່ຈະບົ່ງບອກເຖິງປະເພດຂອງວັດຖຸທີ່ມັນສະໜອງໃຫ້. ຕົວຢ່າງ, ກຸ່ມ " +"``console_scripts`` ແມ່ນສຳລັບ entry points ທີ່ອ້າງອີງເຖິງຟັງຊັນທີ່ສາມາດໃຊ້ເປັນຄຳສັ່ງໄດ້, " +"ໃນຂະນະທີ່ ``pygments.styles`` ແມ່ນກຸ່ມສຳລັບຄລາດທີ່ກຳນົດຮູບແບບຂອງ pygments. ໂດຍປົກກະຕິແລ້ວ " +"ຜູ້ໃຊ້ (consumer) ຈະເປັນຜູ້ກຳນົດອິນເຕີເຟດທີ່ຕ້ອງການ. ເພື່ອຫຼີກເວັ້ນການຊໍ້າຊ້ອນ, " +"ຜູ້ໃຊ້ທີ່ກຳນົດກຸ່ມໃໝ່ຄວນໃຊ້ຊື່ທີ່ຂຶ້ນຕົ້ນດ້ວຍຊື່ PyPI ທີ່ເປັນເຈົ້າຂອງໂດຍໂຄງການນັ້ນ, ຕາມດ້ວຍ ``.``. " +"ຊື່ກຸ່ມຕ້ອງປະກອບດ້ວຍກຸ່ມຂອງຕົວອັກສອນ, ຕົວເລກ ແລະ ເຄື່ອງໝາຍຂີດກ້ອງ ຢ່າງໜ້ອຍໜຶ່ງກຸ່ມ, ແຍກກັນດ້ວຍຈຸດ " +"(regex ``^\\w+(\\.\\w+)*$``)." + +#: ../source/specifications/entry-points.rst:42 +msgid "" +"The **name** identifies this entry point within its group. The precise " +"meaning of this is up to the consumer. For console scripts, the name of the " +"entry point is the command that will be used to launch it. Within a " +"distribution, entry point names should be unique. If different distributions " +"provide the same name, the consumer decides how to handle such conflicts. " +"The name may contain any characters except ``=``, but it cannot start or end " +"with any whitespace character, or start with ``[``. For new entry points, it " +"is recommended to use only letters, numbers, underscores, dots and dashes " +"(regex ``[\\w.-]+``)." +msgstr "" +"**ຊື່ (name)** ລະບຸ entry point ນີ້ພາຍໃນກຸ່ມຂອງມັນ. ຄວາມໝາຍທີ່ແນ່ນອນແມ່ນຂຶ້ນກັບຜູ້ໃຊ້. ສຳລັບ " +"console scripts, ຊື່ຂອງ entry point ແມ່ນຄຳສັ່ງທີ່ຈະຖືກໃຊ້ເພື່ອເປີດມັນ. ພາຍໃນການແຈກຢາຍ " +"(distribution) ໜຶ່ງ, ຊື່ entry point ຄວນຈະບໍ່ຊໍ້າກັນ. ຖ້າການແຈກຢາຍທີ່ແຕກຕ່າງກັນໃຫ້ຊື່ດຽວກັນ, " +"ຜູ້ໃຊ້ຈະເປັນຜູ້ຕັດສິນໃຈວ່າຈະຈັດການກັບຂໍ້ຂັດແຍ່ງດັ່ງກ່າວແນວໃດ. ຊື່ອາດຈະມີຕົວອັກສອນໃດໆກໍໄດ້ຍົກເວັ້ນ ``=``, " +"ແຕ່ມັນບໍ່ສາມາດຂຶ້ນຕົ້ນ ຫຼື ລົງທ້າຍດ້ວຍຊ່ອງຫວ່າງ, ຫຼື ຂຶ້ນຕົ້ນດ້ວຍ ``[``. ສຳລັບ entry points ໃໝ່, " +"ແນະນຳໃຫ້ໃຊ້ສະເພາະຕົວອັກສອນ, ຕົວເລກ, ເຄື່ອງໝາຍຂີດກ້ອງ, ຈຸດ ແລະ ຂີດຕໍ່ (regex ``[\\w.-]+``)." + +#: ../source/specifications/entry-points.rst:51 +msgid "" +"The **object reference** points to a Python object. It is either in the form " +"``importable.module``, or ``importable.module:object.attr``. Each of the " +"parts delimited by dots and the colon is a valid Python identifier. It is " +"intended to be looked up like this::" +msgstr "" +"**ການອ້າງອີງວັດຖຸ (object reference)** ຊີ້ໄປຫາວັດຖຸ Python. ມັນຈະຢູ່ໃນຮູບແບບ " +"``importable.module`` ຫຼື ``importable.module:object.attr``. ແຕ່ລະສ່ວນທີ່ແຍກດ້ວຍຈຸດ " +"ແລະ ຈໍ້າສອງເມັດແມ່ນຕົວລະບຸ Python ທີ່ຖືກຕ້ອງ. ມັນຖືກອອກແບບມາເພື່ອໃຫ້ຄົ້ນຫາແບບນີ້::" + +#: ../source/specifications/entry-points.rst:64 +msgid "" +"Some tools call this kind of object reference by itself an 'entry point', " +"for want of a better term, especially where it points to a function to " +"launch a program." +msgstr "" +"ເຄື່ອງມືບາງຢ່າງເອີ້ນການອ້າງອີງວັດຖຸປະເພດນີ້ວ່າ 'entry point' ດ້ວຍຕົວມັນເອງ, ຍ້ອນຂາດຄຳສັບທີ່ດີກວ່າ, " +"ໂດຍສະເພາະໃນບ່ອນທີ່ມັນຊີ້ໄປຫາຟັງຊັນເພື່ອເປີດໂປຣແກຣມ." + +#: ../source/specifications/entry-points.rst:68 +msgid "" +"There is also an optional property: the **extras** are a set of strings " +"identifying optional features of the distribution providing the entry point. " +"If these are specified, the entry point requires the dependencies of those " +"'extras'. See the metadata field :ref:`metadata_provides_extra`." +msgstr "" +"ນອກນັ້ນຍັງມີຄຸນສົມບັດເສີມ: **extras** ແມ່ນຊຸດຂອງຂໍ້ຄວາມທີ່ລະບຸຄຸນສົມບັດເສີມຂອງການແຈກຢາຍທີ່ໃຫ້ " +"entry point. ຖ້າສິ່ງເຫຼົ່ານີ້ຖືກກຳນົດ, entry point ຈະຕ້ອງການ dependencies ຂອງ 'extras' " +"ເຫຼົ່ານັ້ນ. ເບິ່ງຟີວຂໍ້ມູນເມຕາ :ref:`metadata_provides_extra`." + +#: ../source/specifications/entry-points.rst:73 +msgid "" +"Using extras for an entry point is no longer recommended. Consumers should " +"support parsing them from existing distributions, but may then ignore them. " +"New publishing tools need not support specifying extras. The functionality " +"of handling extras was tied to setuptools' model of managing 'egg' packages, " +"but newer tools such as pip and virtualenv use a different model." +msgstr "" +"ການໃຊ້ extras ສຳລັບ entry point ແມ່ນບໍ່ຖືກແນະນຳອີກຕໍ່ໄປ. ຜູ້ໃຊ້ຄວນຮອງຮັບການວິເຄາະ " +"(parsing) ພວກມັນຈາກການແຈກຢາຍທີ່ມີຢູ່, ແຕ່ຫຼັງຈາກນັ້ນອາດຈະລະເລີຍພວກມັນ. " +"ເຄື່ອງມືການເຜີຍແຜ່ໃໝ່ບໍ່ຈຳເປັນຕ້ອງຮອງຮັບ ການກຳນົດ extras. ຟັງຊັນການຈັດການ extras " +"ເຄີຍຖືກຜູກມັດກັບແບບຈຳລອງຂອງ setuptools ໃນການຈັດການ ແພັກເກດ 'egg', ແຕ່ເຄື່ອງມືໃໝ່ໆເຊັ່ນ pip " +"ແລະ virtualenv ໃຊ້ແບບຈຳລອງທີ່ແຕກຕ່າງກັນ." + +#: ../source/specifications/entry-points.rst:80 +msgid "File format" +msgstr "ຮູບແບບໄຟລ໌" + +#: ../source/specifications/entry-points.rst:82 +msgid "" +"Entry points are defined in a file called :file:`entry_points.txt` in " +"the :file:`*.dist-info` directory of the distribution. This is the directory " +"described in :ref:`recording-installed-packages` for installed " +"distributions, and in :ref:`binary-distribution-format` for wheels. The file " +"uses the UTF-8 character encoding." +msgstr "" +"Entry points ຖືກກຳນົດໄວ້ໃນໄຟລ໌ທີ່ຊື່ວ່າ :file:`entry_points.txt` " +"ໃນໄດເຣັກທໍຣີ :file:`*.dist-info` ຂອງການແຈກຢາຍ. " +"ນີ້ແມ່ນໄດເຣັກທໍຣີທີ່ຖືກອະທິບາຍໄວ້ໃນ :ref:`recording-installed-packages` " +"ສຳລັບການແຈກຢາຍທີ່ຕິດຕັ້ງແລ້ວ, ແລະ ໃນ :ref:`binary-distribution-format` ສຳລັບ wheels. " +"ໄຟລ໌ນີ້ໃຊ້ການເຂົ້າລະຫັດຕົວອັກສອນ UTF-8." + +#: ../source/specifications/entry-points.rst:88 +msgid "" +"The file contents are in INI format, as read by Python's :mod:`configparser` " +"module. However, configparser treats names as case-insensitive by default, " +"whereas entry point names are case sensitive. A case-sensitive config parser " +"can be made like this::" +msgstr "" +"ເນື້ອໃນຂອງໄຟລ໌ຢູ່ໃນຮູບແບບ INI, ເຊິ່ງອ່ານໂດຍໂມດູນ :mod:`configparser` ຂອງ Python. " +"ແນວໃດກໍຕາມ, configparser ຈະຖືວ່າຊື່ບໍ່ຈຳແນກຕົວອັກສອນນ້ອຍ-ໃຫຍ່ (case-insensitive) " +"ໂດຍຄ່າເລີ່ມຕົ້ນ, ໃນຂະນະທີ່ຊື່ entry point ແມ່ນຈຳແນກຕົວອັກສອນນ້ອຍ-ໃຫຍ່ (case sensitive). " +"config parser ທີ່ຈຳແນກຕົວອັກສອນນ້ອຍ-ໃຫຍ່ສາມາດສ້າງໄດ້ແບບນີ້::" + +#: ../source/specifications/entry-points.rst:98 +msgid "" +"The entry points file must always use ``=`` to delimit names from values " +"(whereas configparser also allows using ``:``)." +msgstr "" +"ໄຟລ໌ entry points ຕ້ອງໃຊ້ ``=`` ສະເໝີເພື່ອແຍກຊື່ອອກຈາກຄ່າ (ໃນຂະນະທີ່ configparser " +"ຍັງອະນຸຍາດໃຫ້ໃຊ້ ``:`` ໄດ້)." + +#: ../source/specifications/entry-points.rst:101 +msgid "" +"The sections of the config file represent entry point groups, the names are " +"names, and the values encode both the object reference and the optional " +"extras. If extras are used, they are a comma-separated list inside square " +"brackets." +msgstr "" +"ສ່ວນ (sections) ຂອງໄຟລ໌ config ແທນກຸ່ມ entry point, ຊື່ແມ່ນຊື່, ແລະ " +"ຄ່າຈະເຂົ້າລະຫັດທັງການອ້າງອີງວັດຖຸ ແລະ extras ທີ່ເປັນທາງເລືອກ. ຖ້າໃຊ້ extras, " +"ພວກມັນຈະເປັນລາຍການທີ່ແຍກດ້ວຍຈຸດພາຍໃນວົງເລັບຫຼ່ຽມ." + +#: ../source/specifications/entry-points.rst:105 +msgid "" +"Within a value, readers must accept and ignore spaces (including multiple " +"consecutive spaces) before or after the colon, between the object reference " +"and the left square bracket, between the extra names and the square brackets " +"and colons delimiting them, and after the right square bracket. The syntax " +"for extras is formally specified in :ref:`dependency-specifiers`. For tools " +"writing the file, it is recommended only to insert a space between the " +"object reference and the left square bracket." +msgstr "" +"ພາຍໃນຄ່າໃດໜຶ່ງ, ຕົວອ່ານຕ້ອງຍອມຮັບ ແລະ ລະເລີຍຊ່ອງຫວ່າງ (ລວມທັງຊ່ອງຫວ່າງຫຼາຍອັນຕິດຕໍ່ກັນ) ກ່ອນ ຫຼື " +"ຫຼັງຈໍ້າສອງເມັດ, ລະຫວ່າງການອ້າງອີງວັດຖຸ ແລະ ວົງເລັບຫຼ່ຽມເປີດ, ລະຫວ່າງຊື່ extra ແລະ ວົງເລັບຫຼ່ຽມ ຫຼື " +"ຈໍ້າສອງເມັດທີ່ແຍກພວກມັນ, ແລະ ຫຼັງວົງເລັບຫຼ່ຽມປິດ. ໄວຍາກອນສຳລັບ extras " +"ຖືກກຳນົດຢ່າງເປັນທາງການໃນ :ref:`dependency-specifiers`. ສຳລັບເຄື່ອງມືທີ່ຂຽນໄຟລ໌, " +"ແນະນຳໃຫ້ໃສ່ຊ່ອງຫວ່າງສະເພາະລະຫວ່າງການອ້າງອີງວັດຖຸ ແລະ ວົງເລັບຫຼ່ຽມເປີດເທົ່ານັ້ນ." + +#: ../source/specifications/entry-points.rst:127 +msgid "Use for scripts" +msgstr "ການໃຊ້ສຳລັບສະຄຣິບ" + +#: ../source/specifications/entry-points.rst:129 +msgid "" +"Two groups of entry points have special significance in packaging: " +"``console_scripts`` and ``gui_scripts``. In both groups, the name of the " +"entry point should be usable as a command in a system shell after the " +"package is installed. The object reference points to a function which will " +"be called with no arguments when this command is run. The function may " +"return an integer to be used as a process exit code, and returning ``None`` " +"is equivalent to returning ``0``." +msgstr "" +"ຈຸດເຂົ້າເຖິງສອງກຸ່ມທີ່ມີຄວາມສຳຄັນເປັນພິເສດໃນການເຮັດແພັກເກດຄື: ``console_scripts`` ແລະ " +"``gui_scripts``. ໃນທັງສອງກຸ່ມນີ້, ຊື່ຂອງຈຸດເຂົ້າເຖິງຄວນຈະສາມາດໃຊ້ເປັນຄຳສັ່ງໃນ shell " +"ຂອງລະບົບໄດ້ຫຼັງຈາກຕິດຕັ້ງແພັກເກດແລ້ວ. " +"ການອ້າງອີງອອບເຈັກຈະຊີ້ໄປຫາຟັງຊັນທີ່ຈະຖືກເອີ້ນໃຊ້ໂດຍບໍ່ມີອາຄິວເມນເມື່ອຄຳສັ່ງນີ້ຖືກລັນ. " +"ຟັງຊັນອາດຈະສົ່ງຄືນຄ່າເປັນເລກຖ້ວນເພື່ອໃຊ້ເປັນລະຫັດການອອກຂອງໂປຣເຊສ, ແລະ ການສົ່ງຄືນຄ່າ ``None`` " +"ແມ່ນທຽບເທົ່າກັບການສົ່ງຄືນຄ່າ ``0``." + +#: ../source/specifications/entry-points.rst:137 +msgid "" +"For instance, the entry point ``mycmd = mymod:main`` would create a command " +"``mycmd`` launching a script like this::" +msgstr "" +"ຕົວຢ່າງ, entry point ``mycmd = mymod:main`` ຈະສ້າງຄຳສັ່ງ ``mycmd`` " +"ທີ່ເປີດໃຊ້ສະຄຣິບແບບນີ້::" + +#: ../source/specifications/entry-points.rst:144 +msgid "" +"The difference between ``console_scripts`` and ``gui_scripts`` only affects " +"Windows systems. ``console_scripts`` are wrapped in a console executable, so " +"they are attached to a console and can " +"use :py:data:`sys.stdin`, :py:data:`sys.stdout` and :py:data:`sys.stderr` " +"for input and output. ``gui_scripts`` are wrapped in a GUI executable, so " +"they can be started without a console, but cannot use standard streams " +"unless application code redirects them. Other platforms do not have the same " +"distinction." +msgstr "" +"ຄວາມແຕກຕ່າງລະຫວ່າງ ``console_scripts`` ແລະ ``gui_scripts`` ມີຜົນສະເພາະກັບລະບົບ " +"Windows ເທົ່ານັ້ນ. ``console_scripts`` ຈະຖືກຫຸ້ມຢູ່ໃນໄຟລ໌ executable ຂອງຄອນໂຊນ, " +"ດັ່ງນັ້ນພວກມັນຈຶ່ງເຊື່ອມຕໍ່ກັບຄອນໂຊນ ແລະ " +"ສາມາດໃຊ້ :py:data:`sys.stdin`, :py:data:`sys.stdout` " +"ແລະ :py:data:`sys.stderr` ສຳລັບການນຳເຂົ້າ ແລະ ການສະແດງຜົນ. ``gui_scripts`` " +"ຈະຖືກຫຸ້ມຢູ່ໃນໄຟລ໌ executable ຂອງ GUI, ດັ່ງນັ້ນພວກມັນຈຶ່ງສາມາດເລີ່ມຕົ້ນໄດ້ໂດຍບໍ່ມີຄອນໂຊນ, " +"ແຕ່ບໍ່ສາມາດໃຊ້ສະຕຣີມມາດຕະຖານໄດ້ ເວັ້ນເສຍແຕ່ລະຫັດແອັບພລິເຄຊັນຈະປ່ຽນທິດທາງ (redirect) ພວກມັນ. " +"ແພລັດຟອມອື່ນໆບໍ່ມີຄວາມແຕກຕ່າງກັນແບບນີ້." + +#: ../source/specifications/entry-points.rst:152 +msgid "" +"Install tools are expected to set up wrappers for both ``console_scripts`` " +"and ``gui_scripts`` in the scripts directory of the install scheme. They are " +"not responsible for putting this directory in the ``PATH`` environment " +"variable which defines where command-line tools are found." +msgstr "" +"ເຄື່ອງມືຕິດຕັ້ງຄາດວ່າຈະຕັ້ງຄ່າ wrappers ສຳລັບທັງ ``console_scripts`` ແລະ ``gui_scripts`` " +"ໃນໄດເຣັກທໍຣີສະຄຣິບຂອງຮູບແບບການຕິດຕັ້ງ. ພວກມັນບໍ່ມີໜ້າທີ່ໃນການເພີ່ມໄດເຣັກທໍຣີນີ້ " +"ເຂົ້າໃນຕົວປ່ຽນສະພາບແວດລ້ອມ ``PATH`` ເຊິ່ງເປັນບ່ອນກຳນົດບ່ອນຢູ່ຂອງເຄື່ອງມື command-line." + +#: ../source/specifications/entry-points.rst:157 +msgid "" +"As files are created from the names, and some filesystems are case-" +"insensitive, packages should avoid using names in these groups which differ " +"only in case. The behaviour of install tools when names differ only in case " +"is undefined." +msgstr "" +"ເນື່ອງຈາກໄຟລ໌ຖືກສ້າງຂຶ້ນຈາກຊື່, ແລະ ລະບົບໄຟລ໌ບາງອັນບໍ່ຈຳແນກຕົວອັກສອນນ້ອຍ-ໃຫຍ່, " +"ແພັກເກດຄວນຫຼີກເວັ້ນການໃຊ້ຊື່ໃນກຸ່ມເຫຼົ່ານີ້ທີ່ແຕກຕ່າງກັນພຽງແຕ່ຕົວອັກສອນນ້ອຍ-ໃຫຍ່. " +"ພຶດຕິກຳຂອງເຄື່ອງມືຕິດຕັ້ງເມື່ອຊື່ແຕກຕ່າງກັນພຽງແຕ່ຕົວອັກສອນນ້ອຍ-ໃຫຍ່ແມ່ນບໍ່ໄດ້ຖືກກຳນົດໄວ້." + +#: ../source/specifications/entry-points.rst:165 +msgid "" +"October 2017: This specification was written to formalize the existing entry " +"points feature of setuptools (discussion_)." +msgstr "" +"ຕຸລາ 2017: ຂໍ້ກຳນົດນີ້ຖືກຂຽນຂຶ້ນເພື່ອເຮັດໃຫ້ຄຸນສົມບັດ entry points ທີ່ມີຢູ່ຂອງ setuptools " +"ເປັນທາງການ (discussion_)." + +#: ../source/specifications/entry-points.rst:168 +msgid "" +"January 2026: Replaced outdated direct references to :pep:`508` " +"and :pep:`685` with a reference to :ref:`dependency-specifiers`." +msgstr "" +"ມັງກອນ 2026: ປ່ຽນການອ້າງອີງໂດຍກົງທີ່ລ້າສະໄໝເຖິງ :pep:`508` ແລະ :pep:`685` " +"ດ້ວຍການອ້າງອີງເຖິງ :ref:`dependency-specifiers`." + +#: ../source/specifications/externally-managed-environments.rst:6 +msgid "Externally Managed Environments" +msgstr "ສະພາບແວດລ້ອມທີ່ຖືກຈັດການຈາກພາຍນອກ" + +#: ../source/specifications/externally-managed-environments.rst:8 +msgid "" +"While some Python installations are entirely managed by the user that " +"installed Python, others may be provided and managed by another means (such " +"as the operating system package manager in a Linux distribution, or as a " +"bundled Python environment in an application with a dedicated installer)." +msgstr "" +"ໃນຂະນະທີ່ການຕິດຕັ້ງ Python ບາງອັນຖືກຈັດການໂດຍຜູ້ໃຊ້ທີ່ຕິດຕັ້ງ Python ເອງທັງໝົດ, " +"ແຕ່ບາງອັນອາດຈະຖືກສະໜອງ ແລະ ຈັດການໂດຍວິທີອື່ນ (ເຊັ່ນ: ຕົວຈັດການແພັກເກດຂອງລະບົບປະຕິບັດການ ໃນ " +"Linux distribution, ຫຼື ເປັນສະພາບແວດລ້ອມ Python ທີ່ມາພ້ອມກັບແອັບພລິເຄຊັນ " +"ທີ່ມີຕົວຕິດຕັ້ງສະເພາະ)." + +#: ../source/specifications/externally-managed-environments.rst:13 +msgid "" +"Attempting to use conventional Python packaging tools to manipulate such " +"environments can be confusing at best and outright break the entire " +"underlying operating system at worst. Documentation and interoperability " +"guides only go so far in resolving such problems." +msgstr "" +"ການພະຍາຍາມໃຊ້ເຄື່ອງມືການເຮັດແພັກເກດ Python ທົ່ວໄປເພື່ອຈັດການກັບສະພາບແວດລ້ອມດັ່ງກ່າວ " +"ອາດເຮັດໃຫ້ເກີດຄວາມສັບສົນ ຫຼື ຢ່າງຮ້າຍແຮງທີ່ສຸດແມ່ນເຮັດໃຫ້ລະບົບປະຕິບັດການທັງໝົດເພພັງ. ເອກະສານ ແລະ " +"ຄູ່ມືການເຮັດວຽກຮ່ວມກັນສາມາດຊ່ວຍແກ້ໄຂບັນຫາດັ່ງກ່າວໄດ້ພຽງແຕ່ບາງສ່ວນເທົ່ານັ້ນ." + +#: ../source/specifications/externally-managed-environments.rst:18 +msgid "" +"This specification defines an ``EXTERNALLY-MANAGED`` marker file that allows " +"a Python installation to indicate to Python-specific tools such as ``pip`` " +"that they neither install nor remove packages into the interpreter’s default " +"installation environment, and should instead guide the end user towards " +"using :ref:`virtual-environments`." +msgstr "" +"ຂໍ້ກຳນົດນີ້ກຳນົດໄຟລ໌ເຄື່ອງໝາຍ ``EXTERNALLY-MANAGED`` ທີ່ຊ່ວຍໃຫ້ການຕິດຕັ້ງ Python " +"ບົ່ງບອກເຖິງເຄື່ອງມືສະເພາະຂອງ Python ເຊັ່ນ ``pip`` ວ່າພວກມັນບໍ່ຄວນຕິດຕັ້ງ ຫຼື " +"ລຶບແພັກເກດໃນສະພາບແວດລ້ອມການຕິດຕັ້ງເລີ່ມຕົ້ນຂອງ interpreter, ແລະ " +"ຄວນແນະນຳໃຫ້ຜູ້ໃຊ້ໄປໃຊ້ :ref:`virtual-environments` ແທນ." + +#: ../source/specifications/externally-managed-environments.rst:24 +msgid "" +"It also standardizes an interpretation of the ``sysconfig`` schemes so that, " +"if a Python-specific package manager is about to install a package in an " +"interpreter-wide context, it can do so in a manner that will avoid " +"conflicting with the external package manager and reduces the risk of " +"breaking software shipped by the external package manager." +msgstr "" +"ມັນຍັງເຮັດໃຫ້ການຕີຄວາມໝາຍຂອງ ``sysconfig`` schemes ເປັນມາດຕະຖານ ເພື່ອວ່າ " +"ຖ້າຕົວຈັດການແພັກເກດສະເພາະຂອງ Python ຈະຕິດຕັ້ງແພັກເກດໃນບໍລິບົດຂອງ interpreter ທັງໝົດ, " +"ມັນສາມາດເຮັດໄດ້ໃນລັກສະນະທີ່ຫຼີກເວັ້ນການຂັດແຍ່ງກັບຕົວຈັດການແພັກເກດພາຍນອກ ແລະ " +"ຫຼຸດຜ່ອນຄວາມສ່ຽງທີ່ຈະເຮັດໃຫ້ຊອບແວທີ່ສົ່ງມາກັບຕົວຈັດການແພັກເກດພາຍນອກເພພັງ." + +#: ../source/specifications/externally-managed-environments.rst:32 +msgid "Terminology" +msgstr "ຄຳສັບ" + +#: ../source/specifications/externally-managed-environments.rst:34 +msgid "" +"A few terms used in this specification have multiple meanings in the " +"contexts that it spans. For clarity, this specification uses the following " +"terms in specific ways:" +msgstr "" +"ຄຳສັບຈຳນວນໜຶ່ງທີ່ໃຊ້ໃນຂໍ້ກຳນົດນີ້ມີຄວາມໝາຍຫຼາຍຢ່າງໃນບໍລິບົດຕ່າງໆ. ເພື່ອຄວາມຊັດເຈນ, " +"ຂໍ້ກຳນົດນີ້ໃຊ້ຄຳສັບຕໍ່ໄປນີ້ໃນທາງສະເພາະ:" + +#: ../source/specifications/externally-managed-environments.rst:61 +msgid "distro" +msgstr "ດິສໂຕຣ (distro)" + +#: ../source/specifications/externally-managed-environments.rst:39 +msgid "" +"Short for \"distribution,\" a collection of various sorts of software, " +"ideally designed to work properly together, including (in contexts relevant " +"to this document) the Python interpreter itself, software written in Python, " +"and software written in other languages. That is, this is the sense used in " +"phrases such as \"Linux distro\" or \"Berkeley Software Distribution.\"" +msgstr "" +"ຫຍໍ້ມາຈາກ \"distribution,\" ເຊິ່ງແມ່ນການລວບລວມຊອບແວປະເພດຕ່າງໆ ທີ່ຖືກອອກແບບມາ " +"ເພື່ອເຮັດວຽກຮ່ວມກັນຢ່າງຖືກຕ້ອງ, ລວມທັງ (ໃນບໍລິບົດທີ່ກ່ຽວຂ້ອງກັບເອກະສານນີ້) ຕົວ Python " +"interpreter ເອງ, ຊອບແວທີ່ຂຽນດ້ວຍ Python, ແລະ ຊອບແວທີ່ຂຽນດ້ວຍພາສາອື່ນ. " +"ນັ້ນແມ່ນຄວາມໝາຍທີ່ໃຊ້ໃນຄຳເວົ້າເຊັ່ນ \"Linux distro\" ຫຼື \"Berkeley Software " +"Distribution.\"" + +#: ../source/specifications/externally-managed-environments.rst:46 +msgid "" +"A distro can be an operating system (OS) of its own, such as Debian, Fedora, " +"or FreeBSD. It can also be an overlay distribution that installs on top of " +"an existing OS, such as Homebrew or MacPorts." +msgstr "" +"distro ສາມາດເປັນລະບົບປະຕິບັດການ (OS) ດ້ວຍຕົວມັນເອງ, ເຊັ່ນ Debian, Fedora, ຫຼື FreeBSD. " +"ມັນຍັງສາມາດເປັນ overlay distribution ທີ່ຕິດຕັ້ງຢູ່ເທິງ OS ທີ່ມີຢູ່ແລ້ວ, ເຊັ່ນ Homebrew ຫຼື " +"MacPorts." + +#: ../source/specifications/externally-managed-environments.rst:51 +msgid "" +"This document uses the short term \"distro,\" because the term " +"\"distribution\" has another meaning in Python packaging contexts: a source " +"or binary distribution package of a single piece of Python language " +"software, that is, in the sense of ``setuptools.dist.Distribution`` or " +"\"sdist\". To avoid confusion, this document does not use the plain term " +"\"distribution\" at all. In the Python packaging sense, it uses the full " +"phrase \"distribution package\" or just \"package\" (see below)." +msgstr "" +"ເອກະສານນີ້ໃຊ້ຄຳສັ້ນໆວ່າ \"distro,\" ເພາະວ່າຄຳວ່າ \"distribution\" " +"ມີຄວາມໝາຍອື່ນໃນບໍລິບົດຂອງການເຮັດແພັກເກດ Python: ແພັກເກດການແຈກຢາຍ ແບບ source ຫຼື binary " +"ຂອງຊອບແວພາສາ Python ພຽງອັນດຽວ, ນັ້ນຄືໃນຄວາມໝາຍຂອງ " +"``setuptools.dist.Distribution`` ຫຼື \"sdist\". ເພື່ອຫຼີກເວັ້ນຄວາມສັບສົນ, " +"ເອກະສານນີ້ຈະບໍ່ໃຊ້ຄຳວ່າ \"distribution\" ລ້າໆເລີຍ. ໃນຄວາມໝາຍຂອງການເຮັດແພັກເກດ Python, " +"ມັນຈະໃຊ້ຄຳເຕັມວ່າ \"distribution package\" ຫຼື ພຽງແຕ່ \"package\" (ເບິ່ງຂ້າງລຸ່ມ)." + +#: ../source/specifications/externally-managed-environments.rst:60 +msgid "" +"The provider of a distro - the team or company that collects and publishes " +"the software and makes any needed modifications - is its **distributor**." +msgstr "" +"ຜູ້ໃຫ້ບໍລິການດິສໂຕຣ - ທີມງານ ຫຼື ບໍລິສັດທີ່ລວບລວມ ແລະ ເຜີຍແຜ່ຊອບແວ ແລະ ເຮັດການດັດແກ້ທີ່ຈຳເປັນ - " +"ແມ່ນ **ຜູ້ແຈກຢາຍ (distributor)** ຂອງມັນ." + +#: ../source/specifications/externally-managed-environments.rst:79 +msgid "package" +msgstr "ແພັກເກດ (package)" + +#: ../source/specifications/externally-managed-environments.rst:64 +msgid "" +"A unit of software that can be installed and used within Python. That is, " +"this refers to what Python-specific packaging tools tend to call " +"a :term:`distribution package` or simply a \"distribution\"; the colloquial " +"abbreviation \"package\" is used in the sense of the Python Package Index." +msgstr "" +"ໜ່ວຍຂອງຊອບແວທີ່ສາມາດຕິດຕັ້ງ ແລະ ໃຊ້ງານພາຍໃນ Python ໄດ້. ນັ້ນໝາຍເຖິງສິ່ງທີ່ " +"ເຄື່ອງມືເຮັດແພັກເກດສະເພາະຂອງ Python ມັກຈະເອີ້ນວ່າ :term:`distribution package` ຫຼື " +"ພຽງແຕ່ \"distribution\"; ຄຳຫຍໍ້ທົ່ວໄປ \"package\" ແມ່ນໃຊ້ໃນຄວາມໝາຍຂອງ Python " +"Package Index." + +#: ../source/specifications/externally-managed-environments.rst:70 +msgid "" +"This document does not use \"package\" in the sense of an importable name " +"that contains Python modules, though in many cases, a distribution package " +"consists of a single importable package of the same name." +msgstr "" +"ເອກະສານນີ້ບໍ່ໃຊ້ຄຳວ່າ \"package\" ໃນຄວາມໝາຍຂອງຊື່ທີ່ສາມາດ import ໄດ້ ເຊິ່ງປະກອບດ້ວຍໂມດູນ " +"Python, ເຖິງແມ່ນວ່າໃນຫຼາຍໆກໍລະນີ, distribution package ຈະປະກອບດ້ວຍ package ທີ່ import " +"ໄດ້ພຽງອັນດຽວທີ່ມີຊື່ດຽວກັນ." + +#: ../source/specifications/externally-managed-environments.rst:75 +msgid "" +"This document generally does not use the term \"package\" to refer to units " +"of installation by a distro's package manager (such as ``.deb`` or ``.rpm`` " +"files). When needed, it uses phrasing such as \"a distro's package.\" " +"(Again, in many cases, a Python package is shipped inside a distro's package " +"named something like ``python-`` plus the Python package name.)" +msgstr "" +"ໂດຍທົ່ວໄປແລ້ວ ເອກະສານນີ້ບໍ່ໃຊ້ຄຳວ່າ \"package\" ເພື່ອອ້າງເຖິງໜ່ວຍການຕິດຕັ້ງ " +"ໂດຍຕົວຈັດການແພັກເກດຂອງດິສໂຕຣ (ເຊັ່ນ ໄຟລ໌ ``.deb`` ຫຼື ``.rpm``). ເມື່ອຈຳເປັນ, " +"ມັນຈະໃຊ້ຄຳເວົ້າເຊັ່ນ \"a distro's package.\" (ອີກເທື່ອໜຶ່ງ, ໃນຫຼາຍໆກໍລະນີ, ແພັກເກດ Python " +"ຈະຖືກສົ່ງມາພາຍໃນແພັກເກດຂອງດິສໂຕຣ ທີ່ຕັ້ງຊື່ປະມານວ່າ ``python-`` ຕາມດ້ວຍຊື່ແພັກເກດ Python.)" + +#: ../source/specifications/externally-managed-environments.rst:102 +msgid "Python-specific package manager" +msgstr "ຕົວຈັດການແພັກເກດສະເພາະຂອງ Python" + +#: ../source/specifications/externally-managed-environments.rst:82 +msgid "" +"A tool for installing, upgrading, and/or removing Python packages in a " +"manner that conforms to Python packaging standards. The most popular Python-" +"specific package manager is pip_; other examples include the old `Easy " +"Install command `_ as well as direct usage of a ``setup.py`` " +"command." +msgstr "" +"ເຄື່ອງມືສຳລັບການຕິດຕັ້ງ, ອັບເກຣດ, ແລະ/ຫຼື ລຶບແພັກເກດ Python ໃນລັກສະນະທີ່ " +"ສອດຄ່ອງກັບມາດຕະຖານການເຮັດແພັກເກດ Python. ຕົວຈັດການແພັກເກດສະເພາະຂອງ Python " +"ທີ່ໄດ້ຮັບຄວາມນິຍົມທີ່ສຸດແມ່ນ pip_; ຕົວຢ່າງອື່ນໆ ລວມມີຄຳສັ່ງ `Easy Install `_ " +"ແບບເກົ່າ ລວມທັງການໃຊ້ຄຳສັ່ງ ``setup.py`` ໂດຍກົງ." + +#: ../source/specifications/externally-managed-environments.rst:92 +msgid "" +"(Note that the ``easy_install`` command was removed in setuptools version " +"52, released 23 January 2021.)" +msgstr "" +"(ໝາຍເຫດ: ຄຳສັ່ງ ``easy_install`` ຖືກຖອນອອກໃນ setuptools ເວີຊັນ 52, ອອກເມື່ອວັນທີ 23 " +"ມັງກອນ 2021.)" + +#: ../source/specifications/externally-managed-environments.rst:96 +msgid "" +"(Conda_ is a bit of a special case, as the ``conda`` command can install " +"much more than just Python packages, making it more like a distro package " +"manager in some senses. Since the ``conda`` command generally only operates " +"on Conda-created environments, most of the concerns in this document do not " +"apply to ``conda`` when acting as a Python-specific package manager.)" +msgstr "" +"(Conda_ ແມ່ນກໍລະນີພິເສດເລັກນ້ອຍ, ເພາະວ່າຄຳສັ່ງ ``conda`` ສາມາດຕິດຕັ້ງໄດ້ຫຼາຍກວ່າ " +"ພຽງແຕ່ແພັກເກດ Python, ເຮັດໃຫ້ມັນຄືກັບຕົວຈັດການແພັກເກດຂອງດິສໂຕຣໃນບາງແງ່. ເນື່ອງຈາກຄຳສັ່ງ " +"``conda`` ໂດຍທົ່ວໄປແລ້ວຈະເຮັດວຽກສະເພາະໃນສະພາບແວດລ້ອມທີ່ Conda ສ້າງຂຶ້ນ, " +"ຄວາມກັງວົນສ່ວນໃຫຍ່ໃນເອກະສານນີ້ຈຶ່ງບໍ່ນຳໃຊ້ກັບ ``conda`` " +"ເມື່ອມັນເຮັດໜ້າທີ່ເປັນຕົວຈັດການແພັກເກດສະເພາະຂອງ Python.)" + +#: ../source/specifications/externally-managed-environments.rst:118 +msgid "distro package manager" +msgstr "ຕົວຈັດການແພັກເກດຂອງດິສໂຕຣ" + +#: ../source/specifications/externally-managed-environments.rst:105 +msgid "" +"A tool for installing, upgrading, and/or removing a distro's packages in an " +"installed instance of that distro, which is capable of installing Python " +"packages as well as non-Python packages, and therefore generally has its own " +"database of installed software unrelated to the :ref:`database of installed " +"distributions `. Examples include ``apt``, " +"``dpkg``, ``dnf``, ``rpm``, ``pacman``, and ``brew``. The salient feature is " +"that if a package was installed by a distro package manager, removing or " +"upgrading it in a way that would satisfy a Python-specific package manager " +"will generally leave a distro package manager in an inconsistent state." +msgstr "" +"ເຄື່ອງມືສຳລັບການຕິດຕັ້ງ, ອັບເກຣດ, ແລະ/ຫຼື ລຶບແພັກເກດຂອງດິສໂຕຣໃນດິສໂຕຣທີ່ຕິດຕັ້ງແລ້ວ, " +"ເຊິ່ງສາມາດຕິດຕັ້ງແພັກເກດ Python ລວມທັງແພັກເກດທີ່ບໍ່ແມ່ນ Python, ແລະ ໂດຍທົ່ວໄປແລ້ວ " +"ຈະມີຖານຂໍ້ມູນຊອບແວທີ່ຕິດຕັ້ງແລ້ວຂອງມັນເອງ ເຊິ່ງບໍ່ກ່ຽວຂ້ອງກັບ :ref:`database of installed " +"distributions `. ຕົວຢ່າງລວມມີ ``apt``, ``dpkg``, " +"``dnf``, ``rpm``, ``pacman``, ແລະ ``brew``. ຄຸນລັກສະນະທີ່ສຳຄັນຄື: " +"ຖ້າແພັກເກດໃດໜຶ່ງຖືກຕິດຕັ້ງໂດຍຕົວຈັດການແພັກເກດຂອງດິສໂຕຣ, ການລຶບ ຫຼື " +"ອັບເກຣດມັນໃນຮູບແບບທີ່ຕົວຈັດການແພັກເກດສະເພາະຂອງ Python ຕ້ອງການ " +"ໂດຍທົ່ວໄປແລ້ວຈະເຮັດໃຫ້ຕົວຈັດການແພັກເກດຂອງດິສໂຕຣຢູ່ໃນສະຖານະທີ່ບໍ່ສອດຄ່ອງກັນ." + +#: ../source/specifications/externally-managed-environments.rst:117 +msgid "" +"This document also uses phrases like \"external package manager\" or " +"\"system's package manager\" to refer to a distro package manager in certain " +"contexts." +msgstr "" +"ເອກະສານນີ້ຍັງໃຊ້ຄຳເວົ້າເຊັ່ນ \"external package manager\" ຫຼື \"system's package " +"manager\" ເພື່ອອ້າງເຖິງຕົວຈັດການແພັກເກດຂອງດິສໂຕຣໃນບາງບໍລິບົດ." + +#: ../source/specifications/externally-managed-environments.rst:127 +msgid "shadow" +msgstr "ຊ້ອນທັບ (shadow)" + +#: ../source/specifications/externally-managed-environments.rst:121 +msgid "" +"To shadow an installed Python package is to cause some other package to be " +"preferred for imports without removing any files from the shadowed package. " +"This requires multiple entries on ``sys.path``: if package A 2.0 installs " +"module ``a.py`` in one ``sys.path`` entry, and package A 1.0 installs module " +"``a.py`` in a later ``sys.path`` entry, then ``import a`` returns the module " +"from the former, and we say that A 2.0 shadows A 1.0." +msgstr "" +"ການ shadow ແພັກເກດ Python ທີ່ຕິດຕັ້ງແລ້ວ ແມ່ນການເຮັດໃຫ້ແພັກເກດອື່ນຖືກເລືອກໃຊ້ ສຳລັບການ import " +"ໂດຍບໍ່ໄດ້ລຶບໄຟລ໌ໃດໆອອກຈາກແພັກເກດທີ່ຖືກ shadow. ສິ່ງນີ້ຕ້ອງມີຫຼາຍລາຍການໃນ ``sys.path``: " +"ຖ້າແພັກເກດ A 2.0 ຕິດຕັ້ງໂມດູນ ``a.py`` ໃນລາຍການ ``sys.path`` ໜຶ່ງ, ແລະ ແພັກເກດ A 1.0 " +"ຕິດຕັ້ງໂມດູນ ``a.py`` ໃນລາຍການ ``sys.path`` ທີ່ຢູ່ຖັດໄປ, ເມື່ອ ``import a`` " +"ມັນຈະສົ່ງຄ່າໂມດູນຈາກ ລາຍການກ່ອນໜ້າ, ແລະ ພວກເຮົາເອີ້ນວ່າ A 2.0 shadow A 1.0." + +#: ../source/specifications/externally-managed-environments.rst:132 +msgid "This specification is twofold." +msgstr "ຂໍ້ກຳນົດນີ້ມີສອງສ່ວນ." + +#: ../source/specifications/externally-managed-environments.rst:134 +msgid "" +"First, it describes **a way for distributors of a Python interpreter to mark " +"that interpreter as having its packages managed by means external to " +"Python**, such that Python-specific tools like pip should not change the " +"installed packages in the interpreter's global ``sys.path`` in any way (add, " +"upgrade/downgrade, or remove) unless specifically overridden. It also " +"provides a means for the distributor to indicate how to use a virtual " +"environment as an alternative." +msgstr "" +"ທຳອິດ, ມັນອະທິບາຍ **ວິທີການສຳລັບຜູ້ແຈກຢາຍ Python interpreter ເພື່ອໝາຍວ່າ interpreter " +"ນັ້ນຖືກຈັດການແພັກເກດໂດຍວິທີການພາຍນອກ Python**, ເພື່ອໃຫ້ເຄື່ອງມື ສະເພາະຂອງ Python ເຊັ່ນ pip " +"ບໍ່ຄວນປ່ຽນແປງແພັກເກດທີ່ຕິດຕັ້ງໃນ ``sys.path`` ລະດັບໂລກຂອງ interpreter (ບໍ່ວ່າຈະເປັນການເພີ່ມ, " +"ອັບເກຣດ/ດາວເກຣດ, ຫຼື ລຶບ) ເວັ້ນເສຍແຕ່ຈະມີການ override ຢ່າງຊັດເຈນ. " +"ມັນຍັງໃຫ້ວິທີການສຳລັບຜູ້ແຈກຢາຍ ໃນການບົ່ງບອກວິທີການໃຊ້ virtual environment ເປັນທາງເລືອກ." + +#: ../source/specifications/externally-managed-environments.rst:142 +msgid "" +"This is an opt-in mechanism: by default, the Python interpreter compiled " +"from upstream sources will not be so marked, and so running ``pip install`` " +"with a self-compiled interpreter, or with a distro that has not explicitly " +"marked its interpreter, will work as it always has worked." +msgstr "" +"ນີ້ແມ່ນກົນໄກແບບເລືອກເຂົ້າ (opt-in): ໂດຍຄ່າເລີ່ມຕົ້ນ, Python interpreter ທີ່ compile " +"ຈາກແຫຼ່ງຕົ້ນທາງ (upstream) ຈະບໍ່ຖືກໝາຍໄວ້, ດັ່ງນັ້ນການລັນ ``pip install`` ດ້ວຍ interpreter " +"ທີ່ compile ເອງ, ຫຼື ກັບດິສໂຕຣທີ່ບໍ່ໄດ້ໝາຍ interpreter ຂອງມັນໄວ້ຢ່າງຊັດເຈນ, " +"ຈະຍັງຄົງເຮັດວຽກໄດ້ຕາມປົກກະຕິຄືທີ່ຜ່ານມາ." + +#: ../source/specifications/externally-managed-environments.rst:148 +msgid "" +"Second, it sets the rule that when installing packages to an interpreter's " +"global context (either to an unmarked interpreter, or if overriding the " +"marking), **Python-specific package managers should modify or delete files " +"only within the directories of the sysconfig scheme in which they would " +"create files**. This permits a distributor of a Python interpreter to set up " +"two directories, one for its own managed packages, and one for unmanaged " +"packages installed by the end user, and ensure that installing unmanaged " +"packages will not delete (or overwrite) files owned by the external package " +"manager." +msgstr "" +"ສອງ, ມັນຕັ້ງກົດວ່າເມື່ອຕິດຕັ້ງແພັກເກດໃສ່ບໍລິບົດລະດັບໂລກຂອງ interpreter (ບໍ່ວ່າຈະເປັນ interpreter " +"ທີ່ບໍ່ໄດ້ໝາຍໄວ້, ຫຼື ຖ້າ override ເຄື່ອງໝາຍ), **ຕົວຈັດການແພັກເກດ ສະເພາະຂອງ Python ຄວນແກ້ໄຂ " +"ຫຼື ລຶບໄຟລ໌ສະເພາະພາຍໃນໄດເຣັກທໍຣີຂອງ sysconfig scheme ທີ່ພວກມັນຈະສ້າງໄຟລ໌ເທົ່ານັ້ນ**. " +"ສິ່ງນີ້ຊ່ວຍໃຫ້ຜູ້ແຈກຢາຍ Python interpreter ສາມາດຕັ້ງຄ່າສອງໄດເຣັກທໍຣີ, " +"ອັນໜຶ່ງສຳລັບແພັກເກດທີ່ຖືກຈັດການເອງ, ແລະ ອີກອັນໜຶ່ງສຳລັບແພັກເກດທີ່ບໍ່ໄດ້ຖືກຈັດການເຊິ່ງຕິດຕັ້ງໂດຍຜູ້ໃຊ້, ແລະ " +"ຮັບປະກັນວ່າ ການຕິດຕັ້ງແພັກເກດທີ່ບໍ່ໄດ້ຖືກຈັດການຈະບໍ່ລຶບ (ຫຼື ຂຽນທັບ) ໄຟລ໌ທີ່ເປັນຂອງ " +"ຕົວຈັດການແພັກເກດພາຍນອກ." + +#: ../source/specifications/externally-managed-environments.rst:160 +msgid "Marking an interpreter as using an external package manager" +msgstr "ການໝາຍ interpreter ວ່າໃຊ້ຕົວຈັດການແພັກເກດພາຍນອກ" + +#: ../source/specifications/externally-managed-environments.rst:162 +msgid "" +"Before a Python-specific package installer (that is, a tool such as pip - " +"not an external tool such as apt) installs a package into a certain Python " +"context, it should make the following checks by default:" +msgstr "" +"ກ່ອນທີ່ຕົວຕິດຕັ້ງແພັກເກດສະເພາະຂອງ Python (ເຊັ່ນ pip - ບໍ່ແມ່ນເຄື່ອງມືພາຍນອກ ເຊັ່ນ apt) " +"ຈະຕິດຕັ້ງແພັກເກດລົງໃນບໍລິບົດ Python ໃດໜຶ່ງ, ມັນຄວນກວດສອບ ສິ່ງຕໍ່ໄປນີ້ໂດຍຄ່າເລີ່ມຕົ້ນ:" + +#: ../source/specifications/externally-managed-environments.rst:167 +msgid "" +"Is it running outside of a virtual environment? It can determine this by " +"whether ``sys.prefix == sys.base_prefix``." +msgstr "" +"ມັນກຳລັງລັນຢູ່ພາຍນອກ virtual environment ຫຼື ບໍ່? ມັນສາມາດກວດສອບໄດ້ໂດຍ ເບິ່ງວ່າ " +"``sys.prefix == sys.base_prefix`` ຫຼື ບໍ່." + +#: ../source/specifications/externally-managed-environments.rst:170 +msgid "" +"Is there an ``EXTERNALLY-MANAGED`` file in the directory identified by " +"``sysconfig.get_path(\"stdlib\", sysconfig.get_default_scheme())``?" +msgstr "" +"ມີໄຟລ໌ ``EXTERNALLY-MANAGED`` ໃນໄດເຣັກທໍຣີທີ່ລະບຸໂດຍ " +"``sysconfig.get_path(\"stdlib\", sysconfig.get_default_scheme())`` ຫຼື ບໍ່?" + +#: ../source/specifications/externally-managed-environments.rst:173 +msgid "" +"If both of these conditions are true, the installer should exit with an " +"error message indicating that package installation into this Python " +"interpreter's directory are disabled outside of a virtual environment." +msgstr "" +"ຖ້າທັງສອງເງື່ອນໄຂນີ້ເປັນຈິງ, ຕົວຕິດຕັ້ງຄວນຢຸດການເຮັດວຽກພ້ອມຂໍ້ຄວາມແຈ້ງເຕືອນຂໍ້ຜິດພາດ " +"ທີ່ບົ່ງບອກວ່າການຕິດຕັ້ງແພັກເກດລົງໃນໄດເຣັກທໍຣີຂອງ Python interpreter ນີ້ ຖືກປິດໃຊ້ງານເມື່ອຢູ່ນອກ " +"virtual environment." + +#: ../source/specifications/externally-managed-environments.rst:177 +msgid "" +"The installer should have a way for the user to override these rules, such " +"as a command-line flag ``--break-system-packages``. This option should not " +"be enabled by default and should carry some connotation that its use is " +"risky." +msgstr "" +"ຕົວຕິດຕັ້ງຄວນມີວິທີໃຫ້ຜູ້ໃຊ້ສາມາດ override ກົດເຫຼົ່ານີ້ໄດ້, ເຊັ່ນ command-line flag ``--break-" +"system-packages``. ຕົວເລືອກນີ້ບໍ່ຄວນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ ແລະ " +"ຄວນມີຄວາມໝາຍບົ່ງບອກວ່າການໃຊ້ງານມັນມີຄວາມສ່ຽງ." + +#: ../source/specifications/externally-managed-environments.rst:182 +msgid "" +"The ``EXTERNALLY-MANAGED`` file is an INI-style metadata file intended to be " +"parsable by the standard library configparser_ module. If the file can be " +"parsed by ``configparser.ConfigParser(interpolation=None)`` using the UTF-8 " +"encoding, and it contains a section ``[externally-managed]``, then the " +"installer should look for an error message specified in the file and output " +"it as part of its error. If the first element of the tuple returned by " +"``locale.getlocale(locale.LC_MESSAGES)``, i.e., the language code, is not " +"``None``, it should look for the error message as the value of a key named " +"``Error-`` followed by the language code. If that key does not exist, and if " +"the language code contains underscore or hyphen, it should look for a key " +"named ``Error-`` followed by the portion of the language code before the " +"underscore or hyphen. If it cannot find either of those, or if the language " +"code is ``None``, it should look for a key simply named ``Error``." +msgstr "" +"ໄຟລ໌ ``EXTERNALLY-MANAGED`` ແມ່ນໄຟລ໌ຂໍ້ມູນເມຕາຮູບແບບ INI ທີ່ອອກແບບມາເພື່ອ ໃຫ້ສາມາດວິເຄາະ " +"(parse) ໄດ້ໂດຍໂມດູນ configparser_ ຂອງໄລບຣາຣີມາດຕະຖານ. ຖ້າໄຟລ໌ສາມາດຖືກ parse ໄດ້ໂດຍ " +"``configparser.ConfigParser(interpolation=None)`` ໂດຍໃຊ້ການເຂົ້າລະຫັດ UTF-8, ແລະ " +"ມັນມີສ່ວນ ``[externally-managed]``, " +"ຕົວຕິດຕັ້ງຄວນຊອກຫາຂໍ້ຄວາມແຈ້ງເຕືອນຂໍ້ຜິດພາດທີ່ກຳນົດໄວ້ໃນໄຟລ໌ ແລະ ສະແດງມັນ ເປັນສ່ວນໜຶ່ງຂອງຂໍ້ຜິດພາດ. " +"ຖ້າອົງປະກອບທຳອິດຂອງ tuple ທີ່ສົ່ງຄືນໂດຍ ``locale.getlocale(locale.LC_MESSAGES)`` " +"(ເຊັ່ນ ລະຫັດພາສາ) ບໍ່ແມ່ນ ``None``, ມັນຄວນຊອກຫາຂໍ້ຄວາມຂໍ້ຜິດພາດທີ່ເປັນຄ່າຂອງ key ທີ່ຊື່ວ່າ " +"``Error-`` ຕາມດ້ວຍລະຫັດພາສາ. ຖ້າ key ນັ້ນບໍ່ມີ, ແລະ ຖ້າລະຫັດພາສາມີເຄື່ອງໝາຍຂີດກ້ອງ ຫຼື ຂີດຕໍ່, " +"ມັນຄວນຊອກຫາ key ທີ່ຊື່ວ່າ ``Error-`` ຕາມດ້ວຍສ່ວນຂອງລະຫັດພາສາກ່ອນເຄື່ອງໝາຍຂີດກ້ອງ ຫຼື ຂີດຕໍ່. " +"ຖ້າມັນບໍ່ພົບທັງສອງຢ່າງ, ຫຼື ຖ້າລະຫັດພາສາເປັນ ``None``, ມັນຄວນຊອກຫາ key ທີ່ຊື່ວ່າ ``Error`` ລ້າໆ." + +#: ../source/specifications/externally-managed-environments.rst:200 +msgid "" +"If the installer cannot find an error message in the file (either because " +"the file cannot be parsed or because no suitable error key exists), then the " +"installer should just use a pre-defined error message of its own, which " +"should suggest that the user create a virtual environment to install " +"packages." +msgstr "" +"ຖ້າຕົວຕິດຕັ້ງບໍ່ສາມາດຊອກຫາຂໍ້ຄວາມຂໍ້ຜິດພາດໃນໄຟລ໌ (ບໍ່ວ່າຈະເປັນຍ້ອນໄຟລ໌ບໍ່ສາມາດ parse ໄດ້ ຫຼື ຍ້ອນບໍ່ມີ " +"key ຂໍ້ຜິດພາດທີ່ເໝາະສົມ), ຕົວຕິດຕັ້ງຄວນໃຊ້ຂໍ້ຄວາມຂໍ້ຜິດພາດທີ່ກຳນົດໄວ້ລ່ວງໜ້າ ຂອງມັນເອງ, " +"ເຊິ່ງຄວນແນະນຳໃຫ້ຜູ້ໃຊ້ສ້າງ virtual environment ເພື່ອຕິດຕັ້ງແພັກເກດ." + +#: ../source/specifications/externally-managed-environments.rst:206 +msgid "" +"Software distributors who have a non-Python-specific package manager that " +"manages libraries in the ``sys.path`` of their Python package should, in " +"general, ship an ``EXTERNALLY-MANAGED`` file in their standard library " +"directory. For instance, Debian may ship a file in ``/usr/lib/python3.9/" +"EXTERNALLY-MANAGED`` consisting of something like" +msgstr "" +"ຜູ້ແຈກຢາຍຊອບແວທີ່ມີຕົວຈັດການແພັກເກດທີ່ບໍ່ແມ່ນສະເພາະຂອງ Python ເຊິ່ງຈັດການໄລບຣາຣີ ໃນ " +"``sys.path`` ຂອງແພັກເກດ Python ຂອງພວກເຂົາ, ໂດຍທົ່ວໄປແລ້ວ ຄວນສົ່ງໄຟລ໌ ``EXTERNALLY-" +"MANAGED`` ມາພ້ອມໃນໄດເຣັກທໍຣີໄລບຣາຣີມາດຕະຖານ. ຕົວຢ່າງ, Debian ອາດຈະສົ່ງໄຟລ໌ໃນ ``/usr/" +"lib/python3.9/EXTERNALLY-MANAGED`` ທີ່ປະກອບດ້ວຍສິ່ງຕ່າງໆເຊັ່ນ" + +#: ../source/specifications/externally-managed-environments.rst:230 +msgid "" +"which provides useful and distro-relevant information to a user trying to " +"install a package. Optionally, translations can be provided in the same file:" +msgstr "" +"ເຊິ່ງໃຫ້ຂໍ້ມູນທີ່ເປັນປະໂຫຍດ ແລະ ກ່ຽວຂ້ອງກັບດິສໂຕຣໃຫ້ກັບຜູ້ໃຊ້ທີ່ພະຍາຍາມຕິດຕັ້ງແພັກເກດ. ນອກນັ້ນ, " +"ຍັງສາມາດໃຫ້ຄຳແປໃນໄຟລ໌ດຽວກັນໄດ້:" + +#: ../source/specifications/externally-managed-environments.rst:240 +msgid "" +"In certain contexts, such as single-application container images that aren't " +"updated after creation, a distributor may choose not to ship an ``EXTERNALLY-" +"MANAGED`` file, so that users can install whatever they like (as they can " +"today) without having to manually override this rule." +msgstr "" +"ໃນບາງບໍລິບົດ, ເຊັ່ນ container images ສຳລັບແອັບພລິເຄຊັນດຽວທີ່ບໍ່ໄດ້ຖືກອັບເດດຫຼັງຈາກສ້າງ, " +"ຜູ້ແຈກຢາຍອາດຈະເລືອກທີ່ຈະບໍ່ສົ່ງໄຟລ໌ ``EXTERNALLY-MANAGED`` ມາ, ເພື່ອໃຫ້ຜູ້ໃຊ້ " +"ສາມາດຕິດຕັ້ງຫຍັງກໍໄດ້ຕາມທີ່ຕ້ອງການ (ຄືກັບທີ່ເຮັດໄດ້ໃນປະຈຸບັນ) ໂດຍບໍ່ຕ້ອງ override ກົດນີ້ດ້ວຍຕົນເອງ." + +#: ../source/specifications/externally-managed-environments.rst:247 +msgid "Writing to only the target ``sysconfig`` scheme" +msgstr "ການຂຽນໃສ່ສະເພາະເປົ້າໝາຍ ``sysconfig`` scheme ເທົ່ານັ້ນ" + +#: ../source/specifications/externally-managed-environments.rst:249 +msgid "" +"Usually, a Python package installer installs to directories in a scheme " +"returned by the ``sysconfig`` standard library package. Ordinarily, this is " +"the scheme returned by ``sysconfig.get_default_scheme()``, but based on " +"configuration (e.g. ``pip install --user``), it may use a different scheme." +msgstr "" +"ໂດຍປົກກະຕິແລ້ວ, ຕົວຕິດຕັ້ງແພັກເກດ Python ຈະຕິດຕັ້ງລົງໃນໄດເຣັກທໍຣີໃນ scheme ທີ່ " +"ສົ່ງຄືນໂດຍແພັກເກດໄລບຣາຣີມາດຕະຖານ ``sysconfig``. ປົກກະຕິແລ້ວ, ນີ້ແມ່ນ scheme ທີ່ສົ່ງຄືນໂດຍ " +"``sysconfig.get_default_scheme()``, ແຕ່ຂຶ້ນກັບການຕັ້ງຄ່າ (ຕົວຢ່າງ ``pip install --" +"user``), ມັນອາດຈະໃຊ້ scheme ທີ່ແຕກຕ່າງກັນ." + +#: ../source/specifications/externally-managed-environments.rst:255 +msgid "" +"Whenever the installer is installing to a ``sysconfig`` scheme, this " +"specification declares that the installer should never modify or delete " +"files outside of that scheme. For instance, if it's upgrading a package, and " +"the package is already installed in a directory outside that scheme (perhaps " +"in a directory from another scheme), it should leave the existing files " +"alone." +msgstr "" +"ເມື່ອໃດກໍຕາມທີ່ຕົວຕິດຕັ້ງກຳລັງຕິດຕັ້ງໃສ່ ``sysconfig`` scheme, ຂໍ້ກຳນົດນີ້ " +"ປະກາດວ່າຕົວຕິດຕັ້ງບໍ່ຄວນແກ້ໄຂ ຫຼື ລຶບໄຟລ໌ທີ່ຢູ່ນອກ scheme ນັ້ນ. ຕົວຢ່າງ, ຖ້າມັນກຳລັງອັບເກຣດແພັກເກດ, " +"ແລະ ແພັກເກດນັ້ນຖືກຕິດຕັ້ງແລ້ວໃນໄດເຣັກທໍຣີ ທີ່ຢູ່ນອກ scheme ນັ້ນ (ບາງທີອາດຈະຢູ່ໃນໄດເຣັກທໍຣີຈາກ " +"scheme ອື່ນ), ມັນຄວນປ່ອຍໃຫ້ໄຟລ໌ທີ່ມີຢູ່ແລ້ວຄືເກົ່າ." + +#: ../source/specifications/externally-managed-environments.rst:262 +msgid "" +"If the installer does end up shadowing an existing installation during an " +"upgrade, we recommend that it produces a warning at the end of its run." +msgstr "" +"ຖ້າຕົວຕິດຕັ້ງເຮັດການ shadow ການຕິດຕັ້ງທີ່ມີຢູ່ແລ້ວໃນລະຫວ່າງການອັບເກຣດ, " +"ພວກເຮົາແນະນຳໃຫ້ມັນສະແດງຄຳເຕືອນໃນຕອນທ້າຍຂອງການເຮັດວຽກ." + +#: ../source/specifications/externally-managed-environments.rst:266 +msgid "" +"If the installer is installing to a location outside of a ``sysconfig`` " +"scheme (e.g., ``pip install --target``), then this subsection does not apply." +msgstr "" +"ຖ້າຕົວຕິດຕັ້ງກຳລັງຕິດຕັ້ງໃສ່ສະຖານທີ່ຢູ່ນອກ ``sysconfig`` scheme (ຕົວຢ່າງ ``pip install --" +"target``), ໝວດຍ່ອຍນີ້ຈະບໍ່ນຳໃຊ້." + +#: ../source/specifications/externally-managed-environments.rst:271 +msgid "Recommendations for distros" +msgstr "ຄຳແນະນຳສຳລັບດິສໂຕຣ" + +#: ../source/specifications/externally-managed-environments.rst:273 +msgid "" +"This section is non-normative. It provides best practices we believe distros " +"should follow unless they have a specific reason otherwise." +msgstr "" +"ພາກສ່ວນນີ້ບໍ່ແມ່ນຂໍ້ບັງຄັບ. ມັນໃຫ້ແນວທາງປະຕິບັດທີ່ດີທີ່ສຸດທີ່ພວກເຮົາເຊື່ອວ່າດິສໂຕຣຄວນປະຕິບັດຕາມ " +"ເວັ້ນເສຍແຕ່ຈະມີເຫດຜົນສະເພາະຢ່າງອື່ນ." + +#: ../source/specifications/externally-managed-environments.rst:277 +msgid "Mark the installation as externally managed" +msgstr "ໝາຍການຕິດຕັ້ງວ່າຖືກຈັດການຈາກພາຍນອກ" + +#: ../source/specifications/externally-managed-environments.rst:279 +msgid "" +"Distros should create an ``EXTERNALLY-MANAGED`` file in their ``stdlib`` " +"directory." +msgstr "ດິສໂຕຣຄວນສ້າງໄຟລ໌ ``EXTERNALLY-MANAGED`` ໃນໄດເຣັກທໍຣີ ``stdlib`` ຂອງພວກເຂົາ." + +#: ../source/specifications/externally-managed-environments.rst:283 +msgid "Guide users towards virtual environments" +msgstr "ແນະນຳຜູ້ໃຊ້ໃຫ້ໄປໃຊ້ virtual environments" + +#: ../source/specifications/externally-managed-environments.rst:285 +msgid "" +"The file should contain a useful and distro-relevant error message " +"indicating both how to install system-wide packages via the distro's package " +"manager and how to set up a virtual environment. If your distro is often " +"used by users in a state where the ``python3`` command is available (and " +"especially where ``pip`` or ``get-pip`` is available) but ``python3 -m " +"venv`` does not work, the message should indicate clearly how to make " +"``python3 -m venv`` work properly." +msgstr "" +"ໄຟລ໌ຄວນມີຂໍ້ຄວາມຂໍ້ຜິດພາດທີ່ເປັນປະໂຫຍດ ແລະ ກ່ຽວຂ້ອງກັບດິສໂຕຣ ເຊິ່ງບົ່ງບອກທັງວິທີຕິດຕັ້ງແພັກເກດ " +"ທົ່ວທັງລະບົບຜ່ານຕົວຈັດການແພັກເກດຂອງດິສໂຕຣ ແລະ ວິທີຕັ້ງຄ່າ virtual environment. " +"ຖ້າດິສໂຕຣຂອງທ່ານ ມັກຈະຖືກໃຊ້ໂດຍຜູ້ໃຊ້ໃນສະຖານະທີ່ມີຄຳສັ່ງ ``python3`` (ແລະ ໂດຍສະເພາະທີ່ມີ " +"``pip`` ຫຼື ``get-pip``) ແຕ່ ``python3 -m venv`` ບໍ່ສາມາດໃຊ້ງານໄດ້, " +"ຂໍ້ຄວາມຄວນບົ່ງບອກຢ່າງຊັດເຈນເຖິງວິທີເຮັດໃຫ້ ``python3 -m venv`` ເຮັດວຽກໄດ້ຢ່າງຖືກຕ້ອງ." + +#: ../source/specifications/externally-managed-environments.rst:293 +msgid "" +"Consider packaging pipx_, a tool for installing Python-language " +"applications, and suggesting it in the error. pipx automatically creates a " +"virtual environment for that application alone, which is a much better " +"default for end users who want to install some Python-language software " +"(which isn't available in the distro) but are not themselves Python users. " +"Packaging pipx in the distro avoids the irony of instructing users to ``pip " +"install --user --break-system-packages pipx`` to *avoid* breaking system " +"packages. Consider arranging things so your distro's package / environment " +"for Python for end users (e.g., ``python3`` on Fedora or ``python3-full`` on " +"Debian) depends on pipx." +msgstr "" +"ພິຈາລະນາການເຮັດແພັກເກດ pipx_, ເຊິ່ງເປັນເຄື່ອງມືສຳລັບຕິດຕັ້ງແອັບພລິເຄຊັນພາສາ Python, ແລະ " +"ແນະນຳມັນໃນຂໍ້ຜິດພາດ. pipx ຈະສ້າງ virtual environment ໂດຍອັດຕະໂນມັດສຳລັບແອັບພລິເຄຊັນ " +"ນັ້ນພຽງອັນດຽວ, ເຊິ່ງເປັນຄ່າເລີ່ມຕົ້ນທີ່ດີກວ່າຫຼາຍສຳລັບຜູ້ໃຊ້ທົ່ວໄປທີ່ຕ້ອງການຕິດຕັ້ງຊອບແວພາສາ Python " +"(ທີ່ບໍ່ມີຢູ່ໃນດິສໂຕຣ) ແຕ່ພວກເຂົາເອງບໍ່ແມ່ນຜູ້ໃຊ້ Python. ການເຮັດແພັກເກດ pipx ໃນດິສໂຕຣ " +"ຈະຊ່ວຍຫຼີກເວັ້ນຄວາມຍ້ອນແຍ້ງໃນການແນະນຳຜູ້ໃຊ້ໃຫ້ ``pip install --user --break-system-" +"packages pipx`` ເພື່ອ *ຫຼີກເວັ້ນ* ການເຮັດໃຫ້ແພັກເກດຂອງລະບົບເພພັງ. " +"ພິຈາລະນາຈັດການສິ່ງຕ່າງໆເພື່ອໃຫ້ແພັກເກດ / ສະພາບແວດລ້ອມ Python ຂອງດິສໂຕຣສຳລັບຜູ້ໃຊ້ທົ່ວໄປ (ເຊັ່ນ " +"``python3`` ໃນ Fedora ຫຼື ``python3-full`` ໃນ Debian) ຂຶ້ນກັບ (depends on) pipx." + +#: ../source/specifications/externally-managed-environments.rst:308 +msgid "Keep the marker file in container images" +msgstr "ເກັບໄຟລ໌ເຄື່ອງໝາຍໄວ້ໃນ container images" + +#: ../source/specifications/externally-managed-environments.rst:310 +msgid "" +"Distros that produce official images for single-application containers " +"(e.g., Docker container images) should keep the ``EXTERNALLY-MANAGED`` file, " +"preferably in a way that makes it not go away if a user of that image " +"installs package updates inside their image (think ``RUN apt-get dist-" +"upgrade``)." +msgstr "" +"ດິສໂຕຣທີ່ສ້າງ images ຢ່າງເປັນທາງການສຳລັບ single-application containers (ເຊັ່ນ Docker " +"container images) ຄວນເກັບໄຟລ໌ ``EXTERNALLY-MANAGED`` ໄວ້, ໂດຍສະເພາະໃນວິທີທີ່ " +"ເຮັດໃຫ້ມັນບໍ່ຫາຍໄປຖ້າຜູ້ໃຊ້ image ນັ້ນຕິດຕັ້ງການອັບເດດແພັກເກດພາຍໃນ image ຂອງພວກເຂົາ (ລອງນຶກເຖິງ " +"``RUN apt-get dist-upgrade``)." + +#: ../source/specifications/externally-managed-environments.rst:317 +msgid "Create separate distro and local directories" +msgstr "ສ້າງໄດເຣັກທໍຣີແຍກກັນລະຫວ່າງ distro ແລະ local" + +#: ../source/specifications/externally-managed-environments.rst:319 +msgid "" +"Distros should place two separate paths on the system interpreter's " +"``sys.path``, one for distro-installed packages and one for packages " +"installed by the local system administrator, and configure " +"``sysconfig.get_default_scheme()`` to point at the latter path. This ensures " +"that tools like pip will not modify distro-installed packages. The path for " +"the local system administrator should come before the distro path on " +"``sys.path`` so that local installs take preference over distro packages." +msgstr "" +"ດິສໂຕຣຄວນວາງສອງເສັ້ນທາງ (paths) ແຍກກັນໄວ້ໃນ ``sys.path`` ຂອງ system interpreter, " +"ອັນໜຶ່ງສຳລັບແພັກເກດທີ່ຕິດຕັ້ງໂດຍດິສໂຕຣ ແລະ ອີກອັນໜຶ່ງສຳລັບແພັກເກດທີ່ຕິດຕັ້ງໂດຍ ຜູ້ດູແລລະບົບທ້ອງຖິ່ນ " +"(local administrator), ແລະ ຕັ້ງຄ່າ ``sysconfig.get_default_scheme()`` " +"ໃຫ້ຊີ້ໄປຫາເສັ້ນທາງຫຼັງ. ສິ່ງນີ້ຮັບປະກັນວ່າ ເຄື່ອງມືເຊັ່ນ pip ຈະບໍ່ແກ້ໄຂແພັກເກດທີ່ຕິດຕັ້ງໂດຍດິສໂຕຣ. " +"ເສັ້ນທາງສຳລັບຜູ້ດູແລລະບົບທ້ອງຖິ່ນ ຄວນມາກ່ອນເສັ້ນທາງຂອງດິສໂຕຣໃນ ``sys.path`` " +"ເພື່ອໃຫ້ການຕິດຕັ້ງແບບ local ໄດ້ຮັບຄວາມສຳຄັນກວ່າແພັກເກດຂອງດິສໂຕຣ." + +#: ../source/specifications/externally-managed-environments.rst:328 +msgid "" +"For example, Fedora and Debian (and their derivatives) both implement this " +"split by using ``/usr/local`` for locally-installed packages and ``/usr`` " +"for distro-installed packages. Fedora uses ``/usr/local/lib/python3.x/site-" +"packages`` vs. ``/usr/lib/python3.x/site-packages``. (Debian uses ``/usr/" +"local/lib/python3/dist-packages`` vs. ``/usr/lib/python3/dist-packages`` as " +"an additional layer of separation from a locally-compiled Python " +"interpreter: if you build and install upstream CPython in ``/usr/local/" +"bin``, it will look at ``/usr/local/lib/python3/site-packages``, and Debian " +"wishes to make sure that packages installed via the locally-built " +"interpreter don't show up on ``sys.path`` for the distro interpreter.)" +msgstr "" +"ຕົວຢ່າງ, Fedora ແລະ Debian (ລວມທັງອະນຸພັນຂອງພວກມັນ) ທັງສອງໄດ້ນຳໃຊ້ການແຍກນີ້ໂດຍໃຊ້ ``/usr/" +"local`` ສຳລັບແພັກເກດທີ່ຕິດຕັ້ງແບບ local ແລະ ``/usr`` ສຳລັບແພັກເກດທີ່ຕິດຕັ້ງໂດຍດິສໂຕຣ. " +"Fedora ໃຊ້ ``/usr/local/lib/python3.x/site-packages`` ທຽບກັບ ``/usr/lib/" +"python3.x/site-packages``. (Debian ໃຊ້ ``/usr/local/lib/python3/dist-" +"packages`` ທຽບກັບ ``/usr/lib/python3/dist-packages`` " +"ເພື່ອເປັນອີກຊັ້ນໜຶ່ງຂອງການແຍກອອກຈາກ Python interpreter ທີ່ compile ເອງ: ຖ້າທ່ານ build " +"ແລະ ຕິດຕັ້ງ upstream CPython ໃນ ``/usr/local/bin``, ມັນຈະເບິ່ງທີ່ ``/usr/local/lib/" +"python3/site-packages``, ແລະ Debian ຕ້ອງການໃຫ້ແນ່ໃຈວ່າແພັກເກດທີ່ຕິດຕັ້ງຜ່ານ interpreter " +"ທີ່ build ເອງ ຈະບໍ່ໄປປະກົດໃນ ``sys.path`` ສຳລັບ distro interpreter.)" + +#: ../source/specifications/externally-managed-environments.rst:341 +msgid "" +"Note that the ``/usr/local`` vs. ``/usr`` split is analogous to how the " +"``PATH`` environment variable typically includes ``/usr/local/bin:/usr/bin`` " +"and non-distro software installs to ``/usr/local`` by default. This split is " +"`recommended by the Filesystem Hierarchy Standard`__." +msgstr "" +"ໝາຍເຫດວ່າການແຍກ ``/usr/local`` ທຽບກັບ ``/usr`` ແມ່ນຄ້າຍຄືກັບວິທີທີ່ຕົວປ່ຽນສະພາບແວດລ້ອມ " +"``PATH`` ມັກຈະລວມເອົາ ``/usr/local/bin:/usr/bin`` ແລະ ຊອບແວທີ່ບໍ່ແມ່ນຂອງດິສໂຕຣ " +"ຈະຕິດຕັ້ງລົງໃນ ``/usr/local`` ໂດຍຄ່າເລີ່ມຕົ້ນ. ການແຍກນີ້ແມ່ນ `ແນະນຳໂດຍ Filesystem " +"Hierarchy Standard`__." + +#: ../source/specifications/externally-managed-environments.rst:349 +msgid "" +"There are two ways you could do this. One is, if you are building and " +"packaging Python libraries directly (e.g., your packaging helpers unpack a " +"wheel or call ``setup.py install``), arrange for those tools to use a " +"directory that is not in a ``sysconfig`` scheme but is still on ``sys.path``." +msgstr "" +"ມີສອງວິທີທີ່ທ່ານສາມາດເຮັດໄດ້. ວິທີໜຶ່ງຄື, ຖ້າທ່ານກຳລັງ build ແລະ ເຮັດແພັກເກດໄລບຣາຣີ Python " +"ໂດຍກົງ (ຕົວຢ່າງ ຕົວຊ່ວຍເຮັດແພັກເກດຂອງທ່ານ unpack wheel ຫຼື ເອີ້ນ ``setup.py install``), " +"ໃຫ້ຈັດການໃຫ້ເຄື່ອງມືເຫຼົ່ານັ້ນໃຊ້ໄດເຣັກທໍຣີທີ່ບໍ່ໄດ້ຢູ່ໃນ ``sysconfig`` scheme ແຕ່ຍັງຄົງຢູ່ໃນ " +"``sys.path``." + +#: ../source/specifications/externally-managed-environments.rst:355 +msgid "" +"The other is to arrange for the default ``sysconfig`` scheme to change when " +"running inside a package build versus when running on an installed system. " +"The ``sysconfig`` customization hooks from bpo-43976_ should make this easy " +"(once accepted and implemented): make your packaging tool set an environment " +"variable or some other detectable configuration, and define a " +"``get_preferred_schemes`` function to return a different scheme when called " +"from inside a package build. Then you can use ``pip install`` as part of " +"your distro packaging." +msgstr "" +"ອີກວິທີໜຶ່ງແມ່ນການຈັດການໃຫ້ ``sysconfig`` scheme ເລີ່ມຕົ້ນປ່ຽນໄປເມື່ອລັນຢູ່ພາຍໃນ ການ build " +"ແພັກເກດ ທຽບກັບເມື່ອລັນໃນລະບົບທີ່ຕິດຕັ້ງແລ້ວ. ``sysconfig`` customization hooks ຈາກ " +"bpo-43976_ ຄວນເຮັດໃຫ້ສິ່ງນີ້ງ່າຍຂຶ້ນ (ເມື່ອໄດ້ຮັບການຍອມຮັບ ແລະ ນຳໃຊ້): " +"ໃຫ້ເຄື່ອງມືເຮັດແພັກເກດຂອງທ່ານຕັ້ງຄ່າຕົວປ່ຽນສະພາບແວດລ້ອມ ຫຼື ການຕັ້ງຄ່າອື່ນໆທີ່ກວດສອບໄດ້, ແລະ " +"ກຳນົດຟັງຊັນ ``get_preferred_schemes`` ເພື່ອສົ່ງຄືນ scheme ທີ່ແຕກຕ່າງກັນ " +"ເມື່ອຖືກເອີ້ນຈາກພາຍໃນການ build ແພັກເກດ. ຈາກນັ້ນທ່ານສາມາດໃຊ້ ``pip install`` " +"ເປັນສ່ວນໜຶ່ງຂອງການເຮັດແພັກເກດດິສໂຕຣຂອງທ່ານ." + +#: ../source/specifications/externally-managed-environments.rst:367 +msgid "" +"We propose adding a ``--scheme=...`` option to instruct pip to run against a " +"specific scheme. (See `Implementation Notes`_ below for how pip currently " +"determines schemes.) Once that's available, for local testing and possibly " +"for actual packaging, you would be able to run something like ``pip install " +"--scheme=posix_distro`` to explicitly install a package into your distro's " +"location (bypassing ``get_preferred_schemes``). One could also, if " +"absolutely needed, use ``pip uninstall --scheme=posix_distro`` to use pip to " +"remove packages from the system-managed directory." +msgstr "" +"ພວກເຮົາສະເໜີໃຫ້ເພີ່ມຕົວເລືອກ ``--scheme=...`` ເພື່ອສັ່ງໃຫ້ pip ລັນກັບ scheme " +"ທີ່ສະເພາະເຈາະຈົງ. (ເບິ່ງ `Implementation Notes`_ ຂ້າງລຸ່ມນີ້ສຳລັບວິທີທີ່ pip ກຳນົດ schemes " +"ໃນປະຈຸບັນ.) ເມື່ອສິ່ງນັ້ນພ້ອມໃຊ້ງານ, ສຳລັບການທົດສອບແບບ local ແລະ " +"ອາດຈະລວມເຖິງການເຮັດແພັກເກດຕົວຈິງ, ທ່ານຈະສາມາດລັນບາງຢ່າງເຊັ່ນ ``pip install --" +"scheme=posix_distro`` ເພື່ອຕິດຕັ້ງແພັກເກດລົງໃນສະຖານທີ່ ຂອງດິສໂຕຣຂອງທ່ານໂດຍກົງ (ໂດຍຂ້າມ " +"``get_preferred_schemes``). ນອກນັ້ນ, ຖ້າຈຳເປັນແທ້ໆ, ຍັງສາມາດໃຊ້ ``pip uninstall --" +"scheme=posix_distro`` ເພື່ອໃຊ້ pip ໃນການລຶບແພັກເກດອອກຈາກໄດເຣັກທໍຣີທີ່ລະບຸຈັດການ." + +#: ../source/specifications/externally-managed-environments.rst:377 +msgid "" +"To install packages with pip, you would also need to either suppress the " +"``EXTERNALLY-MANAGED`` marker file to allow pip to run or to override it on " +"the command line. You may want to use the same means for suppressing the " +"marker file in build chroots as you do in container images." +msgstr "" +"ໃນການຕິດຕັ້ງແພັກເກດດ້ວຍ pip, ທ່ານຍັງຕ້ອງປິດໃຊ້ງານໄຟລ໌ເຄື່ອງໝາຍ ``EXTERNALLY-MANAGED`` " +"ເພື່ອອະນຸຍາດໃຫ້ pip ລັນໄດ້ ຫຼື override ມັນຜ່ານ command line. ທ່ານອາດຈະຕ້ອງການ " +"ໃຊ້ວິທີດຽວກັນໃນການປິດໃຊ້ງານໄຟລ໌ເຄື່ອງໝາຍໃນ build chroots ຄືກັບທີ່ທ່ານເຮັດໃນ container " +"images." + +#: ../source/specifications/externally-managed-environments.rst:383 +msgid "" +"The advantage of setting these up to be automatic (suppressing the marker " +"file in your build environment and having ``get_preferred_schemes`` " +"automatically return your distro's scheme) is that an unadorned ``pip " +"install`` will work inside a package build, which generally means that an " +"unmodified upstream build script that happens to internally call ``pip " +"install`` will do the right thing. You can, of course, just ensure that your " +"packaging process always calls ``pip install --scheme=posix_distro --break-" +"system-packages``, which would work too." +msgstr "" +"ຂໍ້ດີຂອງການຕັ້ງຄ່າສິ່ງເຫຼົ່ານີ້ໃຫ້ເປັນອັດຕະໂນມັດ (ການປິດໃຊ້ງານໄຟລ໌ເຄື່ອງໝາຍໃນ ສະພາບແວດລ້ອມການ build " +"ຂອງທ່ານ ແລະ ໃຫ້ ``get_preferred_schemes`` ສົ່ງຄືນ scheme " +"ຂອງດິສໂຕຣຂອງທ່ານໂດຍອັດຕະໂນມັດ) ແມ່ນການລັນ ``pip install`` ແບບທຳມະດາ " +"ຈະເຮັດວຽກໄດ້ພາຍໃນການ build ແພັກເກດ, ເຊິ່ງໂດຍທົ່ວໄປແລ້ວໝາຍຄວາມວ່າ build script " +"ຕົ້ນທາງທີ່ບໍ່ໄດ້ຖືກດັດແກ້ ເຊິ່ງບັງເອີນເອີ້ນໃຊ້ ``pip install`` ພາຍໃນ ຈະເຮັດວຽກ ໄດ້ຢ່າງຖືກຕ້ອງ. " +"ແນ່ນອນວ່າ ທ່ານພຽງແຕ່ຮັບປະກັນວ່າຂະບວນການເຮັດແພັກເກດຂອງທ່ານ ເອີ້ນໃຊ້ ``pip install --" +"scheme=posix_distro --break-system-packages`` ສະເໝີ, ເຊິ່ງມັນກໍຈະເຮັດວຽກໄດ້ຄືກັນ." + +#: ../source/specifications/externally-managed-environments.rst:393 +msgid "" +"The best approach here depends a lot on your distro's conventions and " +"mechanisms for packaging." +msgstr "ວິທີການທີ່ດີທີ່ສຸດຢູ່ທີ່ນີ້ແມ່ນຂຶ້ນກັບທຳນຽມ ແລະ ກົນໄກການເຮັດແພັກເກດຂອງດິສໂຕຣຂອງທ່ານຫຼາຍ." + +#: ../source/specifications/externally-managed-environments.rst:396 +msgid "" +"Similarly, the ``sysconfig`` paths that are not for importable Python code - " +"that is, ``include``, ``platinclude``, ``scripts``, and ``data`` - should " +"also have two variants, one for use by distro-packaged software and one for " +"use for locally-installed software, and the distro should be set up such " +"that both are usable. For instance, a typical FHS-compliant distro will use " +"``/usr/local/include`` for the default scheme's ``include`` and ``/usr/" +"include`` for distro-packaged headers and place both on the compiler's " +"search path, and it will use ``/usr/local/bin`` for the default scheme's " +"``scripts`` and ``/usr/bin`` for distro-packaged entry points and place both " +"on ``$PATH``." +msgstr "" +"ໃນທຳນອງດຽວກັນ, ເສັ້ນທາງ ``sysconfig`` ທີ່ບໍ່ແມ່ນສຳລັບລະຫັດ Python ທີ່ import ໄດ້ - ນັ້ນຄື " +"``include``, ``platinclude``, ``scripts``, ແລະ ``data`` - ຄວນມີສອງ ຮູບແບບຄືກັນ, " +"ອັນໜຶ່ງສຳລັບໃຊ້ໂດຍຊອບແວທີ່ເຮັດແພັກເກດໂດຍດິສໂຕຣ ແລະ ອີກອັນໜຶ່ງ ສຳລັບໃຊ້ສຳລັບຊອບແວທີ່ຕິດຕັ້ງແບບ " +"local, ແລະ ດິສໂຕຣຄວນຖືກຕັ້ງຄ່າໃຫ້ສາມາດ ໃຊ້ງານໄດ້ທັງສອງຢ່າງ. ຕົວຢ່າງ, ດິສໂຕຣທີ່ສອດຄ່ອງກັບ FHS " +"ທົ່ວໄປຈະໃຊ້ ``/usr/local/include`` ສຳລັບ ``include`` ຂອງ scheme ເລີ່ມຕົ້ນ ແລະ ``/usr/" +"include`` ສຳລັບ headers ທີ່ເຮັດແພັກເກດໂດຍດິສໂຕຣ ແລະ ວາງທັງສອງໄວ້ໃນ search path ຂອງ " +"compiler, ແລະ ມັນຈະໃຊ້ ``/usr/local/bin`` ສຳລັບ ``scripts`` ຂອງ scheme ເລີ່ມຕົ້ນ " +"ແລະ ``/usr/bin`` ສຳລັບ entry points ທີ່ເຮັດແພັກເກດໂດຍດິສໂຕຣ ແລະ ວາງທັງສອງໄວ້ໃນ " +"``$PATH``." + +#: ../source/specifications/externally-managed-environments.rst:410 +msgid "Implementation Notes" +msgstr "ໝາຍເຫດການນຳໃຊ້" + +#: ../source/specifications/externally-managed-environments.rst:412 +msgid "" +"This section is non-normative and contains notes relevant to both the " +"specification and potential implementations." +msgstr "" +"ພາກສ່ວນນີ້ບໍ່ແມ່ນຂໍ້ບັງຄັບ ແລະ ປະກອບດ້ວຍໝາຍເຫດທີ່ກ່ຽວຂ້ອງກັບທັງຂໍ້ກຳນົດ ແລະ ການນຳໃຊ້ທີ່ອາດຈະເກີດຂຶ້ນ." + +#: ../source/specifications/externally-managed-environments.rst:415 +msgid "" +"Currently (as of May 2021), pip does not directly expose a way to choose a " +"target ``sysconfig`` scheme, but it has three ways of looking up schemes " +"when installing:" +msgstr "" +"ໃນປະຈຸບັນ (ຂໍ້ມູນເດືອນພຶດສະພາ 2021), pip ຍັງບໍ່ໄດ້ເປີດເຜີຍວິທີການເລືອກເປົ້າໝາຍ ``sysconfig`` " +"scheme ໂດຍກົງ, ແຕ່ມັນມີສາມວິທີໃນການຄົ້ນຫາ schemes ເມື່ອຕິດຕັ້ງ:" + +#: ../source/specifications/externally-managed-environments.rst:422 +msgid "``pip install``" +msgstr "``pip install``" + +#: ../source/specifications/externally-managed-environments.rst:420 +msgid "" +"Calls ``sysconfig.get_default_scheme()``, which is usually (in upstream " +"CPython and most current distros) the same as " +"``get_preferred_scheme('prefix')``." +msgstr "" +"ເອີ້ນໃຊ້ ``sysconfig.get_default_scheme()``, ເຊິ່ງປົກກະຕິແລ້ວ (ໃນ upstream CPython " +"ແລະ ດິສໂຕຣສ່ວນໃຫຍ່ໃນປະຈຸບັນ) ຈະຄືກັນກັບ ``get_preferred_scheme('prefix')``." + +#: ../source/specifications/externally-managed-environments.rst:425 +msgid "``pip install --prefix=/some/path``" +msgstr "``pip install --prefix=/some/path``" + +#: ../source/specifications/externally-managed-environments.rst:425 +msgid "Calls ``sysconfig.get_preferred_scheme('prefix')``." +msgstr "ເອີ້ນໃຊ້ ``sysconfig.get_preferred_scheme('prefix')``." + +#: ../source/specifications/externally-managed-environments.rst:428 +msgid "``pip install --user``" +msgstr "``pip install --user``" + +#: ../source/specifications/externally-managed-environments.rst:428 +msgid "Calls ``sysconfig.get_preferred_scheme('user')``." +msgstr "ເອີ້ນໃຊ້ ``sysconfig.get_preferred_scheme('user')``." + +#: ../source/specifications/externally-managed-environments.rst:430 +msgid "" +"Finally, ``pip install --target=/some/path`` writes directly to ``/some/" +"path`` without looking up any schemes." +msgstr "" +"ສຸດທ້າຍ, ``pip install --target=/some/path`` ຈະຂຽນລົງໃນ ``/some/path`` ໂດຍກົງ " +"ໂດຍບໍ່ມີການຄົ້ນຫາ schemes ໃດໆ." + +#: ../source/specifications/externally-managed-environments.rst:433 +msgid "" +"Debian currently carries a `patch to change the default install location " +"inside a virtual environment`__, using a few heuristics (including checking " +"for the ``VIRTUAL_ENV`` environment variable), largely so that the directory " +"used in a virtual environment remains ``site-packages`` and not ``dist-" +"packages``. This does not particularly affect this proposal, because the " +"implementation of that patch does not actually change the default " +"``sysconfig`` scheme, and notably does not change the result of " +"``sysconfig.get_path(\"stdlib\")``." +msgstr "" +"ປະຈຸບັນ Debian ໃຊ້ `patch ເພື່ອປ່ຽນສະຖານທີ່ຕິດຕັ້ງເລີ່ມຕົ້ນພາຍໃນ virtual environment`__, " +"ໂດຍໃຊ້ຫຼັກການຄາດຄະເນບາງຢ່າງ (ລວມທັງການກວດສອບຕົວປ່ຽນສະພາບແວດລ້ອມ ``VIRTUAL_ENV``), " +"ສ່ວນໃຫຍ່ແມ່ນເພື່ອໃຫ້ໄດເຣັກທໍຣີທີ່ໃຊ້ໃນ virtual environment ຍັງຄົງເປັນ ``site-packages`` ແລະ " +"ບໍ່ແມ່ນ ``dist-packages``. ສິ່ງນີ້ບໍ່ໄດ້ສົ່ງຜົນກະທົບຕໍ່ຂໍ້ສະເໜີນີ້ໂດຍສະເພາະ, ເພາະວ່າ ການນຳໃຊ້ patch " +"ນັ້ນບໍ່ໄດ້ປ່ຽນແປງ ``sysconfig`` scheme ເລີ່ມຕົ້ນແທ້ໆ, ແລະ ທີ່ສຳຄັນແມ່ນບໍ່ໄດ້ປ່ຽນແປງຜົນລັດຂອງ " +"``sysconfig.get_path(\"stdlib\")``." + +#: ../source/specifications/externally-managed-environments.rst:445 +msgid "" +"Fedora currently carries a `patch to change the default install location " +"when not running inside rpmbuild`__, which they use to implement the two-" +"system-wide-directories approach. This is conceptually the sort of hook " +"envisioned by bpo-43976_, except implemented as a code patch to " +"``distutils`` instead of as a changed ``sysconfig`` scheme." +msgstr "" +"ປະຈຸບັນ Fedora ໃຊ້ `patch ເພື່ອປ່ຽນສະຖານທີ່ຕິດຕັ້ງເລີ່ມຕົ້ນເມື່ອບໍ່ໄດ້ລັນພາຍໃນ rpmbuild`__, " +"ເຊິ່ງພວກເຂົາໃຊ້ເພື່ອຈັດການແບບສອງໄດເຣັກທໍຣີທົ່ວລະບົບ. ສິ່ງນີ້ເປັນແນວຄິດແບບດຽວກັນກັບ hook ທີ່ຄາດໄວ້ໂດຍ " +"bpo-43976_, ຍົກເວັ້ນມັນຖືກນຳໃຊ້ເປັນ code patch ໃນ ``distutils`` ແທນທີ່ຈະເປັນການປ່ຽນແປງ " +"``sysconfig`` scheme." + +#: ../source/specifications/externally-managed-environments.rst:454 +msgid "" +"The implementation of ``is_virtual_environment`` above, as well as the logic " +"to load the ``EXTERNALLY-MANAGED`` file and find the error message from it, " +"may as well get added to the standard library (``sys`` and ``sysconfig``, " +"respectively), to centralize their implementations, but they don't need to " +"be added yet." +msgstr "" +"ການນຳໃຊ້ ``is_virtual_environment`` ຂ້າງເທິງ, ລວມທັງໂລຈິກໃນການໂຫລດໄຟລ໌ " +"``EXTERNALLY-MANAGED`` ແລະ ຄົ້ນຫາຂໍ້ຄວາມຂໍ້ຜິດພາດຈາກມັນ, ອາດຈະຖືກເພີ່ມເຂົ້າໃນ " +"ໄລບຣາຣີມາດຕະຖານ (``sys`` ແລະ ``sysconfig`` ຕາມລຳດັບ), ເພື່ອເຮັດໃຫ້ການນຳໃຊ້ " +"ເປັນສູນກາງ, ແຕ່ພວກມັນຍັງບໍ່ຈຳເປັນຕ້ອງຖືກເພີ່ມເຂົ້າໃນຕອນນີ້." + +#: ../source/specifications/externally-managed-environments.rst:464 +msgid "Copyright" +msgstr "ລິຂະສິດ" + +#: ../source/specifications/externally-managed-environments.rst:466 +msgid "" +"This document is placed in the public domain or under the CC0-1.0-Universal " +"license, whichever is more permissive." +msgstr "" +"ເອກະສານນີ້ຖືກເຜີຍແຜ່ເປັນສົມບັດສາທາລະນະ ຫຼື ພາຍໃຕ້ໃບອະນຸຍາດ CC0-1.0-Universal, " +"ແລ້ວແຕ່ອັນໃດຈະໃຫ້ອິດສະລະຫຼາຍກວ່າ." + +#: ../source/specifications/externally-managed-environments.rst:474 +msgid "June 2022: This specification was approved through :pep:`668`." +msgstr "ມິຖຸນາ 2022: ຂໍ້ກຳນົດນີ້ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`668`." + +#: ../source/specifications/file-yanking.rst:5 +msgid "File Yanking" +msgstr "ການຖອນໄຟລ໌ອອກ (File Yanking)" + +#: ../source/specifications/file-yanking.rst:9 +msgid "This specification was originally defined in :pep:`592`." +msgstr "ຂໍ້ກຳນົດນີ້ຖືກກຳນົດຂຶ້ນໃນເບື້ອງຕົ້ນໃນ :pep:`592`." + +#: ../source/specifications/file-yanking.rst:14 +msgid "" +":pep:`592` includes changes to the HTML and JSON index APIs. These changes " +"are documented in the :ref:`simple-repository-api` under :ref:`HTML - " +"Project Detail ` and :ref:`JSON - " +"Project Detail `." +msgstr "" +":pep:`592` ລວມມີການປ່ຽນແປງໃນ HTML ແລະ JSON index APIs. ການປ່ຽນແປງເຫຼົ່ານີ້ " +"ຖືກບັນທຶກໄວ້ໃນ :ref:`simple-repository-api` ພາຍໃຕ້ :ref:`HTML - Project Detail " +"` ແລະ :ref:`JSON - Project Detail " +"`." + +#: ../source/specifications/file-yanking.rst:22 +msgid "" +"Links in the simple repository **MAY** have a ``data-yanked`` attribute " +"which may have no value, or may have an arbitrary string as a value. The " +"presence of a ``data-yanked`` attribute **SHOULD** be interpreted as " +"indicating that the file pointed to by this particular link has been " +"\"Yanked\", and should not generally be selected by an installer, except " +"under specific scenarios." +msgstr "" +"ລິ້ງໃນ simple repository **ອາດຈະ** ມີແອດທຣິບິວ ``data-yanked`` ເຊິ່ງອາດຈະບໍ່ມີຄ່າ, ຫຼື " +"ອາດຈະມີຂໍ້ຄວາມໃດໆກໍໄດ້ເປັນຄ່າ. ການມີຢູ່ຂອງແອດທຣິບິວ ``data-yanked`` **ຄວນ** ຖືກຕີຄວາມໝາຍວ່າ " +"ໄຟລ໌ທີ່ລິ້ງນີ້ຊີ້ໄປຫານັ້ນຖືກ \"Yanked\" (ຖອນອອກ), ແລະ ໂດຍທົ່ວໄປແລ້ວ ບໍ່ຄວນຖືກເລືອກໂດຍຕົວຕິດຕັ້ງ, " +"ຍົກເວັ້ນພາຍໃຕ້ສະຖານະການທີ່ສະເພາະເຈາະຈົງ." + +#: ../source/specifications/file-yanking.rst:29 +msgid "" +"The value of the ``data-yanked`` attribute, if present, is an arbitrary " +"string that represents the reason for why the file has been yanked. Tools " +"that process the simple repository API **MAY** surface this string to end " +"users." +msgstr "" +"ຄ່າຂອງແອດທຣິບິວ ``data-yanked``, ຖ້າມີ, ແມ່ນຂໍ້ຄວາມໃດໆກໍໄດ້ທີ່ສະແດງເຖິງເຫດຜົນ ທີ່ໄຟລ໌ນັ້ນຖືກ " +"yanked. ເຄື່ອງມືທີ່ປະມວນຜົນ simple repository API **ອາດຈະ** ສະແດງຂໍ້ຄວາມນີ້ໃຫ້ກັບຜູ້ໃຊ້ໄດ້." + +#: ../source/specifications/file-yanking.rst:34 +msgid "" +"The yanked attribute is not immutable once set, and may be rescinded in the " +"future (and once rescinded, may be reset as well). Thus API users **MUST** " +"be able to cope with a yanked file being \"unyanked\" (and even yanked " +"again)." +msgstr "" +"ແອດທຣິບິວ yanked ບໍ່ແມ່ນສິ່ງທີ່ປ່ຽນແປງບໍ່ໄດ້ເມື່ອຖືກຕັ້ງຄ່າແລ້ວ, ແລະ ອາດຈະຖືກຍົກເລີກ ໃນອະນາຄົດ (ແລະ " +"ເມື່ອຍົກເລີກແລ້ວ, ກໍອາດຈະຖືກຕັ້ງໃໝ່ໄດ້ອີກ). ດັ່ງນັ້ນ, ຜູ້ໃຊ້ API **ຕ້ອງ** ສາມາດຮັບມືກັບໄຟລ໌ທີ່ຖືກ " +"yanked ທີ່ກາຍເປັນ \"unyanked\" (ແລະ ແມ່ນແຕ່ຖືກ yanked ອີກຄັ້ງ)." + +#: ../source/specifications/file-yanking.rst:40 +msgid "Installers" +msgstr "ຕົວຕິດຕັ້ງ" + +#: ../source/specifications/file-yanking.rst:42 +msgid "" +"The desirable experience for users is that once a file is yanked, when a " +"human being is currently trying to directly install a yanked file, that it " +"fails as if that file had been deleted. However, when a human did that " +"awhile ago, and now a computer is just continuing to mechanically follow the " +"original order to install the now yanked file, then it acts as if it had not " +"been yanked." +msgstr "" +"ປະສົບການທີ່ດີສຳລັບຜູ້ໃຊ້ຄື ເມື່ອໄຟລ໌ໃດໜຶ່ງຖືກ yanked ແລ້ວ, ຖ້າມີຄົນພະຍາຍາມຕິດຕັ້ງ ໄຟລ໌ນັ້ນໂດຍກົງ, " +"ມັນຄວນຈະລົ້ມເຫຼວຄືກັບວ່າໄຟລ໌ນັ້ນຖືກລຶບໄປແລ້ວ. ແນວໃດກໍຕາມ, ຖ້າມີຄົນເຄີຍສັ່ງໄວ້ກ່ອນໜ້ານັ້ນ, ແລະ " +"ຕອນນີ້ຄອມພິວເຕີພຽງແຕ່ເຮັດຕາມຄຳສັ່ງເດີມ ເພື່ອຕິດຕັ້ງໄຟລ໌ທີ່ຖືກ yanked ນັ້ນ, " +"ມັນກໍຄວນເຮັດວຽກຄືກັບວ່າມັນບໍ່ໄດ້ຖືກ yanked." + +#: ../source/specifications/file-yanking.rst:49 +msgid "" +"An installer **MUST** ignore yanked releases, if the selection constraints " +"can be satisfied with a non-yanked version, and **MAY** refuse to use a " +"yanked release even if it means that the request cannot be satisfied at all. " +"An implementation **SHOULD** choose a policy that follows the spirit of the " +"intention above, and that prevents \"new\" dependencies on yanked releases/" +"files." +msgstr "" +"ຕົວຕິດຕັ້ງ **ຕ້ອງ** ລະເລີຍລຸ້ນ (releases) ທີ່ຖືກ yanked, ຖ້າເງື່ອນໄຂການເລືອກ " +"ສາມາດຖືກຕອບສະໜອງໄດ້ດ້ວຍເວີຊັນທີ່ບໍ່ໄດ້ຖືກ yanked, ແລະ **ອາດຈະ** ປະຕິເສດ ການໃຊ້ລຸ້ນທີ່ຖືກ " +"yanked ເຖິງແມ່ນວ່າມັນຈະໝາຍຄວາມວ່າຄຳຮ້ອງຂໍນັ້ນບໍ່ສາມາດ ຕອບສະໜອງໄດ້ເລີຍກໍຕາມ. ການນຳໃຊ້ " +"**ຄວນ** ເລືອກນະໂຍບາຍທີ່ປະຕິບັດຕາມ ເຈດຕະນາຂ້າງເທິງ, ແລະ ປ້ອງກັນ dependencies \"ໃໝ່\" " +"ໃນລຸ້ນ/ໄຟລ໌ທີ່ຖືກ yanked." + +#: ../source/specifications/file-yanking.rst:56 +msgid "" +"What this means is left up to the specific installer, to decide how to best " +"fit into the overall usage of their installer. However, there are two " +"suggested approaches to take:" +msgstr "" +"ສິ່ງນີ້ໝາຍຄວາມວ່າແນວໃດແມ່ນຂຶ້ນກັບຕົວຕິດຕັ້ງແຕ່ລະອັນ, ໃນການຕັດສິນໃຈວ່າ " +"ສິ່ງໃດເໝາະສົມທີ່ສຸດກັບການໃຊ້ງານໂດຍລວມ. ແນວໃດກໍຕາມ, ມີສອງວິທີທີ່ແນະນຳ:" + +#: ../source/specifications/file-yanking.rst:60 +msgid "" +"Yanked files are always ignored, unless they are the only file that matches " +"a version specifier that \"pins\" to an exact version using either ``==`` " +"(without any modifiers that make it a range, such as ``.*``) or ``===``. " +"Matching this version specifier should otherwise be done as per :ref:`the " +"version specifiers specification ` for things like local " +"versions, zero padding, etc." +msgstr "" +"ໄຟລ໌ທີ່ຖືກ Yanked ຈະຖືກລະເລີຍສະເໝີ, ເວັ້ນເສຍແຕ່ວ່າມັນເປັນໄຟລ໌ດຽວທີ່ກົງກັບ ຕົວລະບຸເວີຊັນທີ່ \"pin\" " +"(ລັອກ) ໄວ້ກັບເວີຊັນທີ່ແນ່ນອນໂດຍໃຊ້ ``==`` (ໂດຍບໍ່ມີຕົວແກ້ໄຂທີ່ເຮັດໃຫ້ເປັນຊ່ວງ ເຊັ່ນ ``.*``) ຫຼື " +"``===``. ການຈັບຄູ່ຕົວລະບຸເວີຊັນນີ້ຄວນເຮັດຕາມ :ref:`the version specifiers " +"specification ` ສຳລັບສິ່ງຕ່າງໆເຊັ່ນ local versions, zero " +"padding ແລະ ອື່ນໆ." + +#: ../source/specifications/file-yanking.rst:67 +msgid "" +"Yanked files are always ignored, unless they are the only file that matches " +"what a lock file (such as ``Pipfile.lock`` or ``poetry.lock``) specifies to " +"be installed. In this case, a yanked file **SHOULD** not be used when " +"creating or updating a lock file from some input file or command." +msgstr "" +"ໄຟລ໌ທີ່ຖືກ Yanked ຈະຖືກລະເລີຍສະເໝີ, ເວັ້ນເສຍແຕ່ວ່າມັນເປັນໄຟລ໌ດຽວທີ່ກົງກັບ ສິ່ງທີ່ lock file (ເຊັ່ນ " +"``Pipfile.lock`` ຫຼື ``poetry.lock``) ກຳນົດໃຫ້ຕິດຕັ້ງ. ໃນກໍລະນີນີ້, ໄຟລ໌ທີ່ຖືກ yanked " +"**ບໍ່ຄວນ** ຖືກໃຊ້ເມື່ອສ້າງ ຫຼື ອັບເດດ lock file ຈາກໄຟລ໌ນຳເຂົ້າ ຫຼື ຄຳສັ່ງໃດໜຶ່ງ." + +#: ../source/specifications/file-yanking.rst:73 +msgid "" +"Regardless of the specific strategy that an installer chooses for deciding " +"when to install yanked files, an installer **SHOULD** emit a warning when it " +"does decide to install a yanked file. That warning **MAY** utilize the value " +"of the ``data-yanked`` attribute (if it has a value) to provide more " +"specific feedback to the user about why that file had been yanked." +msgstr "" +"ບໍ່ວ່າຕົວຕິດຕັ້ງຈະເລືອກກົນລະຍຸດໃດໃນການຕັດສິນໃຈວ່າຈະຕິດຕັ້ງໄຟລ໌ທີ່ຖືກ yanked ເມື່ອໃດ, ຕົວຕິດຕັ້ງ " +"**ຄວນ** ສະແດງຄຳເຕືອນເມື່ອມັນຕັດສິນໃຈຕິດຕັ້ງໄຟລ໌ທີ່ຖືກ yanked. ຄຳເຕືອນນັ້ນ **ອາດຈະ** " +"ໃຊ້ຄ່າຂອງແອດທຣິບິວ ``data-yanked`` (ຖ້າມີຄ່າ) ເພື່ອໃຫ້ຂໍ້ມູນເພີ່ມເຕີມແກ່ຜູ້ໃຊ້ວ່າເປັນຫຍັງໄຟລ໌ນັ້ນຈຶ່ງຖືກ " +"yanked." + +#: ../source/specifications/file-yanking.rst:81 +msgid "Mirrors" +msgstr "ບ່ອນເກັບສຳຮອງ (Mirrors)" + +#: ../source/specifications/file-yanking.rst:83 +msgid "Mirrors can generally treat yanked files one of two ways:" +msgstr "Mirrors ໂດຍທົ່ວໄປແລ້ວສາມາດຈັດການກັບໄຟລ໌ທີ່ຖືກ yanked ໄດ້ສອງວິທີ:" + +#: ../source/specifications/file-yanking.rst:85 +msgid "" +"They may choose to omit them from their simple repository API completely, " +"providing a view over the repository that shows only \"active\", unyanked " +"files." +msgstr "" +"ພວກເຂົາອາດຈະເລືອກທີ່ຈະຕັດພວກມັນອອກຈາກ simple repository API ຂອງພວກເຂົາທັງໝົດ, " +"ໂດຍການສະແດງສະເພາະໄຟລ໌ທີ່ \"active\" ແລະ ບໍ່ໄດ້ຖືກ yanked ເທົ່ານັ້ນ." + +#: ../source/specifications/file-yanking.rst:88 +msgid "" +"They may choose to include yanked files, and additionally mirror the ``data-" +"yanked`` attribute as well." +msgstr "" +"ພວກເຂົາອາດຈະເລືອກທີ່ຈະລວມເອົາໄຟລ໌ທີ່ຖືກ yanked, ແລະ mirror ແອດທຣິບິວ ``data-yanked`` " +"ໄປພ້ອມກັນນຳ." + +#: ../source/specifications/file-yanking.rst:91 +msgid "" +"Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" +"yanked`` attribute for it." +msgstr "" +"Mirrors **ຕ້ອງບໍ່** mirror ໄຟລ໌ທີ່ຖືກ yanked ໂດຍບໍ່ໄດ້ mirror ແອດທຣິບິວ ``data-yanked`` " +"ຂອງມັນໄປນຳ." + +#: ../source/specifications/glob-patterns.rst:3 +msgid "``glob`` patterns" +msgstr "ຮູບແບບ ``glob``" + +#: ../source/specifications/glob-patterns.rst:5 +msgid "" +"Some PyPA specifications, e.g. :ref:`pyproject.toml's license-files " +"`, accept certain types of *glob patterns* to " +"match a given string containing wildcards and character ranges against files " +"and directories. This specification defines which patterns are acceptable " +"and how they should be handled." +msgstr "" +"ຂໍ້ກຳນົດຂອງ PyPA ບາງຢ່າງ, ເຊັ່ນ :ref:`pyproject.toml's license-files `, ຍອມຮັບ *glob patterns* ບາງປະເພດ ເພື່ອຈັບຄູ່ຂໍ້ຄວາມທີ່ມີ wildcards " +"ແລະ ຊ່ວງຕົວອັກສອນກັບໄຟລ໌ ແລະ ໄດເຣັກທໍຣີ. ຂໍ້ກຳນົດນີ້ກຳນົດວ່າຮູບແບບໃດແດ່ທີ່ຍອມຮັບໄດ້ ແລະ " +"ຄວນຈັດການກັບພວກມັນແນວໃດ." + +#: ../source/specifications/glob-patterns.rst:13 +msgid "Valid glob patterns" +msgstr "ຮູບແບບ glob ທີ່ຖືກຕ້ອງ" + +#: ../source/specifications/glob-patterns.rst:15 +msgid "" +"For PyPA purposes, a *valid glob pattern* MUST be a string matched against " +"filesystem entries as specified below:" +msgstr "" +"ສຳລັບຈຸດປະສົງຂອງ PyPA, *ຮູບແບບ glob ທີ່ຖືກຕ້ອງ* ຕ້ອງເປັນຂໍ້ຄວາມທີ່ຈັບຄູ່ກັບ " +"ລາຍການໃນລະບົບໄຟລ໌ຕາມທີ່ລະບຸໄວ້ຂ້າງລຸ່ມນີ້:" + +#: ../source/specifications/glob-patterns.rst:18 +msgid "" +"Alphanumeric characters, spaces (`` ``), underscores (``_``), hyphens (``-" +"``), and dots (``.``) MUST be matched verbatim." +msgstr "" +"ຕົວອັກສອນ ແລະ ຕົວເລກ, ຊ່ອງຫວ່າງ (`` ``), ເຄື່ອງໝາຍຂີດກ້ອງ (``_``), ຂີດຕໍ່ (``-``), ແລະ " +"ຈຸດ (``.``) ຕ້ອງຖືກຈັບຄູ່ຕາມຕົວອັກສອນນັ້ນແທ້ໆ." + +#: ../source/specifications/glob-patterns.rst:21 +msgid "" +"Special glob characters: ``*``, ``?``, ``**`` and character ranges: ``[]`` " +"containing only the verbatim matched characters MUST be supported. Within " +"``[...]``, the hyphen indicates a locale-agnostic range (e.g. ``a-z``, order " +"based on Unicode code points). Hyphens at the start or end are matched " +"literally." +msgstr "" +"ຕົວອັກສອນ glob ພິເສດ: ``*``, ``?``, ``**`` ແລະ ຊ່ວງຕົວອັກສອນ: ``[]`` " +"ທີ່ປະກອບດ້ວຍຕົວອັກສອນທີ່ຈັບຄູ່ຕາມຕົວຈິງເທົ່ານັ້ນ ຕ້ອງໄດ້ຮັບການຮອງຮັບ. ພາຍໃນ ``[...]``, " +"ເຄື່ອງໝາຍຂີດຕໍ່ບົ່ງບອກເຖິງຊ່ວງທີ່ບໍ່ຂຶ້ນກັບ locale (ຕົວຢ່າງ ``a-z``, ລຽງລຳດັບຕາມ Unicode code " +"points). ຂີດຕໍ່ທີ່ຢູ່ຕົ້ນ ຫຼື ທ້າຍຈະຖືກຈັບຄູ່ຕາມຕົວອັກສອນ." + +#: ../source/specifications/glob-patterns.rst:27 +msgid "Path delimiters MUST be the forward slash character (``/``)." +msgstr "ຕົວແຍກເສັ້ນທາງ (path delimiters) ຕ້ອງເປັນເຄື່ອງໝາຍທັບ (``/``)." + +#: ../source/specifications/glob-patterns.rst:29 +msgid "" +"Patterns always refer to *relative paths*, e.g., when used " +"in :file:`pyproject.toml`, patterns should always be relative to the " +"directory containing that file. Therefore the leading slash character MUST " +"NOT be used." +msgstr "" +"ຮູບແບບຕ່າງໆຈະອ້າງອີງເຖິງ *relative paths* (ເສັ້ນທາງສຳພັດ) ສະເໝີ, ຕົວຢ່າງ " +"ເມື່ອໃຊ້ໃນ :file:`pyproject.toml`, ຮູບແບບຄວນຈະສຳພັດກັບໄດເຣັກທໍຣີ ທີ່ບັນຈຸໄຟລ໌ນັ້ນສະເໝີ. ດັ່ງນັ້ນ, " +"ຕ້ອງບໍ່ໃຊ້ເຄື່ອງໝາຍທັບນຳໜ້າ." + +#: ../source/specifications/glob-patterns.rst:34 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "ຕ້ອງບໍ່ໃຊ້ຕົວບົ່ງບອກໄດເຣັກທໍຣີແມ່ (``..``)." + +#: ../source/specifications/glob-patterns.rst:36 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming glob patterns " +"SHOULD reject invalid values with an error." +msgstr "" +"ຕົວອັກສອນ ຫຼື ລຳດັບຕົວອັກສອນໃດໆທີ່ບໍ່ໄດ້ກວມເອົາໃນຂໍ້ກຳນົດນີ້ ແມ່ນຖືວ່າບໍ່ຖືກຕ້ອງ. " +"ໂຄງການຕ່າງໆຕ້ອງບໍ່ໃຊ້ຄ່າດັ່ງກ່າວ. ເຄື່ອງມືທີ່ໃຊ້ຮູບແບບ glob ຄວນປະຕິເສດ " +"ຄ່າທີ່ບໍ່ຖືກຕ້ອງດ້ວຍການແຈ້ງເຕືອນຂໍ້ຜິດພາດ." + +#: ../source/specifications/glob-patterns.rst:40 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" +"ເສັ້ນທາງແບບຊື່ໆ (ຕົວຢ່າງ :file:`LICENSE`) ແມ່ນ glob ທີ່ຖືກຕ້ອງ ເຊິ່ງໝາຍຄວາມວ່າ " +"ພວກມັນສາມາດຖືກກຳນົດໄດ້ຄືກັນ." + +#: ../source/specifications/glob-patterns.rst:43 +msgid "Tools consuming glob patterns:" +msgstr "ເຄື່ອງມືທີ່ໃຊ້ຮູບແບບ glob:" + +#: ../source/specifications/glob-patterns.rst:45 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" +"ຕ້ອງຖືວ່າແຕ່ລະຄ່າເປັນຮູບແບບ glob, ແລະ ຕ້ອງແຈ້ງເຕືອນຂໍ້ຜິດພາດຖ້າຮູບແບບນັ້ນ ມີໄວຍາກອນ glob " +"ທີ່ບໍ່ຖືກຕ້ອງ." + +#: ../source/specifications/glob-patterns.rst:47 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "ຕ້ອງແຈ້ງເຕືອນຂໍ້ຜິດພາດ ຖ້າຮູບແບບໃດໜຶ່ງທີ່ຜູ້ໃຊ້ກຳນົດເອງ ບໍ່ກົງກັບໄຟລ໌ໃດເລີຍຢ່າງໜ້ອຍໜຶ່ງໄຟລ໌." + +#: ../source/specifications/glob-patterns.rst:50 +msgid "Examples of valid glob patterns:" +msgstr "ຕົວຢ່າງຂອງຮູບແບບ glob ທີ່ຖືກຕ້ອງ:" + +#: ../source/specifications/glob-patterns.rst:61 +msgid "Examples of invalid glob patterns:" +msgstr "ຕົວຢ່າງຂອງຮູບແບບ glob ທີ່ບໍ່ຖືກຕ້ອງ:" + +#: ../source/specifications/glob-patterns.rst:74 +msgid "Reference implementation in Python" +msgstr "ການນຳໃຊ້ຕົວຢ່າງໃນພາສາ Python" + +#: ../source/specifications/glob-patterns.rst:76 +msgid "" +"It is possible to defer the majority of the pattern matching against the " +"file system to the :mod:`glob` module in Python's standard library. It is " +"necessary however to perform additional validations." +msgstr "" +"ມັນເປັນໄປໄດ້ທີ່ຈະມອບໝາຍການຈັບຄູ່ຮູບແບບສ່ວນໃຫຍ່ກັບລະບົບໄຟລ໌ໃຫ້ກັບໂມດູນ :mod:`glob` " +"ໃນໄລບຣາຣີມາດຕະຖານຂອງ Python. ແນວໃດກໍຕາມ, ມັນຈຳເປັນຕ້ອງມີການກວດສອບ ເພີ່ມເຕີມ." + +#: ../source/specifications/glob-patterns.rst:80 +msgid "The code below is as a simple reference implementation:" +msgstr "ລະຫັດຂ້າງລຸ່ມນີ້ແມ່ນການນຳໃຊ້ຕົວຢ່າງແບບງ່າຍໆ:" + +#: ../source/specifications/glob-patterns.rst:120 +msgid "January 2025: Initial version" +msgstr "ມັງກອນ 2025: ເວີຊັນທຳອິດ" + +#: ../source/specifications/glob-patterns.rst:121 +msgid "March 2026: Treat spaces as a verbatim character" +msgstr "ມີນາ 2026: ຖືວ່າຊ່ອງຫວ່າງເປັນຕົວອັກສອນປົກກະຕິ" + +#: ../source/specifications/index.rst:4 +msgid "PyPA specifications" +msgstr "ຂໍ້ກຳນົດຂອງ PyPA" + +#: ../source/specifications/index.rst:6 +msgid "" +"This is a list of currently active interoperability specifications " +"maintained by the Python Packaging Authority. The process for updating these " +"standards, and for proposing new ones, is documented on `pypa.io `__." +msgstr "" +"ນີ້ແມ່ນລາຍຊື່ຂອງຂໍ້ກຳນົດການເຮັດວຽກຮ່ວມກັນທີ່ກຳລັງໃຊ້ງານຢູ່ ເຊິ່ງເບິ່ງແຍງໂດຍ Python Packaging " +"Authority. ຂະບວນການສຳລັບການອັບເດດມາດຕະຖານເຫຼົ່ານີ້, ແລະ ສຳລັບການສະເໜີອັນໃໝ່, " +"ແມ່ນມີບັນທຶກໄວ້ໃນ `pypa.io `__." + +#: ../source/specifications/index-hosted-attestations.rst:6 +msgid "Index hosted attestations" +msgstr "ການຢັ້ງຢືນທີ່ໂຮສໂດຍດັດຊະນີ (Index hosted attestations)" + +#: ../source/specifications/index-hosted-attestations.rst:8 +msgid "This specification was originally defined in :pep:`740`." +msgstr "ຂໍ້ກຳນົດນີ້ຖືກກຳນົດຂຶ້ນໃນເບື້ອງຕົ້ນໃນ :pep:`740`." + +#: ../source/specifications/index-hosted-attestations.rst:12 +msgid "" +":pep:`740` includes changes to the HTML and JSON index APIs. These changes " +"are documented in the :ref:`simple-repository-api` under :ref:`simple-" +"repository-api-base` and :ref:`json-serialization`." +msgstr "" +":pep:`740` ລວມມີການປ່ຽນແປງໃນ HTML ແລະ JSON index APIs. ການປ່ຽນແປງເຫຼົ່ານີ້ " +"ຖືກບັນທຶກໄວ້ໃນ :ref:`simple-repository-api` ພາຍໃຕ້ :ref:`simple-repository-api-" +"base` ແລະ :ref:`json-serialization`." + +#: ../source/specifications/index-hosted-attestations.rst:22 +msgid "Upload endpoint changes" +msgstr "ການປ່ຽນແປງ endpoint ສຳລັບການອັບໂຫລດ" + +#: ../source/specifications/index-hosted-attestations.rst:26 +msgid "" +"The \"legacy\" upload API is not standardized. See `PyPI's Upload API " +"documentation `_ for how attestations are " +"uploaded." +msgstr "" +"API ການອັບໂຫລດແບບ \"legacy\" ແມ່ນບໍ່ໄດ້ເປັນມາດຕະຖານ. ເບິ່ງ `ເອກະສານ Upload API ຂອງ " +"PyPI `_ ສຳລັບວິທີການອັບໂຫລດການຢັ້ງຢືນ " +"(attestations)." + +#: ../source/specifications/index-hosted-attestations.rst:33 +msgid "Attestation objects" +msgstr "ວັດຖຸການຢັ້ງຢືນ (Attestation objects)" + +#: ../source/specifications/index-hosted-attestations.rst:35 +msgid "" +"An attestation object is a JSON object with several required keys; " +"applications or signers may include additional keys so long as all " +"explicitly listed keys are provided. The required layout of an attestation " +"object is provided as pseudocode below." +msgstr "" +"ວັດຖຸການຢັ້ງຢືນແມ່ນວັດຖຸ JSON ທີ່ມີ keys ທີ່ຈຳເປັນຫຼາຍອັນ; ແອັບພລິເຄຊັນ ຫຼື ຜູ້ລົງນາມ ອາດຈະລວມເອົາ " +"keys ເພີ່ມເຕີມໄດ້ ຕາບໃດທີ່ keys ທີ່ລະບຸໄວ້ຢ່າງຊັດເຈນທັງໝົດນັ້ນ ຖືກສະໜອງໃຫ້. " +"ຮູບແບບທີ່ຈຳເປັນຂອງວັດຖຸການຢັ້ງຢືນແມ່ນມີໃຫ້ເປັນ pseudocode ຂ້າງລຸ່ມນີ້." + +#: ../source/specifications/index-hosted-attestations.rst:88 +msgid "" +"A full data model for each object in ``transparency_entries`` is provided " +"in :ref:`appendix`. Attestation objects **SHOULD** include one or more " +"transparency log entries, and **MAY** include additional keys for other " +"sources of signed time (such as an :rfc:`3161` Time Stamping Authority or a " +"`Roughtime `__ server)." +msgstr "" +"ແບບຈຳລອງຂໍ້ມູນຄົບຖ້ວນສຳລັບແຕ່ລະວັດຖຸໃນ ``transparency_entries`` " +"ແມ່ນມີໃຫ້ໃນ :ref:`appendix`. ວັດຖຸການຢັ້ງຢືນ **ຄວນ** ລວມເອົາ transparency log entries " +"ຢ່າງໜ້ອຍໜຶ່ງອັນ, ແລະ **ອາດຈະ** ລວມເອົາ keys ເພີ່ມເຕີມສຳລັບແຫຼ່ງທີ່ມາອື່ນໆ ຂອງເວລາທີ່ລົງນາມ " +"(ເຊັ່ນ :rfc:`3161` Time Stamping Authority ຫຼື ເຊີບເວີ `Roughtime `__)." + +#: ../source/specifications/index-hosted-attestations.rst:94 +msgid "" +"Attestation objects are versioned; this PEP specifies version 1. Each " +"version is tied to a single cryptographic suite to minimize unnecessary " +"cryptographic agility. In version 1, the suite is as follows:" +msgstr "" +"ວັດຖຸການຢັ້ງຢືນມີການກຳນົດເວີຊັນ; PEP ນີ້ກຳນົດໃຫ້ເປັນເວີຊັນ 1. ແຕ່ລະເວີຊັນ ຈະຖືກຜູກມັດກັບ " +"cryptographic suite ພຽງອັນດຽວເພື່ອຫຼຸດຜ່ອນ cryptographic agility ທີ່ບໍ່ຈຳເປັນ. ໃນເວີຊັນ " +"1, suite ມີດັ່ງນີ້:" + +#: ../source/specifications/index-hosted-attestations.rst:98 +msgid "" +"Certificates are specified as X.509 certificates, and comply with the " +"profile in :rfc:`5280`." +msgstr "" +"ໃບຢັ້ງຢືນ (Certificates) ຖືກກຳນົດເປັນໃບຢັ້ງຢືນ X.509, ແລະ ສອດຄ່ອງກັບ profile " +"ໃນ :rfc:`5280`." + +#: ../source/specifications/index-hosted-attestations.rst:100 +msgid "" +"The message signature algorithm is ECDSA, with the P-256 curve for public " +"keys and SHA-256 as the cryptographic digest function." +msgstr "" +"ອັນກໍຣິດທຶມການລົງນາມຂໍ້ຄວາມແມ່ນ ECDSA, ໂດຍໃຊ້ P-256 curve ສຳລັບ public keys ແລະ " +"SHA-256 ເປັນ cryptographic digest function." + +#: ../source/specifications/index-hosted-attestations.rst:103 +msgid "" +"Future PEPs may change this suite (and the overall shape of the attestation " +"object) by selecting a new version number." +msgstr "" +"PEPs ໃນອະນາຄົດອາດຈະປ່ຽນແປງ suite ນີ້ (ແລະ ຮູບຮ່າງໂດຍລວມຂອງວັດຖຸການຢັ້ງຢືນ) " +"ໂດຍການເລືອກໝາຍເລກເວີຊັນໃໝ່." + +#: ../source/specifications/index-hosted-attestations.rst:109 +msgid "Attestation statement and signature generation" +msgstr "ຖະແຫຼງການການຢັ້ງຢືນ ແລະ ການສ້າງລາຍເຊັນ" + +#: ../source/specifications/index-hosted-attestations.rst:111 +msgid "" +"The *attestation statement* is the actual claim that is cryptographically " +"signed over within the attestation object (i.e., the ``envelope.statement``)." +msgstr "" +"*ຖະແຫຼງການການຢັ້ງຢືນ* ແມ່ນການຢືນຢັນຕົວຈິງທີ່ຖືກລົງນາມທາງດ້ານ cryptography ພາຍໃນວັດຖຸການຢັ້ງຢືນ " +"(ຄື ``envelope.statement``)." + +#: ../source/specifications/index-hosted-attestations.rst:114 +msgid "" +"The attestation statement is encoded as a `v1 in-toto Statement object " +"`__, in JSON form. When serialized the statement is treated as " +"an opaque binary blob, avoiding the need for canonicalization." +msgstr "" +"ຖະແຫຼງການການຢັ້ງຢືນຖືກເຂົ້າລະຫັດເປັນ `v1 in-toto Statement object `__, ໃນຮູບແບບ JSON. " +"ເມື່ອເຮັດເປັນ serialization, ຖະແຫຼງການຈະຖືກປະຕິບັດຄືກັບ binary blob ທີ່ບໍ່ໂປ່ງໃສ (opaque " +"binary blob), ເພື່ອຫຼີກເວັ້ນຄວາມຈຳເປັນໃນການເຮັດ canonicalization." + +#: ../source/specifications/index-hosted-attestations.rst:119 +msgid "" +"In addition to being a v1 in-toto Statement, the attestation statement is " +"constrained in the following ways:" +msgstr "" +"ນອກຈາກການເປັນ v1 in-toto Statement ແລ້ວ, ຖະແຫຼງການການຢັ້ງຢືນຍັງຖືກ ຈຳກັດໃນລັກສະນະດັ່ງນີ້:" + +#: ../source/specifications/index-hosted-attestations.rst:122 +msgid "The in-toto ``subject`` **MUST** contain only a single subject." +msgstr "``subject`` ຂອງ in-toto **ຕ້ອງ** ມີພຽງແຕ່ subject ດຽວເທົ່ານັ້ນ." + +#: ../source/specifications/index-hosted-attestations.rst:123 +msgid "" +"``subject[0].name`` is the distribution's filename, which **MUST** be a " +"valid :ref:`source distribution ` or :ref:`wheel " +"distribution ` filename." +msgstr "" +"``subject[0].name`` ແມ່ນຊື່ໄຟລ໌ຂອງການແຈກຢາຍ, ເຊິ່ງ **ຕ້ອງ** ເປັນຊື່ໄຟລ໌ :ref:`source " +"distribution ` ຫຼື :ref:`wheel distribution " +"` ທີ່ຖືກຕ້ອງ." + +#: ../source/specifications/index-hosted-attestations.rst:126 +msgid "" +"``subject[0].digest`` **MUST** contain a SHA-256 digest. Other digests " +"**MAY** be present. The digests **MUST** be represented as hexadecimal " +"strings." +msgstr "" +"``subject[0].digest`` **ຕ້ອງ** ມີ SHA-256 digest. digest ອື່ນໆ **ອາດຈະ** ມີຢູ່ໄດ້. " +"digest ເຫຼົ່ານັ້ນ **ຕ້ອງ** ຖືກສະແດງເປັນຂໍ້ຄວາມເລກຖານສິບຫົກ (hexadecimal)." + +#: ../source/specifications/index-hosted-attestations.rst:128 +msgid "The following ``predicateType`` values are supported:" +msgstr "ຄ່າ ``predicateType`` ຕໍ່ໄປນີ້ແມ່ນໄດ້ຮັບການຮອງຮັບ:" + +#: ../source/specifications/index-hosted-attestations.rst:130 +msgid "" +"`SLSA Provenance `__: ``https://slsa.dev/" +"provenance/v1``" +msgstr "" +"`SLSA Provenance `__: ``https://slsa.dev/" +"provenance/v1``" + +#: ../source/specifications/index-hosted-attestations.rst:131 +msgid "" +"`PyPI Publish Attestation `__: ``https://docs.pypi.org/attestations/publish/v1``" +msgstr "" +"`PyPI Publish Attestation `__: ``https://docs.pypi.org/attestations/publish/v1``" + +#: ../source/specifications/index-hosted-attestations.rst:133 +msgid "" +"The signature over this statement is constructed using the `v1 DSSE " +"signature protocol `__, with a ``PAYLOAD_TYPE`` of ``application/vnd.in-toto+json`` " +"and a ``PAYLOAD_BODY`` of the JSON-encoded statement above. No other " +"``PAYLOAD_TYPE`` is permitted." +msgstr "" +"ລາຍເຊັນເທິງຖະແຫຼງການນີ້ຖືກສ້າງຂຶ້ນໂດຍໃຊ້ `v1 DSSE signature protocol `__, ໂດຍມີ " +"``PAYLOAD_TYPE`` ເປັນ ``application/vnd.in-toto+json`` ແລະ ``PAYLOAD_BODY`` " +"ເປັນຖະແຫຼງການທີ່ເຂົ້າລະຫັດ JSON ຂ້າງເທິງ. ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ ``PAYLOAD_TYPE`` ອື່ນໆ." + +#: ../source/specifications/index-hosted-attestations.rst:141 +msgid "Provenance objects" +msgstr "ວັດຖຸແຫຼ່ງທີ່ມາ (Provenance objects)" + +#: ../source/specifications/index-hosted-attestations.rst:143 +msgid "" +"The index will serve uploaded attestations along with metadata that can " +"assist in verifying them in the form of JSON serialized objects." +msgstr "" +"ດັດຊະນີຈະໃຫ້ບໍລິການການຢັ້ງຢືນທີ່ອັບໂຫລດມາ ພ້ອມກັບຂໍ້ມູນເມຕາທີ່ສາມາດຊ່ວຍໃນການກວດສອບ " +"ພວກມັນໃນຮູບແບບຂອງ JSON serialized objects." + +#: ../source/specifications/index-hosted-attestations.rst:146 +msgid "" +"These *provenance objects* will be available via both the Simple Index and " +"JSON-based Simple API as described above, and will have the following layout:" +msgstr "" +"*ວັດຖຸແຫຼ່ງທີ່ມາ* ເຫຼົ່ານີ້ຈະມີໃຫ້ຜ່ານທັງ Simple Index ແລະ JSON-based Simple API " +"ຕາມທີ່ອະທິບາຍໄວ້ຂ້າງເທິງ, ແລະ ຈະມີຮູບແບບດັ່ງນີ້:" + +#: ../source/specifications/index-hosted-attestations.rst:169 +msgid "or, as pseudocode:" +msgstr "ຫຼື, ໃນຮູບແບບ pseudocode:" + +#: ../source/specifications/index-hosted-attestations.rst:217 +msgid "" +"``version`` is ``1``. Like attestation objects, provenance objects are " +"versioned, and this PEP only defines version ``1``." +msgstr "" +"``version`` ແມ່ນ ``1``. ຄືກັນກັບວັດຖຸການຢັ້ງຢືນ, ວັດຖຸແຫຼ່ງທີ່ມາມີການກຳນົດເວີຊັນ, ແລະ PEP " +"ນີ້ກຳນົດສະເພາະເວີຊັນ ``1`` ເທົ່ານັ້ນ." + +#: ../source/specifications/index-hosted-attestations.rst:219 +msgid "" +"``attestation_bundles`` is a **required** JSON array, containing one or more " +"\"bundles\" of attestations. Each bundle corresponds to a signing identity " +"(such as a Trusted Publishing identity), and contains one or more " +"attestation objects." +msgstr "" +"``attestation_bundles`` ແມ່ນອາເຣ JSON ທີ່ **ຈຳເປັນ**, ເຊິ່ງປະກອບດ້ວຍ \"bundles\" " +"ຂອງການຢັ້ງຢືນຢ່າງໜ້ອຍໜຶ່ງອັນ. ແຕ່ລະ bundle ຈະກົງກັບ ຕົວຕົນການລົງນາມ (signing identity) " +"(ເຊັ່ນ Trusted Publishing identity), ແລະ ປະກອບດ້ວຍວັດຖຸການຢັ້ງຢືນຢ່າງໜ້ອຍໜຶ່ງອັນ." + +#: ../source/specifications/index-hosted-attestations.rst:224 +msgid "" +"As noted in the ``Publisher`` model, each ``AttestationBundle.publisher`` " +"object is specific to its Trusted Publisher but must include at minimum:" +msgstr "" +"ຕາມທີ່ລະບຸໄວ້ໃນແບບຈຳລອງ ``Publisher``, ແຕ່ລະວັດຖຸ ``AttestationBundle.publisher`` " +"ຈະສະເພາະເຈາະຈົງກັບ Trusted Publisher ຂອງມັນ ແຕ່ຕ້ອງລວມມີຢ່າງໜ້ອຍ:" + +#: ../source/specifications/index-hosted-attestations.rst:228 +msgid "" +"A ``kind`` key, which **MUST** be a JSON string that uniquely identifies the " +"kind of Trusted Publisher." +msgstr "" +"key ``kind``, ເຊິ່ງ **ຕ້ອງ** ເປັນຂໍ້ຄວາມ JSON ທີ່ລະບຸປະເພດຂອງ Trusted Publisher " +"ໂດຍບໍ່ຊໍ້າກັນ." + +#: ../source/specifications/index-hosted-attestations.rst:230 +msgid "" +"A ``claims`` key, which **MUST** be a JSON object containing any context-" +"specific claims retained by the index during Trusted Publisher " +"authentication." +msgstr "" +"key ``claims``, ເຊິ່ງ **ຕ້ອງ** ເປັນວັດຖຸ JSON ທີ່ປະກອບດ້ວຍການຢືນຢັນສິດ (claims) " +"ທີ່ສະເພາະກັບບໍລິບົດ ເຊິ່ງຖືກເກັບໄວ້ໂດຍດັດຊະນີໃນລະຫວ່າງການກວດສອບ Trusted Publisher." + +#: ../source/specifications/index-hosted-attestations.rst:233 +msgid "All other keys in the publisher object are publisher-specific." +msgstr "ຄີອື່ນໆທັງໝົດໃນອອບເຈັກ publisher ແມ່ນຂຶ້ນກັບ publisher ສະເພາະ." + +#: ../source/specifications/index-hosted-attestations.rst:235 +msgid "" +"Each array of attestation objects is a superset of the ``attestations`` " +"array supplied by the uploaded through the ``attestations`` field at upload " +"time, as described in :ref:`upload-endpoint` and :ref:`changes-to-provenance-" +"objects`." +msgstr "" +"ແຕ່ລະອາເຣຂອງວັດຖຸການຢັ້ງຢືນແມ່ນ superset ຂອງອາເຣ ``attestations`` " +"ທີ່ສະໜອງໂດຍຜູ້ອັບໂຫລດຜ່ານຟີວ ``attestations`` ໃນເວລາອັບໂຫລດ, " +"ຕາມທີ່ອະທິບາຍໄວ້ໃນ :ref:`upload-endpoint` ແລະ :ref:`changes-to-provenance-" +"objects`." + +#: ../source/specifications/index-hosted-attestations.rst:243 +msgid "Changes to provenance objects" +msgstr "ການປ່ຽນແປງຂອງວັດຖຸແຫຼ່ງທີ່ມາ" + +#: ../source/specifications/index-hosted-attestations.rst:245 +msgid "" +"Provenance objects are *not* immutable, and may change over time. Reasons " +"for changes to the provenance object include but are not limited to:" +msgstr "" +"ວັດຖຸແຫຼ່ງທີ່ມາ *ບໍ່ແມ່ນ* ສິ່ງທີ່ປ່ຽນແປງບໍ່ໄດ້, ແລະ ອາດຈະປ່ຽນແປງຕາມເວລາ. " +"ເຫດຜົນສຳລັບການປ່ຽນແປງວັດຖຸແຫຼ່ງທີ່ມາລວມມີ ແຕ່ບໍ່ຈຳກັດພຽງແຕ່:" + +#: ../source/specifications/index-hosted-attestations.rst:248 +msgid "" +"Addition of new attestations for a pre-existing signing identity: the index " +"**MAY** choose to allow additional attestations by pre-existing signing " +"identities, such as newer attestation versions for already uploaded files." +msgstr "" +"ການເພີ່ມການຢັ້ງຢືນໃໝ່ສຳລັບຕົວຕົນການລົງນາມທີ່ມີຢູ່ແລ້ວ: ດັດຊະນີ **ອາດຈະ** " +"ເລືອກທີ່ຈະອະນຸຍາດໃຫ້ມີການຢັ້ງຢືນເພີ່ມເຕີມໂດຍຕົວຕົນການລົງນາມທີ່ມີຢູ່ແລ້ວ, ເຊັ່ນ " +"ເວີຊັນການຢັ້ງຢືນທີ່ໃໝ່ກວ່າສຳລັບໄຟລ໌ທີ່ຖືກອັບໂຫລດໄປແລ້ວ." + +#: ../source/specifications/index-hosted-attestations.rst:253 +msgid "" +"Addition of new signing identities and associated attestations: the index " +"**MAY** choose to support attestations from sources other than the file's " +"uploader, such as third-party auditors or the index itself. These " +"attestations may be performed asynchronously, requiring the index to insert " +"them into the provenance object *post facto*." +msgstr "" +"ການເພີ່ມຕົວຕົນການລົງນາມໃໝ່ ແລະ ການຢັ້ງຢືນທີ່ກ່ຽວຂ້ອງ: ດັດຊະນີ **ອາດຈະ** " +"ເລືອກທີ່ຈະຮອງຮັບການຢັ້ງຢືນຈາກແຫຼ່ງອື່ນໆນອກເໜືອຈາກຜູ້ອັບໂຫລດໄຟລ໌, ເຊັ່ນ ຜູ້ກວດສອບພາຍນອກ (third-" +"party auditors) ຫຼື ຕົວດັດຊະນີເອງ. ການຢັ້ງຢືນເຫຼົ່ານີ້ອາດຈະຖືກເຮັດແບບ asynchronous, " +"ເຊິ່ງເຮັດໃຫ້ດັດຊະນີຕ້ອງ ແຊກພວກມັນເຂົ້າໃນວັດຖຸແຫຼ່ງທີ່ມາໃນພາຍຫຼັງ (post facto)." + +#: ../source/specifications/index-hosted-attestations.rst:262 +msgid "Attestation verification" +msgstr "ການກວດສອບການຢັ້ງຢືນ" + +#: ../source/specifications/index-hosted-attestations.rst:264 +msgid "" +"Verifying an attestation object against a distribution file requires " +"verification of each of the following:" +msgstr "ການກວດສອບວັດຖຸການຢັ້ງຢືນກັບໄຟລ໌ການແຈກຢາຍ ຕ້ອງມີການກວດສອບແຕ່ລະຢ່າງຕໍ່ໄປນີ້:" + +#: ../source/specifications/index-hosted-attestations.rst:267 +msgid "``version`` is ``1``. The verifier **MUST** reject any other version." +msgstr "``version`` ແມ່ນ ``1``. ຜູ້ກວດສອບ **ຕ້ອງ** ປະຕິເສດເວີຊັນອື່ນໆ." + +#: ../source/specifications/index-hosted-attestations.rst:268 +msgid "" +"``verification_material.certificate`` is a valid signing certificate, as " +"issued by an *a priori* trusted authority (such as a root of trust already " +"present within the verifying client)." +msgstr "" +"``verification_material.certificate`` ແມ່ນໃບຢັ້ງຢືນການລົງນາມທີ່ຖືກຕ້ອງ, " +"ທີ່ອອກໂດຍໜ່ວຍງານທີ່ໄດ້ຮັບຄວາມເຊື່ອຖື (ເຊັ່ນ root of trust ທີ່ມີຢູ່ແລ້ວໃນຝັ່ງຜູ້ກວດສອບ)." + +#: ../source/specifications/index-hosted-attestations.rst:271 +msgid "" +"``verification_material.certificate`` identifies an appropriate signing " +"subject, such as the machine identity of the Trusted Publisher that " +"published the package." +msgstr "" +"``verification_material.certificate`` ລະບຸ subject ການລົງນາມທີ່ເໝາະສົມ, ເຊັ່ນ " +"ຕົວຕົນຂອງເຄື່ອງຈັກ (machine identity) ຂອງ Trusted Publisher ທີ່ເຜີຍແຜ່ແພັກເກດ." + +#: ../source/specifications/index-hosted-attestations.rst:274 +msgid "" +"``envelope.statement`` is a valid in-toto v1 Statement, with a subject and " +"digest that **MUST** match the distribution's filename and contents. For the " +"distribution's filename, matching **MUST** be performed by parsing using the " +"appropriate source distribution or wheel filename format, as the statement's " +"subject may be equivalent but normalized." +msgstr "" +"``envelope.statement`` ແມ່ນ in-toto v1 Statement ທີ່ຖືກຕ້ອງ, ເຊິ່ງມີ subject ແລະ " +"digest ທີ່ **ຕ້ອງ** ກົງກັບຊື່ໄຟລ໌ ແລະ ເນື້ອໃນຂອງການແຈກຢາຍ. ສຳລັບຊື່ໄຟລ໌ຂອງການແຈກຢາຍ, " +"ການຈັບຄູ່ **ຕ້ອງ** ເຮັດໂດຍການ parse ໂດຍໃຊ້ຮູບແບບຊື່ໄຟລ໌ source distribution ຫຼື wheel " +"ທີ່ເໝາະສົມ, ເນື່ອງຈາກ subject ຂອງຖະແຫຼງການອາດຈະທຽບເທົ່າກັນແຕ່ຖືກເຮັດໃຫ້ເປັນ normalization." + +#: ../source/specifications/index-hosted-attestations.rst:279 +msgid "" +"``envelope.signature`` is a valid signature for ``envelope.statement`` " +"corresponding to ``verification_material.certificate``, as reconstituted via " +"the `v1 DSSE signature protocol `__." +msgstr "" +"``envelope.signature`` ແມ່ນລາຍເຊັນທີ່ຖືກຕ້ອງສຳລັບ ``envelope.statement`` ທີ່ກົງກັບ " +"``verification_material.certificate``, ຕາມທີ່ຖືກສ້າງຂຶ້ນໃໝ່ຜ່ານ `v1 DSSE signature " +"protocol `__." + +#: ../source/specifications/index-hosted-attestations.rst:284 +msgid "" +"In addition to the above required steps, a verifier **MAY** additionally " +"verify ``verification_material.transparency_entries`` on a policy basis, " +"e.g. requiring at least one transparency log entry or a threshold of " +"entries. When verifying transparency entries, the verifier **MUST** confirm " +"that the inclusion time for each entry lies within the signing certificate's " +"validity period." +msgstr "" +"ນອກຈາກຂັ້ນຕອນທີ່ຈຳເປັນຂ້າງເທິງແລ້ວ, ຜູ້ກວດສອບ **ອາດຈະ** ກວດສອບ " +"``verification_material.transparency_entries`` ເພີ່ມເຕີມຕາມນະໂຍບາຍ, ຕົວຢ່າງ: " +"ຕ້ອງການ transparency log entry ຢ່າງໜ້ອຍໜຶ່ງອັນ ຫຼື ຕາມຈຳນວນທີ່ກຳນົດ. ເມື່ອກວດສອບ " +"transparency entries, ຜູ້ກວດສອບ **ຕ້ອງ** ຢືນຢັນວ່າ ເວລາການບັນທຶກ (inclusion time) " +"ສຳລັບແຕ່ລະລາຍການ ຢູ່ໃນໄລຍະເວລາ ການໃຊ້ງານຂອງໃບຢັ້ງຢືນການລົງນາມ." + +#: ../source/specifications/index-hosted-attestations.rst:293 +msgid "Appendix: Data models for Transparency Log Entries" +msgstr "ເອກະສານຊ້ອນທ້າຍ: ແບບຈຳລອງຂໍ້ມູນສຳລັບ Transparency Log Entries" + +#: ../source/specifications/index-hosted-attestations.rst:295 +msgid "" +"This appendix contains pseudocoded data models for transparency log entries " +"in attestation objects. Each transparency log entry serves as a source of " +"signed inclusion time, and can be verified either online or offline." +msgstr "" +"ເອກະສານຊ້ອນທ້າຍນີ້ປະກອບດ້ວຍແບບຈຳລອງຂໍ້ມູນແບບ pseudocode ສຳລັບ transparency log " +"entries ໃນວັດຖຸການຢັ້ງຢືນ. ແຕ່ລະ transparency log entry ເຮັດໜ້າທີ່ເປັນແຫຼ່ງຂອງ " +"ເວລາການບັນທຶກທີ່ຖືກລົງນາມ, ແລະ ສາມາດກວດສອບໄດ້ທັງແບບ online ຫຼື offline." + +#: ../source/specifications/inline-script-metadata.rst:5 +msgid "Inline script metadata" +msgstr "ຂໍ້ມູນເມຕາຂອງສະຄຣິບພາຍໃນ (Inline script metadata)" + +#: ../source/specifications/inline-script-metadata.rst:7 +msgid "" +"This specification defines a metadata format that can be embedded in single-" +"file Python scripts to assist launchers, IDEs and other external tools which " +"may need to interact with such scripts." +msgstr "" +"ຂໍ້ກຳນົດນີ້ກຳນົດຮູບແບບຂໍ້ມູນເມຕາທີ່ສາມາດຝັງໄວ້ໃນສະຄຣິບ Python ໄຟລ໌ດຽວ ເພື່ອຊ່ວຍ launchers, IDEs " +"ແລະ ເຄື່ອງມືພາຍນອກອື່ນໆ ທີ່ອາດຈະຈຳເປັນຕ້ອງ ໂຕ້ຕອບກັບສະຄຣິບດັ່ງກ່າວ." + +#: ../source/specifications/inline-script-metadata.rst:15 +msgid "" +"This specification defines a metadata comment block format (loosely inspired " +"by `reStructuredText Directives`__)." +msgstr "" +"ຂໍ້ກຳນົດນີ້ກຳນົດຮູບແບບບລັອກຄຳເຫັນຂອງຂໍ້ມູນເມຕາ (ໂດຍໄດ້ຮັບແຮງບັນດານໃຈຈາກ `reStructuredText " +"Directives`__)." + +#: ../source/specifications/inline-script-metadata.rst:20 +msgid "" +"Any Python script may have top-level comment blocks that MUST start with the " +"line ``# /// TYPE`` where ``TYPE`` determines how to process the content. " +"That is: a single ``#``, followed by a single space, followed by three " +"forward slashes, followed by a single space, followed by the type of " +"metadata. Block MUST end with the line ``# ///``. That is: a single ``#``, " +"followed by a single space, followed by three forward slashes. The ``TYPE`` " +"MUST only consist of ASCII letters, numbers and hyphens." +msgstr "" +"ສະຄຣິບ Python ໃດໆກໍຕາມອາດຈະມີບລັອກຄຳເຫັນໃນລະດັບສູງສຸດ (top-level) ເຊິ່ງ **ຕ້ອງ** " +"ຂຶ້ນຕົ້ນດ້ວຍແຖວ ``# /// TYPE`` ໂດຍທີ່ ``TYPE`` ຈະເປັນ ຕົວຕັດສິນວ່າຈະປະມວນຜົນເນື້ອໃນແນວໃດ. " +"ນັ້ນຄື: ເຄື່ອງໝາຍ ``#`` ອັນດຽວ, ຕາມດ້ວຍຊ່ອງຫວ່າງອັນດຽວ, ຕາມດ້ວຍເຄື່ອງໝາຍທັບສາມອັນ, " +"ຕາມດ້ວຍຊ່ອງຫວ່າງ ອັນດຽວ, ຕາມດ້ວຍປະເພດຂອງຂໍ້ມູນເມຕາ. ບລັອກ **ຕ້ອງ** ລົງທ້າຍດ້ວຍແຖວ ``# ///" +"``. ນັ້ນຄື: ເຄື່ອງໝາຍ ``#`` ອັນດຽວ, ຕາມດ້ວຍຊ່ອງຫວ່າງອັນດຽວ, ຕາມດ້ວຍເຄື່ອງໝາຍທັບ ສາມອັນ. " +"``TYPE`` **ຕ້ອງ** ປະກອບດ້ວຍສະເພາະຕົວອັກສອນ ASCII, ຕົວເລກ ແລະ ຂີດຕໍ່ເທົ່ານັ້ນ." + +#: ../source/specifications/inline-script-metadata.rst:28 +msgid "" +"Every line between these two lines (``# /// TYPE`` and ``# ///``) MUST be a " +"comment starting with ``#``. If there are characters after the ``#`` then " +"the first character MUST be a space. The embedded content is formed by " +"taking away the first two characters of each line if the second character is " +"a space, otherwise just the first character (which means the line consists " +"of only a single ``#``)." +msgstr "" +"ທຸກໆແຖວລະຫວ່າງສອງແຖວນີ້ (``# /// TYPE`` ແລະ ``# ///``) **ຕ້ອງ** ເປັນຄຳເຫັນ ທີ່ຂຶ້ນຕົ້ນດ້ວຍ " +"``#``. ຖ້າມີຕົວອັກສອນຫຼັງ ``#``, ຕົວອັກສອນທຳອິດ **ຕ້ອງ** ເປັນຊ່ອງຫວ່າງ. " +"ເນື້ອໃນທີ່ຝັງຢູ່ຈະຖືກສ້າງຂຶ້ນໂດຍການຕັດສອງຕົວອັກສອນທຳອິດຂອງແຕ່ລະແຖວອອກ " +"ຖ້າຕົວອັກສອນທີສອງເປັນຊ່ອງຫວ່າງ, ຖ້າບໍ່ດັ່ງນັ້ນກໍຕັດພຽງແຕ່ຕົວອັກສອນທຳອິດ (ເຊິ່ງໝາຍຄວາມວ່າແຖວນັ້ນມີພຽງແຕ່ " +"``#`` ອັນດຽວ)." + +#: ../source/specifications/inline-script-metadata.rst:35 +msgid "" +"Precedence for an ending line ``# ///`` is given when the next line is not a " +"valid embedded content line as described above. For example, the following " +"is a single fully valid block:" +msgstr "" +"ລຳດັບຄວາມສຳຄັນຂອງແຖວປິດ ``# ///`` ຈະຖືກກຳນົດເມື່ອແຖວຖັດໄປບໍ່ແມ່ນແຖວເນື້ອໃນ " +"ທີ່ຝັງໄວ້ທີ່ຖືກຕ້ອງຕາມທີ່ອະທິບາຍໄວ້ຂ້າງເທິງ. ຕົວຢ່າງ, ຕໍ່ໄປນີ້ແມ່ນບລັອກ ທີ່ຖືກຕ້ອງຄົບຖ້ວນອັນດຽວ:" + +#: ../source/specifications/inline-script-metadata.rst:51 +msgid "" +"A starting line MUST NOT be placed between another starting line and its " +"ending line. In such cases tools MAY produce an error. Unclosed blocks MUST " +"be ignored." +msgstr "" +"ແຖວເລີ່ມຕົ້ນ **ຕ້ອງບໍ່** ຖືກວາງໄວ້ລະຫວ່າງແຖວເລີ່ມຕົ້ນອື່ນ ແລະ ແຖວປິດຂອງມັນ. ໃນກໍລະນີດັ່ງກ່າວ ເຄື່ອງມື " +"**ອາດຈະ** ແຈ້ງຂໍ້ຜິດພາດ. ບລັອກທີ່ບໍ່ມີແຖວປິດ **ຕ້ອງ** ຖືກລະເລີຍ." + +#: ../source/specifications/inline-script-metadata.rst:54 +msgid "" +"When there are multiple comment blocks of the same ``TYPE`` defined, tools " +"MUST produce an error." +msgstr "ເມື່ອມີບລັອກຄຳເຫັນທີ່ມີ ``TYPE`` ດຽວກັນຫຼາຍບລັອກ, ເຄື່ອງມື **ຕ້ອງ** ແຈ້ງຂໍ້ຜິດພາດ." + +#: ../source/specifications/inline-script-metadata.rst:57 +msgid "" +"Tools reading embedded metadata MAY respect the standard Python encoding " +"declaration. If they choose not to do so, they MUST process the file as " +"UTF-8." +msgstr "" +"ເຄື່ອງມືທີ່ອ່ານຂໍ້ມູນເມຕາທີ່ຝັງຢູ່ **ອາດຈະ** ປະຕິບັດຕາມການປະກາດການເຂົ້າລະຫັດ Python ມາດຕະຖານ. " +"ຖ້າພວກເຂົາເລືອກທີ່ຈະບໍ່ເຮັດແນວນັ້ນ, ພວກເຂົາ **ຕ້ອງ** ປະມວນຜົນໄຟລ໌ ເປັນ UTF-8." + +#: ../source/specifications/inline-script-metadata.rst:60 +msgid "" +"This is the canonical regular expression that MAY be used to parse the " +"metadata:" +msgstr "ນີ້ແມ່ນ regular expression ມາດຕະຖານທີ່ **ອາດຈະ** ຖືກໃຊ້ເພື່ອ parse ຂໍ້ມູນເມຕາ:" + +#: ../source/specifications/inline-script-metadata.rst:67 +msgid "" +"In circumstances where there is a discrepancy between the text specification " +"and the regular expression, the text specification takes precedence." +msgstr "" +"ໃນສະຖານະການທີ່ມີຄວາມແຕກຕ່າງລະຫວ່າງຂໍ້ກຳນົດແບບຂໍ້ຄວາມ ແລະ regular expression, " +"ຂໍ້ກຳນົດແບບຂໍ້ຄວາມຈະມີຄວາມສຳຄັນກວ່າ." + +#: ../source/specifications/inline-script-metadata.rst:70 +msgid "" +"Tools MUST NOT read from metadata blocks with types that have not been " +"standardized by this specification." +msgstr "" +"ເຄື່ອງມື **ຕ້ອງບໍ່** ອ່ານຈາກບລັອກຂໍ້ມູນເມຕາທີ່ມີປະເພດທີ່ບໍ່ໄດ້ຖືກ ເຮັດໃຫ້ເປັນມາດຕະຖານໂດຍຂໍ້ກຳນົດນີ້." + +#: ../source/specifications/inline-script-metadata.rst:73 +msgid "" +"Note that the specification only requires that *top-level* comment blocks " +"are recognised as containing metadata. However, parsing Python code is non-" +"trivial, and therefore:" +msgstr "" +"ໝາຍເຫດວ່າຂໍ້ກຳນົດນີ້ພຽງແຕ່ຕ້ອງການໃຫ້ບລັອກຄຳເຫັນ *ລະດັບສູງສຸດ (top-level)* " +"ຖືກຮັບຮູ້ວ່າເປັນຂໍ້ມູນເມຕາ. ແນວໃດກໍຕາມ, ການ parse ລະຫັດ Python ແມ່ນບໍ່ແມ່ນເລື່ອງງ່າຍ, ແລະ ດັ່ງນັ້ນ:" + +#: ../source/specifications/inline-script-metadata.rst:77 +msgid "" +"Tools MAY choose to do a simple textual scan, rather than a full Python " +"parse." +msgstr "" +"ເຄື່ອງມື **ອາດຈະ** ເລືອກທີ່ຈະເຮັດການສະແກນຂໍ້ຄວາມແບບງ່າຍໆ, ແທນທີ່ຈະ parse Python ເຕັມຮູບແບບ." + +#: ../source/specifications/inline-script-metadata.rst:78 +msgid "" +"As a result of the previous point, the behaviour of scripts that contain " +"data that looks like metadata within another Python construct such as a " +"multi-line string is tool-dependent and should not be relied on." +msgstr "" +"ຜົນຈາກຂໍ້ຂ້າງເທິງ, ພຶດຕິກຳຂອງສະຄຣິບທີ່ມີຂໍ້ມູນທີ່ເບິ່ງຄືຂໍ້ມູນເມຕາ ຢູ່ພາຍໃນໂຄງສ້າງ Python ອື່ນໆ ເຊັ່ນ " +"multi-line string ແມ່ນຂຶ້ນກັບເຄື່ອງມື ແລະ ບໍ່ຄວນເຊື່ອຖືໄດ້ຢ່າງແນ່ນອນ." + +#: ../source/specifications/inline-script-metadata.rst:81 +msgid "" +"The canonical regular expression provided above is an example of an " +"implementation that does a simple textual scan." +msgstr "ເຣັກກູລາເອັກສ໌ເພຣັດຊັນມາດຕະຖານທີ່ໃຫ້ໄວ້ຂ້າງເທິງນັ້ນແມ່ນຕົວຢ່າງຂອງການເຮັດວຽກທີ່ທຳການສະແກນຂໍ້ຄວາມແບບງ່າຍໆ." + +#: ../source/specifications/inline-script-metadata.rst:85 +msgid "script type" +msgstr "ປະເພດ script" + +#: ../source/specifications/inline-script-metadata.rst:87 +msgid "" +"The first type of metadata block is named ``script``, which contains script " +"metadata (dependency data and tool configuration)." +msgstr "" +"ບລັອກຂໍ້ມູນເມຕາປະເພດທຳອິດມີຊື່ວ່າ ``script``, ເຊິ່ງປະກອບດ້ວຍຂໍ້ມູນເມຕາຂອງສະຄຣິບ (ຂໍ້ມູນ " +"dependency ແລະ ການຕັ້ງຄ່າເຄື່ອງມື)." + +#: ../source/specifications/inline-script-metadata.rst:90 +msgid "" +"This document MAY include the top-level fields ``dependencies`` and " +"``requires-python``, and MAY optionally include a ``[tool]`` table." +msgstr "" +"ເອກະສານນີ້ **ອາດຈະ** ລວມເອົາຟີວລະດັບສູງສຸດ ``dependencies`` ແລະ ``requires-" +"python``, ແລະ **ອາດຈະ** ລວມເອົາຕາຕະລາງ ``[tool]`` ເປັນທາງເລືອກ." + +#: ../source/specifications/inline-script-metadata.rst:93 +msgid "" +"The ``[tool]`` table MAY be used by any tool, script runner or otherwise, to " +"configure behavior. It has the same semantics as the :ref:`[tool] table in " +"pyproject.toml `." +msgstr "" +"ຕາຕະລາງ ``[tool]`` **ອາດຈະ** ຖືກໃຊ້ໂດຍເຄື່ອງມືໃດໆກໍຕາມ, ຕົວລັນສະຄຣິບ ຫຼື ອື່ນໆ, " +"ເພື່ອຕັ້ງຄ່າພຶດຕິກຳ. ມັນມີຄວາມໝາຍຄືກັນກັບ :ref:`[tool] table in pyproject.toml " +"`." + +#: ../source/specifications/inline-script-metadata.rst:97 +msgid "The top-level fields are:" +msgstr "ຟີວລະດັບສູງສຸດຄື:" + +#: ../source/specifications/inline-script-metadata.rst:99 +msgid "" +"``dependencies``: A list of strings that specifies the runtime dependencies " +"of the script. Each entry MUST be a valid :ref:`dependency specifier " +"`." +msgstr "" +"``dependencies``: ລາຍຊື່ຂອງຂໍ້ຄວາມທີ່ລະບຸ dependencies ໃນເວລາເຮັດວຽກຂອງສະຄຣິບ. " +"ແຕ່ລະລາຍການ **ຕ້ອງ** ເປັນ :ref:`dependency specifier ` " +"ທີ່ຖືກຕ້ອງ." + +#: ../source/specifications/inline-script-metadata.rst:102 +msgid "" +"``requires-python``: A string that specifies the Python version(s) with " +"which the script is compatible. The value of this field MUST be a " +"valid :ref:`version specifier `." +msgstr "" +"``requires-python``: ຂໍ້ຄວາມທີ່ລະບຸເວີຊັນຂອງ Python ທີ່ສະຄຣິບຮອງຮັບ. ຄ່າຂອງຟີວນີ້ **ຕ້ອງ** " +"ເປັນ :ref:`version specifier ` ທີ່ຖືກຕ້ອງ." + +#: ../source/specifications/inline-script-metadata.rst:106 +msgid "" +"Script runners MUST error if the specified ``dependencies`` cannot be " +"provided. Script runners SHOULD error if no version of Python that satisfies " +"the specified ``requires-python`` can be provided." +msgstr "" +"ຕົວລັນສະຄຣິບ **ຕ້ອງ** ແຈ້ງຂໍ້ຜິດພາດ ຖ້າບໍ່ສາມາດສະໜອງ ``dependencies`` ທີ່ລະບຸໄວ້ໄດ້. " +"ຕົວລັນສະຄຣິບ **ຄວນ** ແຈ້ງຂໍ້ຜິດພາດ ຖ້າບໍ່ມີເວີຊັນຂອງ Python ທີ່ກົງກັບ ``requires-python`` " +"ທີ່ລະບຸໄວ້." + +#: ../source/specifications/inline-script-metadata.rst:113 +msgid "The following is an example of a script with embedded metadata:" +msgstr "ຕໍ່ໄປນີ້ແມ່ນຕົວຢ່າງຂອງສະຄຣິບທີ່ມີຂໍ້ມູນເມຕາຝັງຢູ່:" + +#: ../source/specifications/inline-script-metadata.rst:136 +msgid "" +"The following is an example of how to read the metadata on Python 3.11 or " +"higher." +msgstr "ຕໍ່ໄປນີ້ແມ່ນຕົວຢ່າງວິທີການອ່ານຂໍ້ມູນເມຕາໃນ Python 3.11 ຫຼື ສູງກວ່າ." + +#: ../source/specifications/inline-script-metadata.rst:162 +msgid "" +"Often tools will edit dependencies like package managers or dependency " +"update automation in CI. The following is a crude example of modifying the " +"content using the ``tomlkit`` library__." +msgstr "" +"ເລື້ອຍໆທີ່ເຄື່ອງມືຈະແກ້ໄຂ dependencies ເຊັ່ນ ຕົວຈັດການແພັກເກດ ຫຼື ລະບົບອັດຕະໂນມັດ ໃນການອັບເດດ " +"dependency ໃນ CI. ຕໍ່ໄປນີ້ແມ່ນຕົວຢ່າງຄ່າວໆໃນການແກ້ໄຂເນື້ອໃນ ໂດຍໃຊ້ໄລບຣາຣີ ``tomlkit``__." + +#: ../source/specifications/inline-script-metadata.rst:193 +msgid "" +"Note that this example used a library that preserves TOML formatting. This " +"is not a requirement for editing by any means but rather is a \"nice to " +"have\" feature." +msgstr "" +"ໝາຍເຫດວ່າຕົວຢ່າງນີ້ໃຊ້ໄລບຣາຣີທີ່ຮັກສາຮູບແບບຂອງ TOML ໄວ້. ນີ້ບໍ່ແມ່ນຂໍ້ກຳນົດ ໃນການແກ້ໄຂ " +"ແຕ່ເປັນຄຸນສົມບັດທີ່ \"ດີທີ່ມີໄວ້\"." + +#: ../source/specifications/inline-script-metadata.rst:197 +msgid "" +"The following is an example of how to read a stream of arbitrary metadata " +"blocks." +msgstr "ຕໍ່ໄປນີ້ແມ່ນຕົວຢ່າງວິທີການອ່ານສະຕຣີມຂອງບລັອກຂໍ້ມູນເມຕາໃດໆ." + +#: ../source/specifications/inline-script-metadata.rst:216 +#: ../source/specifications/simple-repository-api.rst:925 +msgid "Recommendations" +msgstr "ຄຳແນະນຳ" + +#: ../source/specifications/inline-script-metadata.rst:218 +msgid "" +"Tools that support managing different versions of Python should attempt to " +"use the highest available version of Python that is compatible with the " +"script's ``requires-python`` metadata, if defined." +msgstr "" +"ເຄື່ອງມືທີ່ຮອງຮັບການຈັດການ Python ຫຼາຍເວີຊັນ ຄວນພະຍາຍາມໃຊ້ Python ເວີຊັນສູງສຸດ " +"ທີ່ມີຢູ່ທີ່ເຂົ້າກັນໄດ້ກັບຂໍ້ມູນເມຕາ ``requires-python`` ຂອງສະຄຣິບ, ຖ້າມີການກຳນົດໄວ້." + +#: ../source/specifications/inline-script-metadata.rst:226 +msgid "" +"October 2023: This specification was conditionally approved " +"through :pep:`723`." +msgstr "ຕຸລາ 2023: ຂໍ້ກຳນົດນີ້ໄດ້ຮັບການອະນຸມັດແບບມີເງື່ອນໄຂຜ່ານ :pep:`723`." + +#: ../source/specifications/inline-script-metadata.rst:227 +msgid "" +"January 2024: Through amendments to :pep:`723`, the ``pyproject`` metadata " +"block type was renamed to ``script``, and the ``[run]`` table was dropped, " +"making the ``dependencies`` and ``requires-python`` keys top-level. " +"Additionally, the specification is no longer provisional." +msgstr "" +"ມັງກອນ 2024: ໂດຍຜ່ານການແກ້ໄຂ :pep:`723`, ປະເພດບລັອກຂໍ້ມູນເມຕາ ``pyproject`` " +"ຖືກປ່ຽນຊື່ເປັນ ``script``, ແລະ ຕາຕະລາງ ``[run]`` ຖືກຕັດອອກ, ເຮັດໃຫ້ keys " +"``dependencies`` ແລະ ``requires-python`` ກາຍເປັນລະດັບສູງສຸດ. ນອກນັ້ນ, " +"ຂໍ້ກຳນົດນີ້ບໍ່ໄດ້ຢູ່ໃນສະຖານະຊົ່ວຄາວ (provisional) ອີກຕໍ່ໄປ." + +#: ../source/specifications/license-expression.rst:5 +msgid "" +":pep:`639` defined a new :ref:`pyproject.toml's license ` value and added a corresponding :ref:`core metadata License-" +"Expression field `. This specification " +"defines which license expressions are acceptable." +msgstr "" +":pep:`639` ໄດ້ກຳນົດຄ່າ :ref:`pyproject.toml's license ` " +"ໃໝ່ ແລະ ເພີ່ມຟີວ :ref:`core metadata License-Expression ` ທີ່ກ່ຽວຂ້ອງ. ຂໍ້ກຳນົດນີ້ກຳນົດວ່າ license expressions ໃດແດ່ທີ່ຍອມຮັບໄດ້." + +#: ../source/specifications/license-expression.rst:14 +msgid "" +"License can be defined as a text string that is a valid SPDX :term:`license " +"expression `, as documented in the `SPDX specification " +"`__, either Version 2.2 or a later compatible version." +msgstr "" +"License ສາມາດຖືກກຳນົດເປັນຂໍ້ຄວາມທີ່ເປັນ SPDX :term:`license expression ` ທີ່ຖືກຕ້ອງ, ຕາມທີ່ມີບັນທຶກໄວ້ໃນ `SPDX specification `__, " +"ບໍ່ວ່າຈະເປັນເວີຊັນ 2.2 ຫຼື ເວີຊັນຫຼັງທີ່ເຂົ້າກັນໄດ້." + +#: ../source/specifications/license-expression.rst:19 +msgid "A license expression can use the following license identifiers:" +msgstr "license expression ສາມາດໃຊ້ຕົວລະບຸໃບອະນຸຍາດ (license identifiers) ຕໍ່ໄປນີ້:" + +#: ../source/specifications/license-expression.rst:21 +msgid "" +"Any SPDX-listed license short-form identifiers that are published in the " +"`SPDX License List `__, version 3.17 or any later compatible " +"version." +msgstr "" +"ຕົວລະບຸແບບຫຍໍ້ຂອງໃບອະນຸຍາດທີ່ຢູ່ໃນລາຍຊື່ SPDX ທີ່ເຜີຍແຜ່ໃນ `SPDX License List " +"`__, ເວີຊັນ 3.17 ຫຼື ເວີຊັນຫຼັງທີ່ເຂົ້າກັນໄດ້." + +#: ../source/specifications/license-expression.rst:25 +msgid "" +"The custom ``LicenseRef-[idstring]`` string(s), where ``[idstring]`` is a " +"unique string containing letters, numbers, ``.`` and/or ``-``, to identify " +"licenses that are not included in the SPDX license list. The custom " +"identifiers must follow the SPDX specification, `clause 10.1 " +"`__ of the given specification version." +msgstr "" +"ສະຕຣິງ ``LicenseRef-[idstring]`` ທີ່ກໍານົດເອງ, ໂດຍທີ່ ``[idstring]`` ແມ່ນສະຕຣິງທີ່ບໍ່ຊໍ້າກັນ " +"ເຊິ່ງປະກອບດ້ວຍຕົວອັກສອນ, ຕົວເລກ, ``.`` ແລະ/ຫຼື ``-``, " +"ເພື່ອລະບຸໃບອະນຸຍາດທີ່ບໍ່ໄດ້ລວມຢູ່ໃນລາຍຊື່ໃບອະນຸຍາດ SPDX. ຕົວລະບຸທີ່ກໍານົດເອງຕ້ອງປະຕິບັດຕາມຂໍ້ກໍານົດຂອງ " +"SPDX, `ຂໍ້ 10.1 `__ ຂອງເວີຊັນຂໍ້ກໍານົດທີ່ລະບຸໄວ້." + +#: ../source/specifications/license-expression.rst:32 +msgid "Examples of valid license expressions:" +msgstr "ຕົວຢ່າງຂອງ license expressions ທີ່ຖືກຕ້ອງ:" + +#: ../source/specifications/license-expression.rst:45 +msgid "Examples of invalid license expressions:" +msgstr "ຕົວຢ່າງຂອງ license expressions ທີ່ບໍ່ຖືກຕ້ອງ:" + +#: ../source/specifications/name-normalization.rst:3 +msgid "Names and normalization" +msgstr "ຊື່ ແລະ ການເຮັດໃຫ້ເປັນມາດຕະຖານ (Normalization)" + +#: ../source/specifications/name-normalization.rst:5 +msgid "" +"This specification defines the format that names for packages and extras are " +"required to follow. It also describes how to normalize them, which should be " +"done before lookups and comparisons." +msgstr "" +"ຂໍ້ກຳນົດນີ້ກຳນົດຮູບແບບທີ່ຊື່ແພັກເກດ ແລະ extras ຕ້ອງປະຕິບັດຕາມ. ມັນຍັງອະທິບາຍ " +"ວິທີການເຮັດໃຫ້ພວກມັນເປັນມາດຕະຖານ (normalize), ເຊິ່ງຄວນເຮັດກ່ອນການຄົ້ນຫາ ແລະ ການປຽບທຽບ." + +#: ../source/specifications/name-normalization.rst:13 +msgid "Name format" +msgstr "ຮູບແບບຊື່" + +#: ../source/specifications/name-normalization.rst:15 +msgid "" +"A valid name consists only of ASCII letters and numbers, period, underscore " +"and hyphen. It must start and end with a letter or number. This means that " +"valid project names are limited to those which match the following regex " +"(run with :py:data:`re.IGNORECASE`)::" +msgstr "" +"ຊື່ທີ່ຖືກຕ້ອງຕ້ອງປະກອບດ້ວຍສະເພາະຕົວອັກສອນ ASCII ແລະ ຕົວເລກ, ຈຸດ, ເຄື່ອງໝາຍຂີດກ້ອງ ແລະ ຂີດຕໍ່. " +"ມັນຕ້ອງຂຶ້ນຕົ້ນ ແລະ ລົງທ້າຍດ້ວຍຕົວອັກສອນ ຫຼື ຕົວເລກ. ສິ່ງນີ້ໝາຍຄວາມວ່າ " +"ຊື່ໂຄງການທີ່ຖືກຕ້ອງແມ່ນຈຳກັດສະເພາະອັນທີ່ກົງກັບ regex ຕໍ່ໄປນີ້ " +"(ລັນດ້ວຍ :py:data:`re.IGNORECASE`)::" + +#: ../source/specifications/name-normalization.rst:26 +msgid "Name normalization" +msgstr "ການເຮັດໃຫ້ຊື່ເປັນມາດຕະຖານ" + +#: ../source/specifications/name-normalization.rst:28 +msgid "" +"The name should be lowercased with all runs of the characters ``.``, ``-``, " +"or ``_`` replaced with a single ``-`` character. This can be implemented in " +"Python with the re module:" +msgstr "" +"ຊື່ຄວນຖືກປ່ຽນເປັນຕົວອັກສອນນ້ອຍທັງໝົດ ໂດຍທີ່ຕົວອັກສອນ ``.``, ``-``, ຫຼື ``_`` ທີ່ຕິດຕໍ່ກັນ " +"ຈະຖືກປ່ຽນແທນດ້ວຍເຄື່ອງໝາຍຂີດຕໍ່ ``-`` ພຽງອັນດຽວ. ສິ່ງນີ້ສາມາດນຳໃຊ້ໃນ Python ດ້ວຍໂມດູນ re:" + +#: ../source/specifications/name-normalization.rst:39 +msgid "This means that the following names are all equivalent:" +msgstr "ສິ່ງນີ້ໝາຍຄວາມວ່າຊື່ຕໍ່ໄປນີ້ທັງໝົດແມ່ນທຽບເທົ່າກັນ:" + +#: ../source/specifications/name-normalization.rst:41 +msgid "``friendly-bard`` (normalized form)" +msgstr "``friendly-bard`` (ຮູບແບບມາດຕະຖານ)" + +#: ../source/specifications/name-normalization.rst:42 +msgid "``Friendly-Bard``" +msgstr "``Friendly-Bard``" + +#: ../source/specifications/name-normalization.rst:43 +msgid "``FRIENDLY-BARD``" +msgstr "``FRIENDLY-BARD``" + +#: ../source/specifications/name-normalization.rst:44 +msgid "``friendly.bard``" +msgstr "``friendly.bard``" + +#: ../source/specifications/name-normalization.rst:45 +msgid "``friendly_bard``" +msgstr "``friendly_bard``" + +#: ../source/specifications/name-normalization.rst:46 +msgid "``friendly--bard``" +msgstr "``friendly--bard``" + +#: ../source/specifications/name-normalization.rst:47 +msgid "" +"``FrIeNdLy-._.-bArD`` (a *terrible* way to write a name, but it is valid)" +msgstr "``FrIeNdLy-._.-bArD`` (ວິທີຂຽນຊື່ທີ່ *ແຍ່ຫຼາຍ*, ແຕ່ມັນກໍຖືກຕ້ອງ)" + +#: ../source/specifications/name-normalization.rst:52 +msgid "" +"September 2015: The specification of name normalized was approved " +"through :pep:`503 <503#normalized-names>`." +msgstr "" +"ກັນຍາ 2015: ຂໍ້ກຳນົດຂອງການເຮັດໃຫ້ຊື່ເປັນມາດຕະຖານໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`503 " +"<503#normalized-names>`." + +#: ../source/specifications/name-normalization.rst:54 +msgid "" +"November 2015: The specification of valid names was approved " +"through :pep:`508 <508#names>`." +msgstr "ພະຈິກ 2015: ຂໍ້ກຳນົດຂອງຊື່ທີ່ຖືກຕ້ອງໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`508 <508#names>`." + +#: ../source/specifications/platform-compatibility-tags.rst:6 +msgid "Platform compatibility tags" +msgstr "ແທັກຄວາມເຂົ້າກັນໄດ້ຂອງແພລັດຟອມ" + +#: ../source/specifications/platform-compatibility-tags.rst:8 +msgid "" +"Platform compatibility tags allow build tools to mark distributions as being " +"compatible with specific platforms, and allows installers to understand " +"which distributions are compatible with the system they are running on." +msgstr "" +"ແທັກຄວາມເຂົ້າກັນໄດ້ຂອງແພລັດຟອມຊ່ວຍໃຫ້ເຄື່ອງມື build ສາມາດໝາຍການແຈກຢາຍວ່າ " +"ເຂົ້າກັນໄດ້ກັບແພລັດຟອມສະເພາະໃດໜຶ່ງ, ແລະ ຊ່ວຍໃຫ້ຕົວຕິດຕັ້ງເຂົ້າໃຈວ່າ " +"ການແຈກຢາຍໃດແດ່ທີ່ເຂົ້າກັນໄດ້ກັບລະບົບທີ່ພວກມັນກຳລັງລັນຢູ່." + +#: ../source/specifications/platform-compatibility-tags.rst:16 +msgid "The tag format is ``{python tag}-{abi tag}-{platform tag}``." +msgstr "ຮູບແບບແທັກແມ່ນ ``{python tag}-{abi tag}-{platform tag}``." + +#: ../source/specifications/platform-compatibility-tags.rst:18 +msgid "python tag" +msgstr "python tag" + +#: ../source/specifications/platform-compatibility-tags.rst:19 +msgid "'py27', 'cp33'" +msgstr "'py27', 'cp33'" + +#: ../source/specifications/platform-compatibility-tags.rst:21 +msgid "'cp32dmu', 'none'" +msgstr "'cp32dmu', 'none'" + +#: ../source/specifications/platform-compatibility-tags.rst:23 +msgid "'linux_x86_64', 'any'" +msgstr "'linux_x86_64', 'any'" + +#: ../source/specifications/platform-compatibility-tags.rst:25 +msgid "" +"For example, the tag ``py27-none-any`` indicates compatibility with Python " +"2.7 (any Python 2.7 implementation) with no abi requirement, on any platform." +msgstr "" +"ຕົວຢ່າງ, ແທັກ ``py27-none-any`` ບົ່ງບອກເຖິງຄວາມເຂົ້າກັນໄດ້ກັບ Python 2.7 (Python 2.7 " +"ລຸ້ນໃດກໍໄດ້) ໂດຍບໍ່ມີຂໍ້ກຳນົດ abi, ໃນແພລັດຟອມໃດກໍໄດ້." + +#: ../source/specifications/platform-compatibility-tags.rst:28 +msgid "" +"The ``wheel`` built package format includes these tags in its filenames, of " +"the form ``{distribution}-{version}(-{build tag})?-{python tag}-{abitag}-" +"{platform tag}.whl``. Other package formats may have their own conventions." +msgstr "" +"ຮູບແບບແພັກເກດ ``wheel`` ຈະລວມເອົາແທັກເຫຼົ່ານີ້ໄວ້ໃນຊື່ໄຟລ໌, ໃນຮູບແບບ ``{distribution}-" +"{version}(-{build tag})?-{python tag}-{abitag}-{platform tag}.whl``. " +"ຮູບແບບແພັກເກດອື່ນໆອາດຈະມີທຳນຽມຂອງພວກເຂົາເອງ." + +#: ../source/specifications/platform-compatibility-tags.rst:33 +msgid "Any potential spaces in any tag should be replaced with ``_``." +msgstr "ຊ່ອງຫວ່າງທີ່ອາດຈະມີໃນແທັກໃດໆ ຄວນຖືກປ່ຽນແທນດ້ວຍ ``_``." + +#: ../source/specifications/platform-compatibility-tags.rst:37 +msgid "Python Tag" +msgstr "Python Tag" + +#: ../source/specifications/platform-compatibility-tags.rst:39 +msgid "" +"The Python tag indicates the implementation and version required by a " +"distribution. Major implementations have abbreviated codes, initially:" +msgstr "" +"Python tag ບົ່ງບອກເຖິງເວີຊັນ ແລະ ລຸ້ນທີ່ຕ້ອງການໂດຍການແຈກຢາຍ. ລຸ້ນຫຼັກໆ (implementations) " +"ຈະມີລະຫັດຫຍໍ້, ໃນເບື້ອງຕົ້ນຄື:" + +#: ../source/specifications/platform-compatibility-tags.rst:42 +msgid "py: Generic Python (does not require implementation-specific features)" +msgstr "py: Generic Python (ບໍ່ຕ້ອງການຄຸນສົມບັດສະເພາະຂອງແຕ່ລະລຸ້ນ)" + +#: ../source/specifications/platform-compatibility-tags.rst:43 +msgid "cp: CPython" +msgstr "cp: CPython" + +#: ../source/specifications/platform-compatibility-tags.rst:44 +msgid "ip: IronPython" +msgstr "ip: IronPython" + +#: ../source/specifications/platform-compatibility-tags.rst:45 +msgid "pp: PyPy" +msgstr "pp: PyPy" + +#: ../source/specifications/platform-compatibility-tags.rst:46 +msgid "jy: Jython" +msgstr "jy: Jython" + +#: ../source/specifications/platform-compatibility-tags.rst:48 +msgid "" +"Other Python implementations should use :py:data:`sys.implementation.name " +"`." +msgstr "" +"Python implementations ອື່ນໆຄວນໃຊ້ :py:data:`sys.implementation.name " +"`." + +#: ../source/specifications/platform-compatibility-tags.rst:50 +msgid "" +"The version is ``py_version_nodot``. CPython gets away with no dot, but if " +"one is needed the underscore ``_`` is used instead. PyPy should probably " +"use its own versions here ``pp18``, ``pp19``." +msgstr "" +"ເວີຊັນແມ່ນ ``py_version_nodot``. CPython ສາມາດໃຊ້ໄດ້ໂດຍບໍ່ມີຈຸດ, ແຕ່ຖ້າຈຳເປັນ " +"ຈະໃຊ້ເຄື່ອງໝາຍຂີດກ້ອງ ``_`` ແທນ. PyPy ອາດຈະຄວນໃຊ້ເວີຊັນຂອງມັນເອງທີ່ນີ້ ເຊັ່ນ ``pp18``, " +"``pp19``." + +#: ../source/specifications/platform-compatibility-tags.rst:54 +msgid "" +"The version can be just the major version ``2`` or ``3`` ``py2``, ``py3`` " +"for many pure-Python distributions." +msgstr "" +"ເວີຊັນອາດຈະເປັນພຽງເວີຊັນຫຼັກ ``2`` ຫຼື ``3`` ເຊັ່ນ ``py2``, ``py3`` ສຳລັບການແຈກຢາຍແບບ " +"pure-Python ຫຼາຍອັນ." + +#: ../source/specifications/platform-compatibility-tags.rst:57 +msgid "" +"Importantly, major-version-only tags like ``py2`` and ``py3`` are not " +"shorthand for ``py20`` and ``py30``. Instead, these tags mean the packager " +"intentionally released a cross-version-compatible distribution." +msgstr "" +"ທີ່ສຳຄັນ, ແທັກທີ່ມີພຽງເວີຊັນຫຼັກເຊັ່ນ ``py2`` ແລະ ``py3`` ບໍ່ແມ່ນຕົວຫຍໍ້ຂອງ ``py20`` ແລະ " +"``py30``. ແຕ່ແທັກເຫຼົ່ານີ້ໝາຍຄວາມວ່າຜູ້ເຮັດແພັກເກດຕັ້ງໃຈ ເຜີຍແຜ່ການແຈກຢາຍທີ່ເຂົ້າກັນໄດ້ກັບຫຼາຍເວີຊັນ." + +#: ../source/specifications/platform-compatibility-tags.rst:61 +msgid "" +"A single-source Python 2/3 compatible distribution can use the compound tag " +"``py2.py3``. See `Compressed Tag Sets`_, below." +msgstr "" +"ການແຈກຢາຍທີ່ເຂົ້າກັນໄດ້ທັງ Python 2/3 ຈາກ source ດຽວ ສາມາດໃຊ້ແທັກປະສົມ ``py2.py3``. " +"ເບິ່ງ `Compressed Tag Sets`_, ຂ້າງລຸ່ມນີ້." + +#: ../source/specifications/platform-compatibility-tags.rst:66 +msgid "ABI Tag" +msgstr "ABI Tag" + +#: ../source/specifications/platform-compatibility-tags.rst:68 +msgid "" +"The ABI tag indicates which Python ABI is required by any included extension " +"modules. For implementation-specific ABIs, the implementation is " +"abbreviated in the same way as the Python Tag, e.g. ``cp33d`` would be the " +"CPython 3.3 ABI with debugging." +msgstr "" +"ABI tag ບົ່ງບອກວ່າ Python ABI ໃດທີ່ຕ້ອງການໂດຍ extension modules ທີ່ລວມຢູ່ນຳ. ສຳລັບ ABI " +"ທີ່ສະເພາະແຕ່ລະລຸ້ນ, ຊື່ລຸ້ນຈະຖືກຫຍໍ້ໃນແບບດຽວກັນກັບ Python Tag, ຕົວຢ່າງ ``cp33d`` ຈະໝາຍເຖິງ " +"CPython 3.3 ABI ທີ່ມີ debugging." + +#: ../source/specifications/platform-compatibility-tags.rst:73 +msgid "The CPython stable ABI is ``abi3`` as in the shared library suffix." +msgstr "CPython stable ABI ແມ່ນ ``abi3`` ຄືກັບທີ່ຢູ່ໃນນາມສະກຸນໄລບຣາຣີ." + +#: ../source/specifications/platform-compatibility-tags.rst:75 +msgid "" +"Implementations with a very unstable ABI may use the first 6 bytes (as 8 " +"base64-encoded characters) of the SHA-256 hash of their source code revision " +"and compiler flags, etc, but will probably not have a great need to " +"distribute binary distributions. Each implementation's community may decide " +"how to best use the ABI tag." +msgstr "" +"ລຸ້ນ (Implementations) ທີ່ມີ ABI ບໍ່ຄົງທີ່ຫຼາຍ ອາດຈະໃຊ້ 6 ໄບທ໌ທຳອິດ (ເປັນຕົວອັກສອນ base64 8 " +"ຕົວ) ຂອງ SHA-256 hash ຂອງເວີຊັນ source code ແລະ compiler flags ແລະ ອື່ນໆ, " +"ແຕ່ຄົງຈະບໍ່ມີຄວາມຈຳເປັນຫຼາຍໃນການເຜີຍແຜ່ binary distributions. " +"ຊຸມຊົນຂອງແຕ່ລະລຸ້ນອາດຈະຕັດສິນໃຈເອງວ່າຈະໃຊ້ ABI tag ໃຫ້ດີທີ່ສຸດແນວໃດ." + +#: ../source/specifications/platform-compatibility-tags.rst:83 +msgid "Platform Tag" +msgstr "Platform Tag" + +#: ../source/specifications/platform-compatibility-tags.rst:86 +msgid "" +"Platform tags are dependent on the versioning of the operating system or " +"platform they represent and may change over time as the underlying platform " +"changes its versioning." +msgstr "" +"Platform tags ແມ່ນຂຶ້ນກັບການກຳນົດເວີຊັນຂອງລະບົບປະຕິບັດການ ຫຼື ແພລັດຟອມ ທີ່ພວກມັນຕາງໜ້າໃຫ້ ແລະ " +"ອາດຈະປ່ຽນແປງຕາມເວລາເມື່ອແພລັດຟອມນັ້ນມີການປ່ຽນແປງເວີຊັນ." + +#: ../source/specifications/platform-compatibility-tags.rst:91 +msgid "Basic platform tags" +msgstr "ແທັກແພລັດຟອມພື້ນຖານ" + +#: ../source/specifications/platform-compatibility-tags.rst:93 +msgid "" +"In its simplest form, the platform tag " +"is :py:func:`sysconfig.get_platform()` with all hyphens ``-`` and periods " +"``.`` replaced with underscore ``_``. Until the removal of :ref:`distutils` " +"in Python 3.12, this was ``distutils.util.get_platform()``. For example:" +msgstr "" +"ໃນຮູບແບບທີ່ງ່າຍທີ່ສຸດ, platform tag ແມ່ນ :py:func:`sysconfig.get_platform()` " +"ໂດຍປ່ຽນເຄື່ອງໝາຍຂີດຕໍ່ ``-`` ແລະ ຈຸດ ``.`` ທັງໝົດເປັນເຄື່ອງໝາຍຂີດກ້ອງ ``_``. " +"ຈົນກວ່າຈະມີການຖອນ :ref:`distutils` ອອກໃນ Python 3.12, ສິ່ງນີ້ເຄີຍເປັນ " +"``distutils.util.get_platform()``. ຕົວຢ່າງ:" + +#: ../source/specifications/platform-compatibility-tags.rst:98 +msgid "win32" +msgstr "win32" + +#: ../source/specifications/platform-compatibility-tags.rst:99 +msgid "linux_i386" +msgstr "linux_i386" + +#: ../source/specifications/platform-compatibility-tags.rst:100 +msgid "linux_x86_64" +msgstr "linux_x86_64" + +#: ../source/specifications/platform-compatibility-tags.rst:106 +msgid "``manylinux``" +msgstr "``manylinux``" + +#: ../source/specifications/platform-compatibility-tags.rst:108 +msgid "" +"The simple scheme above is insufficient for public distribution of wheel " +"files to Linux platforms, due to the large ecosystem of Linux platforms and " +"subtle differences between them." +msgstr "" +"ຮູບແບບທີ່ງ່າຍດາຍຂ້າງເທິງນັ້ນບໍ່ພຽງພໍສຳລັບການເຜີຍແຜ່ໄຟລ໌ wheel ຕໍ່ສາທາລະນະ ໃນແພລັດຟອມ Linux, " +"ເນື່ອງຈາກລະບົບນິເວດຂະໜາດໃຫຍ່ຂອງ Linux ແລະ ຄວາມແຕກຕ່າງ ເລັກໆນ້ອຍໆລະຫວ່າງພວກມັນ." + +#: ../source/specifications/platform-compatibility-tags.rst:112 +msgid "" +"Instead, for those platforms, the ``manylinux`` standard represents a common " +"subset of Linux platforms, and allows building wheels tagged with the " +"``manylinux`` platform tag which can be used across most common Linux " +"distributions." +msgstr "" +"ແທນທີ່ຈະເປັນແນວນັ້ນ, ສຳລັບແພລັດຟອມເຫຼົ່ານັ້ນ, ມາດຕະຖານ ``manylinux`` ຈະຕາງໜ້າໃຫ້ subset " +"ທີ່ໃຊ້ຮ່ວມກັນຂອງແພລັດຟອມ Linux, ແລະ ຊ່ວຍໃຫ້ build wheels ທີ່ຕິດແທັກ ``manylinux`` " +"ເຊິ່ງສາມາດໃຊ້ງານໄດ້ໃນ Linux distributions ສ່ວນໃຫຍ່." + +#: ../source/specifications/platform-compatibility-tags.rst:117 +msgid "" +"The current standard is the future-proof :file:`manylinux_{x}_{y}` standard. " +"It defines tags of the form :file:`manylinux_{x}_{y}_{arch}`, where ``x`` " +"and ``y`` are glibc major and minor versions supported (e.g. " +"``manylinux_2_24_xxx`` should work on any distro using glibc 2.24+), and " +"``arch`` is the architecture, matching the value " +"of :py:func:`sysconfig.get_platform()` on the system as in the \"simple\" " +"form above." +msgstr "" +"ມາດຕະຖານປະຈຸບັນແມ່ນ :file:`manylinux_{x}_{y}` ທີ່ຮອງຮັບອະນາຄົດ. " +"ມັນກຳນົດແທັກໃນຮູບແບບ :file:`manylinux_{x}_{y}_{arch}`, ໂດຍທີ່ ``x`` ແລະ ``y`` " +"ແມ່ນເວີຊັນຫຼັກ ແລະ ເວີຊັນຍ່ອຍຂອງ glibc ທີ່ຮອງຮັບ (ຕົວຢ່າງ ``manylinux_2_24_xxx`` " +"ຄວນເຮັດວຽກໄດ້ໃນ distro ໃດກໍຕາມທີ່ໃຊ້ glibc 2.24+), ແລະ ``arch`` ແມ່ນສະຖາປັດຕະຍະກຳ " +"(architecture), ເຊິ່ງກົງກັບຄ່າຂອງ :py:func:`sysconfig.get_platform()` " +"ໃນລະບົບຄືກັບຮູບແບບ \"ງ່າຍໆ\" ຂ້າງເທິງ." + +#: ../source/specifications/platform-compatibility-tags.rst:123 +msgid "" +"The following older tags are still supported for backward compatibility:" +msgstr "ແທັກເກົ່າໆຕໍ່ໄປນີ້ຍັງຄົງໄດ້ຮັບການຮອງຮັບເພື່ອຄວາມເຂົ້າກັນໄດ້ກັບເວີຊັນກ່ອນໜ້າ:" + +#: ../source/specifications/platform-compatibility-tags.rst:125 +msgid "" +"``manylinux1`` supports glibc 2.5 on ``x86_64`` and ``i686`` architectures." +msgstr "``manylinux1`` ຮອງຮັບ glibc 2.5 ໃນສະຖາປັດຕະຍະກຳ ``x86_64`` ແລະ ``i686``." + +#: ../source/specifications/platform-compatibility-tags.rst:126 +msgid "``manylinux2010`` supports glibc 2.12 on ``x86_64`` and ``i686``." +msgstr "``manylinux2010`` ຮອງຮັບ glibc 2.12 ໃນ ``x86_64`` ແລະ ``i686``." + +#: ../source/specifications/platform-compatibility-tags.rst:127 +msgid "" +"``manylinux2014`` supports glibc 2.17 on ``x86_64``, ``i686``, ``aarch64``, " +"``armv7l``, ``ppc64``, ``ppc64le``, and ``s390x``." +msgstr "" +"``manylinux2014`` ຮອງຮັບ glibc 2.17 ໃນ ``x86_64``, ``i686``, ``aarch64``, " +"``armv7l``, ``ppc64``, ``ppc64le``, ແລະ ``s390x``." + +#: ../source/specifications/platform-compatibility-tags.rst:130 +msgid "" +"In general, distributions built for older versions of the specification are " +"forwards-compatible (meaning that ``manylinux1`` distributions should " +"continue to work on modern systems) but not backwards-compatible (meaning " +"that ``manylinux2010`` distributions are not expected to work on platforms " +"that existed before 2010)." +msgstr "" +"ໂດຍທົ່ວໄປແລ້ວ, ການແຈກຢາຍທີ່ build ສຳລັບເວີຊັນເກົ່າຂອງຂໍ້ກຳນົດ ແມ່ນສາມາດ ເຂົ້າກັນໄດ້ກັບເວີຊັນໃໝ່ " +"(ໝາຍຄວາມວ່າການແຈກຢາຍ ``manylinux1`` ຄວນຈະ ຍັງຄົງເຮັດວຽກໄດ້ໃນລະບົບທີ່ທັນສະໄໝ) " +"ແຕ່ບໍ່ສາມາດເຂົ້າກັນໄດ້ກັບເວີຊັນກ່ອນໜ້າ (ໝາຍຄວາມວ່າການແຈກຢາຍ ``manylinux2010`` " +"ອາດຈະບໍ່ເຮັດວຽກໃນແພລັດຟອມ ທີ່ມີມາກ່ອນປີ 2010)." + +#: ../source/specifications/platform-compatibility-tags.rst:136 +msgid "" +"Package maintainers should attempt to target the most compatible " +"specification possible, with the caveat that the provided build environment " +"for ``manylinux1`` and ``manylinux2010`` have reached end-of-life meaning " +"that these images will no longer receive security updates." +msgstr "" +"ຜູ້ດູແລແພັກເກດຄວນພະຍາຍາມຕັ້ງເປົ້າໝາຍໃສ່ຂໍ້ກຳນົດທີ່ເຂົ້າກັນໄດ້ຫຼາຍທີ່ສຸດເທົ່າທີ່ຈະເປັນໄປໄດ້, " +"ແຕ່ຕ້ອງລະວັງວ່າສະພາບແວດລ້ອມການ build ທີ່ໃຫ້ໄວ້ສຳລັບ ``manylinux1`` ແລະ " +"``manylinux2010`` ໄດ້ໝົດອາຍຸການໃຊ້ງານແລ້ວ (end-of-life), ເຊິ່ງໝາຍຄວາມວ່າ images " +"ເຫຼົ່ານີ້ຈະບໍ່ໄດ້ຮັບການອັບເດດດ້ານຄວາມປອດໄພອີກຕໍ່ໄປ." + +#: ../source/specifications/platform-compatibility-tags.rst:141 +msgid "" +"The following table shows the minimum versions of relevant projects to " +"support the various ``manylinux`` standards:" +msgstr "" +"ຕາຕະລາງຕໍ່ໄປນີ້ສະແດງເວີຊັນຂັ້ນຕ່ຳຂອງໂຄງການທີ່ກ່ຽວຂ້ອງ ເພື່ອຮອງຮັບມາດຕະຖານ ``manylinux`` ຕ່າງໆ:" + +#: ../source/specifications/platform-compatibility-tags.rst:145 +msgid "Tool" +msgstr "ເຄື່ອງມື" + +#: ../source/specifications/platform-compatibility-tags.rst:145 +msgid "``manylinux1``" +msgstr "``manylinux1``" + +#: ../source/specifications/platform-compatibility-tags.rst:145 +msgid "``manylinux2010``" +msgstr "``manylinux2010``" + +#: ../source/specifications/platform-compatibility-tags.rst:145 +msgid "``manylinux2014``" +msgstr "``manylinux2014``" + +#: ../source/specifications/platform-compatibility-tags.rst:145 +msgid "``manylinux_x_y``" +msgstr "``manylinux_x_y``" + +#: ../source/specifications/platform-compatibility-tags.rst:147 +msgid "``>=8.1.0``" +msgstr "``>=8.1.0``" + +#: ../source/specifications/platform-compatibility-tags.rst:147 +msgid "``>=19.0``" +msgstr "``>=19.0``" + +#: ../source/specifications/platform-compatibility-tags.rst:147 +msgid "``>=19.3``" +msgstr "``>=19.3``" + +#: ../source/specifications/platform-compatibility-tags.rst:147 +msgid "``>=20.3``" +msgstr "``>=20.3``" + +#: ../source/specifications/platform-compatibility-tags.rst:148 +msgid "auditwheel" +msgstr "auditwheel" + +#: ../source/specifications/platform-compatibility-tags.rst:148 +msgid "``>=1.0.0``" +msgstr "``>=1.0.0``" + +#: ../source/specifications/platform-compatibility-tags.rst:148 +msgid "``>=2.0.0``" +msgstr "``>=2.0.0``" + +#: ../source/specifications/platform-compatibility-tags.rst:148 +msgid "``>=3.0.0``" +msgstr "``>=3.0.0``" + +#: ../source/specifications/platform-compatibility-tags.rst:148 +msgid "``>=3.3.0`` [#]_" +msgstr "``>=3.3.0`` [#]_" + +#: ../source/specifications/platform-compatibility-tags.rst:151 +msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +msgstr "ສະເພາະການຮອງຮັບສຳລັບ ``manylinux_2_24`` ເທົ່ານັ້ນທີ່ຖືກເພີ່ມໃນ auditwheel 3.3.0" + +#: ../source/specifications/platform-compatibility-tags.rst:155 +msgid "``musllinux``" +msgstr "``musllinux``" + +#: ../source/specifications/platform-compatibility-tags.rst:157 +msgid "" +"The ``musllinux`` family of tags is similar to ``manylinux``, but for Linux " +"platforms that use the musl_ libc rather than glibc (a prime example being " +"Alpine Linux). The schema is :file:`musllinux_{x}_{y}_{arch}`, supporting " +"musl ``x.y`` and higher on the architecture ``arch``." +msgstr "" +"ກຸ່ມແທັກ ``musllinux`` ແມ່ນຄ້າຍຄືກັບ ``manylinux``, ແຕ່ສຳລັບແພລັດຟອມ Linux ທີ່ໃຊ້ musl_ " +"libc ແທນທີ່ຈະເປັນ glibc (ຕົວຢ່າງທີ່ຊັດເຈນແມ່ນ Alpine Linux). " +"ຮູບແບບແມ່ນ :file:`musllinux_{x}_{y}_{arch}`, ເຊິ່ງຮອງຮັບ musl ``x.y`` ແລະ " +"ສູງກວ່າໃນສະຖາປັດຕະຍະກຳ ``arch``." + +#: ../source/specifications/platform-compatibility-tags.rst:162 +msgid "" +"The musl version values can be obtained by executing the musl libc shared " +"library the Python interpreter is currently running on, and parsing the " +"output:" +msgstr "" +"ຄ່າເວີຊັນຂອງ musl ສາມາດໄດ້ຮັບໂດຍການເອີ້ນໃຊ້ musl libc shared library ທີ່ Python " +"interpreter ກຳລັງລັນຢູ່, ແລະ parse ຜົນລັດທີ່ໄດ້:" + +#: ../source/specifications/platform-compatibility-tags.rst:193 +msgid "" +"There are currently two possible ways to find the musl library’s location " +"that a Python interpreter is running on, either with the system ldd_ " +"command, or by parsing the ``PT_INTERP`` section’s value from the " +"executable’s ELF_ header." +msgstr "" +"ປະຈຸບັນມີສອງວິທີທີ່ເປັນໄປໄດ້ໃນການຊອກຫາສະຖານທີ່ຂອງໄລບຣາຣີ musl ທີ່ Python interpreter " +"ກຳລັງລັນຢູ່, ຄືການໃຊ້ຄຳສັ່ງ ldd_ ຂອງລະບົບ, ຫຼື ການ parse ຄ່າໃນສ່ວນ ``PT_INTERP`` ຈາກ ELF_ " +"header ຂອງໄຟລ໌ executable." + +#: ../source/specifications/platform-compatibility-tags.rst:202 +msgid "" +"macOS uses the ``macosx`` family of tags (the ``x`` suffix is a historical " +"artefact of Apple's official macOS naming scheme). The schema for " +"compatibility tags is :file:`macosx_{x}_{y}_{arch}`, indicating that the " +"wheel is compatible with macOS ``x.y`` or later on the architecture ``arch``." +msgstr "" +"macOS ໃຊ້ກຸ່ມແທັກ ``macosx`` (ຕົວອັກສອນ ``x`` ແມ່ນມາຈາກຊື່ macOS ຢ່າງເປັນທາງການ ຂອງ " +"Apple ໃນເມື່ອກ່ອນ). ຮູບແບບສຳລັບແທັກຄວາມເຂົ້າກັນໄດ້ແມ່ນ :file:`macosx_{x}_{y}_{arch}`, " +"ເຊິ່ງບົ່ງບອກວ່າ wheel ນັ້ນເຂົ້າກັນໄດ້ກັບ macOS ``x.y`` ຫຼື ໃໝ່ກວ່າໃນສະຖາປັດຕະຍະກຳ ``arch``." + +#: ../source/specifications/platform-compatibility-tags.rst:207 +msgid "" +"For macOS 10, the tag is :file:`macosx_10_{y}_{arch}`, where ``y`` " +"corresponds to the minor version number of the macOS release. For macOS 11 " +"and higher, the tag is :file:`macosx_{x}_0_{arch}`, where ``x`` corresponds " +"to the major version number of the macOS release. Following the published " +"macOS major versions, the ``x`` value is either ``10 <= x <= 15``, or " +"``>=26`` and corresponding to the year of the macOS release. For example, " +"``macosx_11_0_arm64`` indicates compatibility with macOS 11 or later." +msgstr "" +"ສຳລັບ macOS 10, ແທັກແມ່ນ :file:`macosx_10_{y}_{arch}`, ໂດຍທີ່ ``y`` " +"ກົງກັບໝາຍເລກເວີຊັນຍ່ອຍຂອງ macOS. ສຳລັບ macOS 11 ແລະ ສູງກວ່າ, ແທັກແມ່ນ :file:`macosx_{x}" +"_0_{arch}`, ໂດຍທີ່ ``x`` ກົງກັບໝາຍເລກເວີຊັນຫຼັກຂອງ macOS. ຕາມເວີຊັນຫຼັກຂອງ macOS ທີ່ເຜີຍແຜ່, " +"ຄ່າ ``x`` ຈະເປັນ ``10 <= x <= 15``, ຫຼື ``>=26`` ເຊິ່ງກົງກັບປີທີ່ເຜີຍແຜ່ macOS. ຕົວຢ່າງ, " +"``macosx_11_0_arm64`` ບົ່ງບອກເຖິງຄວາມເຂົ້າກັນໄດ້ກັບ macOS 11 ຫຼື ໃໝ່ກວ່າ." + +#: ../source/specifications/platform-compatibility-tags.rst:215 +msgid "" +"macOS binaries can be compiled for a single architecture, or can include " +"support for multiple architectures in the same binary (sometimes called " +"\"fat\" binaries). To indicate support for a single architecture, the value " +"of ``arch`` must match the value of :py:func:`platform.machine()` on the " +"system. To indicate support multiple architectures, the ``arch`` tag should " +"be an identifier from the following list that describes the set of supported " +"architectures:" +msgstr "" +"ໄຟລ໌ binary ຂອງ macOS ສາມາດຖືກ compile ສຳລັບສະຖາປັດຕະຍະກຳດຽວ, ຫຼື " +"ສາມາດລວມເອົາການຮອງຮັບຫຼາຍສະຖາປັດຕະຍະກຳໃນ binary ດຽວກັນ (ບາງຄັ້ງ ເອີ້ນວ່າ \"fat\" " +"binaries). ເພື່ອບົ່ງບອກການຮອງຮັບສະຖາປັດຕະຍະກຳດຽວ, ຄ່າຂອງ ``arch`` " +"ຕ້ອງກົງກັບຄ່າຂອງ :py:func:`platform.machine()` ໃນລະບົບ. " +"ເພື່ອບົ່ງບອກການຮອງຮັບຫຼາຍສະຖາປັດຕະຍະກຳ, ແທັກ ``arch`` ຄວນເປັນຕົວລະບຸ " +"ຈາກລາຍຊື່ຕໍ່ໄປນີ້ທີ່ອະທິບາຍຊຸດຂອງສະຖາປັດຕະຍະກຳທີ່ຮອງຮັບ:" + +#: ../source/specifications/platform-compatibility-tags.rst:223 +msgid "``arch``" +msgstr "``arch``" + +#: ../source/specifications/platform-compatibility-tags.rst:223 +msgid "Architectures supported" +msgstr "ສະຖາປັດຕະຍະກຳທີ່ຮອງຮັບ" + +#: ../source/specifications/platform-compatibility-tags.rst:225 +msgid "``universal2``" +msgstr "``universal2``" + +#: ../source/specifications/platform-compatibility-tags.rst:225 +msgid "``arm64``, ``x86_64``" +msgstr "``arm64``, ``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:226 +msgid "``universal``" +msgstr "``universal``" + +#: ../source/specifications/platform-compatibility-tags.rst:226 +msgid "``i386``, ``ppc``, ``ppc64``, ``x86_64``" +msgstr "``i386``, ``ppc``, ``ppc64``, ``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:227 +msgid "``intel``" +msgstr "``intel``" + +#: ../source/specifications/platform-compatibility-tags.rst:227 +msgid "``i386``, ``x86_64``" +msgstr "``i386``, ``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:228 +msgid "``fat``" +msgstr "``fat``" + +#: ../source/specifications/platform-compatibility-tags.rst:228 +msgid "``i386``, ``ppc``" +msgstr "``i386``, ``ppc``" + +#: ../source/specifications/platform-compatibility-tags.rst:229 +msgid "``fat3``" +msgstr "``fat3``" + +#: ../source/specifications/platform-compatibility-tags.rst:229 +msgid "``i386``, ``ppc``, ``x86_64``" +msgstr "``i386``, ``ppc``, ``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:230 +msgid "``fat64``" +msgstr "``fat64``" + +#: ../source/specifications/platform-compatibility-tags.rst:230 +msgid "``ppc64``, ``x86_64``" +msgstr "``ppc64``, ``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:233 +msgid "" +"The minimum supported macOS version may also be constrained by architecture. " +"For example, macOS 11 (Big Sur) was the first release to support arm64. " +"These additional constraints are enforced transparently by the macOS " +"compilation toolchain when building binaries that support multiple " +"architectures." +msgstr "" +"ເວີຊັນ macOS ຂັ້ນຕ່ຳທີ່ຮອງຮັບອາດຈະຖືກຈຳກັດໂດຍສະຖາປັດຕະຍະກຳຄືກັນ. ຕົວຢ່າງ, macOS 11 (Big " +"Sur) ແມ່ນລຸ້ນທຳອິດທີ່ຮອງຮັບ arm64. ຂໍ້ຈຳກັດເພີ່ມເຕີມເຫຼົ່ານີ້ ຈະຖືກບັງຄັບໃຊ້ໂດຍອັດຕະໂນມັດໂດຍ macOS " +"compilation toolchain ເມື່ອ build binaries ທີ່ຮອງຮັບຫຼາຍສະຖາປັດຕະຍະກຳ." + +#: ../source/specifications/platform-compatibility-tags.rst:241 +msgid "Android" +msgstr "Android" + +#: ../source/specifications/platform-compatibility-tags.rst:243 +msgid "" +"Android uses the schema :file:`android_{apilevel}_{abi}`, indicating " +"compatibility with the given Android API level or later, on the given ABI. " +"For example, ``android_27_arm64_v8a`` indicates support for API level 27 or " +"later, on ``arm64_v8a`` devices. Android makes no distinction between " +"physical devices and emulated devices." +msgstr "" +"Android ໃຊ້ຮູບແບບ :file:`android_{apilevel}_{abi}`, ເຊິ່ງບົ່ງບອກເຖິງ ຄວາມເຂົ້າກັນໄດ້ກັບ " +"Android API level ທີ່ກຳນົດ ຫຼື ໃໝ່ກວ່າ, ໃນ ABI ທີ່ກຳນົດ. ຕົວຢ່າງ, " +"``android_27_arm64_v8a`` ບົ່ງບອກເຖິງການຮອງຮັບ API level 27 ຫຼື ໃໝ່ກວ່າ, ໃນອຸປະກອນ " +"``arm64_v8a``. Android ບໍ່ໄດ້ແບ່ງແຍກລະຫວ່າງອຸປະກອນຈິງ ແລະ ອຸປະກອນຈຳລອງ (emulated " +"devices)." + +#: ../source/specifications/platform-compatibility-tags.rst:249 +msgid "" +"The API level should be a positive integer. This is *not* the same thing as " +"the user-facing Android version. For example, the release known as Android " +"12 (code named \"Snow Cone\") uses API level 31 or 32, depending on the " +"specific Android version in use. Android's release documentation contains " +"the `full list of Android versions and their corresponding API levels " +"`__." +msgstr "" +"API level ຄວນເປັນຈຳນວນຖ້ວນບວກ. ນີ້ *ບໍ່ແມ່ນ* ສິ່ງດຽວກັນກັບເວີຊັນ Android ທີ່ຜູ້ໃຊ້ເຫັນ. ຕົວຢ່າງ, " +"Android 12 (ຊື່ລະຫັດ \"Snow Cone\") ໃຊ້ API level 31 ຫຼື 32, ຂຶ້ນກັບເວີຊັນ Android " +"ທີ່ໃຊ້ຢູ່. ເອກະສານຂອງ Android ປະກອບດ້ວຍ `ລາຍຊື່ເວີຊັນ Android ທັງໝົດ ແລະ API levels " +"ທີ່ກ່ຽວຂ້ອງ `__." + +#: ../source/specifications/platform-compatibility-tags.rst:256 +msgid "" +"There are 4 `supported ABIs `__. Normalized according to the rules above, they are:" +msgstr "" +"ມີ 4 `ABIs ທີ່ໄດ້ຮັບການຮອງຮັບ `__. " +"ເມື່ອເຮັດໃຫ້ເປັນມາດຕະຖານຕາມກົດຂ້າງເທິງແລ້ວ, ພວກມັນຄື:" + +#: ../source/specifications/platform-compatibility-tags.rst:259 +msgid "``armeabi_v7a``" +msgstr "``armeabi_v7a``" + +#: ../source/specifications/platform-compatibility-tags.rst:260 +msgid "``arm64_v8a``" +msgstr "``arm64_v8a``" + +#: ../source/specifications/platform-compatibility-tags.rst:261 +msgid "``x86``" +msgstr "``x86``" + +#: ../source/specifications/platform-compatibility-tags.rst:262 +msgid "``x86_64``" +msgstr "``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:264 +msgid "" +"Virtually all current physical devices use one of the ARM architectures. " +"``x86`` and ``x86_64`` are supported for use in the emulator. ``x86`` has " +"not been supported as a development platform since 2020, and no new emulator " +"images have been released since then." +msgstr "" +"ເກືອບທັງໝົດຂອງອຸປະກອນຈິງໃນປະຈຸບັນໃຊ້ສະຖາປັດຕະຍະກຳ ARM. ``x86`` ແລະ ``x86_64`` " +"ແມ່ນຮອງຮັບສຳລັບໃຊ້ໃນຕົວຈຳລອງ (emulator). ``x86`` ບໍ່ໄດ້ຮັບການຮອງຮັບ " +"ໃນຖານະແພລັດຟອມສຳລັບພັດທະນາຕັ້ງແຕ່ປີ 2020, ແລະ ບໍ່ມີ emulator images ໃໝ່ໆຖືກເຜີຍແຜ່ຕັ້ງແຕ່ນັ້ນມາ." + +#: ../source/specifications/platform-compatibility-tags.rst:272 +msgid "iOS" +msgstr "iOS" + +#: ../source/specifications/platform-compatibility-tags.rst:274 +msgid "" +"iOS uses the schema :file:`ios_{x}_{y}_{arch}_{sdk}`, indicating " +"compatibility with iOS ``x.y`` or later, on the ``arch`` architecture, using " +"the ``sdk`` SDK." +msgstr "" +"iOS ໃຊ້ຮູບແບບ :file:`ios_{x}_{y}_{arch}_{sdk}`, ເຊິ່ງບົ່ງບອກເຖິງ ຄວາມເຂົ້າກັນໄດ້ກັບ iOS " +"``x.y`` ຫຼື ໃໝ່ກວ່າ, ໃນສະຖາປັດຕະຍະກຳ ``arch``, ໂດຍໃຊ້ SDK ທີ່ຊື່ວ່າ ``sdk``." + +#: ../source/specifications/platform-compatibility-tags.rst:277 +msgid "" +"The value of ``x`` and ``y`` correspond to the major and minor version " +"number of the iOS release, respectively. They must both be positive " +"integers. The version number always includes a major *and* minor version, " +"even if Apple's official version numbering only refers to the major value. " +"For example, a ``ios_13_0_arm64_iphonesimulator`` indicates compatibility " +"with iOS 13 or later." +msgstr "" +"ຄ່າຂອງ ``x`` ແລະ ``y`` ກົງກັບໝາຍເລກເວີຊັນຫຼັກ ແລະ ເວີຊັນຍ່ອຍຂອງ iOS ຕາມລຳດັບ. " +"ທັງສອງຕ້ອງເປັນຈຳນວນຖ້ວນບວກ. ໝາຍເລກເວີຊັນຈະລວມເອົາທັງເວີຊັນຫຼັກ *ແລະ* ຍ່ອຍສະເໝີ, " +"ເຖິງແມ່ນວ່າການຕັ້ງເວີຊັນຢ່າງເປັນທາງການຂອງ Apple ຈະອ້າງເຖິງພຽງແຕ່ເວີຊັນຫຼັກກໍຕາມ. ຕົວຢ່າງ, " +"``ios_13_0_arm64_iphonesimulator`` ບົ່ງບອກເຖິງຄວາມເຂົ້າກັນໄດ້ກັບ iOS 13 ຫຼື ໃໝ່ກວ່າ." + +#: ../source/specifications/platform-compatibility-tags.rst:283 +msgid "" +"The value of ``arch`` must match the value of :py:func:`platform.machine()` " +"on the system." +msgstr "ຄ່າຂອງ ``arch`` ຕ້ອງກົງກັບຄ່າຂອງ :py:func:`platform.machine()` ໃນລະບົບ." + +#: ../source/specifications/platform-compatibility-tags.rst:286 +msgid "" +"The value of ``sdk`` must be either ``iphoneos`` (for physical devices), or " +"``iphonesimulator`` (for device simulators). These SDKs have the same API " +"surface, but are incompatible at the binary level, even if they are running " +"on the same CPU architecture. Code compiled for an arm64 simulator will not " +"run on an arm64 device." +msgstr "" +"ຄ່າຂອງ ``sdk`` ຕ້ອງເປັນ ``iphoneos`` (ສຳລັບອຸປະກອນຈິງ), ຫຼື ``iphonesimulator`` " +"(ສຳລັບຕົວຈຳລອງອຸປະກອນ). SDK ເຫຼົ່ານີ້ມີ API ຄືກັນ, ແຕ່ບໍ່ສາມາດເຂົ້າກັນໄດ້ໃນລະດັບ binary, " +"ເຖິງແມ່ນວ່າພວກມັນຈະລັນຢູ່ໃນສະຖາປັດຕະຍະກຳ CPU ດຽວກັນກໍຕາມ. ໂຄ້ດທີ່ compile ສຳລັບ arm64 " +"simulator ຈະບໍ່ສາມາດລັນໃນອຸປະກອນ arm64 ຈິງໄດ້." + +#: ../source/specifications/platform-compatibility-tags.rst:292 +msgid "" +"The combination of :file:`{arch}_{sdk}` is referred to as the \"multiarch\". " +"There are three possible values for multiarch:" +msgstr "" +"ການລວມກັນຂອງ :file:`{arch}_{sdk}` ເອີ້ນວ່າ \"multiarch\". ມີສາມຄ່າທີ່ເປັນໄປໄດ້ສຳລັບ " +"multiarch:" + +#: ../source/specifications/platform-compatibility-tags.rst:295 +msgid "" +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" +msgstr "" +"``arm64_iphoneos``, ສຳລັບອຸປະກອນ iPhone/iPad ຈິງ. ນີ້ລວມເຖິງທຸກອຸປະກອນ iOS " +"ທີ່ຜະລິດປະມານຕັ້ງແຕ່ປີ 2015;" + +#: ../source/specifications/platform-compatibility-tags.rst:297 +msgid "" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" +msgstr "" +"``arm64_iphonesimulator``, ສຳລັບຕົວຈຳລອງທີ່ລັນເທິງ Apple Silicon macOS hardware; " +"ແລະ" + +#: ../source/specifications/platform-compatibility-tags.rst:299 +msgid "``x86_64_iphonesimulator``, for simulators running on x86_64 hardware." +msgstr "``x86_64_iphonesimulator``, ສຳລັບຕົວຈຳລອງທີ່ລັນເທິງ x86_64 hardware." + +#: ../source/specifications/platform-compatibility-tags.rst:302 +msgid "Use" +msgstr "ການໃຊ້ງານ" + +#: ../source/specifications/platform-compatibility-tags.rst:304 +msgid "" +"The tags are used by installers to decide which built distribution (if any) " +"to download from a list of potential built distributions. The installer " +"maintains a list of (pyver, abi, arch) tuples that it will support. If the " +"built distribution's tag is ``in`` the list, then it can be installed." +msgstr "" +"ແທັກເຫຼົ່ານີ້ຖືກໃຊ້ໂດຍຕົວຕິດຕັ້ງເພື່ອຕັດສິນໃຈວ່າຈະດາວໂຫລດການແຈກຢາຍທີ່ build ແລ້ວອັນໃດ (ຖ້າມີ) " +"ຈາກລາຍຊື່ການແຈກຢາຍທີ່ມີໃຫ້. ຕົວຕິດຕັ້ງຈະເກັບລາຍຊື່ຂອງ (pyver, abi, arch) ທີ່ມັນຮອງຮັບ. " +"ຖ້າແທັກຂອງການແຈກຢາຍທີ່ build ແລ້ວ ``ຢູ່ໃນ`` ລາຍຊື່, ມັນກໍສາມາດຕິດຕັ້ງໄດ້." + +#: ../source/specifications/platform-compatibility-tags.rst:310 +msgid "" +"It is recommended that installers try to choose the most feature complete " +"built distribution available (the one most specific to the installation " +"environment) by default before falling back to pure Python versions " +"published for older Python releases. Installers are also recommended to " +"provide a way to configure and re-order the list of allowed compatibility " +"tags; for example, a user might accept only the ``*-none-any`` tags to only " +"download built packages that advertise themselves as being pure Python." +msgstr "" +"ແນະນຳໃຫ້ຕົວຕິດຕັ້ງພະຍາຍາມເລືອກການແຈກຢາຍທີ່ build ແລ້ວທີ່ມີຄຸນສົມບັດຄົບຖ້ວນທີ່ສຸດ " +"(ອັນທີ່ສະເພາະເຈາະຈົງກັບສະພາບແວດລ້ອມການຕິດຕັ້ງທີ່ສຸດ) ໂດຍຄ່າເລີ່ມຕົ້ນ ກ່ອນທີ່ຈະ ກັບໄປໃຊ້ເວີຊັນ pure " +"Python ທີ່ເຜີຍແຜ່ສຳລັບ Python ລຸ້ນເກົ່າ. ແນະນຳໃຫ້ຕົວຕິດຕັ້ງ ມີວິທີການຕັ້ງຄ່າ ແລະ " +"ຈັດລຳດັບລາຍຊື່ແທັກຄວາມເຂົ້າກັນໄດ້ທີ່ອະນຸຍາດ; ຕົວຢ່າງ, ຜູ້ໃຊ້ອາດຈະຍອມຮັບສະເພາະແທັກ ``*-none-" +"any`` ເພື່ອດາວໂຫລດສະເພາະແພັກເກດ ທີ່ລະບຸວ່າເປັນ pure Python ເທົ່ານັ້ນ." + +#: ../source/specifications/platform-compatibility-tags.rst:318 +msgid "" +"Another desirable installer feature might be to include \"re-compile from " +"source if possible\" as more preferable than some of the compatible but " +"legacy pre-built options." +msgstr "" +"ຄຸນສົມບັດຂອງຕົວຕິດຕັ້ງທີ່ດີອີກຢ່າງໜຶ່ງອາດຈະເປັນການລວມເອົາ \"re-compile ຈາກ source " +"ຖ້າເປັນໄປໄດ້\" ໃຫ້ມີຄວາມສຳຄັນກວ່າຕົວເລືອກ pre-built ທີ່ເຂົ້າກັນໄດ້ແຕ່ເປັນຂອງເກົ່າ." + +#: ../source/specifications/platform-compatibility-tags.rst:322 +msgid "" +"This example list is for an installer running under CPython 3.3 on a " +"linux_x86_64 system. It is in order from most-preferred (a distribution with " +"a compiled extension module, built for the current version of Python) to " +"least-preferred (a pure-Python distribution built with an older version of " +"Python):" +msgstr "" +"ລາຍຊື່ຕົວຢ່າງນີ້ແມ່ນສຳລັບຕົວຕິດຕັ້ງທີ່ລັນພາຍໃຕ້ CPython 3.3 ໃນລະບົບ linux_x86_64. " +"ມັນລຽງລຳດັບຈາກສິ່ງທີ່ຕ້ອງການທີ່ສຸດ (ການແຈກຢາຍທີ່ມີ extension module ທີ່ compile ແລ້ວ, build " +"ສຳລັບ Python ເວີຊັນປະຈຸບັນ) ໄປຫາສິ່ງທີ່ຕ້ອງການໜ້ອຍທີ່ສຸດ (ການແຈກຢາຍ pure-Python ທີ່ build " +"ດ້ວຍ Python ເວີຊັນເກົ່າ):" + +#: ../source/specifications/platform-compatibility-tags.rst:328 +msgid "cp33-cp33m-linux_x86_64" +msgstr "cp33-cp33m-linux_x86_64" + +#: ../source/specifications/platform-compatibility-tags.rst:329 +msgid "cp33-abi3-linux_x86_64" +msgstr "cp33-abi3-linux_x86_64" + +#: ../source/specifications/platform-compatibility-tags.rst:330 +msgid "cp3-abi3-linux_x86_64" +msgstr "cp3-abi3-linux_x86_64" + +#: ../source/specifications/platform-compatibility-tags.rst:331 +msgid "cp33-none-linux_x86_64*" +msgstr "cp33-none-linux_x86_64*" + +#: ../source/specifications/platform-compatibility-tags.rst:332 +msgid "cp3-none-linux_x86_64*" +msgstr "cp3-none-linux_x86_64*" + +#: ../source/specifications/platform-compatibility-tags.rst:333 +msgid "py33-none-linux_x86_64*" +msgstr "py33-none-linux_x86_64*" + +#: ../source/specifications/platform-compatibility-tags.rst:334 +msgid "py3-none-linux_x86_64*" +msgstr "py3-none-linux_x86_64*" + +#: ../source/specifications/platform-compatibility-tags.rst:335 +msgid "cp33-none-any" +msgstr "cp33-none-any" + +#: ../source/specifications/platform-compatibility-tags.rst:336 +msgid "cp3-none-any" +msgstr "cp3-none-any" + +#: ../source/specifications/platform-compatibility-tags.rst:337 +msgid "py33-none-any" +msgstr "py33-none-any" + +#: ../source/specifications/platform-compatibility-tags.rst:338 +msgid "py3-none-any" +msgstr "py3-none-any" + +#: ../source/specifications/platform-compatibility-tags.rst:339 +msgid "py32-none-any" +msgstr "py32-none-any" + +#: ../source/specifications/platform-compatibility-tags.rst:340 +msgid "py31-none-any" +msgstr "py31-none-any" + +#: ../source/specifications/platform-compatibility-tags.rst:341 +msgid "py30-none-any" +msgstr "py30-none-any" + +#: ../source/specifications/platform-compatibility-tags.rst:343 +msgid "" +"Built distributions may be platform specific for reasons other than C " +"extensions, such as by including a native executable invoked as a subprocess." +msgstr "" +"ການແຈກຢາຍທີ່ build ແລ້ວອາດຈະສະເພາະກັບແພລັດຟອມດ້ວຍເຫດຜົນອື່ນນອກຈາກ C extensions, ເຊັ່ນ " +"ການລວມເອົາໄຟລ໌ native executable ທີ່ຖືກເອີ້ນໃຊ້ເປັນ subprocess." + +#: ../source/specifications/platform-compatibility-tags.rst:347 +msgid "" +"Sometimes there will be more than one supported built distribution for a " +"particular version of a package. For example, a packager could release a " +"package tagged ``cp33-abi3-linux_x86_64`` that contains an optional C " +"extension and the same distribution tagged ``py3-none-any`` that does not. " +"The index of the tag in the supported tags list breaks the tie, and the " +"package with the C extension is installed in preference to the package " +"without because that tag appears first in the list." +msgstr "" +"ບາງຄັ້ງອາດຈະມີການແຈກຢາຍທີ່ build ແລ້ວຫຼາຍກວ່າໜຶ່ງອັນທີ່ຮອງຮັບສຳລັບເວີຊັນສະເພາະ ຂອງແພັກເກດ. " +"ຕົວຢ່າງ, ຜູ້ເຮັດແພັກເກດອາດຈະເຜີຍແຜ່ແພັກເກດທີ່ຕິດແທັກ ``cp33-abi3-linux_x86_64`` ເຊິ່ງມີ C " +"extension ເສີມ ແລະ ການແຈກຢາຍອັນດຽວກັນທີ່ຕິດແທັກ ``py3-none-any`` ທີ່ບໍ່ມີ C extension. " +"ລຳດັບຂອງແທັກໃນລາຍຊື່ແທັກທີ່ຮອງຮັບຈະເປັນຕົວຕັດສິນ, ແລະ ແພັກເກດທີ່ມີ C extension " +"ຈະຖືກຕິດຕັ້ງກ່ອນແພັກເກດທີ່ບໍ່ມີ ເພາະວ່າແທັກນັ້ນ ປະກົດຂຶ້ນກ່ອນໃນລາຍຊື່." + +#: ../source/specifications/platform-compatibility-tags.rst:356 +msgid "Compressed Tag Sets" +msgstr "ຊຸດແທັກແບບຫຍໍ້ (Compressed Tag Sets)" + +#: ../source/specifications/platform-compatibility-tags.rst:358 +msgid "" +"To allow for compact filenames of bdists that work with more than one " +"compatibility tag triple, each tag in a filename can instead be a '.'-" +"separated, sorted, collection of tags. For example, pip, a pure-Python " +"package that is written to run under Python 2 and 3 with the same source " +"code, could distribute a bdist with the tag ``py2.py3-none-any``. The full " +"list of simple tags is::" +msgstr "" +"ເພື່ອໃຫ້ຊື່ໄຟລ໌ຂອງ bdists ມີຂະໜາດນ້ອຍລົງ ແລະ ສາມາດເຮັດວຽກກັບແທັກຄວາມເຂົ້າກັນໄດ້ ຫຼາຍກວ່າໜຶ່ງຊຸດ, " +"ແຕ່ລະແທັກໃນຊື່ໄຟລ໌ສາມາດໃຊ້ເປັນການລວມແທັກທີ່ແຍກດ້ວຍ ``.`` ແລະ ຈັດລຳດັບແລ້ວ. ຕົວຢ່າງ, pip, " +"ເຊິ່ງເປັນແພັກເກດ pure-Python ທີ່ຂຽນມາເພື່ອ ລັນພາຍໃຕ້ Python 2 ແລະ 3 ດ້ວຍ source code " +"ດຽວກັນ, ສາມາດເຜີຍແຜ່ bdist ດ້ວຍແທັກ ``py2.py3-none-any``. ລາຍຊື່ເຕັມຂອງແທັກແບບງ່າຍໆຄື::" + +#: ../source/specifications/platform-compatibility-tags.rst:370 +msgid "" +"A bdist format that implements this scheme should include the expanded tags " +"in bdist-specific metadata. This compression scheme can generate large " +"numbers of unsupported tags and \"impossible\" tags that are supported by no " +"Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." +msgstr "" +"ຮູບແບບ bdist ທີ່ນຳໃຊ້ຮູບແບບນີ້ຄວນລວມເອົາແທັກທີ່ຂະຫຍາຍແລ້ວໄວ້ໃນຂໍ້ມູນເມຕາ ສະເພາະຂອງ bdist. " +"ຮູບແບບການຫຍໍ້ນີ້ສາມາດສ້າງແທັກທີ່ບໍ່ໄດ້ຮັບການຮອງຮັບ ແລະ ແທັກທີ່ \"ເປັນໄປບໍ່ໄດ້\" ເຊິ່ງບໍ່ມີ Python " +"implementation ໃດຮອງຮັບ ຕົວຢ່າງ \"cp33-cp31u-win64\", ດັ່ງນັ້ນຄວນໃຊ້ດ້ວຍຄວາມລະມັດລະວັງ." + +#: ../source/specifications/platform-compatibility-tags.rst:383 +msgid "What tags are used by default?" +msgstr "ແທັກໃດຖືກໃຊ້ເປັນຄ່າເລີ່ມຕົ້ນ?" + +#: ../source/specifications/platform-compatibility-tags.rst:379 +msgid "" +"Tools should use the most-preferred architecture dependent tag e.g. ``cp33-" +"cp33m-win32`` or the most-preferred pure python tag e.g. ``py33-none-any`` " +"by default. If the packager overrides the default it indicates that they " +"intended to provide cross-Python compatibility." +msgstr "" +"ເຄື່ອງມືຄວນໃຊ້ແທັກທີ່ຂຶ້ນກັບສະຖາປັດຕະຍະກຳທີ່ຕ້ອງການທີ່ສຸດ ເຊັ່ນ ``cp33-cp33m-win32`` ຫຼື ແທັກ pure " +"python ທີ່ຕ້ອງການທີ່ສຸດ ເຊັ່ນ ``py33-none-any`` ເປັນຄ່າເລີ່ມຕົ້ນ. " +"ຖ້າຜູ້ສ້າງແພັກເກັດກຳນົດຄ່າທັບຄ່າເລີ່ມຕົ້ນ ມັນສະແດງວ່າພວກເຂົາ ຕັ້ງໃຈທີ່ຈະໃຫ້ຮອງຮັບຄວາມເຂົ້າກັນໄດ້ລະຫວ່າງ " +"Python ຫຼາຍເວີຊັນ." + +#: ../source/specifications/platform-compatibility-tags.rst:393 +msgid "" +"What tag do I use if my distribution uses a feature exclusive to the newest " +"version of Python?" +msgstr "ຂ້ອຍຄວນໃຊ້ແທັກໃດ ຖ້າການແຈກຢາຍຂອງຂ້ອຍໃຊ້ຄຸນສົມບັດທີ່ມີສະເພາະໃນເວີຊັນໃໝ່ລ່າສຸດຂອງ Python?" + +#: ../source/specifications/platform-compatibility-tags.rst:386 +msgid "" +"Compatibility tags aid installers in selecting the *most compatible* build " +"of a *single version* of a distribution. For example, when there is no " +"Python 3.3 compatible build of ``beaglevote-1.2.0`` (it uses a Python 3.4 " +"exclusive feature) it may still use the ``py3-none-any`` tag instead of the " +"``py34-none-any`` tag. A Python 3.3 user must combine other qualifiers, such " +"as a requirement for the older release ``beaglevote-1.1.0`` that does not " +"use the new feature, to get a compatible build." +msgstr "" +"ແທັກຄວາມເຂົ້າກັນໄດ້ຊ່ວຍໃຫ້ຜູ້ຕິດຕັ້ງເລືອກບິວດ໌ (build) ທີ່ *ເຂົ້າກັນໄດ້ດີທີ່ສຸດ* ຂອງ *ເວີຊັນດຽວ* " +"ຂອງການແຈກຢາຍ. ຕົວຢ່າງ: ເມື່ອບໍ່ມີບິວດ໌ຂອງ ``beaglevote-1.2.0`` ທີ່ເຂົ້າກັນໄດ້ກັບ Python 3.3 " +"(ຍ້ອນມັນໃຊ້ຄຸນສົມບັດສະເພາະຂອງ Python 3.4) ມັນອາດຈະ ຍັງໃຊ້ແທັກ ``py3-none-any`` " +"ແທນທີ່ຈະເປັນແທັກ ``py34-none-any``. ຜູ້ໃຊ້ Python 3.3 ຕ້ອງໃຊ້ຂໍ້ກຳນົດອື່ນຮ່ວມນຳ ເຊັ່ນ: " +"ການລະບຸຄວາມຕ້ອງການເວີຊັນເກົ່າ ``beaglevote-1.1.0`` ທີ່ບໍ່ໄດ້ໃຊ້ຄຸນສົມບັດໃໝ່ " +"ເພື່ອໃຫ້ໄດ້ບິວດ໌ທີ່ເຂົ້າກັນໄດ້." + +#: ../source/specifications/platform-compatibility-tags.rst:398 +msgid "Why isn't there a ``.`` in the Python version number?" +msgstr "ເປັນຫຍັງຈຶ່ງບໍ່ມີ ``.`` ໃນເລກເວີຊັນຂອງ Python?" + +#: ../source/specifications/platform-compatibility-tags.rst:396 +msgid "" +"CPython has lasted 20+ years without a 3-digit major release. This should " +"continue for some time. Other implementations may use _ as a delimiter, " +"since both - and . delimit the surrounding filename." +msgstr "" +"CPython ຢູ່ມາໄດ້ 20 ກວ່າປີໂດຍບໍ່ມີການອອກເວີຊັນຫຼັກ 3 ຫຼັກ. ສິ່ງນີ້ຄວນຈະດຳເນີນຕໍ່ໄປ ອີກໄລຍະໜຶ່ງ. " +"ການເຮັດວຽກ (implementations) ອື່ນໆ ອາດຈະໃຊ້ _ ເປັນຕົວແຍກ, ເນື່ອງຈາກທັງ - ແລະ . " +"ຖືກໃຊ້ເປັນຕົວແຍກໃນຊື່ໄຟລ໌ແລ້ວ." + +#: ../source/specifications/platform-compatibility-tags.rst:404 +msgid "" +"Why normalise hyphens and other non-alphanumeric characters to underscores?" +msgstr "" +"ເປັນຫຍັງຈຶ່ງປັບປ່ຽນເຄື່ອງໝາຍຂີດຕໍ່ ແລະ ອັກສອນທີ່ບໍ່ແມ່ນຕົວເລກຫຼືຕົວໜັງສືອື່ນໆ ໃຫ້ເປັນເຄື່ອງໝາຍຂີດກ້ອງ?" + +#: ../source/specifications/platform-compatibility-tags.rst:401 +msgid "" +"To avoid conflicting with the ``.`` and ``-`` characters that separate " +"components of the filename, and for better compatibility with the widest " +"range of filesystem limitations for filenames (including being usable in URL " +"paths without quoting)." +msgstr "" +"ເພື່ອຫຼີກເວັ້ນການຂັດແຍ່ງກັບຕົວອັກສອນ ``.`` ແລະ ``-`` ທີ່ໃຊ້ແຍກສ່ວນປະກອບຂອງຊື່ໄຟລ໌, ແລະ " +"ເພື່ອຄວາມເຂົ້າກັນໄດ້ທີ່ດີຂຶ້ນກັບຂໍ້ຈຳກັດຂອງລະບົບໄຟລ໌ທີ່ຫຼາກຫຼາຍ (ລວມເຖິງການ ນຳໃຊ້ໃນ URL path " +"ໄດ້ໂດຍບໍ່ຕ້ອງໃຊ້ເຄື່ອງໝາຍອ້າງອີງ)." + +#: ../source/specifications/platform-compatibility-tags.rst:413 +msgid "Why not use special character rather than ``.`` or ``-``?" +msgstr "ເປັນຫຍັງຈຶ່ງບໍ່ໃຊ້ຕົວອັກສອນພິເສດ ແທນທີ່ຈະເປັນ ``.`` ຫຼື ``-``?" + +#: ../source/specifications/platform-compatibility-tags.rst:407 +msgid "" +"Either because that character is inconvenient or potentially confusing in " +"some contexts (for example, ``+`` must be quoted in URLs, ``~`` is used to " +"denote the user's home directory in POSIX), or because the advantages " +"weren't sufficiently compelling to justify changing the existing reference " +"implementation for the wheel format defined in :pep:`427` (for example, " +"using ``,`` rather than ``.`` to separate components in a compressed tag)." +msgstr "" +"ອາດເປັນຍ້ອນຕົວອັກສອນນັ້ນບໍ່ສະດວກ ຫຼື ອາດເຮັດໃຫ້ເກີດຄວາມສັບສົນໃນບາງບໍລິບົດ (ຕົວຢ່າງ: ``+`` " +"ຕ້ອງໃສ່ເຄື່ອງໝາຍອ້າງອີງໃນ URL, ``~`` ຖືກໃຊ້ແທນໄດເຣັກທໍຣີຫຼັກຂອງຜູ້ໃຊ້ໃນ POSIX), ຫຼື " +"ຍ້ອນວ່າຂໍ້ດີຂອງມັນຍັງບໍ່ມີນໍ້າໜັກພຽງພໍທີ່ຈະປ່ຽນແປງ reference implementation ທີ່ມີຢູ່ ສຳລັບຮູບແບບ " +"wheel ທີ່ກຳນົດໄວ້ໃນ :pep:`427`." + +#: ../source/specifications/platform-compatibility-tags.rst:418 +msgid "Who will maintain the registry of abbreviated implementations?" +msgstr "ໃຜຈະເປັນຜູ້ເບິ່ງແຍງລະບົບການລົງທະບຽນຕົວຫຍໍ້ຂອງການເຮັດວຽກ (implementations)?" + +#: ../source/specifications/platform-compatibility-tags.rst:416 +msgid "" +"New two-letter abbreviations can be requested on the python-dev mailing " +"list. As a rule of thumb, abbreviations are reserved for the current 4 most " +"prominent implementations." +msgstr "" +"ສາມາດຂໍຕົວຫຍໍ້ສອງຕົວອັກສອນໃໝ່ໄດ້ໃນ mailing list ຂອງ python-dev. ໂດຍທົ່ວໄປແລ້ວ, " +"ຕົວຫຍໍ້ຈະຖືກສະຫງວນໄວ້ສຳລັບ 4 implementations ທີ່ໂດດເດັ່ນທີ່ສຸດໃນປັດຈຸບັນ." + +#: ../source/specifications/platform-compatibility-tags.rst:423 +msgid "Does the compatibility tag go into METADATA or PKG-INFO?" +msgstr "ແທັກຄວາມເຂົ້າກັນໄດ້ຄວນຢູ່ໃນ METADATA ຫຼື PKG-INFO?" + +#: ../source/specifications/platform-compatibility-tags.rst:421 +msgid "" +"No. The compatibility tag is part of the built distribution's metadata. " +"METADATA / PKG-INFO should be valid for an entire distribution, not a single " +"build of that distribution." +msgstr "" +"ບໍ່. ແທັກຄວາມເຂົ້າກັນໄດ້ແມ່ນສ່ວນໜຶ່ງຂອງ metadata ຂອງການແຈກຢາຍທີ່ບິວດ໌ (build) ແລ້ວ. " +"METADATA / PKG-INFO ຄວນມີຜົນໃຊ້ໄດ້ກັບການແຈກຢາຍທັງໝົດ, ບໍ່ແມ່ນພຽງແຕ່ບິວດ໌ດຽວ " +"ຂອງການແຈກຢາຍນັ້ນ." + +#: ../source/specifications/platform-compatibility-tags.rst:429 +msgid "Why didn't you mention my favorite Python implementation?" +msgstr "ເປັນຫຍັງເຈົ້າຈຶ່ງບໍ່ໄດ້ກ່າວເຖິງ Python implementation ທີ່ຂ້ອຍມັກ?" + +#: ../source/specifications/platform-compatibility-tags.rst:426 +msgid "" +"The abbreviated tags facilitate sharing compiled Python code in a public " +"index. Your Python implementation can use this specification too, but with " +"longer tags. Recall that all \"pure Python\" built distributions just use " +"``py``." +msgstr "" +"ແທັກຕົວຫຍໍ້ຊ່ວຍໃຫ້ການແບ່ງປັນລະຫັດ Python ທີ່ຄອມພາຍ (compiled) ແລ້ວໃນ index " +"ສາທາລະນະສະດວກຂຶ້ນ. Python implementation ຂອງເຈົ້າກໍສາມາດໃຊ້ຂໍ້ກຳນົດນີ້ໄດ້ຄືກັນ, " +"ແຕ່ຕ້ອງໃຊ້ແທັກທີ່ຍາວກວ່າ. ຢ່າລືມວ່າການແຈກຢາຍແບບ \"pure Python\" ທັງໝົດແມ່ນໃຊ້ພຽງ ``py``." + +#: ../source/specifications/platform-compatibility-tags.rst:437 +msgid "" +"Why is the ABI tag (the second tag) sometimes \"none\" in the reference " +"implementation?" +msgstr "" +"ເປັນຫຍັງແທັກ ABI (ແທັກທີສອງ) ບາງຄັ້ງຈຶ່ງເປັນ \"none\" ໃນ reference implementation?" + +#: ../source/specifications/platform-compatibility-tags.rst:432 +msgid "" +"Since Python 2 does not have an easy way to get to the SOABI (the concept " +"comes from newer versions of Python 3) the reference implementation at the " +"time of writing guesses \"none\". Ideally it would detect \"py27(d|m|u)\" " +"analogous to newer versions of Python, but in the meantime \"none\" is a " +"good enough way to say \"don't know\"." +msgstr "" +"ເນື່ອງຈາກ Python 2 ບໍ່ມີວິທີງ່າຍໆໃນການເຂົ້າເຖິງ SOABI (ແນວຄວາມຄິດນີ້ມາຈາກເວີຊັນໃໝ່ຂອງ Python " +"3) ໃນຂະນະທີ່ຂຽນ reference implementation ນີ້ຈຶ່ງກຳນົດໃຫ້ເປັນ \"none\". ໃນທາງທີ່ດີ " +"ມັນຄວນຈະກວດຫາ \"py27(d|m|u)\" ຄ້າຍຄືກັບ Python ເວີຊັນໃໝ່, ແຕ່ໃນລະຫວ່າງນີ້ \"none\" " +"ກໍເປັນວິທີທີ່ດີພໍທີ່ຈະບອກວ່າ \"ບໍ່ຮູ້\"." + +#: ../source/specifications/platform-compatibility-tags.rst:442 +msgid "" +"February 2013: The original version of this specification was approved " +"through :pep:`425`." +msgstr "ກຸມພາ 2013: ເວີຊັນເລີ່ມຕົ້ນຂອງຂໍ້ກຳນົດນີ້ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`425`." + +#: ../source/specifications/platform-compatibility-tags.rst:444 +msgid "January 2016: The ``manylinux1`` tag was approved through :pep:`513`." +msgstr "ມັງກອນ 2016: ແທັກ ``manylinux1`` ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`513`." + +#: ../source/specifications/platform-compatibility-tags.rst:445 +msgid "April 2018: The ``manylinux2010`` tag was approved through :pep:`571`." +msgstr "ເມສາ 2018: ແທັກ ``manylinux2010`` ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`571`." + +#: ../source/specifications/platform-compatibility-tags.rst:446 +msgid "July 2019: The ``manylinux2014`` tag was approved through :pep:`599`." +msgstr "ກໍລະກົດ 2019: ແທັກ ``manylinux2014`` ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`599`." + +#: ../source/specifications/platform-compatibility-tags.rst:447 +msgid "" +"November 2019: The ``manylinux_x_y`` perennial tag was approved " +"through :pep:`600`." +msgstr "" +"ພະຈິກ 2019: ແທັກ ``manylinux_x_y`` ແບບຕະຫຼອດການ ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`600`." + +#: ../source/specifications/platform-compatibility-tags.rst:449 +msgid "April 2021: The ``musllinux_x_y`` tag was approved through :pep:`656`." +msgstr "ເມສາ 2021: ແທັກ ``musllinux_x_y`` ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`656`." + +#: ../source/specifications/platform-compatibility-tags.rst:450 +msgid "December 2023: The tags for iOS were approved through :pep:`730`." +msgstr "ທັນວາ 2023: ແທັກສຳລັບ iOS ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`730`." + +#: ../source/specifications/platform-compatibility-tags.rst:451 +msgid "March 2024: The tags for Android were approved through :pep:`738`." +msgstr "ມີນາ 2024: ແທັກສຳລັບ Android ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`738`." + +#: ../source/specifications/project-status-markers.rst:5 +msgid "Project Status Markers" +msgstr "ເຄື່ອງໝາຍສະຖານະຂອງໂຄງການ" + +#: ../source/specifications/project-status-markers.rst:9 +msgid "This specification was originally defined in :pep:`792`." +msgstr "ຂໍ້ກຳນົດນີ້ຖືກກຳນົດຂຶ້ນມາໃນເບື້ອງຕົ້ນໃນ :pep:`792`." + +#: ../source/specifications/project-status-markers.rst:14 +msgid "" +":pep:`792` includes changes to the HTML and JSON index APIs. These changes " +"are documented in the :ref:`simple-repository-api` under :ref:`HTML - " +"Project Detail ` and :ref:`JSON - " +"Project Detail `." +msgstr "" +":pep:`792` ລວມມີການປ່ຽນແປງໃນ API ຂອງ HTML ແລະ JSON index. ການປ່ຽນແປງເຫຼົ່ານີ້ " +"ຖືກບັນທຶກໄວ້ໃນ :ref:`simple-repository-api` ພາຍໃຕ້ :ref:`HTML - Project Detail " +"` ແລະ :ref:`JSON - Project Detail " +"`." + +#: ../source/specifications/project-status-markers.rst:22 +msgid "" +"A project always has exactly one status. If no status is explicitly noted, " +"then the project is considered to be in the ``active`` state." +msgstr "" +"ໂຄງການໜຶ່ງຈະມີສະຖານະດຽວສະເໝີ. ຖ້າບໍ່ມີການລະບຸສະຖານະຢ່າງຊັດເຈນ, ໂຄງການຈະຖືກຖືວ່າຢູ່ໃນສະຖານະ " +"``active`` (ກຳລັງດຳເນີນການ)." + +#: ../source/specifications/project-status-markers.rst:25 +msgid "" +"Indices **MAY** implement any subset of the status markers specified, as " +"applicable to their needs." +msgstr "Index **ອາດຈະ** ນຳໃຊ້ສ່ວນໃດສ່ວນໜຶ່ງຂອງເຄື່ອງໝາຍສະຖານະທີ່ກຳນົດໄວ້ ຕາມຄວາມຈຳເປັນ." + +#: ../source/specifications/project-status-markers.rst:28 +msgid "" +"This standard does not prescribe *which* principals (i.e. project " +"maintainers, index administrators, etc.) are allowed to set and unset which " +"statuses." +msgstr "" +"ມາດຕະຖານນີ້ບໍ່ໄດ້ກຳນົດວ່າ *ບຸກຄົນໃດ* (ເຊັ່ນ: ຜູ້ເບິ່ງແຍງໂຄງການ, ຜູ້ເບິ່ງແຍງ index, ແລະ ອື່ນໆ) " +"ທີ່ມີສິດໃນການຕັ້ງຄ່າ ຫຼື ຍົກເລີກສະຖານະໃດໆ." + +#: ../source/specifications/project-status-markers.rst:32 +msgid "``active``" +msgstr "``active`` (ກຳລັງດຳເນີນການ)" + +#: ../source/specifications/project-status-markers.rst:34 +msgid "" +"Description: The project is active. This is the default status for a project." +msgstr "ລາຍລະອຽດ: ໂຄງການກຳລັງດຳເນີນງານຢູ່. ນີ້ແມ່ນສະຖານະເລີ່ມຕົ້ນຂອງໂຄງການ." + +#: ../source/specifications/project-status-markers.rst:36 +#: ../source/specifications/project-status-markers.rst:49 +#: ../source/specifications/project-status-markers.rst:65 +#: ../source/specifications/project-status-markers.rst:83 +msgid "Index semantics:" +msgstr "ຄວາມໝາຍທາງດ້ານ Index:" + +#: ../source/specifications/project-status-markers.rst:38 +msgid "" +"The index hosting the project **MUST** allow uploads of new distributions to " +"the project." +msgstr "Index ທີ່ໂຮສໂຄງການ **ຕ້ອງ** ອະນຸຍາດໃຫ້ອັບໂຫຼດການແຈກຢາຍໃໝ່ໆເຂົ້າໃນໂຄງການ." + +#: ../source/specifications/project-status-markers.rst:40 +#: ../source/specifications/project-status-markers.rst:53 +msgid "" +"The index **MUST** offer existing distributions of the project for download." +msgstr "Index **ຕ້ອງ** ມີການແຈກຢາຍທີ່ມີຢູ່ຂອງໂຄງການໃຫ້ດາວໂຫຼດ." + +#: ../source/specifications/project-status-markers.rst:42 +msgid "Installer semantics: none." +msgstr "ຄວາມໝາຍທາງດ້ານຜູ້ຕິດຕັ້ງ: ບໍ່ມີ." + +#: ../source/specifications/project-status-markers.rst:45 +msgid "``archived``" +msgstr "``archived`` (ຖືກເກັບໄວ້)" + +#: ../source/specifications/project-status-markers.rst:47 +msgid "Description: The project does not expect to be updated in the future." +msgstr "ລາຍລະອຽດ: ໂຄງການບໍ່ໄດ້ຄາດຫວັງວ່າຈະມີການອັບເດດໃນອະນາຄົດ." + +#: ../source/specifications/project-status-markers.rst:51 +#: ../source/specifications/project-status-markers.rst:67 +msgid "" +"The index hosting the project **MUST NOT** allow uploads of new " +"distributions to the project." +msgstr "Index ທີ່ໂຮສໂຄງການ **ຕ້ອງບໍ່** ອະນຸຍາດໃຫ້ອັບໂຫຼດການແຈກຢາຍໃໝ່ໆເຂົ້າໃນໂຄງການ." + +#: ../source/specifications/project-status-markers.rst:55 +#: ../source/specifications/project-status-markers.rst:71 +#: ../source/specifications/project-status-markers.rst:87 +msgid "Installer semantics:" +msgstr "ຄວາມໝາຍທາງດ້ານຜູ້ຕິດຕັ້ງ:" + +#: ../source/specifications/project-status-markers.rst:57 +msgid "Installers **MAY** produce warnings about a project's archival." +msgstr "ຜູ້ຕິດຕັ້ງ **ອາດຈະ** ແຈ້ງເຕືອນກ່ຽວກັບການເກັບຮັກສາ (archival) ຂອງໂຄງການ." + +#: ../source/specifications/project-status-markers.rst:60 +msgid "``quarantined``" +msgstr "``quarantined`` (ຖືກກັກບໍລິເວນ)" + +#: ../source/specifications/project-status-markers.rst:62 +msgid "" +"Description: The project is considered generally unsafe for use, e.g. due to " +"malware." +msgstr "" +"ລາຍລະອຽດ: ໂຄງການຖືກພິຈາລະນາວ່າບໍ່ປອດໄພທົ່ວໄປໃນການນຳໃຊ້ ເຊັ່ນ: ຍ້ອນມີມັລແວ (malware)." + +#: ../source/specifications/project-status-markers.rst:69 +msgid "" +"The index **MUST NOT** offer any distributions of the project for download." +msgstr "Index **ຕ້ອງບໍ່** ມີການແຈກຢາຍໃດໆຂອງໂຄງການໃຫ້ດາວໂຫຼດ." + +#: ../source/specifications/project-status-markers.rst:73 +msgid "" +"Installers **MAY** produce warnings about a project's quarantine, although " +"doing so is effectively moot (as the index will not offer any distributions " +"for installation)." +msgstr "" +"ຜູ້ຕິດຕັ້ງ **ອາດຈະ** ແຈ້ງເຕືອນກ່ຽວກັບການກັກບໍລິເວນຂອງໂຄງການ, ເຖິງແມ່ນວ່າການເຮັດ " +"ແບບນັ້ນອາດຈະບໍ່ມີຜົນຫຍັງຫຼາຍ (ເນື່ອງຈາກ Index ຈະບໍ່ມີການແຈກຢາຍໃຫ້ຕິດຕັ້ງຢູ່ແລ້ວ)." + +#: ../source/specifications/project-status-markers.rst:78 +msgid "``deprecated``" +msgstr "``deprecated`` (ຖືກຍົກເລີກການນຳໃຊ້)" + +#: ../source/specifications/project-status-markers.rst:80 +msgid "" +"Description: The project is considered obsolete, and may have been " +"superseded by another project." +msgstr "ລາຍລະອຽດ: ໂຄງການຖືກພິຈາລະນາວ່າລ້າສະໄໝ ແລະ ອາດຖືກປ່ຽນແທນໂດຍໂຄງການອື່ນ." + +#: ../source/specifications/project-status-markers.rst:85 +msgid "This status shares the same semantics as ``active``." +msgstr "ສະຖານະນີ້ມີຄວາມໝາຍຄືກັນກັບ ``active``." + +#: ../source/specifications/project-status-markers.rst:89 +msgid "Installers **MAY** produce warnings about a project's deprecation." +msgstr "ຜູ້ຕິດຕັ້ງ **ອາດຈະ** ແຈ້ງເຕືອນກ່ຽວກັບການຍົກເລີກການນຳໃຊ້ໂຄງການ." + +#: ../source/specifications/pylock-toml.rst:6 +msgid "``pylock.toml`` Specification" +msgstr "ຂໍ້ກຳນົດຂອງ ``pylock.toml``" + +#: ../source/specifications/pylock-toml.rst:8 +msgid "" +"The ``pylock.toml`` file format is for specifying dependencies to enable " +"reproducible installation in a Python environment." +msgstr "" +"ຮູບແບບໄຟລ໌ ``pylock.toml`` ແມ່ນສຳລັບກຳນົດ dependency ເພື່ອໃຫ້ສາມາດ ຕິດຕັ້ງຊ້ຳໄດ້ " +"(reproducible) ໃນສະພາບແວດລ້ອມ Python." + +#: ../source/specifications/pylock-toml.rst:11 +msgid "This specification was originally defined in :pep:`751`." +msgstr "ຂໍ້ກຳນົດນີ້ຖືກກຳນົດຂຶ້ນມາໃນເບື້ອງຕົ້ນໃນ :pep:`751`." + +#: ../source/specifications/pylock-toml.rst:16 +msgid "File Name" +msgstr "ຊື່ໄຟລ໌" + +#: ../source/specifications/pylock-toml.rst:18 +msgid "" +"A lock file MUST be named :file:`pylock.toml` or match the regular " +"expression ``r\"^pylock\\.([^.]+)\\.toml$\"`` if a name for the lock file is " +"desired or if multiple lock files exist (i.e. the regular expression " +"``r\"^pylock\\.([^.]+\\.)?toml$\"`` for any file name). The prefix and " +"suffix of a named file MUST be lowercase when possible, for easy detection " +"and removal, e.g.:" +msgstr "" +"ໄຟລ໌ lock **ຕ້ອງ** ຕັ້ງຊື່ວ່າ :file:`pylock.toml` ຫຼື ກົງກັບ regular expression " +"``r\"^pylock\\.([^.]+)\\.toml$\"`` ຫາກຕ້ອງການຕັ້ງຊື່ ຫຼື ຫາກມີຫຼາຍໄຟລ໌... ສ່ວນໜ້າ ແລະ " +"ສ່ວນທ້າຍຂອງຊື່ໄຟລ໌ **ຕ້ອງ** ເປັນຕົວພິມນ້ອຍຫາກເປັນໄປໄດ້ ເພື່ອໃຫ້ກວດຫາ ແລະ ລຶບອອກໄດ້ງ່າຍ, ເຊັ່ນ:" + +#: ../source/specifications/pylock-toml.rst:30 +msgid "" +"The expectation is that services that automatically install from lock files " +"will search for:" +msgstr "ສິ່ງທີ່ຄາດຫວັງຄື ບໍລິການທີ່ຕິດຕັ້ງອັດຕະໂນມັດຈາກໄຟລ໌ lock ຈະຄົ້ນຫາ:" + +#: ../source/specifications/pylock-toml.rst:33 +msgid "The lock file with the service's name and doing the default install" +msgstr "ໄຟລ໌ lock ທີ່ມີຊື່ຂອງບໍລິການ ແລະ ທຳການຕິດຕັ້ງແບບຄ່າເລີ່ມຕົ້ນ" + +#: ../source/specifications/pylock-toml.rst:34 +msgid "" +"A multi-use :file:`pylock.toml` with a dependency group with the name of the " +"service" +msgstr "ໄຟລ໌ :file:`pylock.toml` ແບບໃຊ້ຫຼາຍຄັ້ງທີ່ມີກຸ່ມ dependency ຕາມຊື່ຂອງບໍລິການ" + +#: ../source/specifications/pylock-toml.rst:35 +msgid "The default install of :file:`pylock.toml`" +msgstr "ການຕິດຕັ້ງຄ່າເລີ່ມຕົ້ນຂອງ :file:`pylock.toml`" + +#: ../source/specifications/pylock-toml.rst:37 +msgid "" +"E.g. a cloud host service named \"spam\" would first look " +"for :file:`pylock.spam.toml` to install from, and if that file didn't exist " +"then install from :file:`pylock.toml` and look for a dependency group named " +"\"spam\" to use if present." +msgstr "" +"ເຊັ່ນ: ບໍລິການຄລາວທີ່ຊື່ວ່າ \"spam\" ຈະຄົ້ນຫາ :file:`pylock.spam.toml` ກ່ອນ, " +"ຖ້າບໍ່ພົບກໍຈະຕິດຕັ້ງຈາກ :file:`pylock.toml` ແລະ ຄົ້ນຫາ dependency group ທີ່ຊື່ວ່າ \"spam\" " +"ແທນ." + +#: ../source/specifications/pylock-toml.rst:42 +msgid "" +"The lock file(s) SHOULD be located in the directory as appropriate for the " +"scope of the lock file. Locking against a single :file:`pyproject.toml`, for " +"instance, would place the :file:`pylock.toml` in the same directory. If the " +"lock file covered multiple projects in a monorepo, then the expectation is " +"the :file:`pylock.toml` file would be in the directory that held all the " +"projects being locked." +msgstr "" +"ໄຟລ໌ lock **ຄວນ** ຕັ້ງຢູ່ໃນໄດເຣັກທໍຣີທີ່ເໝາະສົມກັບຂອບເຂດຂອງມັນ. ເຊັ່ນ: ຫາກລັອກ " +"ໄຟລ໌ :file:`pyproject.toml` ພຽງອັນດຽວ, ກໍຄວນວາງ :file:`pylock.toml` " +"ໄວ້ໃນໄດເຣັກທໍຣີດຽວກັນ. ຫາກໄຟລ໌ lock ຄອບຄຸມຫຼາຍໂຄງການໃນ monorepo, ມັນກໍຄວນ " +"ຈະຢູ່ໃນໄດເຣັກທໍຣີທີ່ລວມທຸກໂຄງການເຫຼົ່ານັ້ນໄວ້." + +#: ../source/specifications/pylock-toml.rst:53 +msgid "The format of the file is TOML_." +msgstr "ຮູບແບບຂອງໄຟລ໌ແມ່ນ TOML_." + +#: ../source/specifications/pylock-toml.rst:55 +msgid "" +"Tools SHOULD write their lock files in a consistent way to minimize noise in " +"diff output. Keys in tables -- including the top-level table -- SHOULD be " +"recorded in a consistent order (if inspiration is desired, this " +"specification has tried to write down keys in a logical order). As well, " +"tools SHOULD sort arrays in consistent order. Usage of inline tables SHOULD " +"also be kept consistent." +msgstr "" +"ເຄື່ອງມື **ຄວນ** ຂຽນໄຟລ໌ lock ໃນຮູບແບບທີ່ຄົງທີ່ເພື່ອຫຼຸດຜ່ອນຄວາມແຕກຕ່າງໃນຜົນລັດ diff. Key " +"ໃນຕາຕະລາງ **ຄວນ** ຖືກບັນທຶກຕາມລໍາດັບທີ່ແນ່ນອນ. ເຊັ່ນດຽວກັນ, ເຄື່ອງມື **ຄວນ** ລຽງລຳດັບອາເຣ " +"(array) ໃຫ້ຄືກັນສະເໝີ." + +#: ../source/specifications/pylock-toml.rst:65 +msgid "``lock-version``" +msgstr "``lock-version``" + +#: ../source/specifications/pylock-toml.rst:67 +msgid "**Type**: string; value of ``\"1.0\"``" +msgstr "**ປະເພດ**: string; ມີຄ່າແມ່ນ ``\"1.0\"``" + +#: ../source/specifications/pylock-toml.rst:68 +#: ../source/specifications/pylock-toml.rst:174 +#: ../source/specifications/pylock-toml.rst:189 +#: ../source/specifications/pylock-toml.rst:202 +#: ../source/specifications/pylock-toml.rst:298 +#: ../source/specifications/pylock-toml.rst:348 +#: ../source/specifications/pylock-toml.rst:397 +#: ../source/specifications/pylock-toml.rst:505 +#: ../source/specifications/pylock-toml.rst:704 +msgid "**Required?**: yes" +msgstr "**ຈຳເປັນຫຼືບໍ່?**: ຈຳເປັນ" + +#: ../source/specifications/pylock-toml.rst:69 +msgid "**Inspiration**: :ref:`core-metadata-metadata-version`" +msgstr "**ແຮງບັນດານໃຈ**: :ref:`core-metadata-metadata-version`" + +#: ../source/specifications/pylock-toml.rst:70 +msgid "Record the file format version that the file adheres to." +msgstr "ບັນທຶກເວີຊັນຂອງຮູບແບບໄຟລ໌ທີ່ໄຟລ໌ນີ້ປະຕິບັດຕາມ." + +#: ../source/specifications/pylock-toml.rst:71 +msgid "" +"This PEP specifies the initial version -- and only valid value until future " +"updates to the standard change it -- as ``\"1.0\"``." +msgstr "" +"PEP ນີ້ກຳນົດເວີຊັນເລີ່ມຕົ້ນ (ແລະ ເປັນຄ່າດຽວທີ່ໃຊ້ໄດ້ ຈົນກວ່າຈະມີການອັບເດດມາດຕະຖານ ໃນອະນາຄົດ) ແມ່ນ " +"``\"1.0\"``." + +#: ../source/specifications/pylock-toml.rst:73 +msgid "" +"If a tool supports the major version but not the minor version, a tool " +"SHOULD warn when an unknown key is seen." +msgstr "" +"ຖ້າເຄື່ອງມືຮອງຮັບເວີຊັນຫຼັກ (major version) ແຕ່ບໍ່ຮອງຮັບເວີຊັນຍ່ອຍ (minor version), ເຄື່ອງມື " +"**ຄວນ** ແຈ້ງເຕືອນເມື່ອພົບ key ທີ່ບໍ່ຮູ້ຈັກ." + +#: ../source/specifications/pylock-toml.rst:75 +msgid "If a tool doesn't support a major version, it MUST raise an error." +msgstr "ຖ້າເຄື່ອງມືບໍ່ຮອງຮັບເວີຊັນຫຼັກ, ມັນ **ຕ້ອງ** ສະແດງຂໍ້ຜິດພາດ." + +#: ../source/specifications/pylock-toml.rst:81 +msgid "``environments``" +msgstr "``environments``" + +#: ../source/specifications/pylock-toml.rst:83 +#: ../source/specifications/pylock-toml.rst:110 +#: ../source/specifications/pylock-toml.rst:132 +#: ../source/specifications/pylock-toml.rst:154 +msgid "**Type**: Array of strings" +msgstr "**ປະເພດ**: ອາເຣ (Array) ຂອງ string" + +#: ../source/specifications/pylock-toml.rst:84 +#: ../source/specifications/pylock-toml.rst:98 +#: ../source/specifications/pylock-toml.rst:213 +#: ../source/specifications/pylock-toml.rst:230 +#: ../source/specifications/pylock-toml.rst:243 +#: ../source/specifications/pylock-toml.rst:255 +#: ../source/specifications/pylock-toml.rst:334 +#: ../source/specifications/pylock-toml.rst:362 +#: ../source/specifications/pylock-toml.rst:435 +#: ../source/specifications/pylock-toml.rst:480 +#: ../source/specifications/pylock-toml.rst:493 +#: ../source/specifications/pylock-toml.rst:530 +#: ../source/specifications/pylock-toml.rst:689 +#: ../source/specifications/pylock-toml.rst:715 +#: ../source/specifications/pylock-toml.rst:730 +msgid "**Required?**: no" +msgstr "**ຈຳເປັນຫຼືບໍ່?**: ບໍ່" + +#: ../source/specifications/pylock-toml.rst:85 +#: ../source/specifications/pylock-toml.rst:531 +#: ../source/specifications/pylock-toml.rst:549 +msgid "**Inspiration**: uv_" +msgstr "**ແຮງບັນດານໃຈ**: uv_" + +#: ../source/specifications/pylock-toml.rst:86 +msgid "" +"A list of :ref:`dependency-specifiers-environment-markers` for which the " +"lock file is considered compatible with." +msgstr "" +"ລາຍການຂອງ :ref:`dependency-specifiers-environment-markers` ທີ່ໄຟລ໌ lock " +"ນີ້ເຂົ້າກັນໄດ້." + +#: ../source/specifications/pylock-toml.rst:88 +msgid "" +"Tools SHOULD write exclusive/non-overlapping environment markers to ease in " +"understanding." +msgstr "ເຄື່ອງມື **ຄວນ** ຂຽນ environment marker ແບບບໍ່ຊ້ຳກັນເພື່ອໃຫ້ເຂົ້າໃຈງ່າຍ." + +#: ../source/specifications/pylock-toml.rst:97 +#: ../source/specifications/pylock-toml.rst:173 +#: ../source/specifications/pylock-toml.rst:201 +#: ../source/specifications/pylock-toml.rst:212 +#: ../source/specifications/pylock-toml.rst:229 +#: ../source/specifications/pylock-toml.rst:242 +#: ../source/specifications/pylock-toml.rst:308 +#: ../source/specifications/pylock-toml.rst:319 +#: ../source/specifications/pylock-toml.rst:333 +#: ../source/specifications/pylock-toml.rst:347 +#: ../source/specifications/pylock-toml.rst:361 +#: ../source/specifications/pylock-toml.rst:396 +#: ../source/specifications/pylock-toml.rst:452 +#: ../source/specifications/pylock-toml.rst:463 +#: ../source/specifications/pylock-toml.rst:529 +#: ../source/specifications/pylock-toml.rst:562 +#: ../source/specifications/pylock-toml.rst:633 +#: ../source/specifications/pylock-toml.rst:703 +msgid "**Type**: string" +msgstr "**ປະເພດ**: string" + +#: ../source/specifications/pylock-toml.rst:99 +#: ../source/specifications/pylock-toml.rst:190 +#: ../source/specifications/pylock-toml.rst:256 +#: ../source/specifications/pylock-toml.rst:566 +#: ../source/specifications/pylock-toml.rst:621 +#: ../source/specifications/pylock-toml.rst:637 +msgid "**Inspiration**: PDM_, Poetry_, uv_" +msgstr "**ແຮງບັນດານໃຈ**: PDM_, Poetry_, uv_" + +#: ../source/specifications/pylock-toml.rst:100 +msgid "" +"Specifies the :ref:`core-metadata-requires-python` for the minimum Python " +"version compatible for any environment supported by the lock file (i.e. the " +"minimum viable Python version for the lock file)." +msgstr "" +"ກຳນົດ :ref:`core-metadata-requires-python` ສຳລັບເວີຊັນ Python ຕໍ່າສຸດທີ່ " +"ເຂົ້າກັນໄດ້ກັບທຸກສະພາບແວດລ້ອມທີ່ໄຟລ໌ lock ຮອງຮັບ." + +#: ../source/specifications/pylock-toml.rst:111 +#: ../source/specifications/pylock-toml.rst:133 +#: ../source/specifications/pylock-toml.rst:155 +msgid "**Required?**: no; defaults to ``[]``" +msgstr "**ຈຳເປັນຫຼືບໍ່?**: ບໍ່; ຄ່າເລີ່ມຕົ້ນແມ່ນ ``[]``" + +#: ../source/specifications/pylock-toml.rst:112 +msgid "**Inspiration**: :ref:`core-metadata-provides-extra`" +msgstr "**ແຮງບັນດານໃຈ**: :ref:`core-metadata-provides-extra`" + +#: ../source/specifications/pylock-toml.rst:113 +msgid "" +"The list of :ref:`extras ` supported by this " +"lock file." +msgstr "" +"ລາຍການຂອງ :ref:`extras ` ທີ່ໄຟລ໌ lock ນີ້ຮອງຮັບ." + +#: ../source/specifications/pylock-toml.rst:115 +#: ../source/specifications/pylock-toml.rst:138 +msgid "" +"Lockers MAY choose to not support writing lock files that support extras and " +"dependency groups (i.e. tools may only support exporting a single-use lock " +"file)." +msgstr "" +"ເຄື່ອງມືສ້າງ lock **ອາດຈະ** ເລືອກທີ່ຈະບໍ່ຮອງຮັບການຂຽນໄຟລ໌ lock ທີ່ຮອງຮັບ extras ແລະ " +"dependency groups." + +#: ../source/specifications/pylock-toml.rst:118 +msgid "Tools supporting extras MUST also support dependency groups." +msgstr "ເຄື່ອງມືທີ່ຮອງຮັບ extras **ຕ້ອງ** ຮອງຮັບ dependency groups ນຳ." + +#: ../source/specifications/pylock-toml.rst:119 +msgid "" +"Tools should explicitly set this key to an empty array to signal that the " +"inputs used to generate the lock file had no extras (e.g. " +"a :ref:`pyproject.toml ` file had " +"no :ref:`[project.optional-dependencies] ` table), signalling that the lock file is, in effect, multi-" +"use even if it only looks to be single-use." +msgstr "" +"ເຄື່ອງມືຄວນຕັ້ງຄ່າ key ນີ້ໃຫ້ເປັນອາເຣຫວ່າງເປົ່າຢ່າງຊັດເຈນ ເພື່ອບົ່ງບອກວ່າຂໍ້ມູນທີ່ ໃຊ້ສ້າງໄຟລ໌ lock ບໍ່ມີ " +"extras..." + +#: ../source/specifications/pylock-toml.rst:130 +msgid "``dependency-groups``" +msgstr "``dependency-groups``" + +#: ../source/specifications/pylock-toml.rst:134 +#: ../source/specifications/pylock-toml.rst:716 +#: ../source/specifications/pylock-toml.rst:731 +msgid "**Inspiration**: :ref:`pyproject-tool-table`" +msgstr "**ແຮງບັນດານໃຈ**: :ref:`pyproject-tool-table`" + +#: ../source/specifications/pylock-toml.rst:135 +msgid "" +"The list of :ref:`dependency-groups` publicly supported by this lock file " +"(i.e. dependency groups users are expected to be able to specify via a " +"tool's UI)." +msgstr "" +"ລາຍການຂອງ :ref:`dependency-groups` ທີ່ໄຟລ໌ lock ນີ້ຮອງຮັບຢ່າງເປັນສາທາລະນະ " +"(ໝາຍເຖິງກຸ່ມທີ່ຜູ້ໃຊ້ສາມາດລະບຸຜ່ານ UI ຂອງເຄື່ອງມືໄດ້)." + +#: ../source/specifications/pylock-toml.rst:141 +msgid "Tools supporting dependency groups MUST also support extras." +msgstr "ເຄື່ອງມືທີ່ຮອງຮັບ dependency groups **ຕ້ອງ** ຮອງຮັບ extras ນຳ." + +#: ../source/specifications/pylock-toml.rst:142 +msgid "" +"Tools SHOULD explicitly set this key to an empty array to signal that the " +"inputs used to generate the lock file had no dependency groups (e.g. " +"a :ref:`pyproject.toml ` file had no :ref:`[dependency-" +"groups] ` table), signalling that the lock file is, in " +"effect, multi-use even if it only looks to be single-use." +msgstr "" +"ເຄື່ອງມື **ຄວນ** ຕັ້ງຄ່າ key ນີ້ໃຫ້ເປັນອາເຣຫວ່າງເປົ່າຢ່າງຊັດເຈນ ເພື່ອບົ່ງບອກວ່າ ຂໍ້ມູນທີ່ໃຊ້ສ້າງໄຟລ໌ " +"lock ບໍ່ມີ dependency groups..." + +#: ../source/specifications/pylock-toml.rst:152 +msgid "``default-groups``" +msgstr "``default-groups``" + +#: ../source/specifications/pylock-toml.rst:156 +msgid "**Inspiration**: Poetry_, PDM_" +msgstr "**ແຮງບັນດານໃຈ**: Poetry_, PDM_" + +#: ../source/specifications/pylock-toml.rst:157 +msgid "" +"The name of synthetic dependency groups to represent what should be " +"installed by default (e.g. what :ref:`[project.dependencies] ` implicitly represents)." +msgstr "ຊື່ຂອງກຸ່ມ dependency ສັງເຄາະ ເພື່ອແທນສິ່ງທີ່ຄວນຕິດຕັ້ງເປັນຄ່າເລີ່ມຕົ້ນ." + +#: ../source/specifications/pylock-toml.rst:161 +msgid "" +"Meant to be used in situations where :ref:`pylock-packages-marker` " +"necessitates such a group to exist." +msgstr "ເພື່ອໃຊ້ໃນກໍລະນີທີ່ :ref:`pylock-packages-marker` ຈຳເປັນຕ້ອງມີກຸ່ມດັ່ງກ່າວ." + +#: ../source/specifications/pylock-toml.rst:163 +msgid "" +"The groups listed by this key SHOULD NOT be listed in :ref:`pylock-" +"dependency-groups` as the groups are not meant to be directly exposed to " +"users by name but instead via an installer's UI." +msgstr "" +"ກຸ່ມທີ່ລະບຸໃນ key ນີ້ **ບໍ່ຄວນ** ຖືກລະບຸໃນ :ref:`pylock-dependency-groups` " +"ເນື່ອງຈາກກຸ່ມເຫຼົ່ານີ້ບໍ່ໄດ້ມີໄວ້ໃຫ້ຜູ້ໃຊ້ເລືອກໂດຍກົງຜ່ານຊື່." + +#: ../source/specifications/pylock-toml.rst:171 +msgid "``created-by``" +msgstr "``created-by``" + +#: ../source/specifications/pylock-toml.rst:175 +msgid "**Inspiration**: Tools with their name in their lock file name" +msgstr "**ແຮງບັນດານໃຈ**: ເຄື່ອງມືທີ່ມີຊື່ຂອງພວກເຂົາຢູ່ໃນຊື່ໄຟລ໌ lock" + +#: ../source/specifications/pylock-toml.rst:176 +msgid "Records the name of the tool used to create the lock file." +msgstr "ບັນທຶກຊື່ຂອງເຄື່ອງມືທີ່ໃຊ້ສ້າງໄຟລ໌ lock." + +#: ../source/specifications/pylock-toml.rst:177 +msgid "" +"Tools MAY use the :ref:`pylock-tool` table to record enough details that it " +"can be inferred what inputs were used to create the lock file." +msgstr "" +"ເຄື່ອງມື **ອາດຈະ** ໃຊ້ຕາຕະລາງ :ref:`pylock-tool` ເພື່ອບັນທຶກລາຍລະອຽດທີ່ ພຽງພໍ " +"ເພື່ອໃຫ້ຮູ້ວ່າຂໍ້ມູນໃດຖືກໃຊ້ສ້າງໄຟລ໌ lock." + +#: ../source/specifications/pylock-toml.rst:179 +msgid "" +"Tools SHOULD record the normalized name of the tool if it is available as a " +"Python package to facilitate finding the tool." +msgstr "" +"ເຄື່ອງມື **ຄວນ** ບັນທຶກຊື່ເຄື່ອງມືທີ່ປັບປ່ຽນໃຫ້ເປັນມາດຕະຖານ (normalized) ຖ້າ " +"ມັນມີໃຫ້ໃຊ້ໃນຮູບແບບແພັກເກັດ Python." + +#: ../source/specifications/pylock-toml.rst:186 +msgid "``[[packages]]``" +msgstr "``[[packages]]``" + +#: ../source/specifications/pylock-toml.rst:188 +#: ../source/specifications/pylock-toml.rst:254 +#: ../source/specifications/pylock-toml.rst:618 +#: ../source/specifications/pylock-toml.rst:688 +msgid "**Type**: array of tables" +msgstr "**ປະເພດ**: ອາເຣຂອງຕາຕະລາງ" + +#: ../source/specifications/pylock-toml.rst:191 +msgid "An array containing all packages that *may* be installed." +msgstr "ອາເຣທີ່ບັນຈຸແພັກເກັດທັງໝົດທີ່ *ອາດຈະ* ຖືກຕິດຕັ້ງ." + +#: ../source/specifications/pylock-toml.rst:192 +msgid "" +"Packages MAY be listed multiple times with varying data, but all packages to " +"be installed MUST narrow down to a single entry at install time." +msgstr "" +"ແພັກເກັດ **ອາດຈະ** ຖືກລະບຸຫຼາຍຄັ້ງດ້ວຍຂໍ້ມູນທີ່ຕ່າງກັນ, ແຕ່ແພັກເກັດທີ່ຈະຕິດຕັ້ງ ທັງໝົດ **ຕ້ອງ** " +"ຖືກຄັດຈ້ອນໃຫ້ເຫຼືອພຽງລາຍການດຽວໃນເວລາຕິດຕັ້ງ." + +#: ../source/specifications/pylock-toml.rst:199 +msgid "``packages.name``" +msgstr "``packages.name``" + +#: ../source/specifications/pylock-toml.rst:203 +msgid "**Inspiration**: :ref:`core-metadata-name`" +msgstr "**ແຮງບັນດານໃຈ**: :ref:`core-metadata-name`" + +#: ../source/specifications/pylock-toml.rst:204 +msgid "The name of the package :ref:`normalized `." +msgstr "ຊື່ຂອງແພັກເກັດທີ່ :ref:`ປັບໃຫ້ເປັນມາດຕະຖານ `." + +#: ../source/specifications/pylock-toml.rst:210 +msgid "``packages.version``" +msgstr "``packages.version``" + +#: ../source/specifications/pylock-toml.rst:214 +msgid "**Inspiration**: :ref:`core-metadata-version`" +msgstr "**ແຮງບັນດານໃຈ**: :ref:`core-metadata-version`" + +#: ../source/specifications/pylock-toml.rst:215 +msgid "The version of the package." +msgstr "ເວີຊັນຂອງແພັກເກັດ." + +#: ../source/specifications/pylock-toml.rst:216 +msgid "" +"The version SHOULD be specified when the version is known to be stable (i.e. " +"when an :ref:`sdist ` or :ref:`wheels ` are specified)." +msgstr "" +"**ຄວນ** ລະບຸເວີຊັນ ເມື່ອຮູ້ວ່າເວີຊັນນັ້ນຄົງທີ່ (stable) (ເຊັ່ນ ເມື່ອລະບຸ :ref:`sdist` " +"ຫຼື :ref:`wheels`)." + +#: ../source/specifications/pylock-toml.rst:219 +msgid "" +"The version MUST NOT be included when it cannot be guaranteed to be " +"consistent with the code used (i.e. when a :ref:`source tree ` is used)." +msgstr "" +"**ຕ້ອງບໍ່** ລະບຸເວີຊັນ ເມື່ອບໍ່ສາມາດຮັບປະກັນໄດ້ວ່າມັນຈະກົງກັບລະຫັດທີ່ໃຊ້ (ເຊັ່ນ ເມື່ອໃຊ້ :ref:`source " +"tree`)." + +#: ../source/specifications/pylock-toml.rst:227 +msgid "``packages.marker``" +msgstr "``packages.marker``" + +#: ../source/specifications/pylock-toml.rst:231 +msgid "**Inspiration**: PDM_" +msgstr "**ແຮງບັນດານໃຈ**: PDM_" + +#: ../source/specifications/pylock-toml.rst:232 +msgid "" +"The :ref:`environment marker ` " +"which specify when the package should be installed." +msgstr "" +":ref:`environment marker ` " +"ທີ່ກຳນົດວ່າຄວນຕິດຕັ້ງແພັກເກັດເມື່ອໃດ." + +#: ../source/specifications/pylock-toml.rst:240 +msgid "``packages.requires-python``" +msgstr "``packages.requires-python``" + +#: ../source/specifications/pylock-toml.rst:244 +msgid "**Inspiration**: :ref:`core-metadata-requires-python`" +msgstr "**ແຮງບັນດານໃຈ**: :ref:`core-metadata-requires-python`" + +#: ../source/specifications/pylock-toml.rst:245 +msgid "" +"Holds the :ref:`version-specifiers` for Python version compatibility for the " +"package." +msgstr "ເກັບກຳ :ref:`version-specifiers` ສຳລັບຄວາມເຂົ້າກັນໄດ້ຂອງເວີຊັນ Python." + +#: ../source/specifications/pylock-toml.rst:252 +msgid "``[[packages.dependencies]]``" +msgstr "``[[packages.dependencies]]``" + +#: ../source/specifications/pylock-toml.rst:257 +msgid "" +"Records the other entries in :ref:`pylock-packages` which are direct " +"dependencies of this package." +msgstr "" +"ບັນທຶກລາຍການອື່ນໆໃນ :ref:`pylock-packages` ທີ່ເປັນ dependency ໂດຍກົງຂອງແພັກເກັດນີ້." + +#: ../source/specifications/pylock-toml.rst:259 +msgid "" +"Each entry is a table which contains the minimum information required to " +"tell which other package entry it corresponds to where doing a key-by-key " +"comparison would find the appropriate package with no ambiguity (e.g. if " +"there are two entries for the ``spam`` package, then you can include the " +"version number like ``{name = \"spam\", version = \"1.0.0\"}``, or by source " +"like ``{name = \"spam\", vcs = { url = \"...\"}``)." +msgstr "" +"ແຕ່ລະລາຍການແມ່ນຕາຕະລາງທີ່ບັນຈຸຂໍ້ມູນຂັ້ນຕໍ່າທີ່ຈຳເປັນ ເພື່ອບອກວ່າແພັກເກັດນີ້ " +"ກົງກັບລາຍການແພັກເກັດອື່ນໃດໂດຍບໍ່ໃຫ້ມີຄວາມສັບສົນ..." + +#: ../source/specifications/pylock-toml.rst:265 +msgid "" +"Tools MUST NOT use this information when doing installation; it is purely " +"informational for auditing purposes." +msgstr "" +"ເຄື່ອງມື **ຕ້ອງບໍ່** ໃຊ້ຂໍ້ມູນນີ້ໃນເວລາຕິດຕັ້ງ; ມັນມີໄວ້ເພື່ອເປັນຂໍ້ມູນສຳລັບ ການກວດສອບ (auditing) ເທົັ້ນ." + +#: ../source/specifications/pylock-toml.rst:272 +msgid "``[packages.vcs]``" +msgstr "``[packages.vcs]``" + +#: ../source/specifications/pylock-toml.rst:274 +#: ../source/specifications/pylock-toml.rst:376 +#: ../source/specifications/pylock-toml.rst:434 +#: ../source/specifications/pylock-toml.rst:546 +#: ../source/specifications/pylock-toml.rst:714 +#: ../source/specifications/pylock-toml.rst:729 +msgid "**Type**: table" +msgstr "**ປະເພດ**: ຕາຕະລາງ" + +#: ../source/specifications/pylock-toml.rst:275 +msgid "" +"**Required?**: no; mutually-exclusive with :ref:`pylock-packages-" +"directory`, :ref:`pylock-packages-archive`, :ref:`pylock-packages-sdist`, " +"and :ref:`pylock-packages-wheels`" +msgstr "" +"**ຈຳເປັນຫຼືບໍ່?**: ບໍ່; ບໍ່ສາມາດໃຊ້ຮ່ວມກັບ :ref:`pylock-packages-" +"directory`, :ref:`pylock-packages-archive`, :ref:`pylock-packages-sdist`, " +"ແລະ :ref:`pylock-packages-wheels`" + +#: ../source/specifications/pylock-toml.rst:278 +msgid "**Inspiration**: :ref:`direct-url-data-structure`" +msgstr "**ແຮງບັນດານໃຈ**: :ref:`direct-url-data-structure`" + +#: ../source/specifications/pylock-toml.rst:279 +msgid "" +"Record the version control system details for the :ref:`source tree ` it contains." +msgstr "ບັນທຶກລາຍລະອຽດຂອງລະບົບຄວບຄຸມເວີຊັນ (VCS) ສຳລັບ :ref:`source tree` ທີ່ມັນບັນຈຸຢູ່." + +#: ../source/specifications/pylock-toml.rst:282 +msgid "" +"Tools MAY choose to not support version control systems, both from a locking " +"and/or installation perspective." +msgstr "" +"ເຄື່ອງມື **ອາດຈະ** ເລືອກທີ່ຈະບໍ່ຮອງຮັບລະບົບຄວບຄຸມເວີຊັນ ທັງໃນດ້ານການສ້າງ lock ແລະ/ຫຼື ການຕິດຕັ້ງ." + +#: ../source/specifications/pylock-toml.rst:284 +msgid "Tools MAY choose to only support a subset of the available VCS types." +msgstr "ເຄື່ອງມື **ອາດຈະ** ເລືອກຮອງຮັບພຽງແຕ່ບາງປະເພດຂອງ VCS ທີ່ມີຢູ່." + +#: ../source/specifications/pylock-toml.rst:285 +msgid "" +"Tools SHOULD provide a way for users to opt in/out of using version control " +"systems." +msgstr "ເຄື່ອງມື **ຄວນ** ມີວິທີໃຫ້ຜູ້ໃຊ້ເລືອກວ່າຈະໃຊ້ ຫຼື ບໍ່ໃຊ້ລະບົບຄວບຄຸມເວີຊັນ." + +#: ../source/specifications/pylock-toml.rst:287 +msgid "" +"Installation from a version control system is considered originating from " +"a :ref:`direct URL reference `." +msgstr "" +"ການຕິດຕັ້ງຈາກລະບົບຄວບຄຸມເວີຊັນຖືກຖືວ່າແມ່ນມາຈາກ :ref:`direct URL reference `." + +#: ../source/specifications/pylock-toml.rst:294 +msgid "``packages.vcs.type``" +msgstr "``packages.vcs.type``" + +#: ../source/specifications/pylock-toml.rst:296 +msgid "" +"**Type**: string; supported values specified in :ref:`direct-url-data-" +"structure-registered-vcs`" +msgstr "" +"**ປະເພດ**: string; ຄ່າທີ່ຮອງຮັບແມ່ນກຳນົດໄວ້ໃນ :ref:`direct-url-data-structure-" +"registered-vcs`" + +#: ../source/specifications/pylock-toml.rst:299 +#: ../source/specifications/pylock-toml.rst:310 +#: ../source/specifications/pylock-toml.rst:321 +#: ../source/specifications/pylock-toml.rst:335 +#: ../source/specifications/pylock-toml.rst:349 +msgid "**Inspiration**: :ref:`direct-url-data-structure-vcs`" +msgstr "**ແຮງບັນດານໃຈ**: :ref:`direct-url-data-structure-vcs`" + +#: ../source/specifications/pylock-toml.rst:300 +msgid "The type of version control system used." +msgstr "ປະເພດຂອງລະບົບຄວບຄຸມເວີຊັນທີ່ໃຊ້." + +#: ../source/specifications/pylock-toml.rst:306 +msgid "``packages.vcs.url``" +msgstr "``packages.vcs.url``" + +#: ../source/specifications/pylock-toml.rst:309 +msgid "**Required?**: if :ref:`pylock-packages-vcs-path` is not specified" +msgstr "**ຈຳເປັນຫຼືບໍ່?**: ຖ້າບໍ່ໄດ້ລະບຸ :ref:`pylock-packages-vcs-path`" + +#: ../source/specifications/pylock-toml.rst:311 +msgid "The URL_ to the source tree." +msgstr "URL_ ໄປຫາ source tree." + +#: ../source/specifications/pylock-toml.rst:317 +msgid "``packages.vcs.path``" +msgstr "``packages.vcs.path``" + +#: ../source/specifications/pylock-toml.rst:320 +msgid "**Required?**: if :ref:`pylock-packages-vcs-url` is not specified" +msgstr "**ຈຳເປັນຫຼືບໍ່?**: ຖ້າບໍ່ໄດ້ລະບຸ :ref:`pylock-packages-vcs-url`" + +#: ../source/specifications/pylock-toml.rst:322 +msgid "The path to the local directory of the source tree." +msgstr "ເສັ້ນທາງ (path) ໄປຫາໄດເຣັກທໍຣີພາຍໃນເຄື່ອງຂອງ source tree." + +#: ../source/specifications/pylock-toml.rst:323 +#: ../source/specifications/pylock-toml.rst:467 +msgid "" +"If a relative path is used it MUST be relative to the location of this file." +msgstr "ຖ້າໃຊ້ path ແບບທຽບຖານ (relative path), ມັນ **ຕ້ອງ** ທຽບກັບທີ່ຕັ້ງຂອງໄຟລ໌ນີ້." + +#: ../source/specifications/pylock-toml.rst:324 +#: ../source/specifications/pylock-toml.rst:468 +msgid "" +"If the path is relative it MAY use POSIX-style path separators explicitly " +"for portability." +msgstr "" +"ຖ້າ path ເປັນແບບທຽບຖານ, ມັນ **ອາດຈະ** ໃຊ້ຕົວແຍກ path ແບບ POSIX ເພື່ອ " +"ຄວາມສະດວກໃນການເຄື່ອນຍ້າຍລະບົບ." + +#: ../source/specifications/pylock-toml.rst:331 +msgid "``packages.vcs.requested-revision``" +msgstr "``packages.vcs.requested-revision``" + +#: ../source/specifications/pylock-toml.rst:336 +msgid "The branch/tag/ref/commit/revision/etc. that the user requested." +msgstr "ສາຂາ/ແທັກ/ການອ້າງອີງ/ຄອມມິດ/ສະບັບປັບປຸງ/ແລະອື່ນໆ ທີ່ຜູ້ໃຊ້ຮ້ອງຂໍ." + +#: ../source/specifications/pylock-toml.rst:337 +msgid "" +"This is purely informational and to facilitate writing the :ref:`direct-url-" +"data-structure`; it MUST NOT be used to checkout the repository." +msgstr "" +"ນີ້ແມ່ນພຽງຂໍ້ມູນເພື່ອຄວາມສະດວກໃນການຂຽນ :ref:`direct-url-data-structure`; ມັນ **ຕ້ອງບໍ່** " +"ຖືກນຳໃຊ້ເພື່ອ checkout repository." + +#: ../source/specifications/pylock-toml.rst:345 +msgid "``packages.vcs.commit-id``" +msgstr "``packages.vcs.commit-id``" + +#: ../source/specifications/pylock-toml.rst:350 +msgid "The exact commit/revision number that is to be installed." +msgstr "ໝາຍເລກ commit/revision ທີ່ແນ່ນອນທີ່ຈະຖືກຕິດຕັ້ງ." + +#: ../source/specifications/pylock-toml.rst:351 +msgid "" +"If the VCS supports commit-hash based revision identifiers, such a commit-" +"hash, it MUST be used as the commit ID in order to reference an immutable " +"version of the source code." +msgstr "" +"ຖ້າ VCS ຮອງຮັບການລະບຸ revision ດ້ວຍ commit-hash, ໝາຍເລກ commit-hash ນັ້ນ **ຕ້ອງ** " +"ຖືກໃຊ້ເປັນ commit ID ເພື່ອອ້າງອີງເຖິງລະຫັດເວີຊັນທີ່ບໍ່ສາມາດປ່ຽນແປງໄດ້." + +#: ../source/specifications/pylock-toml.rst:359 +msgid "``packages.vcs.subdirectory``" +msgstr "``packages.vcs.subdirectory``" + +#: ../source/specifications/pylock-toml.rst:363 +msgid "**Inspiration**: :ref:`direct-url-data-structure-subdirectories`" +msgstr "**ແຮງບັນດານໃຈ**: :ref:`direct-url-data-structure-subdirectories`" + +#: ../source/specifications/pylock-toml.rst:364 +msgid "" +"The subdirectory within the :ref:`source tree ` where the project root of the project is (e.g. the location of " +"the :ref:`pyproject.toml ` file)." +msgstr "ໄດເຣັກທໍຣີຍ່ອຍພາຍໃນ :ref:`source tree` ທີ່ເປັນທີ່ຕັ້ງຂອງຮາກໂຄງການ (project root)." + +#: ../source/specifications/pylock-toml.rst:368 +msgid "The path MUST be relative to the root of the source tree structure." +msgstr "ເສັ້ນທາງ **ຕ້ອງ** ທຽບກັບຮາກຂອງໂຄງສ້າງ source tree." + +#: ../source/specifications/pylock-toml.rst:374 +msgid "``[packages.directory]``" +msgstr "``[packages.directory]``" + +#: ../source/specifications/pylock-toml.rst:377 +msgid "" +"**Required?**: no; mutually-exclusive with :ref:`pylock-packages-" +"vcs`, :ref:`pylock-packages-archive`, :ref:`pylock-packages-sdist`, " +"and :ref:`pylock-packages-wheels`" +msgstr "" +"**ຈຳເປັນຫຼືບໍ່?**: ບໍ່; ບໍ່ສາມາດໃຊ້ຮ່ວມກັບ :ref:`pylock-packages-vcs`, :ref:`pylock-" +"packages-archive`, :ref:`pylock-packages-sdist`, ແລະ :ref:`pylock-packages-" +"wheels`" + +#: ../source/specifications/pylock-toml.rst:380 +#: ../source/specifications/pylock-toml.rst:398 +#: ../source/specifications/pylock-toml.rst:412 +msgid "**Inspiration**: :ref:`direct-url-data-structure-local-directory`" +msgstr "**ແຮງບັນດານໃຈ**: :ref:`direct-url-data-structure-local-directory`" + +#: ../source/specifications/pylock-toml.rst:381 +msgid "" +"Record the local directory details for the :ref:`source tree ` it contains." +msgstr "ບັນທຶກລາຍລະອຽດຂອງໄດເຣັກທໍຣີພາຍໃນເຄື່ອງສຳລັບ :ref:`source tree` ທີ່ມັນບັນຈຸຢູ່." + +#: ../source/specifications/pylock-toml.rst:384 +msgid "" +"Tools MAY choose to not support local directories, both from a locking and/" +"or installation perspective." +msgstr "" +"ເຄື່ອງມື **ອາດຈະ** ເລືອກທີ່ຈະບໍ່ຮອງຮັບໄດເຣັກທໍຣີພາຍໃນເຄື່ອງ ທັງໃນດ້ານການສ້າງ lock ແລະ/ຫຼື " +"ການຕິດຕັ້ງ." + +#: ../source/specifications/pylock-toml.rst:386 +msgid "" +"Tools SHOULD provide a way for users to opt in/out of using local " +"directories." +msgstr "ເຄື່ອງມື **ຄວນ** ມີວິທີໃຫ້ຜູ້ໃຊ້ເລືອກວ່າຈະໃຊ້ ຫຼື ບໍ່ໃຊ້ໄດເຣັກທໍຣີພາຍໃນເຄື່ອງ." + +#: ../source/specifications/pylock-toml.rst:387 +msgid "" +"Installation from a directory is considered originating from a :ref:`direct " +"URL reference `." +msgstr "" +"ການຕິດຕັ້ງຈາກໄດເຣັກທໍຣີຖືກຖືວ່າແມ່ນມາຈາກ :ref:`direct URL reference `." + +#: ../source/specifications/pylock-toml.rst:394 +msgid "``packages.directory.path``" +msgstr "``packages.directory.path``" + +#: ../source/specifications/pylock-toml.rst:399 +msgid "The local directory where the source tree is." +msgstr "ໄດເຣັກທໍຣີພາຍໃນເຄື່ອງທີ່ source tree ຕັ້ງຢູ່." + +#: ../source/specifications/pylock-toml.rst:400 +msgid "" +"If the path is relative it MUST be relative to the location of the lock file." +msgstr "ຖ້າເສັ້ນທາງເປັນແບບທຽບຖານ ມັນ **ຕ້ອງ** ທຽບກັບທີ່ຕັ້ງຂອງໄຟລ໌ lock." + +#: ../source/specifications/pylock-toml.rst:401 +msgid "" +"If the path is relative it MAY use POSIX-style path separators for " +"portability." +msgstr "" +"ຖ້າເສັ້ນທາງເປັນແບບທຽບຖານ ມັນ **ອາດຈະ** ໃຊ້ຕົວແຍກ path ແບບ POSIX ເພື່ອ " +"ຄວາມສະດວກໃນການເຄື່ອນຍ້າຍລະບົບ." + +#: ../source/specifications/pylock-toml.rst:408 +msgid "``packages.directory.editable``" +msgstr "``packages.directory.editable``" + +#: ../source/specifications/pylock-toml.rst:410 +msgid "**Type**: boolean" +msgstr "**ປະເພດ**: ບູລີນ (boolean)" + +#: ../source/specifications/pylock-toml.rst:411 +msgid "**Required?**: no; defaults to ``false``" +msgstr "**ຈຳເປັນຫຼືບໍ່?**: ບໍ່; ຄ່າເລີ່ມຕົ້ນແມ່ນ ``false``" + +#: ../source/specifications/pylock-toml.rst:413 +msgid "" +"A flag representing whether the source tree was an editable install at lock " +"time." +msgstr "" +"ເຄື່ອງໝາຍທີ່ບົ່ງບອກວ່າ source tree ເປັນການຕິດຕັ້ງແບບແກ້ໄຂໄດ້ (editable install) " +"ໃນເວລາທີ່ສ້າງ lock ຫຼື ບໍ່." + +#: ../source/specifications/pylock-toml.rst:415 +msgid "" +"An installer MAY choose to ignore this flag if user actions or context would " +"make an editable install unnecessary or undesirable (e.g. a container image " +"that will not be mounted for development purposes but instead deployed to " +"production where it would be treated at read-only)." +msgstr "" +"ຜູ້ຕິດຕັ້ງ **ອາດຈະ** ເລືອກທີ່ຈະບໍ່ສົນໃຈເຄື່ອງໝາຍນີ້ ຖ້າບໍລິບົດເຮັດໃຫ້ການຕິດຕັ້ງ ແບບແກ້ໄຂໄດ້ນັ້ນບໍ່ຈຳເປັນ " +"(ເຊັ່ນ ການໃຊ້ໃນ container ສຳລັບ production)." + +#: ../source/specifications/pylock-toml.rst:424 +msgid "``packages.directory.subdirectory``" +msgstr "``packages.directory.subdirectory``" + +#: ../source/specifications/pylock-toml.rst:426 +#: ../source/specifications/pylock-toml.rst:521 +msgid "See :ref:`pylock-packages-vcs-subdirectory`." +msgstr "ເບິ່ງ :ref:`pylock-packages-vcs-subdirectory`." + +#: ../source/specifications/pylock-toml.rst:432 +msgid "``[packages.archive]``" +msgstr "``[packages.archive]``" + +#: ../source/specifications/pylock-toml.rst:436 +#: ../source/specifications/pylock-toml.rst:454 +#: ../source/specifications/pylock-toml.rst:465 +msgid "**Inspiration**: :ref:`direct-url-data-structure-archive`" +msgstr "**ແຮງບັນດານໃຈ**: :ref:`direct-url-data-structure-archive`" + +#: ../source/specifications/pylock-toml.rst:437 +msgid "" +"A direct reference to an archive file to install from (this can include " +"wheels and sdists, as well as other archive formats containing a source " +"tree)." +msgstr "" +"ການອ້າງອີງໂດຍກົງເຖິງໄຟລ໌ຈັດເກັບ (archive file) ເພື່ອຕິດຕັ້ງ (ລວມເຖິງ wheels, sdists ແລະ " +"ຮູບແບບການຈັດເກັບອື່ນໆ)." + +#: ../source/specifications/pylock-toml.rst:440 +msgid "" +"Tools MAY choose to not support archive files, both from a locking and/or " +"installation perspective." +msgstr "" +"ເຄື່ອງມື **ອາດຈະ** ເລືອກທີ່ຈະບໍ່ຮອງຮັບໄຟລ໌ຈັດເກັບ ທັງໃນດ້ານການສ້າງ lock ແລະ/ຫຼື ການຕິດຕັ້ງ." + +#: ../source/specifications/pylock-toml.rst:442 +msgid "" +"Tools SHOULD provide a way for users to opt in/out of using archive files." +msgstr "ເຄື່ອງມື **ຄວນ** ມີວິທີໃຫ້ຜູ້ໃຊ້ເລືອກວ່າຈະໃຊ້ ຫຼື ບໍ່ໃຊ້ໄຟລ໌ຈັດເກັບ." + +#: ../source/specifications/pylock-toml.rst:443 +msgid "" +"Installation from an archive file is considered originating from " +"a :ref:`direct URL reference `." +msgstr "" +"ການຕິດຕັ້ງຈາກໄຟລ໌ຈັດເກັບຖືກຖືວ່າແມ່ນມາຈາກ :ref:`direct URL reference `." + +#: ../source/specifications/pylock-toml.rst:450 +msgid "``packages.archive.url``" +msgstr "``packages.archive.url``" + +#: ../source/specifications/pylock-toml.rst:453 +msgid "**Required?**: if :ref:`pylock-packages-archive-path` is not specified" +msgstr "**ຈຳເປັນຫຼືບໍ່?**: ຖ້າບໍ່ໄດ້ລະບຸ :ref:`pylock-packages-archive-path`" + +#: ../source/specifications/pylock-toml.rst:455 +msgid "The URL_ to the archive." +msgstr "URL_ ໄປຫາໄຟລ໌ຈັດເກັບ." + +#: ../source/specifications/pylock-toml.rst:461 +msgid "``packages.archive.path``" +msgstr "``packages.archive.path``" + +#: ../source/specifications/pylock-toml.rst:464 +msgid "**Required?**: if :ref:`pylock-packages-archive-url` is not specified" +msgstr "**ຈຳເປັນຫຼືບໍ່?**: ຖ້າບໍ່ໄດ້ລະບຸ :ref:`pylock-packages-archive-url`" + +#: ../source/specifications/pylock-toml.rst:466 +msgid "The path to the archive." +msgstr "ເສັ້ນທາງໄປຫາໄຟລ໌ຈັດເກັບ." + +#: ../source/specifications/pylock-toml.rst:470 +msgid "" +"If :ref:`pylock-packages-archive-url` is also specified, the filename as " +"specified by this key takes precedence." +msgstr "" +"ຖ້າໄດ້ລະບຸ :ref:`pylock-packages-archive-url` ໄວ້ຄືກັນ, ຊື່ໄຟລ໌ທີ່ລະບຸໂດຍ key " +"ນີ້ຈະມີບຸລິມະສິດສູງກວ່າ." + +#: ../source/specifications/pylock-toml.rst:477 +msgid "``packages.archive.size``" +msgstr "``packages.archive.size``" + +#: ../source/specifications/pylock-toml.rst:479 +msgid "**Type**: integer" +msgstr "**ປະເພດ**: ຈຳນວນຖ້ວນ (integer)" + +#: ../source/specifications/pylock-toml.rst:481 +msgid "**Inspiration**: uv_, :ref:`simple-repository-api`" +msgstr "**ແຮງບັນດານໃຈ**: uv_, :ref:`simple-repository-api`" + +#: ../source/specifications/pylock-toml.rst:482 +msgid "The size of the archive file." +msgstr "ຂະໜາດຂອງໄຟລ໌ຈັດເກັບ." + +#: ../source/specifications/pylock-toml.rst:483 +msgid "" +"Tools SHOULD provide the file size when reasonably possible (e.g. the file " +"size is available via the Content-Length_ header from a HEAD_ HTTP request)." +msgstr "ເຄື່ອງມື **ຄວນ** ລະບຸຂະໜາດໄຟລ໌ເມື່ອສາມາດເຮັດໄດ້..." + +#: ../source/specifications/pylock-toml.rst:490 +msgid "``packages.archive.upload-time``" +msgstr "``packages.archive.upload-time``" + +#: ../source/specifications/pylock-toml.rst:492 +msgid "**Type**: datetime" +msgstr "**ປະເພດ**: ວັນທີ ແລະ ເວລາ (datetime)" + +#: ../source/specifications/pylock-toml.rst:494 +msgid "**Inspiration**: :ref:`simple-repository-api`" +msgstr "**ແຮງບັນດານໃຈ**: :ref:`simple-repository-api`" + +#: ../source/specifications/pylock-toml.rst:495 +msgid "The time the file was uploaded." +msgstr "ເວລາທີ່ໄຟລ໌ຖືກອັບໂຫຼດ." + +#: ../source/specifications/pylock-toml.rst:496 +msgid "The date and time MUST be recorded in UTC." +msgstr "ວັນທີ ແລະ ເວລາ **ຕ້ອງ** ຖືກບັນທຶກໃນຮູບແບບ UTC." + +#: ../source/specifications/pylock-toml.rst:502 +msgid "``[packages.archive.hashes]``" +msgstr "``[packages.archive.hashes]``" + +#: ../source/specifications/pylock-toml.rst:504 +msgid "**Type**: Table of strings" +msgstr "**ປະເພດ**: ຕາຕະລາງຂອງ string" + +#: ../source/specifications/pylock-toml.rst:506 +msgid "**Inspiration**: PDM_, Poetry_, uv_, :ref:`simple-repository-api`" +msgstr "**ແຮງບັນດານໃຈ**: PDM_, Poetry_, uv_, :ref:`simple-repository-api`" + +#: ../source/specifications/pylock-toml.rst:507 +msgid "" +"A table listing known hash values of the file where the key is the hash " +"algorithm and the value is the hash value." +msgstr "" +"ຕາຕະລາງທີ່ລະບຸຄ່າ hash ຂອງໄຟລ໌ ໂດຍ key ແມ່ນ algorithm ຂອງ hash ແລະ value ແມ່ນຄ່າ " +"hash." + +#: ../source/specifications/pylock-toml.rst:509 +msgid "The table MUST contain at least one entry." +msgstr "ຕາຕະລາງ **ຕ້ອງ** ມີຢ່າງໜ້ອຍໜຶ່ງລາຍການ." + +#: ../source/specifications/pylock-toml.rst:510 +msgid "Hash algorithm keys SHOULD be lowercase." +msgstr "Key ຂອງ algorithm hash **ຄວນ** ເປັນຕົວພິມນ້ອຍ." + +#: ../source/specifications/pylock-toml.rst:511 +msgid "" +"At least one secure algorithm from :py:data:`hashlib.algorithms_guaranteed` " +"SHOULD always be included (at time of writing, sha256 specifically is " +"recommended." +msgstr "" +"**ຄວນ** ລວມເອົາຢ່າງໜ້ອຍໜຶ່ງ algorithm " +"ທີ່ປອດໄພຈາກ :py:data:`hashlib.algorithms_guaranteed` ໄວ້ສະເໝີ (ແນະນຳ sha256)." + +#: ../source/specifications/pylock-toml.rst:519 +msgid "``packages.archive.subdirectory``" +msgstr "``packages.archive.subdirectory``" + +#: ../source/specifications/pylock-toml.rst:527 +msgid "``packages.index``" +msgstr "``packages.index``" + +#: ../source/specifications/pylock-toml.rst:532 +msgid "" +"The base URL for the package index from :ref:`simple-repository-api` where " +"the sdist and/or wheels were found (e.g. ``https://pypi.org/simple/``)." +msgstr "URL ຫຼັກສຳລັບ package index ບ່ອນທີ່ພົບ sdist ແລະ/ຫຼື wheels." + +#: ../source/specifications/pylock-toml.rst:534 +msgid "" +"When possible, this SHOULD be specified to assist with generating `software " +"bill of materials`_ -- aka SBOMs -- and to assist in finding a file if a URL " +"ceases to be valid." +msgstr "" +"ຫາກເປັນໄປໄດ້, **ຄວນ** ລະບຸສິ່ງນີ້ເພື່ອຊ່ວຍໃນການສ້າງ SBOMs ແລະ ຊ່ວຍໃນການ ຄົ້ນຫາໄຟລ໌ຫາກ URL " +"ເດີມໃຊ້ບໍ່ໄດ້ແລ້ວ." + +#: ../source/specifications/pylock-toml.rst:537 +msgid "" +"Tools MAY support installing from an index if the URL recorded for a " +"specific file is no longer valid (e.g. returns a 404 HTTP error code)." +msgstr "ເຄື່ອງມື **ອາດຈະ** ຮອງຮັບການຕິດຕັ້ງຈາກ index ຫາກ URL ທີ່ບັນທຶກໄວ້ ໃຊ້ບໍ່ໄດ້ແລ້ວ." + +#: ../source/specifications/pylock-toml.rst:544 +msgid "``[packages.sdist]``" +msgstr "``[packages.sdist]``" + +#: ../source/specifications/pylock-toml.rst:547 +#: ../source/specifications/pylock-toml.rst:619 +msgid "" +"**Required?**: no; mutually-exclusive with :ref:`pylock-packages-" +"vcs`, :ref:`pylock-packages-directory`, and :ref:`pylock-packages-archive`" +msgstr "" +"**ຈຳເປັນຫຼືບໍ່?**: ບໍ່; ບໍ່ສາມາດໃຊ້ຮ່ວມກັບ :ref:`pylock-packages-vcs`, :ref:`pylock-" +"packages-directory`, ແລະ :ref:`pylock-packages-archive`" + +#: ../source/specifications/pylock-toml.rst:550 +msgid "Details of a :ref:`source-distribution-format-sdist` for the package." +msgstr "ລາຍລະອຽດຂອງ :ref:`sdist` ສຳລັບແພັກເກັດ." + +#: ../source/specifications/pylock-toml.rst:552 +msgid "" +"Tools MAY choose to not support sdist files, both from a locking and/or " +"installation perspective." +msgstr "" +"ເຄື່ອງມື **ອາດຈະ** ເລືອກທີ່ຈະບໍ່ຮອງຮັບໄຟລ໌ sdist ທັງໃນດ້ານການສ້າງ lock ແລະ/ຫຼື ການຕິດຕັ້ງ." + +#: ../source/specifications/pylock-toml.rst:554 +msgid "" +"Tools SHOULD provide a way for users to opt in/out of using sdist files." +msgstr "ເຄື່ອງມື **ຄວນ** ມີວິທີໃຫ້ຜູ້ໃຊ້ເລືອກວ່າຈະໃຊ້ ຫຼື ບໍ່ໃຊ້ໄຟລ໌ sdist." + +#: ../source/specifications/pylock-toml.rst:560 +msgid "``packages.sdist.name``" +msgstr "``packages.sdist.name``" + +#: ../source/specifications/pylock-toml.rst:563 +msgid "" +"**Required?**: no, not when the last component of :ref:`pylock-packages-" +"sdist-path`/ :ref:`pylock-packages-sdist-url` would be the same value" +msgstr "**ຈຳເປັນຫຼືບໍ່?**: ບໍ່, ຫາກມີຄ່າດຽວກັນກັບສ່ວນທ້າຍຂອງ path ຫຼື url" + +#: ../source/specifications/pylock-toml.rst:567 +msgid "The file name of the :ref:`source-distribution-format-sdist` file." +msgstr "ຊື່ໄຟລ໌ຂອງໄຟລ໌ :ref:`sdist`." + +#: ../source/specifications/pylock-toml.rst:568 +msgid "" +"If specified, this key's value takes precedence over the file name found in " +"either :ref:`pylock-packages-sdist-url` or :ref:`pylock-packages-sdist-path`." +msgstr "ຫາກລະບຸໄວ້, ຄ່າຂອງ key ນີ້ຈະມີບຸລິມະສິດສູງກວ່າຊື່ໄຟລ໌ທີ່ພົບໃນ url ຫຼື path." + +#: ../source/specifications/pylock-toml.rst:575 +msgid "``packages.sdist.upload-time``" +msgstr "``packages.sdist.upload-time``" + +#: ../source/specifications/pylock-toml.rst:577 +#: ../source/specifications/pylock-toml.rst:648 +msgid "See :ref:`pylock-packages-archive-upload-time`." +msgstr "ເບິ່ງ :ref:`pylock-packages-archive-upload-time`." + +#: ../source/specifications/pylock-toml.rst:583 +msgid "``packages.sdist.url``" +msgstr "``packages.sdist.url``" + +#: ../source/specifications/pylock-toml.rst:585 +#: ../source/specifications/pylock-toml.rst:656 +msgid "See :ref:`pylock-packages-archive-url`." +msgstr "ເບິ່ງ :ref:`pylock-packages-archive-url`." + +#: ../source/specifications/pylock-toml.rst:591 +msgid "``packages.sdist.path``" +msgstr "``packages.sdist.path``" + +#: ../source/specifications/pylock-toml.rst:593 +#: ../source/specifications/pylock-toml.rst:664 +msgid "See :ref:`pylock-packages-archive-path`." +msgstr "ເບິ່ງ :ref:`pylock-packages-archive-path`." + +#: ../source/specifications/pylock-toml.rst:599 +msgid "``packages.sdist.size``" +msgstr "``packages.sdist.size``" + +#: ../source/specifications/pylock-toml.rst:601 +#: ../source/specifications/pylock-toml.rst:672 +msgid "See :ref:`pylock-packages-archive-size`." +msgstr "ເບິ່ງ :ref:`pylock-packages-archive-size`." + +#: ../source/specifications/pylock-toml.rst:607 +msgid "``packages.sdist.hashes``" +msgstr "``packages.sdist.hashes``" + +#: ../source/specifications/pylock-toml.rst:609 +#: ../source/specifications/pylock-toml.rst:680 +msgid "See :ref:`pylock-packages-archive-hashes`." +msgstr "ເບິ່ງ :ref:`pylock-packages-archive-hashes`." + +#: ../source/specifications/pylock-toml.rst:616 +msgid "``[[packages.wheels]]``" +msgstr "``[[packages.wheels]]``" + +#: ../source/specifications/pylock-toml.rst:622 +msgid "" +"For recording the wheel files as specified by :ref:`binary-distribution-" +"format` for the package." +msgstr "ສຳລັບບັນທຶກໄຟລ໌ wheel ຕາມທີ່ກຳນົດໄວ້ໃນ :ref:`binary-distribution-format`." + +#: ../source/specifications/pylock-toml.rst:624 +msgid "" +"Tools MUST support wheel files, both from a locking and installation " +"perspective." +msgstr "ເຄື່ອງມື **ຕ້ອງ** ຮອງຮັບໄຟລ໌ wheel ທັງໃນດ້ານການສ້າງ lock ແລະ ການຕິດຕັ້ງ." + +#: ../source/specifications/pylock-toml.rst:631 +msgid "``packages.wheels.name``" +msgstr "``packages.wheels.name``" + +#: ../source/specifications/pylock-toml.rst:634 +msgid "" +"**Required?**: no, not when the last component of :ref:`pylock-packages-" +"wheels-path`/ :ref:`pylock-packages-wheels-url` would be the same value" +msgstr "**ຈຳເປັນຫຼືບໍ່?**: ບໍ່, ຫາກມີຄ່າດຽວກັນກັບສ່ວນທ້າຍຂອງ path ຫຼື url" + +#: ../source/specifications/pylock-toml.rst:638 +msgid "The file name of the :ref:`binary-distribution-format` file." +msgstr "ຊື່ໄຟລ໌ຂອງໄຟລ໌ wheel." + +#: ../source/specifications/pylock-toml.rst:639 +msgid "" +"If specified, this key's value takes precedence over the file name found in " +"either :ref:`pylock-packages-wheels-url` or :ref:`pylock-packages-wheels-" +"path`." +msgstr "ຫາກລະບຸໄວ້, ຄ່າຂອງ key ນີ້ຈະມີບຸລິມະສິດສູງກວ່າຊື່ໄຟລ໌ທີ່ພົບໃນ url ຫຼື path." + +#: ../source/specifications/pylock-toml.rst:646 +msgid "``packages.wheels.upload-time``" +msgstr "``packages.wheels.upload-time``" + +#: ../source/specifications/pylock-toml.rst:654 +msgid "``packages.wheels.url``" +msgstr "``packages.wheels.url``" + +#: ../source/specifications/pylock-toml.rst:662 +msgid "``packages.wheels.path``" +msgstr "``packages.wheels.path``" + +#: ../source/specifications/pylock-toml.rst:670 +msgid "``packages.wheels.size``" +msgstr "``packages.wheels.size``" + +#: ../source/specifications/pylock-toml.rst:678 +msgid "``packages.wheels.hashes``" +msgstr "``packages.wheels.hashes``" + +#: ../source/specifications/pylock-toml.rst:686 +msgid "``[[packages.attestation-identities]]``" +msgstr "``[[packages.attestation-identities]]``" + +#: ../source/specifications/pylock-toml.rst:690 +#: ../source/specifications/pylock-toml.rst:705 +msgid "**Inspiration**: :ref:`provenance-object`" +msgstr "**ແຮງບັນດານໃຈ**: :ref:`provenance-object`" + +#: ../source/specifications/pylock-toml.rst:691 +msgid "" +"A recording of the attestations for **any** file recorded for this package." +msgstr "ການບັນທຶກການຢືນຢັນ (attestations) ສຳລັບໄຟລ໌ໃດໜຶ່ງທີ່ບັນທຶກໄວ້ສຳລັບແພັກເກັດນີ້." + +#: ../source/specifications/pylock-toml.rst:692 +msgid "If available, tools SHOULD include the attestation identities found." +msgstr "ຫາກມີຂໍ້ມູນ, ເຄື່ອງມື **ຄວນ** ລວມເອົາຂໍ້ມູນຕົວຕົນການຢືນຢັນທີ່ພົບ." + +#: ../source/specifications/pylock-toml.rst:693 +msgid "" +"Publisher-specific keys are to be included in the table as-is (i.e. top-" +"level), following the spec at :ref:`index-hosted-attestations`." +msgstr "Key ສະເພາະຂອງຜູ້ເຜີຍແຜ່ (Publisher) ໃຫ້ລວມໄວ້ໃນຕາຕະລາງຕາມສະພາບເດີມ..." + +#: ../source/specifications/pylock-toml.rst:701 +msgid "``packages.attestation-identities.kind``" +msgstr "``packages.attestation-identities.kind``" + +#: ../source/specifications/pylock-toml.rst:706 +msgid "The unique identity of the Trusted Publisher." +msgstr "ຕົວຕົນທີ່ເປັນເອກະລັກຂອງຜູ້ເຜີຍແຜ່ທີ່ໄດ້ຮັບຄວາມເຊື່ອຖື (Trusted Publisher)." + +#: ../source/specifications/pylock-toml.rst:712 +msgid "``[packages.tool]``" +msgstr "``[packages.tool]``" + +#: ../source/specifications/pylock-toml.rst:717 +msgid "" +"Similar usage as that of the :ref:`pylock-tool` table from " +"the :ref:`pyproject-toml-spec`, but at the package version level instead of " +"at the lock file level (which is also available via :ref:`pylock-tool`)." +msgstr "ການນຳໃຊ້ທີ່ຄ້າຍຄືກັນກັບຕາຕະລາງ :ref:`pylock-tool` ແຕ່ຢູ່ໃນລະດັບເວີຊັນຂອງແພັກເກັດ..." + +#: ../source/specifications/pylock-toml.rst:720 +msgid "" +"Data recorded in the table MUST be disposable (i.e. it MUST NOT affect " +"installation)." +msgstr "" +"ຂໍ້ມູນທີ່ບັນທຶກໃນຕາຕະລາງ **ຕ້ອງ** ສາມາດຖິ້ມໄດ້ (ໝາຍຄວາມວ່າ ມັນ **ຕ້ອງບໍ່** ສົ່ງຜົນກະທົບຕໍ່ການຕິດຕັ້ງ)." + +#: ../source/specifications/pylock-toml.rst:727 +msgid "``[tool]``" +msgstr "``[tool]``" + +#: ../source/specifications/pylock-toml.rst:732 +msgid "See :ref:`pylock-packages-tool`." +msgstr "ເບິ່ງ :ref:`pylock-packages-tool`." + +#: ../source/specifications/pylock-toml.rst:746 +msgid "" +"The following outlines the steps to be taken to install from a lock file " +"(while the requirements are prescriptive, the general steps and order are a " +"suggestion):" +msgstr "ຕໍ່ໄປນີ້ແມ່ນຂັ້ນຕອນທີ່ຈະປະຕິບັດເພື່ອຕິດຕັ້ງຈາກໄຟລ໌ lock (ຂັ້ນຕອນ ແລະ ລຳດັບ ເຫຼົ່ານີ້ແມ່ນຂໍ້ແນະນຳ):" + +#: ../source/specifications/pylock-toml.rst:750 +msgid "" +"Gather the extras and dependency groups to install and set ``extras`` and " +"``dependency_groups`` for marker evaluation, respectively." +msgstr "" +"ລວບລວມ extras ແລະ dependency groups ເພື່ອຕິດຕັ້ງ ແລະ ຕັ້ງຄ່າ ``extras`` ແລະ " +"``dependency_groups`` ສຳລັບການປະເມີນ marker." + +#: ../source/specifications/pylock-toml.rst:753 +msgid "``extras`` SHOULD be set to the empty set by default." +msgstr "``extras`` **ຄວນ** ຖືກຕັ້ງໃຫ້ເປັນເຊັດຫວ່າງ (empty set) ເປັນຄ່າເລີ່ມຕົ້ນ." + +#: ../source/specifications/pylock-toml.rst:754 +msgid "" +"``dependency_groups`` SHOULD be the set created from :ref:`pylock-default-" +"groups` by default." +msgstr "" +"``dependency_groups`` **ຄວນ** ເປັນເຊັດທີ່ສ້າງຂຶ້ນຈາກ :ref:`pylock-default-groups` " +"ເປັນຄ່າເລີ່ມຕົ້ນ." + +#: ../source/specifications/pylock-toml.rst:757 +msgid "" +"Check if the metadata version specified by :ref:`pylock-lock-version` is " +"supported; an error or warning MUST be raised as appropriate." +msgstr "" +"ກວດສອບວ່າເວີຊັນ metadata ທີ່ລະບຸໂດຍ :ref:`pylock-lock-version` ໄດ້ຮັບການ ຮອງຮັບຫຼືບໍ່; " +"**ຕ້ອງ** ສະແດງຂໍ້ຜິດພາດ ຫຼື ຄຳເຕືອນຕາມຄວາມເໝາະສົມ." + +#: ../source/specifications/pylock-toml.rst:759 +msgid "" +"If :ref:`pylock-requires-python` is specified, check that the environment " +"being installed for meets the requirement; an error MUST be raised if it is " +"not met." +msgstr "" +"ຫາກລະບຸ :ref:`pylock-requires-python`, ໃຫ້ກວດສອບວ່າສະພາບແວດລ້ອມທີ່ກຳລັງ " +"ຕິດຕັ້ງນັ້ນກົງຕາມຄວາມຕ້ອງການຫຼືບໍ່; **ຕ້ອງ** ສະແດງຂໍ້ຜິດພາດຫາກບໍ່ກົງຕາມເງື່ອນໄຂ." + +#: ../source/specifications/pylock-toml.rst:762 +msgid "" +"If :ref:`pylock-environments` is specified, check that at least one of the " +"environment marker expressions is satisfied; an error MUST be raised if no " +"expression is satisfied." +msgstr "" +"ຫາກລະບຸ :ref:`pylock-environments`, ໃຫ້ກວດສອບວ່າຢ່າງໜ້ອຍໜຶ່ງໃນນິພົດ environment " +"marker ນັ້ນກົງຕາມເງື່ອນໄຂຫຼືບໍ່; **ຕ້ອງ** ສະແດງຂໍ້ຜິດພາດຫາກ ບໍ່ມີນິພົດໃດກົງຕາມເງື່ອນໄຂ." + +#: ../source/specifications/pylock-toml.rst:765 +msgid "For each package listed in :ref:`pylock-packages`:" +msgstr "ສຳລັບແຕ່ລະແພັກເກັດທີ່ລະບຸໃນ :ref:`pylock-packages`:" + +#: ../source/specifications/pylock-toml.rst:767 +msgid "" +"If :ref:`pylock-packages-marker` is specified, check if it is satisfied; if " +"it isn't, skip to the next package." +msgstr "" +"ຫາກລະບຸ :ref:`pylock-packages-marker`, ໃຫ້ກວດສອບວ່ານັ້ນກົງຕາມເງື່ອນໄຂຫຼືບໍ່; ຫາກບໍ່ກົງ, " +"ໃຫ້ຂ້າມໄປແພັກເກັດຖັດໄປ." + +#: ../source/specifications/pylock-toml.rst:769 +msgid "" +"If :ref:`pylock-packages-requires-python` is specified, check if it is " +"satisfied; an error MUST be raised if it isn't." +msgstr "" +"ຫາກລະບຸ :ref:`pylock-packages-requires-python`, ໃຫ້ກວດສອບວ່ານັ້ນກົງຕາມເງື່ອນໄຂຫຼືບໍ່; " +"**ຕ້ອງ** ສະແດງຂໍ້ຜິດພາດຫາກບໍ່ກົງຕາມເງື່ອນໄຂ." + +#: ../source/specifications/pylock-toml.rst:771 +msgid "" +"Check that no other conflicting instance of the package has been slated to " +"be installed; an error about the ambiguity MUST be raised otherwise." +msgstr "" +"ກວດສອບວ່າບໍ່ມີແພັກເກັດດຽວກັນແຕ່ຄົນລະລາຍການທີ່ຂັດແຍ່ງກັນຖືກກຳນົດໃຫ້ຕິດຕັ້ງ; **ຕ້ອງ** " +"ສະແດງຂໍ້ຜິດພາດຫາກພົບຄວາມບໍ່ຊັດເຈນ." + +#: ../source/specifications/pylock-toml.rst:773 +msgid "" +"Check that the source of the package is specified appropriately (i.e. there " +"are no conflicting sources in the package entry); an error MUST be raised if " +"any issues are found." +msgstr "" +"ກວດສອບວ່າແຫຼ່ງທີ່ມາຂອງແພັກເກັດຖືກລະບຸຢ່າງເໝາະສົມ; **ຕ້ອງ** ສະແດງຂໍ້ຜິດພາດ ຫາກພົບບັນຫາໃດໆ." + +#: ../source/specifications/pylock-toml.rst:776 +msgid "Add the package to the set of packages to install." +msgstr "ເພີ່ມແພັກເກັດເຂົ້າໃນເຊັດຂອງແພັກເກັດທີ່ຈະຕິດຕັ້ງ." + +#: ../source/specifications/pylock-toml.rst:778 +msgid "For each package to be installed:" +msgstr "ສຳລັບແຕ່ລະແພັກເກັດທີ່ຈະຕິດຕັ້ງ:" + +#: ../source/specifications/pylock-toml.rst:780 +msgid "If :ref:`pylock-packages-vcs` is set:" +msgstr "ຫາກ :ref:`pylock-packages-vcs` ຖືກຕັ້ງຄ່າ:" + +#: ../source/specifications/pylock-toml.rst:782 +msgid "" +"Clone the repository to the commit ID specified in :ref:`pylock-packages-vcs-" +"commit-id`." +msgstr "" +"Clone repository ຕາມໝາຍເລກ commit ID ທີ່ລະບຸໃນ :ref:`pylock-packages-vcs-commit-" +"id`." + +#: ../source/specifications/pylock-toml.rst:784 +msgid "" +":ref:`Build ` the package, " +"respecting :ref:`pylock-packages-vcs-subdirectory`." +msgstr "" +":ref:`ບິວດ໌ (Build) ` ແພັກເກັດ, " +"ໂດຍປະຕິບັດຕາມ :ref:`pylock-packages-vcs-subdirectory`." + +#: ../source/specifications/pylock-toml.rst:786 +#: ../source/specifications/pylock-toml.rst:792 +#: ../source/specifications/pylock-toml.rst:801 +#: ../source/specifications/pylock-toml.rst:821 +#: ../source/specifications/pylock-toml.rst:836 +msgid ":ref:`Install `." +msgstr ":ref:`ຕິດຕັ້ງ `." + +#: ../source/specifications/pylock-toml.rst:788 +msgid "Else if :ref:`pylock-packages-directory` is set:" +msgstr "ຫາກບໍ່ດັ່ງນັ້ນ ຖ້າ :ref:`pylock-packages-directory` ຖືກຕັ້ງຄ່າ:" + +#: ../source/specifications/pylock-toml.rst:790 +msgid "" +":ref:`Build ` the package, " +"respecting :ref:`pylock-packages-directory-subdirectory`." +msgstr "" +":ref:`ບິວດ໌ (Build) ` ແພັກເກັດ, " +"ໂດຍປະຕິບັດຕາມ :ref:`pylock-packages-directory-subdirectory`." + +#: ../source/specifications/pylock-toml.rst:794 +msgid "Else if :ref:`pylock-packages-archive` is set:" +msgstr "ຫາກບໍ່ດັ່ງນັ້ນ ຖ້າ :ref:`pylock-packages-archive` ຖືກຕັ້ງຄ່າ:" + +#: ../source/specifications/pylock-toml.rst:796 +#: ../source/specifications/pylock-toml.rst:826 +msgid "Get the file." +msgstr "ດຶງໄຟລ໌ມາ." + +#: ../source/specifications/pylock-toml.rst:797 +msgid "" +"Validate using :ref:`pylock-packages-archive-size` and :ref:`pylock-packages-" +"archive-hashes`." +msgstr "" +"ກວດສອບຄວາມຖືກຕ້ອງໂດຍໃຊ້ :ref:`pylock-packages-archive-size` ແລະ :ref:`pylock-" +"packages-archive-hashes`." + +#: ../source/specifications/pylock-toml.rst:799 +msgid "" +":ref:`Build ` the package, " +"respecting :ref:`pylock-packages-archive-subdirectory`." +msgstr "" +":ref:`ບິວດ໌ (Build) ` ແພັກເກັດ, " +"ໂດຍປະຕິບັດຕາມ :ref:`pylock-packages-archive-subdirectory`." + +#: ../source/specifications/pylock-toml.rst:803 +msgid "Else if there are entries for :ref:`pylock-packages-wheels`:" +msgstr "ຫາກບໍ່ດັ່ງນັ້ນ ຖ້າມີລາຍການສຳລັບ :ref:`pylock-packages-wheels`:" + +#: ../source/specifications/pylock-toml.rst:805 +msgid "" +"Look for the appropriate wheel file based on :ref:`pylock-packages-wheels-" +"name`; if one is not found then move on to :ref:`pylock-packages-sdist` or " +"an error MUST be raised about a lack of source for the project." +msgstr "" +"ຄົ້ນຫາໄຟລ໌ wheel ທີ່ເໝາະສົມຕາມ :ref:`pylock-packages-wheels-name`; " +"ຫາກບໍ່ພົບໃຫ້ໄປທີ່ :ref:`pylock-packages-sdist` ຫຼື ສະແດງຂໍ້ຜິດພາດ." + +#: ../source/specifications/pylock-toml.rst:809 +msgid "Get the file:" +msgstr "ດຶງໄຟລ໌ມາ:" + +#: ../source/specifications/pylock-toml.rst:811 +msgid "If :ref:`pylock-packages-wheels-path` is set, use it." +msgstr "ຫາກ :ref:`pylock-packages-wheels-path` ຖືກຕັ້ງຄ່າ, ໃຫ້ໃຊ້ມັນ." + +#: ../source/specifications/pylock-toml.rst:812 +msgid "" +"Else if :ref:`pylock-packages-wheels-url` is set, try to use it; optionally " +"tools MAY use :ref:`pylock-packages-index` or some tool-specific mechanism " +"to download the selected wheel file (tools MUST NOT try to change what wheel " +"file to download based on what's available; what file to install should be " +"determined in an offline fashion for reproducibility)." +msgstr "" +"ຫາກບໍ່ດັ່ງນັ້ນ ຖ້າ :ref:`pylock-packages-wheels-url` ຖືກຕັ້ງຄ່າ, ໃຫ້ລອງໃຊ້ມັນ; ເຄື່ອງມື " +"**ອາດຈະ** ໃຊ້ :ref:`pylock-packages-index` ຫຼື ກົນໄກອື່ນ..." + +#: ../source/specifications/pylock-toml.rst:819 +msgid "" +"Validate using :ref:`pylock-packages-wheels-size` and :ref:`pylock-packages-" +"wheels-hashes`." +msgstr "" +"ກວດສອບຄວາມຖືກຕ້ອງໂດຍໃຊ້ :ref:`pylock-packages-wheels-size` ແລະ :ref:`pylock-" +"packages-wheels-hashes`." + +#: ../source/specifications/pylock-toml.rst:823 +msgid "" +"Else if no :ref:`pylock-packages-wheels` file is found or :ref:`pylock-" +"packages-sdist` is solely set:" +msgstr "ຫາກບໍ່ດັ່ງນັ້ນ ຖ້າບໍ່ພົບໄຟລ໌ wheel ຫຼື ມີການຕັ້ງຄ່າ sdist ພຽງຢ່າງດຽວ:" + +#: ../source/specifications/pylock-toml.rst:828 +msgid "If :ref:`pylock-packages-sdist-path` is set, use it." +msgstr "ຫາກ :ref:`pylock-packages-sdist-path` ຖືກຕັ້ງຄ່າ, ໃຫ້ໃຊ້ມັນ." + +#: ../source/specifications/pylock-toml.rst:829 +msgid "" +"Else if :ref:`pylock-packages-sdist-url` is set, try to use it; tools MAY " +"use :ref:`pylock-packages-index` or some tool-specific mechanism to download " +"the file." +msgstr "ຫາກບໍ່ດັ່ງນັ້ນ ຖ້າ :ref:`pylock-packages-sdist-url` ຖືກຕັ້ງຄ່າ, ໃຫ້ລອງໃຊ້ມັນ..." + +#: ../source/specifications/pylock-toml.rst:833 +msgid "" +"Validate using :ref:`pylock-packages-sdist-size` and :ref:`pylock-packages-" +"sdist-hashes`." +msgstr "" +"ກວດສອບຄວາມຖືກຕ້ອງໂດຍໃຊ້ :ref:`pylock-packages-sdist-size` ແລະ :ref:`pylock-" +"packages-sdist-hashes`." + +#: ../source/specifications/pylock-toml.rst:835 +msgid ":ref:`Build ` the package." +msgstr ":ref:`ບິວດ໌ (Build) ` ແພັກເກັດ." + +#: ../source/specifications/pylock-toml.rst:843 +msgid "April 2025: Initial version, approved via :pep:`751`." +msgstr "ເມສາ 2025: ເວີຊັນເລີ່ມຕົ້ນ, ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`751`." + +#: ../source/specifications/pylock-toml.rst:844 +msgid "" +"March 2026: Clarify file name precedence for archives, sdists, and wheels." +msgstr "" +"ມີນາ 2026: ເຮັດໃຫ້ລຳດັບຄວາມສຳຄັນຂອງຊື່ໄຟລ໌ສຳລັບ archives, sdists, ແລະ wheels ຊັດເຈນຂຶ້ນ." + +#: ../source/specifications/pypirc.rst:6 +msgid "The :file:`.pypirc` file" +msgstr "ໄຟລ໌ :file:`.pypirc`" + +#: ../source/specifications/pypirc.rst:8 +msgid "" +"A :file:`.pypirc` file allows you to define the configuration " +"for :term:`package indexes ` (referred to here as " +"\"repositories\"), so that you don't have to enter the URL, username, or " +"password whenever you upload a package with :ref:`twine` or :ref:`flit`." +msgstr "" +"ໄຟລ໌ :file:`.pypirc` ຊ່ວຍໃຫ້ເຈົ້າກຳນົດການຕັ້ງຄ່າສຳລັບ :term:`package indexes` " +"(ໃນທີ່ນີ້ເອີ້ນວ່າ \"repositories\") ເພື່ອໃຫ້ເຈົ້າບໍ່ຕ້ອງປ້ອນ URL, ຊື່ຜູ້ໃຊ້ ຫຼື ລະຫັດຜ່ານ " +"ທຸກຄັ້ງທີ່ເຈົ້າອັບໂຫຼດແພັກເກັດດ້ວຍ :ref:`twine` ຫຼື :ref:`flit`." + +#: ../source/specifications/pypirc.rst:13 +msgid "The :file:`.pypirc` file **SHOULD** be UTF-8 encoded." +msgstr "ໄຟລ໌ :file:`.pypirc` **ຄວນ** ຖືກເຂົ້າລະຫັດເປັນ UTF-8." + +#: ../source/specifications/pypirc.rst:15 +msgid "" +"Tools that read or write :file:`.pypirc` files may not function correctly if " +"another character encoding is used." +msgstr "" +"ເຄື່ອງມືທີ່ອ່ານ ຫຼື ຂຽນໄຟລ໌ :file:`.pypirc` ອາດຈະເຮັດວຽກບໍ່ຖືກຕ້ອງ ຖ້າໃຊ້ການເຂົ້າລະຫັດຕົວອັກສອນອື່ນ." + +#: ../source/specifications/pypirc.rst:18 +msgid "The format (originally defined by the :ref:`distutils` package) is:" +msgstr "ຮູບແບບ (ກຳນົດເບື້ອງຕົ້ນໂດຍແພັກເກັດ :ref:`distutils`) ແມ່ນ:" + +#: ../source/specifications/pypirc.rst:37 +msgid "" +"The ``distutils`` section defines an ``index-servers`` field that lists the " +"name of all sections describing a repository." +msgstr "" +"ສ່ວນ ``distutils`` ກຳນົດຟີວ (field) ``index-servers`` ທີ່ລະບຸຊື່ຂອງ " +"ທຸກພາກສ່ວນທີ່ອະທິບາຍກ່ຽວກັບ repository." + +#: ../source/specifications/pypirc.rst:40 +msgid "Each section describing a repository defines three fields:" +msgstr "ແຕ່ລະພາກສ່ວນທີ່ອະທິບາຍ repository ຈະກຳນົດສາມຟີວ:" + +#: ../source/specifications/pypirc.rst:42 +msgid "``repository``: The URL of the repository." +msgstr "``repository``: URL ຂອງ repository." + +#: ../source/specifications/pypirc.rst:43 +msgid "``username``: The registered username on the repository." +msgstr "``username``: ຊື່ຜູ້ໃຊ້ທີ່ລົງທະບຽນໃນ repository." + +#: ../source/specifications/pypirc.rst:44 +msgid "``password``: The password that will used to authenticate the username." +msgstr "``password``: ລະຫັດຜ່ານທີ່ຈະໃຊ້ເພື່ອຢືນຢັນຕົວຕົນຂອງຊື່ຜູ້ໃຊ້." + +#: ../source/specifications/pypirc.rst:48 +msgid "" +"Be aware that this stores your password in plain text. For better security, " +"consider an alternative like `keyring`_, setting environment variables, or " +"providing the password on the command line." +msgstr "" +"ຄວນລະວັງວ່າສິ່ງນີ້ຈະເກັບລະຫັດຜ່ານຂອງເຈົ້າເປັນຂໍ້ຄວາມທຳມະດາ. ເພື່ອຄວາມປອດໄພ ທີ່ດີກວ່າ, " +"ໃຫ້ພິຈາລະນາໃຊ້ທາງເລືອກອື່ນ ເຊັ່ນ `keyring`_..." + +#: ../source/specifications/pypirc.rst:52 +msgid "" +"Otherwise, set the permissions on :file:`.pypirc` so that only you can view " +"or modify it. For example, on Linux or macOS, run:" +msgstr "" +"ຫາກບໍ່ດັ່ງນັ້ນ, ໃຫ້ຕັ້ງຄ່າການອະນຸຍາດ (permissions) ໃນ :file:`.pypirc` " +"ເພື່ອໃຫ້ເຈົ້າພຽງຜູ້ດຽວທີ່ສາມາດເບິ່ງ ຫຼື ແກ້ໄຂມັນໄດ້. ເຊັ່ນ:" + +#: ../source/specifications/pypirc.rst:62 +msgid "Common configurations" +msgstr "ການຕັ້ງຄ່າທົ່ວໄປ" + +#: ../source/specifications/pypirc.rst:66 +msgid "" +"These examples apply to :ref:`twine`. Other projects (e.g. :ref:`flit`) also " +"use :file:`.pypirc`, but with different defaults. Please refer to each " +"project's documentation for more details and usage instructions." +msgstr "" +"ຕົວຢ່າງເຫຼົ່ານີ້ໃຊ້ກັບ :ref:`twine`. ໂຄງການອື່ນໆ (ເຊັ່ນ :ref:`flit`) ກໍໃຊ້ :file:`.pypirc` " +"ຄືກັນ ແຕ່ມີຄ່າເລີ່ມຕົ້ນທີ່ຕ່າງກັນ..." + +#: ../source/specifications/pypirc.rst:70 +msgid "" +"Twine's default configuration mimics a :file:`.pypirc` with repository " +"sections for PyPI and TestPyPI:" +msgstr "" +"ການຕັ້ງຄ່າເລີ່ມຕົ້ນຂອງ Twine ຈະຈຳລອງ :file:`.pypirc` ທີ່ມີພາກສ່ວນ repository ສຳລັບ PyPI " +"ແລະ TestPyPI:" + +#: ../source/specifications/pypirc.rst:86 +msgid "" +"Twine will add additional configuration from :file:`$HOME/.pypirc`, the " +"command line, and environment variables to this default configuration." +msgstr "" +"Twine ຈະເພີ່ມການຕັ້ງຄ່າເພີ່ມເຕີມຈາກ :file:`$HOME/.pypirc`, ບັນທັດຄຳສັ່ງ, ແລະ " +"ຕົວປ່ຽນສະພາບແວດລ້ອມ ເຂົ້າໃນການຕັ້ງຄ່າເລີ່ມຕົ້ນນີ້." + +#: ../source/specifications/pypirc.rst:90 +msgid "Using a PyPI token" +msgstr "ການໃຊ້ PyPI token" + +#: ../source/specifications/pypirc.rst:92 +msgid "" +"To set your `API token`_ for PyPI, you can create a :file:`$HOME/.pypirc` " +"similar to:" +msgstr "" +"ເພື່ອຕັ້ງຄ່າ `API token`_ ຂອງເຈົ້າສຳລັບ PyPI, ເຈົ້າສາມາດສ້າງ :file:`$HOME/.pypirc` " +"ທີ່ຄ້າຍຄືກັບ:" + +#: ../source/specifications/pypirc.rst:101 +msgid "" +"For :ref:`TestPyPI `, add a ``[testpypi]`` section, using " +"the API token from your TestPyPI account." +msgstr "" +"ສຳລັບ :ref:`TestPyPI`, ໃຫ້ເພີ່ມພາກສ່ວນ ``[testpypi]`` ໂດຍໃຊ້ API token ຈາກບັນຊີ " +"TestPyPI ຂອງເຈົ້າ." + +#: ../source/specifications/pypirc.rst:107 +msgid "Using another package index" +msgstr "ການໃຊ້ package index ອື່ນ" + +#: ../source/specifications/pypirc.rst:109 +msgid "" +"To configure an additional repository, you'll need to redefine the ``index-" +"servers`` field to include the repository name. Here is a complete example " +"of a :file:`$HOME/.pypirc` for PyPI, TestPyPI, and a private repository:" +msgstr "" +"ເພື່ອຕັ້ງຄ່າ repository ເພີ່ມເຕີມ, ເຈົ້າຈະຕ້ອງກຳນົດຟີວ ``index-servers`` ໃໝ່ເພື່ອລວມເອົາຊື່ " +"repository ນັ້ນນຳ. ນີ້ແມ່ນຕົວຢ່າງ:" + +#: ../source/specifications/pypirc.rst:136 +msgid "" +"Instead of using the ``password`` field, consider saving your API tokens and " +"passwords securely using `keyring`_ (which is installed by Twine):" +msgstr "" +"ແທັນທີ່ຈະໃຊ້ຟີວ ``password``, ໃຫ້ພິຈາລະນາການບັນທຶກ API tokens ແລະ " +"ລະຫັດຜ່ານຂອງເຈົ້າຢ່າງປອດໄພໂດຍໃຊ້ `keyring`_:" + +#: ../source/specifications/pyproject-toml.rst:6 +msgid "``pyproject.toml`` specification" +msgstr "ຂໍ້ກຳນົດຂອງ ``pyproject.toml``" + +#: ../source/specifications/pyproject-toml.rst:10 +msgid "" +"This is a **technical, formal specification**. For a gentle, user-friendly " +"guide to ``pyproject.toml``, see :ref:`writing-pyproject-toml`." +msgstr "" +"ນີ້ແມ່ນ **ຂໍ້ກຳນົດທາງດ້ານເຕັກນິກຢ່າງເປັນທາງການ**. ສຳລັບຄຳແນະນຳການໃຊ້ ``pyproject.toml`` " +"ທີ່ເຂົ້າໃຈງ່າຍ, ໃຫ້ເບິ່ງ :ref:`writing-pyproject-toml`." + +#: ../source/specifications/pyproject-toml.rst:14 +msgid "" +"The ``pyproject.toml`` file acts as a configuration file for packaging-" +"related tools (as well as other tools)." +msgstr "" +"ໄຟລ໌ ``pyproject.toml`` ເຮັດໜ້າທີ່ເປັນໄຟລ໌ຕັ້ງຄ່າສຳລັບເຄື່ອງມືທີ່ກ່ຽວຂ້ອງ ກັບການເຮັດແພັກເກັດ " +"(ລວມເຖິງເຄື່ອງມືອື່ນໆ)." + +#: ../source/specifications/pyproject-toml.rst:17 +msgid "" +"The ``pyproject.toml`` file is written in `TOML `_. Three " +"tables are currently specified, namely :ref:`[build-system] `, :ref:`[project] ` and :ref:`[tool] " +"`. Other tables are reserved for future use (tool-" +"specific configuration should use the ``[tool]`` table)." +msgstr "" +"ໄຟລ໌ ``pyproject.toml`` ຖືກຂຽນໃນຮູບແບບ TOML. ໃນປັດຈຸບັນມີສາມຕາຕະລາງ ທີ່ຖືກກຳນົດໄວ້ " +"ຄື: :ref:`[build-system]`, :ref:`[project]` ແລະ :ref:`[tool]`..." + +#: ../source/specifications/pyproject-toml.rst:27 +msgid "Declaring build system dependencies: the ``[build-system]`` table" +msgstr "ການປະກາດ dependency ຂອງລະບົບບິວດ໌: ຕາຕະລາງ ``[build-system]``" + +#: ../source/specifications/pyproject-toml.rst:29 +msgid "" +"The ``[build-system]`` table declares any Python level dependencies that " +"must be installed in order to run the project's build system successfully." +msgstr "" +"ຕາຕະລາງ ``[build-system]`` ໃຊ້ປະກາດ dependency ລະດັບ Python ໃດໆ ທີ່ ຕ້ອງໄດ້ຕິດຕັ້ງ " +"ເພື່ອໃຫ້ສາມາດດຳເນີນການລະບົບບິວດ໌ຂອງໂຄງການໄດ້ຢ່າງສຳເລັດຜົນ." + +#: ../source/specifications/pyproject-toml.rst:35 +msgid "" +"The ``[build-system]`` table is used to store build-related data. Initially, " +"only one key of the table is valid and is mandatory for the table: " +"``requires``. This key must have a value of a list of strings representing " +"dependencies required to execute the build system. The strings in this list " +"follow the :ref:`version specifier specification `." +msgstr "" +"ຕາຕະລາງ ``[build-system]`` ໃຊ້ເພື່ອເກັບຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບການບິວດ໌. ໃນເບື້ອງຕົ້ນ, ມີພຽງ key " +"ດຽວທີ່ຈຳເປັນຕ້ອງມີ ຄື: ``requires``..." + +#: ../source/specifications/pyproject-toml.rst:42 +msgid "" +"An example ``[build-system]`` table for a project built with ``setuptools`` " +"is:" +msgstr "ຕົວຢ່າງຕາຕະລາງ ``[build-system]`` ສຳລັບໂຄງການທີ່ບິວດ໌ດ້ວຍ ``setuptools`` ແມ່ນ:" + +#: ../source/specifications/pyproject-toml.rst:51 +msgid "" +"Build tools are expected to use the example configuration file above as " +"their default semantics when a ``pyproject.toml`` file is not present." +msgstr "" +"ເຄື່ອງມືບິວດ໌ຖືກຄາດຫວັງວ່າຈະໃຊ້ຕົວຢ່າງການຕັ້ງຄ່າຂ້າງເທິງນັ້ນເປັນຄ່າເລີ່ມຕົ້ນ ເມື່ອບໍ່ມີໄຟລ໌ " +"``pyproject.toml``." + +#: ../source/specifications/pyproject-toml.rst:54 +msgid "" +"Tools should not require the existence of the ``[build-system]`` table. A " +"``pyproject.toml`` file may be used to store configuration details other " +"than build-related data and thus lack a ``[build-system]`` table " +"legitimately. If the file exists but is lacking the ``[build-system]`` table " +"then the default values as specified above should be used. If the table is " +"specified but is missing required fields then the tool should consider it an " +"error." +msgstr "" +"ເຄື່ອງມືບໍ່ຄວນບັງຄັບວ່າຕ້ອງມີຕາຕະລາງ ``[build-system]``. ຫາກມີໄຟລ໌ແຕ່ບໍ່ມີ ຕາຕະລາງດັ່ງກ່າວ " +"ໃຫ້ໃຊ້ຄ່າເລີ່ມຕົ້ນຕາມທີ່ລະບຸໄວ້ຂ້າງເທິງ." + +#: ../source/specifications/pyproject-toml.rst:62 +msgid "" +"Tools may choose to present an error to the user if the file exists, " +"``[build-system]`` table is missing, and there is no clear indication that " +"the project should be built (e.g., no setup.py/setup.cfg or other build " +"configuration files, and no ``[project]`` table)." +msgstr "" +"ເຄື່ອງມືອາດຈະສະແດງຂໍ້ຜິດພາດຫາກບໍ່ມີຕາຕະລາງ ``[build-system]`` ແລະ ບໍ່ມີ " +"ສັນຍານທີ່ຊັດເຈນວ່າໂຄງການນັ້ນຄວນຖືກບິວດ໌..." + +#: ../source/specifications/pyproject-toml.rst:67 +msgid "" +"To provide a type-specific representation of the resulting data from the " +"TOML file for illustrative purposes only, the following `JSON Schema " +"`_ would match the data format:" +msgstr "" +"ເພື່ອສະແດງໃຫ້ເຫັນຮູບແບບຂໍ້ມູນທີ່ໄດ້ຈາກໄຟລ໌ TOML ໂດຍໃຊ້ JSON Schema (ເພື່ອເປັນຕົວຢ່າງເທົ່ານັ້ນ), " +"ຮູບແບບຂໍ້ມູນຈະກົງກັບ:" + +#: ../source/specifications/pyproject-toml.rst:105 +msgid "Declaring project metadata: the ``[project]`` table" +msgstr "ການປະກາດ metadata ຂອງໂຄງການ: ຕາຕະລາງ ``[project]``" + +#: ../source/specifications/pyproject-toml.rst:107 +msgid "" +"The ``[project]`` table specifies the project's :ref:`core metadata `." +msgstr "ຕາຕະລາງ ``[project]`` ກຳນົດ :ref:`core metadata` ຂອງໂຄງການ." + +#: ../source/specifications/pyproject-toml.rst:109 +msgid "" +"There are two kinds of metadata: *static* and *dynamic*. Static metadata is " +"specified in the ``pyproject.toml`` file directly and cannot be specified or " +"changed by a tool (this includes data *referred* to by the metadata, e.g. " +"the contents of files referenced by the metadata). Dynamic metadata is " +"listed via the ``dynamic`` key (defined later in this specification) and " +"represents metadata that a tool will later provide." +msgstr "" +"ເມຕາດາຕາ ມີຢູ່ສອງປະເພດຄື: *static* (ຄົງທີ່) ແລະ *dynamic* (ປ່ຽນແປງໄດ້). static " +"metadata ຖືກລະບຸໄວ້ໃນໄຟລ໌ ``pyproject.toml`` ໂດຍກົງ ແລະ ບໍ່ສາມາດຖືກລະບຸ ຫຼື " +"ປ່ຽນແປງໂດຍເຄື່ອງມືໄດ້ (ເຊິ່ງລວມເຖິງຂໍ້ມູນທີ່ *ຖືກອ້າງອີງ* ໂດຍເມຕາດາຕາ, ຕົວຢ່າງ: " +"ເນື້ອໃນຂອງໄຟລ໌ທີ່ຖືກອ້າງອີງໂດຍເມຕາດາຕາ). dynamic metadata ຖືກລະບຸຜ່ານຄີ ``dynamic`` " +"(ເຊິ່ງກຳນົດໄວ້ພາຍຫຼັງໃນຂໍ້ກຳນົດສະເພານີ້) ແລະ ແທນຂໍ້ມູນເມຕາດາຕາທີ່ເຄື່ອງມືຈະໃຫ້ມາໃນພາຍຫຼັງ." + +#: ../source/specifications/pyproject-toml.rst:117 +msgid "" +"A key whose value is a list or a table of arbitrary entries MAY be specified " +"statically *and* listed in ``dynamic`` at the same time. In that case the " +"entries given statically are fixed and a build back-end MAY only *append* " +"further entries to them; the back-end MUST NOT remove, reorder, or modify " +"any statically-specified entries. See the :ref:`dynamic ` key for details." +msgstr "" +"Key ບາງປະເພດ **ອາດຈະ** ຖືກກຳນົດທັງແບບ static ແລະ ລະບຸໄວ້ໃນ ``dynamic`` ພ້ອມກັນ. " +"ໃນກໍລະນີນັ້ນ build back-end ຈະເຮັດໄດ້ພຽງແຕ່ *ເພີ່ມຕໍ່ທ້າຍ* (append) ຂໍ້ມູນເທົ່ານັ້ນ, ຫ້າມລຶບ ຫຼື " +"ແກ້ໄຂຂໍ້ມູນ static ເດີມ." + +#: ../source/specifications/pyproject-toml.rst:124 +msgid "" +"The lack of a ``[project]`` table implicitly means the :term:`build backend " +"` will dynamically provide all keys." +msgstr "" +"ການທີ່ບໍ່ມີຕາຕະລາງ ``[project]`` ໝາຍເຖິງ build backend ຈະສະໜອງ keys ທັງໝົດແບບ " +"dynamic ເອງ." + +#: ../source/specifications/pyproject-toml.rst:127 +msgid "The only keys required to be statically defined are:" +msgstr "ຄີດຽວທີ່ຈຳເປັນຕ້ອງຖືກກຳນົດແບບ static ຄື:" + +#: ../source/specifications/pyproject-toml.rst:131 +msgid "" +"The keys which are required but may be specified *either* statically or " +"listed as dynamic are:" +msgstr "ຄີທີ່ຈຳເປັນແຕ່ອາດຈະຖືກລະບຸ *ບໍ່ວ່າຈະ* ເປັນແບບ static ຫຼື ລະບຸເປັນແບບ dynamic ຄື:" + +#: ../source/specifications/pyproject-toml.rst:136 +msgid "" +"All other keys are considered optional and may be specified statically, " +"listed as dynamic, or left unspecified." +msgstr "" +"ຄີອື່ນໆທັງໝົດຖືວ່າເປັນທາງເລືອກ ແລະ ອາດຈະຖືກລະບຸແບບ static, ລະບຸເປັນແບບ dynamic ຫຼື " +"ປະໄວ້ໂດຍບໍ່ຕ້ອງລະບຸ." + +#: ../source/specifications/pyproject-toml.rst:139 +msgid "The complete list of keys allowed in the ``[project]`` table are:" +msgstr "ລາຍການ keys ທັງໝົດທີ່ອະນຸຍາດໃຫ້ມີໃນຕາຕະລາງ ``[project]`` ແມ່ນ:" + +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:650 +msgid "``authors``" +msgstr "``authors`` (ຜູ້ຂຽນ)" + +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:652 +msgid "``dependencies``" +msgstr "``dependencies``" + +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:609 +msgid "``dynamic``" +msgstr "``dynamic``" + +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:653 +msgid "``entry-points``" +msgstr "``entry-points``" + +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:654 +msgid "``gui-scripts``" +msgstr "``gui-scripts``" + +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:517 +#: ../source/specifications/pyproject-toml.rst:655 +msgid "``import-names``" +msgstr "``import-names``" + +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:568 +#: ../source/specifications/pyproject-toml.rst:656 +msgid "``import-namespaces``" +msgstr "``import-namespaces``" + +#: ../source/specifications/pyproject-toml.rst:153 +#: ../source/specifications/pyproject-toml.rst:659 +msgid "``maintainers``" +msgstr "``maintainers`` (ຜູ້ເບິ່ງແຍງ)" + +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:483 +#: ../source/specifications/pyproject-toml.rst:660 +msgid "``optional-dependencies``" +msgstr "``optional-dependencies``" + +#: ../source/specifications/pyproject-toml.rst:168 +#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/specifications/pyproject-toml.rst:264 +msgid "TOML_ type: string" +msgstr "ປະເພດ TOML_: string" + +#: ../source/specifications/pyproject-toml.rst:169 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Name `" +msgstr "ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`Name`" + +#: ../source/specifications/pyproject-toml.rst:172 +msgid "The name of the project." +msgstr "ຊື່ຂອງໂຄງການ." + +#: ../source/specifications/pyproject-toml.rst:174 +msgid "" +"Tools SHOULD :ref:`normalize ` this name, as soon as it " +"is read for internal consistency." +msgstr "" +"ເຄື່ອງມື **ຄວນ** :ref:`ປັບຊື່ໃຫ້ເປັນມາດຕະຖານ ` " +"ທັນທີທີ່ອ່ານເພື່ອຄວາມສອດຄ່ອງພາຍໃນ." + +#: ../source/specifications/pyproject-toml.rst:184 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Version " +"`" +msgstr "ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`Version`" + +#: ../source/specifications/pyproject-toml.rst:187 +msgid "" +"The version of the project, as defined in the :ref:`Version specifier " +"specification `." +msgstr "ເວີຊັນຂອງໂຄງການ, ຕາມທີ່ກຳນົດໄວ້ໃນ :ref:`Version specifier specification`." + +#: ../source/specifications/pyproject-toml.rst:190 +msgid "Users SHOULD prefer to specify already-normalized versions." +msgstr "ຜູ້ໃຊ້ **ຄວນ** ເລືອກທີ່ຈະລະບຸເວີຊັນທີ່ປັບໃຫ້ເປັນມາດຕະຖານແລ້ວ." + +#: ../source/specifications/pyproject-toml.rst:199 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Summary " +"`" +msgstr "ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`Summary`" + +#: ../source/specifications/pyproject-toml.rst:202 +msgid "" +"The summary description of the project in one line. Tools MAY error if this " +"includes multiple lines." +msgstr "ຄຳອະທິບາຍຫຍໍ້ຂອງໂຄງການໃນແຖວດຽວ. ເຄື່ອງມື **ອາດຈະ** ສະແດງຂໍ້ຜິດພາດ ຖ້າຫາກມີຫຼາຍແຖວ." + +#: ../source/specifications/pyproject-toml.rst:211 +msgid "TOML_ type: string or table" +msgstr "ປະເພດ TOML_: string ຫຼື ຕາຕະລາງ" + +#: ../source/specifications/pyproject-toml.rst:212 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Description " +"` and :ref:`Description-Content-Type `" +msgstr "" +"ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`Description` ແລະ :ref:`Description-" +"Content-Type`" + +#: ../source/specifications/pyproject-toml.rst:216 +msgid "The full description of the project (i.e. the README)." +msgstr "ຄຳອະທິບາຍແບບເຕັມຂອງໂຄງການ (ເຊັ່ນ README)." + +#: ../source/specifications/pyproject-toml.rst:218 +msgid "" +"The key accepts either a string or a table. If it is a string then it is a " +"path relative to ``pyproject.toml`` to a text file containing the full " +"description. Tools MUST assume the file's encoding is UTF-8. If the file " +"path ends in a case-insensitive ``.md`` suffix, then tools MUST assume the " +"content-type is ``text/markdown``. If the file path ends in a case-" +"insensitive ``.rst``, then tools MUST assume the content-type is ``text/x-" +"rst``. If a tool recognizes more extensions than this specification, it MAY " +"infer the content-type for the user without specifying this key as " +"``dynamic``. For all unrecognized suffixes when a content-type is not " +"provided, tools MUST raise an error." +msgstr "" +"ຄີນີ້ຮັບເອົາທັງ string ຫຼື ຕາຕະລາງ. ຫາກມັນເປັນ string ມັນຈະເປັນເສັ້ນທາງທີ່ທຽບກັບ " +"``pyproject.toml`` ໄປຫາໄຟລ໌ຂໍ້ຄວາມທີ່ບັນຈຸຄຳອະທິບາຍທັງໝົດ. ເຄື່ອງມື ຕ້ອງ (MUST) " +"ສົມມຸດວ່າການເຂົ້າລະຫັດຂອງໄຟລ໌ແມ່ນ UTF-8. ຫາກເສັ້ນທາງໄຟລ໌ລົງທ້າຍດ້ວຍນາມສະກຸນ ``.md`` " +"ທີ່ບໍ່ແຍກຕົວອັກສອນໃຫຍ່-ນ້ອຍ, ເຄື່ອງມື ຕ້ອງ (MUST) ສົມມຸດວ່າປະເພດເນື້ອໃນແມ່ນ ``text/markdown``. " +"ຫາກເສັ້ນທາງໄຟລ໌ລົງທ້າຍດ້ວຍ ``.rst`` ທີ່ບໍ່ແຍກຕົວອັກສອນໃຫຍ່-ນ້ອຍ, ເຄື່ອງມື ຕ້ອງ (MUST) " +"ສົມມຸດວ່າປະເພດເນື້ອໃນແມ່ນ ``text/x-rst``. " +"ຫາກເຄື່ອງມືສາມາດຮູ້ຈັກນາມສະກຸນອື່ນໆຫຼາຍກວ່າຂໍ້ກຳນົດສະເພາະນີ້, ມັນ ອາດຈະ (MAY) " +"ອະນຸມານປະເພດເນື້ອໃນໃຫ້ກັບຜູ້ໃຊ້ໂດຍບໍ່ຕ້ອງລະບຸຄີນີ້ເປັນ ``dynamic``. ສຳລັບນາມສະກຸນທັງໝົດທີ່ບໍ່ຮູ້ຈັກ " +"ເມື່ອບໍ່ມີການລະບຸປະເພດເນື້ອໃນມາໃຫ້, ເຄື່ອງມື ຕ້ອງ (MUST) ສະແດງຂໍ້ຜິດພາດ." + +#: ../source/specifications/pyproject-toml.rst:229 +msgid "" +"The ``readme`` key may also take a table. The ``file`` key has a string " +"value representing a path relative to ``pyproject.toml`` to a file " +"containing the full description. The ``text`` key has a string value which " +"is the full description. These keys are mutually-exclusive, thus tools MUST " +"raise an error if the metadata specifies both keys." +msgstr "" +"ຄີ ``readme`` ອາດຈະຮັບຄ່າເປັນຕາຕະລາງໄດ້ເຊັ່ນກັນ. ຄີ ``file`` " +"ມີຄ່າເປັນສະຕຣິງທີ່ສະແດງເຖິງເສັ້ນທາງທີ່ທຽບກັບ ``pyproject.toml`` ໄປຫາໄຟລ໌ທີ່ມີຄຳອະທິບາຍຄົບຖ້ວນ. " +"ຄີ ``text`` ມີຄ່າເປັນສະຕຣິງເຊິ່ງແມ່ນຄຳອະທິບາຍຄົບຖ້ວນ. ຄີເຫຼົ່ານີ້ແມ່ນບໍ່ສາມາດໃຊ້ຮ່ວມກັນໄດ້, ດັ່ງນັ້ນ " +"ເຄື່ອງມືຕ່າງໆ ຕ້ອງແຈ້ງຂໍ້ຜິດພາດ ຖ້າຂໍ້ມູນເມຕາ (metadata) ລະບຸທັງສອງຄີ." + +#: ../source/specifications/pyproject-toml.rst:236 +msgid "" +"A table specified in the ``readme`` key also has a ``content-type`` key " +"which takes a string specifying the content-type of the full description. A " +"tool MUST raise an error if the metadata does not specify this key in the " +"table. If the metadata does not specify the ``charset`` parameter, then it " +"is assumed to be UTF-8. Tools MAY support other encodings if they choose to. " +"Tools MAY support alternative content-types which they can transform to a " +"content-type as supported by the :ref:`core metadata `. " +"Otherwise tools MUST raise an error for unsupported content-types." +msgstr "" +"ຕາຕະລາງໃນ key ``readme`` ຍັງມີ key ``content-type`` ເພື່ອກຳນົດປະເພດ ຂອງເນື້ອຫາ..." + +#: ../source/specifications/pyproject-toml.rst:253 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Requires-" +"Python `" +msgstr "ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`Requires-Python`" + +#: ../source/specifications/pyproject-toml.rst:256 +msgid "The Python version requirements of the project." +msgstr "ຄວາມຕ້ອງການເວີຊັນ Python ຂອງໂຄງການ." + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" +msgstr "ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`License-Expression`" + +#: ../source/specifications/pyproject-toml.rst:268 +msgid "" +"Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`. " +"Tools SHOULD validate and perform case normalization of the expression." +msgstr "ຂໍ້ຄວາມທີ່ເປັນ SPDX :term:`license expression` ທີ່ຖືກຕ້ອງ..." + +#: ../source/specifications/pyproject-toml.rst:273 +msgid "" +"This key should **only** be specified if the license expression for any and " +"all distribution files created by a build backend using " +"the :file:`pyproject.toml` is the same as the one specified. If the license " +"expression will differ then it should either be specified as dynamic or not " +"set at all." +msgstr "" +"ຄີນີ້ຄວນຖືກລະບຸ **ພຽງແຕ່** ໃນກໍລະນີທີ່ການສະແດງອອກຂອງໃບອະນຸຍາດ (license expression) " +"ສຳລັບໄຟລ໌ການແຈກຢາຍໃດໆ ແລະ ທັງໝົດທີ່ຖືກສ້າງຂຶ້ນໂດຍ build backend " +"ໂດຍການໃຊ້ :file:`pyproject.toml` ແມ່ນຄືກັນກັບອັນທີ່ໄດ້ລະບຸໄວ້. " +"ຖ້າການສະແດງອອກຂອງໃບອະນຸຍາດແຕກຕ່າງກັນ, ມັນຄວນຈະຖືກລະບຸເປັນ dynamic ຫຼື ບໍ່ຕ້ອງຕັ້ງຄ່າເລີຍ." + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "Legacy specification" +msgstr "ຂໍ້ກຳນົດແບບເກົ່າ (Legacy)" + +#: ../source/specifications/pyproject-toml.rst:282 +msgid "TOML_ type: table" +msgstr "ປະເພດ TOML_: ຕາຕະລາງ" + +#: ../source/specifications/pyproject-toml.rst:283 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License " +"`" +msgstr "ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`License`" + +#: ../source/specifications/pyproject-toml.rst:286 +msgid "" +"The table may have one of two keys. The ``file`` key has a string value that " +"is a file path relative to :file:`pyproject.toml` to the file which contains " +"the license for the project. Tools MUST assume the file's encoding is UTF-8. " +"The ``text`` key has a string value which is the license of the project. " +"These keys are mutually exclusive, so a tool MUST raise an error if the " +"metadata specifies both keys." +msgstr "ຕາຕະລາງອາດຈະມີໜຶ່ງໃນສອງ keys: ``file`` ຫຼື ``text`` ເຊິ່ງຫ້າມໃຊ້ພ້ອມກັນ..." + +#: ../source/specifications/pyproject-toml.rst:293 +msgid "" +"The table subkeys were deprecated by :pep:`639` in favor of the string value." +msgstr "ຄີຍ່ອຍຂອງຕາຕະລາງໄດ້ຖືກຍົກເລີກການນຳໃຊ້ໂດຍ :pep:`639` ເພື່ອປ່ຽນໄປໃຊ້ຄ່າແບບສະຕຣິງແທນ." + +#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:383 +#: ../source/specifications/pyproject-toml.rst:395 +#: ../source/specifications/pyproject-toml.rst:519 +#: ../source/specifications/pyproject-toml.rst:570 +msgid "TOML_ type: array of strings" +msgstr "ປະເພດ TOML_: ອາເຣຂອງ string" + +#: ../source/specifications/pyproject-toml.rst:301 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`License-File`" + +#: ../source/specifications/pyproject-toml.rst:304 +msgid "" +"An array specifying paths in the project source tree relative to the project " +"root directory (i.e. directory containing :file:`pyproject.toml` or legacy " +"project configuration files, e.g. :file:`setup.py`, :file:`setup.cfg`, etc.) " +"to file(s) containing licenses and other legal notices to be distributed " +"with the package." +msgstr "" +"ອາເຣທີ່ລະບຸເສັ້ນທາງໄປຫາໄຟລ໌ license ແລະ ແຈ້ງການທາງກົດໝາຍອື່ນໆ ທີ່ຈະແຈກຢາຍ ໄປພ້ອມກັບແພັກເກັດ." + +#: ../source/specifications/pyproject-toml.rst:310 +msgid "" +"The strings MUST contain valid glob patterns, as specified in :doc:`/" +"specifications/glob-patterns`." +msgstr "" +"ສະຕຣິງຕ່າງໆ ຕ້ອງມີຮູບແບບ glob ທີ່ຖືກຕ້ອງ, ຕາມທີ່ໄດ້ລະບຸໄວ້ໃນ :doc:`/specifications/glob-" +"patterns`." + +#: ../source/specifications/pyproject-toml.rst:313 +msgid "" +"Patterns are relative to the directory containing :file:`pyproject.toml`," +msgstr "ຮູບແບບ (Patterns) ແມ່ນທຽບກັບໄດເຣັກທໍຣີທີ່ບັນຈຸ :file:`pyproject.toml`," + +#: ../source/specifications/pyproject-toml.rst:315 +msgid "" +"Tools MUST assume that license file content is valid UTF-8 encoded text, and " +"SHOULD validate this and raise an error if it is not." +msgstr "ເຄື່ອງມື **ຕ້ອງ** ສົມມຸດວ່າເນື້ອໃນໄຟລ໌ license ແມ່ນຂໍ້ຄວາມທີ່ເຂົ້າລະຫັດ UTF-8..." + +#: ../source/specifications/pyproject-toml.rst:318 +msgid "Build tools:" +msgstr "ເຄື່ອງມືບິວດ໌:" + +#: ../source/specifications/pyproject-toml.rst:320 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "**ຕ້ອງ** ລວມເອົາໄຟລ໌ທັງໝົດທີ່ກົງກັບຮູບແບບທີ່ລະບຸໄວ້ໃນ archive ຂອງການແຈກຢາຍ." + +#: ../source/specifications/pyproject-toml.rst:322 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "**ຕ້ອງ** ລະບຸແຕ່ລະເສັ້ນທາງໄຟລ໌ທີ່ກົງກັນພາຍໃຕ້ຟີວ License-File ໃນ Core Metadata." + +#: ../source/specifications/pyproject-toml.rst:325 +msgid "" +"If the ``license-files`` key is present and is set to a value of an empty " +"array, then tools MUST NOT include any license files and MUST NOT raise an " +"error. If the ``license-files`` key is not defined, tools can decide how to " +"handle license files. For example they can choose not to include any files " +"or use their own logic to discover the appropriate files in the distribution." +msgstr "" +"ຖ້າ key ``license-files`` ຖືກຕັ້ງເປັນອາເຣຫວ່າງເປົ່າ, ເຄື່ອງມື **ຕ້ອງບໍ່** ລວມເອົາໄຟລ໌ " +"license ໃດໆ..." + +#: ../source/specifications/pyproject-toml.rst:339 +msgid "TOML_ type: Array of inline tables with string keys and values" +msgstr "ປະເພດ TOML_: ອາເຣຂອງ inline tables ທີ່ມີ key ແລະ value ເປັນ string" + +#: ../source/specifications/pyproject-toml.rst:340 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:`Maintainer `, and :ref:`Maintainer-" +"email `" +msgstr "" +"ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`Author`, :ref:`Author-" +"email`, :ref:`Maintainer`, ແລະ :ref:`Maintainer-email`" + +#: ../source/specifications/pyproject-toml.rst:346 +msgid "" +"The people or organizations considered to be the \"authors\" of the project. " +"The exact meaning is open to interpretation — it may list the original or " +"primary authors, current maintainers, or owners of the package." +msgstr "ບຸກຄົນ ຫຼື ອົງກອນທີ່ຖືກຖືວ່າເປັນ \"ຜູ້ຂຽນ\" (authors) ຂອງໂຄງການ..." + +#: ../source/specifications/pyproject-toml.rst:351 +msgid "" +"The \"maintainers\" key is similar to \"authors\" in that its exact meaning " +"is open to interpretation." +msgstr "" +"ຄີ \"maintainers\" ແມ່ນຄ້າຍຄືກັບ \"authors\" " +"ໃນແງ່ທີ່ຄວາມໝາຍທີ່ແນ່ນອນຂອງມັນແມ່ນເປີດກວ້າງໃຫ້ຕີຄວາມໝາຍໄດ້." + +#: ../source/specifications/pyproject-toml.rst:354 +msgid "" +"These keys accept an array of tables with 2 keys: ``name`` and ``email``. " +"Both values must be strings. The ``name`` value MUST be a valid email name " +"(i.e. whatever can be put as a name, before an email, in :rfc:`822`) and not " +"contain commas. The ``email`` value MUST be a valid email address. Both keys " +"are optional, but at least one of the keys must be specified in the table." +msgstr "" +"ຄີເຫຼົ່ານີ້ຮັບເອົາອາເຣ (array) ຂອງຕາຕະລາງທີ່ມີ 2 ຄີ: ``name`` ແລະ ``email``. " +"ທັງສອງຄ່າຕ້ອງເປັນສະຕຣິງ. ຄ່າ ``name`` ຕ້ອງເປັນຊື່ໃນອີເມລທີ່ຖືກຕ້ອງ (ໝາຍເຖິງ " +"ອັນໃດກໍຕາມທີ່ສາມາດໃສ່ເປັນຊື່ໄດ້ ກ່ອນໜ້າອີເມລ ໃນ :rfc:`822`) ແລະ ຕ້ອງບໍ່ມີເຄື່ອງໝາຍຈຸດ. ຄ່າ " +"``email`` ຕ້ອງເປັນທີ່ຢູ່ອີເມລທີ່ຖືກຕ້ອງ. ທັງສອງຄີແມ່ນທາງເລືອກ, " +"ແຕ່ຢ່າງໜ້ອຍຕ້ອງມີຄີໃດໜຶ່ງຖືກລະບຸໄວ້ໃນຕາຕະລາງ." + +#: ../source/specifications/pyproject-toml.rst:361 +msgid "" +"Using the data to fill in :ref:`core metadata ` is as follows:" +msgstr "ການໃຊ້ຂໍ້ມູນເພື່ອຕື່ມໃນ :ref:`core metadata` ມີດັ່ງນີ້:" + +#: ../source/specifications/pyproject-toml.rst:364 +msgid "" +"If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." +msgstr "ຫາກລະບຸພຽງແຕ່ ``name``, ຄ່ານັ້ນຈະຖືກໃສ່ໃນ :ref:`Author` ຫຼື :ref:`Maintainer`." + +#: ../source/specifications/pyproject-toml.rst:367 +msgid "" +"If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." +msgstr "" +"ຫາກລະບຸພຽງແຕ່ ``email``, ຄ່ານັ້ນຈະຖືກໃສ່ໃນ :ref:`Author-email` ຫຼື :ref:`Maintainer-" +"email`." + +#: ../source/specifications/pyproject-toml.rst:371 +msgid "" +"If both ``email`` and ``name`` are provided, the value goes in :ref:`Author-" +"email ` or :ref:`Maintainer-email ` as appropriate, with the format ``{name} <{email}>``." +msgstr "" +"ຫາກລະບຸທັງ ``email`` ແລະ ``name``, ຄ່ານັ້ນຈະຖືກໃສ່ໃນຮູບແບບ ``{name} <{email}>``." + +#: ../source/specifications/pyproject-toml.rst:375 +msgid "Multiple values should be separated by commas." +msgstr "ຫາກມີຫຼາຍຄ່າ ຄວນແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ." + +#: ../source/specifications/pyproject-toml.rst:384 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Keywords " +"`" +msgstr "ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`Keywords`" + +#: ../source/specifications/pyproject-toml.rst:387 +msgid "The keywords for the project." +msgstr "ຄຳສຳຄັນ (keywords) ສຳລັບໂຄງການ." + +#: ../source/specifications/pyproject-toml.rst:396 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Classifier " +"`" +msgstr "ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`Classifier`" + +#: ../source/specifications/pyproject-toml.rst:399 +msgid "Trove classifiers which apply to the project." +msgstr "Trove classifiers ທີ່ໃຊ້ກັບໂຄງການ." + +#: ../source/specifications/pyproject-toml.rst:401 +msgid "" +"The use of ``License ::`` classifiers is deprecated and tools MAY issue a " +"warning informing users about that. Build tools MAY raise an error if both " +"the ``license`` string value (translating to ``License-Expression`` metadata " +"field) and the ``License ::`` classifiers are used." +msgstr "ການໃຊ້ ``License ::`` classifiers ຖືກຍົກເລີກການນຳໃຊ້ແລ້ວ..." + +#: ../source/specifications/pyproject-toml.rst:413 +msgid "TOML_ type: table with keys and values of strings" +msgstr "ປະເພດ TOML_: ຕາຕະລາງທີ່ມີ key ແລະ value ເປັນ string" + +#: ../source/specifications/pyproject-toml.rst:414 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Project-URL " +"`" +msgstr "ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`Project-URL`" + +#: ../source/specifications/pyproject-toml.rst:417 +msgid "" +"A table of URLs where the key is the URL label and the value is the URL " +"itself. See :ref:`well-known-project-urls` for normalization rules and well-" +"known rules when processing metadata for presentation." +msgstr "ຕາຕະລາງຂອງ URLs ໂດຍທີ່ key ແມ່ນປ້າຍຊື່ URL ແລະ value ແມ່ນຕົວ URL ເອງ..." + +#: ../source/specifications/pyproject-toml.rst:427 +msgid "Entry points" +msgstr "ຈຸດເລີ່ມຕົ້ນ (Entry points)" + +#: ../source/specifications/pyproject-toml.rst:429 +msgid "" +"TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " +"``[project.entry-points]``)" +msgstr "" +"ປະເພດ TOML_: ຕາຕະລາງ (``[project.scripts]``, ``[project.gui-scripts]``, ແລະ " +"``[project.entry-points]``)" + +#: ../source/specifications/pyproject-toml.rst:431 +msgid ":ref:`Entry points specification `" +msgstr ":ref:`ຂໍ້ກຳນົດຂອງ Entry points `" + +#: ../source/specifications/pyproject-toml.rst:433 +msgid "" +"There are three tables related to entry points. The ``[project.scripts]`` " +"table corresponds to the ``console_scripts`` group in the :ref:`entry points " +"specification `. The key of the table is the name of the entry " +"point and the value is the object reference." +msgstr "" +"ມີສາມຕາຕະລາງທີ່ກ່ຽວຂ້ອງກັບ entry points. ຕາຕະລາງ ``[project.scripts]`` ກົງກັບກຸ່ມ " +"``console_scripts``..." + +#: ../source/specifications/pyproject-toml.rst:439 +msgid "" +"The ``[project.gui-scripts]`` table corresponds to the ``gui_scripts`` group " +"in the :ref:`entry points specification `. Its format is the " +"same as ``[project.scripts]``." +msgstr "" +"ຕາຕະລາງ ``[project.gui-scripts]`` ກົງກັບກຸ່ມ ``gui_scripts`` ໃນ :ref:`ຂໍ້ກຳນົດຂອງ " +"entry points `. ຮູບແບບຂອງມັນຄືກັນກັບ ``[project.scripts]``." + +#: ../source/specifications/pyproject-toml.rst:443 +msgid "" +"The ``[project.entry-points]`` table is a collection of tables. Each sub-" +"table's name is an entry point group. The key and value semantics are the " +"same as ``[project.scripts]``. Users MUST NOT create nested sub-tables but " +"instead keep the entry point groups to only one level deep." +msgstr "ຕາຕະລາງ ``[project.entry-points]`` ແມ່ນການລວມກຸ່ມຂອງຕາຕະລາງ..." + +#: ../source/specifications/pyproject-toml.rst:449 +msgid "" +"Build back-ends MUST raise an error if the metadata defines a " +"``[project.entry-points.console_scripts]`` or ``[project.entry-" +"points.gui_scripts]`` table, as they would be ambiguous in the face of " +"``[project.scripts]`` and ``[project.gui-scripts]``, respectively." +msgstr "" +"Build back-ends **ຕ້ອງ** ສະແດງຂໍ້ຜິດພາດ ຫາກ metadata ກຳນົດຕາຕະລາງ " +"``[project.entry-points.console_scripts]`` ຫຼື ``[project.entry-" +"points.gui_scripts]``..." + +#: ../source/specifications/pyproject-toml.rst:461 +msgid "" +"TOML_ type: Array of :ref:`dependency specifier ` " +"strings (``dependencies``)" +msgstr "" +"ປະເພດ TOML_: ອາເຣຂອງ :ref:`dependency specifier` string (``dependencies``)" + +#: ../source/specifications/pyproject-toml.rst:463 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Requires-" +"Dist `" +msgstr "ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`Requires-Dist`" + +#: ../source/specifications/pyproject-toml.rst:466 +msgid "" +"``dependencies`` lists the expected dependencies of the project as an array " +"of strings." +msgstr "``dependencies`` ລະບຸ dependency ທີ່ຄາດຫວັງຂອງໂຄງການໃນຮູບແບບອາເຣຂອງ string." + +#: ../source/specifications/pyproject-toml.rst:469 +msgid "" +"Each string represents a dependency of the project and MUST be formatted as " +"a valid :ref:`dependency specifier `." +msgstr "" +"ແຕ່ລະ string ແທນ dependency ຂອງໂຄງການ ແລະ **ຕ້ອງ** " +"ຖືກຈັດຮູບແບບໃຫ້ເປັນ :ref:`dependency specifier` ທີ່ຖືກຕ້ອງ." + +#: ../source/specifications/pyproject-toml.rst:472 +msgid "" +"Each string maps directly to a :ref:`Requires-Dist ` entry." +msgstr "ແຕ່ລະ string ຈະຖືກເຊື່ອມໂຍງໂດຍກົງກັບລາຍການ :ref:`Requires-Dist`." + +#: ../source/specifications/pyproject-toml.rst:475 +msgid "" +"Dependencies listed in this array are always considered for installation, " +"but may still contain environment markers that cause them to be skipped in " +"some environments." +msgstr "" +"ສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ (Dependencies) ທີ່ຢູ່ໃນອາເຣນີ້ຈະຖືກພິຈາລະນາເພື່ອການຕິດຕັ້ງສະເໝີ, " +"ແຕ່ອາດຈະຍັງມີຕົວໝາຍສະພາບແວດລ້ອມ (environment markers) " +"ທີ່ເຮັດໃຫ້ພວກມັນຖືກຂ້າມໄປໃນບາງສະພາບແວດລ້ອມ." + +#: ../source/specifications/pyproject-toml.rst:485 +msgid "" +"TOML_ type: table with string keys mapping to arrays of :ref:`dependency " +"specifier ` strings (``optional-dependencies``)" +msgstr "ປະເພດ TOML_: ຕາຕະລາງທີ່ມີ key ເປັນ string (``optional-dependencies``)" + +#: ../source/specifications/pyproject-toml.rst:487 +msgid "" +"Corresponding :ref:`core metadata ` fields: :ref:`Requires-" +"Dist ` and :ref:`Provides-Extra `" +msgstr "" +"ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`Requires-Dist` ແລະ :ref:`Provides-Extra`" + +#: ../source/specifications/pyproject-toml.rst:491 +msgid "" +"``optional-dependencies`` is a table where each key specifies an extra and " +"whose value is an array of strings using the same format as the " +"``dependencies`` array (the strings in the arrays must be " +"valid :ref:`dependency specifiers `)." +msgstr "``optional-dependencies`` ແມ່ນຕາຕະລາງທີ່ແຕ່ລະ key ກຳນົດ extra..." + +#: ../source/specifications/pyproject-toml.rst:496 +msgid "" +"The keys MUST be valid values for :ref:`Provides-Extra `. Each value in the array thus becomes a " +"corresponding :ref:`Requires-Dist ` entry for " +"the matching :ref:`Provides-Extra ` metadata." +msgstr "" +"ຄີຕ່າງໆ ຕ້ອງເປັນຄ່າທີ່ຖືກຕ້ອງສຳລັບ :ref:`Provides-Extra `. ແຕ່ລະຄ່າໃນອາເຣຈຶ່ງກາຍເປັນລາຍການ :ref:`Requires-Dist ` ທີ່ກົງກັນສຳລັບຂໍ້ມູນເມຕາ :ref:`Provides-Extra ` ທີ່ເຂົ້າກັນ." + +#: ../source/specifications/pyproject-toml.rst:503 +msgid "" +"The optionality of these dependencies is recorded by modifying the " +"environment marker clause on the related ``Requires-Dist`` entries to check " +"the extra name. Optional dependencies are thus only considered for " +"installation if installation if the associated extra name is requested." +msgstr "" +"ຄວາມເປັນທາງເລືອກຂອງ dependency ເຫຼົ່ານີ້ຖືກບັນທຶກໂດຍການປ່ຽນແປງເງື່ອນໄຂ environment " +"marker..." + +#: ../source/specifications/pyproject-toml.rst:508 +msgid "" +"Dependency specifiers in an extra may self-reference other extras from the " +"current project (e.g. ``all = [\"your-project-name[gui, cli]\"]``). " +"See :ref:`self-referential extras ` for an example. " +"Most package managers now support this kind of extra, " +"including :ref:`pip`, :ref:`uv`, :ref:`poetry`, :ref:`hatch`, :ref:`pdm` " +"and :ref:`pipenv`." +msgstr "" +"ຂໍ້ກຳນົດສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ (Dependency specifiers) ໃນ extra ອາດຈະອ້າງອີງເຖິງ extra ອື່ນໆ " +"ຈາກໂປຣເຈັກປັດຈຸບັນ (ຕົວຢ່າງ: ``all = [\"your-project-name[gui, cli]\"]``). " +"ເບິ່ງ :ref:`self-referential extras ` ສຳລັບຕົວຢ່າງ. " +"ຕົວຈັດການແພັກເກັດສ່ວນໃຫຍ່ໃນຕອນນີ້ຮອງຮັບ extra ປະເພດນີ້, " +"ລວມທັງ :ref:`pip`, :ref:`uv`, :ref:`poetry`, :ref:`hatch`, :ref:`pdm` " +"ແລະ :ref:`pipenv`." + +#: ../source/specifications/pyproject-toml.rst:520 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`Import-Name`" + +#: ../source/specifications/pyproject-toml.rst:523 +msgid "" +"An array of strings specifying the import names that the project exclusively " +"provides when installed. Each string MUST be a valid Python identifier or " +"can be empty. An import name MAY be followed by a semicolon and the term " +"\"private\" (e.g. ``\"; private\"``) with any amount of whitespace " +"surrounding the semicolon." +msgstr "ອາເຣຂອງ string ທີ່ລະບຸຊື່ import ທີ່ໂຄງການສະໜອງໃຫ້ໂດຍສະເພາະເມື່ອຕິດຕັ້ງ..." + +#: ../source/specifications/pyproject-toml.rst:528 +msgid "" +"Projects SHOULD list all the shortest import names that are exclusively " +"provided by the project. If any of the shortest names are dotted names, all " +"intervening names from that name to the top-level name should also be listed " +"appropriately in ``import-names`` and/or ``import-namespaces``. For " +"instance, a project which is a single package named spam with multiple " +"submodules would only list ``project.import-names = [\"spam\"]``. A project " +"that lists ``spam.bacon.eggs`` would also need to account for ``spam`` and " +"``spam.bacon`` appropriately in ``import-names`` and ``import-namespaces``. " +"Listing all names acts as a check that the intent of the import names is as " +"expected. As well, projects SHOULD list all import names, public or private, " +"using the ``; private`` modifier as appropriate." +msgstr "" +"ໂຄງການ ຄວນ (SHOULD) ລາຍຊື່ການນໍາເຂົ້າ (import names) " +"ທີ່ສັ້ນທີ່ສຸດທັງໝົດທີ່ສະໜອງໃຫ້ໂດຍໂຄງການເທົ່ານັ້ນ. ຖ້າຊື່ທີ່ສັ້ນທີ່ສຸດໃດໜຶ່ງເປັນຊື່ທີ່ມີຈຸດ (dotted names), " +"ຊື່ລະຫວ່າງກາງທັງໝົດຈາກຊື່ນັ້ນໄປຫາຊື່ລະດັບເທິງສຸດກໍຄວນຖືກລະບຸໄວ້ຢ່າງເໝາະສົມໃນ ``import-names`` " +"ແລະ/ຫຼື ``import-namespaces``. ຕົວຢ່າງ, ໂຄງການທີ່ເປັນແພັກເກັດດຽວຊື່ spam ທີ່ມີຫຼາຍໂມດູນຍ່ອຍ " +"ຈະລະບຸພຽງແຕ່ ``project.import-names = [\"spam\"]``. ໂຄງການທີ່ລະບຸ " +"``spam.bacon.eggs`` ກໍຈະຕ້ອງລວມເອົາ ``spam`` ແລະ ``spam.bacon`` ຢ່າງເໝາະສົມໃນ " +"``import-names`` ແລະ ``import-namespaces``. " +"ການລາຍຊື່ທັງໝົດເຮັດໜ້າທີ່ເປັນການກວດສອບວ່າຈຸດປະສົງຂອງຊື່ການນໍາເຂົ້າແມ່ນເປັນໄປຕາມທີ່ຄາດໄວ້. " +"ນອກຈາກນັ້ນ, ໂຄງການ ຄວນ (SHOULD) ລາຍຊື່ການນໍາເຂົ້າທັງໝົດ, ບໍ່ວ່າຈະເປັນແບບສາທາລະນະ ຫຼື ສ່ວນຕົວ, " +"ໂດຍໃຊ້ຕົວດັດແກ້ ``; private`` ຕາມຄວາມເໝາະສົມ." + +#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:589 +msgid "" +"If a project lists the same name in both ``import-names`` and ``import-" +"namespaces``, then tools MUST raise an error due to ambiguity." +msgstr "" +"ຫາກໂຄງການລະບຸຊື່ດຽວກັນທັງໃນ ``import-names`` ແລະ ``import-namespaces``, ເຄື່ອງມື " +"**ຕ້ອງ** ສະແດງຂໍ້ຜິດພາດຍ້ອນຄວາມບໍ່ຊັດເຈນ." + +#: ../source/specifications/pyproject-toml.rst:543 +msgid "" +"Projects MAY set ``import-names`` to an empty array to represent a project " +"with no import names (i.e. there are no Python modules of any kind in the " +"distribution file)." +msgstr "" +"ໂຄງການ **ອາດຈະ** ຕັ້ງຄ່າ ``import-names`` ເປັນອາເຣຫວ່າງເປົ່າ ເພື່ອແທນໂຄງການ ທີ່ບໍ່ມີຊື່ " +"import." + +#: ../source/specifications/pyproject-toml.rst:547 +#: ../source/specifications/pyproject-toml.rst:592 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" +"Build back-ends **ອາດຈະ** ຮອງຮັບການຄິດໄລ່ຄ່າແບບ dynamic ຫາກຜູ້ໃຊ້ປະກາດ key ໃນ " +"``project.dynamic``." + +#: ../source/specifications/pyproject-toml.rst:550 +msgid "Examples:" +msgstr "ຕົວຢ່າງ:" + +#: ../source/specifications/pyproject-toml.rst:571 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`Import-Namespace`" + +#: ../source/specifications/pyproject-toml.rst:574 +msgid "" +"An array of strings specifying the import names that the project provides " +"when installed, but not exclusively. Each string MUST be a valid Python " +"identifier. An import name MAY be followed by a semicolon and the term " +"\"private\" (e.g. ``\"; private\"``) with any amount of whitespace " +"surrounding the semicolon. Note that unlike ``import-names``, ``import-" +"namespaces`` CANNOT be an empty array." +msgstr "" +"ອາເຣຂອງ string ທີ່ລະບຸຊື່ import ທີ່ໂຄງການສະໜອງໃຫ້ເມື່ອຕິດຕັ້ງ ແຕ່ບໍ່ໄດ້ ສະໜອງໃຫ້ພຽງຜູ້ດຽວ..." + +#: ../source/specifications/pyproject-toml.rst:580 +msgid "" +"Projects SHOULD list all the shortest import names that are exclusively " +"provided by the project. If any of the shortest names are dotted names, all " +"intervening names from that name to the top-level name should also be listed " +"appropriately in ``import-names`` and/or ``import-namespaces``." +msgstr "ໂຄງການ **ຄວນ** ລະບຸຊື່ import ທີ່ສັ້ນທີ່ສຸດທັງໝົດທີ່ໂຄງການສະໜອງໃຫ້ໂດຍສະເພາະ..." + +#: ../source/specifications/pyproject-toml.rst:585 +msgid "" +"This field is used for namespace packages where multiple projects can " +"contribute to the same import namespace. Projects all listing the same " +"import name in ``import-namespaces`` can be installed together without " +"shadowing each other." +msgstr "" +"ຟີວນີ້ຖືກໃຊ້ສຳລັບ namespace packages ເຊິ່ງຫຼາຍໂຄງການສາມາດມີສ່ວນຮ່ວມໃນ namespace " +"ດຽວກັນໄດ້..." + +#: ../source/specifications/pyproject-toml.rst:595 +msgid "Example:" +msgstr "ຕົວຢ່າງ:" + +#: ../source/specifications/pyproject-toml.rst:611 +msgid "TOML_ type: array of string" +msgstr "ປະເພດ TOML_: ອາເຣຂອງ string" + +#: ../source/specifications/pyproject-toml.rst:612 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Dynamic " +"`" +msgstr "ຟີວ :ref:`core metadata` ທີ່ກົງກັນ: :ref:`Dynamic`" + +#: ../source/specifications/pyproject-toml.rst:615 +msgid "" +"Specifies which keys listed by this PEP were intentionally unspecified so " +"another tool can/will provide such metadata dynamically. This clearly " +"delineates which metadata is purposefully unspecified and expected to stay " +"unspecified compared to being provided via tooling later on." +msgstr "ລະບຸວ່າ keys ໃດທີ່ກຳນົດໂດຍ PEP ນີ້ທີ່ຖືກຕັ້ງໃຈປ່ອຍໃຫ້ບໍ່ລະບຸໄວ້..." + +#: ../source/specifications/pyproject-toml.rst:621 +msgid "" +"A build back-end MUST honour statically-specified metadata (which means the " +"metadata did not list the key in ``dynamic``)." +msgstr "build back-end **ຕ້ອງ** ປະຕິບັດຕາມ metadata ທີ່ຖືກກຳນົດແບບ static." + +#: ../source/specifications/pyproject-toml.rst:623 +msgid "" +"A build back-end MUST raise an error if the metadata specifies ``name`` in " +"``dynamic``." +msgstr "" +"build back-end **ຕ້ອງ** ສະແດງຂໍ້ຜິດພາດ ຫາກ metadata ລະບຸ ``name`` ໃນ ``dynamic``." + +#: ../source/specifications/pyproject-toml.rst:625 +msgid "" +"If the :ref:`core metadata ` specification lists a field as " +"\"Required\", then the metadata MUST specify the key statically or list it " +"in ``dynamic`` (build back-ends MUST raise an error otherwise, i.e. it " +"should not be possible for a required key to not be listed somehow in the " +"``[project]`` table)." +msgstr "" +"ຫາກຂໍ້ກຳນົດ :ref:`core metadata` ລະບຸວ່າຟີວໃດ \"Required\" (ຈຳເປັນ), metadata " +"**ຕ້ອງ** ກຳນົດ key ນັ້ນແບບ static ຫຼື ລະບຸໄວ້ໃນ ``dynamic``..." + +#: ../source/specifications/pyproject-toml.rst:630 +msgid "" +"If the :ref:`core metadata ` specification lists a field as " +"\"Optional\", the metadata MAY list it in ``dynamic`` if the expectation is " +"a build back-end will provide the data for the key later." +msgstr "" +"ຫາກຂໍ້ກຳນົດ :ref:`core metadata` ລະບຸວ່າຟີວໃດ \"Optional\" (ທາງເລືອກ), metadata " +"**ອາດຈະ** ລະບຸໄວ້ໃນ ``dynamic``..." + +#: ../source/specifications/pyproject-toml.rst:634 +msgid "" +"Build back-ends MUST raise an error if the metadata specifies a key " +"statically as well as being listed in ``dynamic``, *unless* the key " +"represents a list or arbitrary table that can be extended, listed below." +msgstr "" +"Build back-ends **ຕ້ອງ** ສະແດງຂໍ້ຜິດພາດ ຫາກ metadata ກຳນົດ key ທັງແບບ static ແລະ " +"ລະບຸໃນ ``dynamic`` ພ້ອມກັນ..." + +#: ../source/specifications/pyproject-toml.rst:637 +msgid "" +"If the metadata does not list a key in ``dynamic``, then a build back-end " +"CANNOT fill in the requisite metadata on behalf of the user (i.e. " +"``dynamic`` is the only way to allow a tool to fill in metadata and the user " +"must opt into the filling in)." +msgstr "" +"ຫາກ metadata ບໍ່ໄດ້ລະບຸ key ໃນ ``dynamic``, build back-end ຈະ **ບໍ່ສາມາດ** ຕື່ມ " +"metadata ທີ່ຈຳເປັນແທນຜູ້ໃຊ້ໄດ້..." + +#: ../source/specifications/pyproject-toml.rst:641 +msgid "" +"Build back-ends MUST raise an error if the metadata specifies a key in " +"``dynamic`` but the build back-end was unable to determine the data for it " +"(omitting the data, if determined to be the accurate value, is acceptable)." +msgstr "" +"Build back-ends **ຕ້ອງ** ສະແດງຂໍ້ຜິດພາດ ຫາກ metadata ລະບຸ key ໃນ ``dynamic`` ແຕ່ " +"build back-end ບໍ່ສາມາດກຳນົດຂໍ້ມູນນັ້ນໄດ້..." + +#: ../source/specifications/pyproject-toml.rst:646 +msgid "" +"A key whose value is a list or a table of arbitrary entries MAY be specified " +"statically and listed in ``dynamic`` simultaneously. The keys fitting that " +"description are:" +msgstr "" +"Key ທີ່ມີຄ່າເປັນລາຍການ ຫຼື ຕາຕະລາງ **ອາດຈະ** ຖືກກຳນົດແບບ static ແລະ ລະບຸໃນ ``dynamic`` " +"ພ້ອມກັນໄດ້. keys ເຫຼົ່ານັ້ນມີຄື:" + +#: ../source/specifications/pyproject-toml.rst:664 +msgid "When such a key is specified both statically and listed in ``dynamic``:" +msgstr "ເມື່ອ key ດັ່ງກ່າວຖືກກຳນົດທັງແບບ static ແລະ ລະບຸໃນ ``dynamic``:" + +#: ../source/specifications/pyproject-toml.rst:667 +msgid "" +"A build back-end MAY only *append* entries to the value; it MUST NOT remove, " +"reorder, or modify any statically-specified entries. For tables (such as " +"``optional-dependencies`` or ``entry-points``) this means a back-end MAY add " +"new keys and MAY append to the values of existing keys (in the case of a " +"list), but MUST NOT change or remove the entries given statically." +msgstr "" +"build back-end **ອາດຈະ** ເຮັດໄດ້ພຽງ *ເພີ່ມຕໍ່ທ້າຍ* (append) ລາຍການເຂົ້າໃນຄ່າເທົ່ານັ້ນ; ມັນ " +"**ຕ້ອງບໍ່** ລຶບ, ຈັດລຽງໃໝ່ ຫຼື ແກ້ໄຂລາຍການໃດໆທີ່ຖືກກຳນົດແບບ static..." + +#: ../source/specifications/pyproject-toml.rst:673 +msgid "" +"A build back-end SHOULD raise an error if a key is listed in ``dynamic`` and " +"it does not support extending that key." +msgstr "" +"build back-end **ຄວນ** ສະແດງຂໍ້ຜິດພາດ ຫາກ key ຖືກລະບຸໃນ ``dynamic`` " +"ແຕ່ມັນບໍ່ຮອງຮັບການຂະຫຍາຍ key ນັ້ນ." + +#: ../source/specifications/pyproject-toml.rst:680 +msgid "Arbitrary tool configuration: the ``[tool]`` table" +msgstr "ການຕັ້ງຄ່າເຄື່ອງມືທົ່ວໄປ: ຕາຕະລາງ ``[tool]``" + +#: ../source/specifications/pyproject-toml.rst:682 +msgid "" +"The ``[tool]`` table is where any tool related to your Python project, not " +"just build tools, can have users specify configuration data as long as they " +"use a sub-table within ``[tool]``, e.g. the `flit `_ tool would store its configuration in ``[tool.flit]``." +msgstr "" +"ຕາຕະລາງ ``[tool]`` ແມ່ນບ່ອນທີ່ເຄື່ອງມືໃດໆທີ່ກ່ຽວຂ້ອງກັບໂຄງການ Python ສາມາດ " +"ໃຫ້ຜູ້ໃຊ້ກຳນົດຂໍ້ມູນການຕັ້ງຄ່າໄດ້..." + +#: ../source/specifications/pyproject-toml.rst:688 +msgid "" +"A mechanism is needed to allocate names within the ``tool.*`` namespace, to " +"make sure that different projects do not attempt to use the same sub-table " +"and collide. Our rule is that a project can use the subtable ``tool.$NAME`` " +"if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." +msgstr "" +"ຈຳເປັນຕ້ອງມີກົນໄກໃນການຈັດສັນຊື່ພາຍໃນ namespace ``tool.*`` ເພື່ອຮັບປະກັນວ່າ " +"ໂຄງການຕ່າງໆຈະບໍ່ໃຊ້ຕາຕະລາງຍ່ອຍດຽວກັນຈົນເກີດການຂັດແຍ່ງກັນ..." + +#: ../source/specifications/pyproject-toml.rst:699 +msgid "" +"May 2016: The initial specification of the ``pyproject.toml`` file, with " +"just a ``[build-system]`` containing a ``requires`` key and a ``[tool]`` " +"table, was approved through :pep:`518`." +msgstr "" +"ພຶດສະພາ 2016: ຂໍ້ກຳນົດເລີ່ມຕົ້ນຂອງໄຟລ໌ ``pyproject.toml``, ທີ່ມີພຽງແຕ່ ``[build-system]`` " +"ເຊິ່ງປະກອບດ້ວຍຄີ ``requires`` ແລະ ຕາຕະລາງ ``[tool]``, ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`518`." + +#: ../source/specifications/pyproject-toml.rst:703 +msgid "" +"November 2020: The specification of the ``[project]`` table was approved " +"through :pep:`621`." +msgstr "ພະຈິກ 2020: ຂໍ້ກຳນົດຂອງຕາຕະລາງ ``[project]`` ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`621`." + +#: ../source/specifications/pyproject-toml.rst:706 +msgid "" +"December 2024: The ``license`` key was redefined, the ``license-files`` key " +"was added and ``License::`` classifiers were deprecated through :pep:`639`." +msgstr "" +"ທັນວາ 2024: ຄີ ``license`` ໄດ້ຖືກກຳນົດຄືນໃໝ່, ໄດ້ມີການເພີ່ມຄີ ``license-files`` ແລະ " +"ຍົກເລີກການໃຊ້ ``License::`` classifiers ຜ່ານ :pep:`639`." + +#: ../source/specifications/pyproject-toml.rst:709 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" +"ກັນຍາ 2025: ຄວາມຊັດເຈນວ່າຄີ ``license`` ນຳໃຊ້ກັບທຸກໄຟລ໌ການແຈກຢາຍ (distribution " +"files) ທີ່ຖືກສ້າງຂຶ້ນຈາກໄຟລ໌ :file:`pyproject.toml`." + +#: ../source/specifications/pyproject-toml.rst:712 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" +"ຕຸລາ 2025: ໄດ້ມີການເພີ່ມຄີ ``import-names`` ແລະ ``import-namespaces`` " +"ຜ່ານ :pep:`794`." + +#: ../source/specifications/pyproject-toml.rst:718 +msgid "" +"May 2026: Allowed list and table keys to be specified statically as well as " +"listed in ``dynamic``, with build back-ends only able to append entries, " +"through :pep:`808`." +msgstr "" +"ພຶດສະພາ 2026: ອະນຸຍາດໃຫ້ກຳນົດຄີແບບ list ແລະ table ແບບ static ລວມທັງລະບຸໄວ້ໃນ " +"``dynamic``, ໂດຍ build back-ends ສາມາດເພີ່ມຂໍ້ມູນຕໍ່ທ້າຍໄດ້ເທົ່ານັ້ນ, ຜ່ານ :pep:`808`." + +#: ../source/specifications/pyproject-toml.rst:722 +msgid "" +"August 2026: Document self-referential extra as a supported feature by many " +"modern package managers of Python." +msgstr "" +"ສິງຫາ 2026: ບັນທຶກ self-referential extra ເປັນຟີເຈີທີ່ຮອງຮັບໂດຍຕົວຈັດການແພັກເກດ (package " +"managers) ທີ່ທັນສະໄໝຫຼາຍຕົວຂອງ Python." + +#: ../source/specifications/recording-installed-packages.rst:7 +msgid "Recording installed projects" +msgstr "ການບັນທຶກໂຄງການທີ່ຕິດຕັ້ງແລ້ວ" + +#: ../source/specifications/recording-installed-packages.rst:9 +msgid "" +"This document specifies a common format of recording information about " +"Python :term:`projects ` installed in an environment. A common " +"metadata format allows tools to query, manage or uninstall projects, " +"regardless of how they were installed." +msgstr "" +"ເອກະສານນີ້ກຳນົດຮູບແບບທົ່ວໄປຂອງການບັນທຶກຂໍ້ມູນກ່ຽວກັບ Python :term:`projects ` " +"ທີ່ຕິດຕັ້ງຢູ່ໃນສະພາບແວດລ້ອມ (environment). ຮູບແບບ metadata ທົ່ວໄປຊ່ວຍໃຫ້ເຄື່ອງມືຕ່າງໆ " +"ສາມາດສອບຖາມ, ຈັດການ ຫຼື ຖອນການຕິດຕັ້ງໂຄງການໄດ້, ໂດຍບໍ່ສົນວ່າພວກມັນຖືກຕິດຕັ້ງດ້ວຍວິທີໃດ." + +#: ../source/specifications/recording-installed-packages.rst:14 +msgid "" +"Almost all information is optional. This allows tools outside the Python " +"ecosystem, such as Linux package managers, to integrate with Python tooling " +"as much as possible. For example, even if an installer cannot easily provide " +"a list of installed files in a format specific to Python tooling, it should " +"still record the name and version of the installed project." +msgstr "" +"ຂໍ້ມູນເກືອບທັງໝົດແມ່ນເປັນທາງເລືອກ (optional). ສິ່ງນີ້ຊ່ວຍໃຫ້ເຄື່ອງມືພາຍນອກລະບົບນິເວດຂອງ Python, " +"ເຊັ່ນ ຕົວຈັດການແພັກເກດຂອງ Linux, ສາມາດເຮັດວຽກຮ່ວມກັບເຄື່ອງມືຂອງ Python " +"ໄດ້ຫຼາຍທີ່ສຸດເທົ່າທີ່ຈະເປັນໄປໄດ້. ຕົວຢ່າງ: " +"ເຖິງແມ່ນວ່າຕົວຕິດຕັ້ງບໍ່ສາມາດສະໜອງລາຍຊື່ໄຟລ໌ທີ່ຕິດຕັ້ງໃນຮູບແບບສະເພາະຂອງເຄື່ອງມື Python " +"ໄດ້ຢ່າງງ່າຍດາຍ, ແຕ່ມັນກໍຍັງຄວນບັນທຶກຊື່ ແລະ ເວີຊັນຂອງໂຄງການທີ່ຕິດຕັ້ງໄວ້." + +#: ../source/specifications/recording-installed-packages.rst:25 +msgid "" +"Each project installed from a distribution must, in addition to files, " +"install a \"``.dist-info``\" directory located alongside importable modules " +"and packages (commonly, the ``site-packages`` directory)." +msgstr "" +"ແຕ່ລະໂຄງການທີ່ຕິດຕັ້ງຈາກການແຈກຢາຍ (distribution) ຈະຕ້ອງຕິດຕັ້ງໄດເລັກທໍຣີ \"``.dist-" +"info``\" ໄວ້ຄຽງຄູ່ກັບໂມດູນ ແລະ ແພັກເກດທີ່ສາມາດ import ໄດ້ (ໂດຍທົ່ວໄປແມ່ນໄດເລັກທໍຣີ ``site-" +"packages``), ນອກເໜືອຈາກໄຟລ໌ຕ່າງໆ." + +#: ../source/specifications/recording-installed-packages.rst:29 +msgid "" +"This directory is named as ``{name}-{version}.dist-info``, with ``name`` and " +"``version`` fields corresponding to :ref:`core-metadata`. Both fields must " +"be normalized (see the :ref:`name normalization specification ` and the :ref:`version normalization specification `), and replace dash (``-``) characters with " +"underscore (``_``) characters, so the ``.dist-info`` directory always has " +"exactly one dash (``-``) character in its stem, separating the ``name`` and " +"``version`` fields." +msgstr "" +"ໄດເລັກທໍຣີນີ້ຖືກຕັ້ງຊື່ເປັນ ``{name}-{version}.dist-info``, ໂດຍມີຟິລ ``name`` ແລະ " +"``version`` ທີ່ກົງກັບ :ref:`core-metadata`. ທັງສອງຟິລຕ້ອງຖືກເຮັດໃຫ້ເປັນມາດຕະຖານ " +"(ເບິ່ງ :ref:`name normalization specification ` " +"ແລະ :ref:`version normalization specification `), ແລະ ປ່ຽນເຄື່ອງໝາຍຂີດກາງ (``-``) ເປັນເຄື່ອງໝາຍຂີດກ້ອງ (``_``), " +"ເພື່ອໃຫ້ໄດເລັກທໍຣີ ``.dist-info`` ມີເຄື່ອງໝາຍຂີດກາງ (``-``) ພຽງອັນດຽວໃນສ່ວນຊື່ຫຼັກ ເພື່ອແຍກຟິລ " +"``name`` ແລະ ``version``." + +#: ../source/specifications/recording-installed-packages.rst:37 +msgid "" +"Historically, tools have failed to replace dot characters or normalize case " +"in the ``name`` field, or not perform normalization in the ``version`` " +"field. Tools consuming ``.dist-info`` directories should expect those fields " +"to be unnormalized, and treat them as equivalent to their normalized " +"counterparts. New tools that write ``.dist-info`` directories MUST normalize " +"both ``name`` and ``version`` fields using the rules described above, and " +"existing tools are encouraged to start normalizing those fields." +msgstr "" +"ໃນອະດີດ, ເຄື່ອງມືຕ່າງໆ ບໍ່ໄດ້ປ່ຽນເຄື່ອງໝາຍຈ້ຳ ຫຼື ປັບຕົວອັກສອນໃນຟິລ ``name`` ໃຫ້ເປັນມາດຕະຖານ, ຫຼື " +"ບໍ່ໄດ້ເຮັດ normalization ໃນຟິລ ``version``. ເຄື່ອງມືທີ່ໃຊ້ໄດເລັກທໍຣີ ``.dist-info`` " +"ຄວນຄາດການວ່າຟິລເຫຼົ່ານັ້ນອາດຈະບໍ່ເປັນມາດຕະຖານ, ແລະ ໃຫ້ຖືວ່າພວກມັນເທົ່າກັບຄູ່ຮ່ວມທີ່ເປັນມາດຕະຖານ. " +"ເຄື່ອງມືໃໝ່ທີ່ຂຽນໄດເລັກທໍຣີ ``.dist-info`` ຈະຕ້ອງ (MUST) ເຮັດໃຫ້ທັງຟິລ ``name`` ແລະ " +"``version`` ເປັນມາດຕະຖານໂດຍໃຊ້ກົດລະບຽບທີ່ອະທິບາຍໄວ້ຂ້າງເທິງ, ແລະ " +"ແນະນຳໃຫ້ເຄື່ອງມືທີ່ມີຢູ່ແລ້ວເລີ່ມເຮັດໃຫ້ຟິລເຫຼົ່ານັ້ນເປັນມາດຕະຖານ." + +#: ../source/specifications/recording-installed-packages.rst:47 +msgid "" +"The ``.dist-info`` directory's name is formatted to unambiguously represent " +"a distribution as a filesystem path. Tools presenting a distribution name to " +"a user should avoid using the normalized name, and instead present the " +"specified name (when needed prior to resolution to an installed package), or " +"read the respective fields in Core Metadata, since values listed there are " +"unescaped and accurately reflect the distribution. Libraries should provide " +"API for such tools to consume, so tools can have access to the unnormalized " +"name when displaying distribution information." +msgstr "" +"ຊື່ຂອງໄດເລັກທໍຣີ ``.dist-info`` ຖືກກຳນົດຮູບແບບເພື່ອສະແດງເຖິງການແຈກຢາຍ (distribution) " +"ເປັນ path ໃນລະບົບໄຟລ໌ຢ່າງຊັດເຈນ. ເຄື່ອງມືທີ່ສະແດງຊື່ການແຈກຢາຍໃຫ້ຜູ້ໃຊ້ເຫັນ " +"ຄວນຫຼີກເວັ້ນການໃຊ້ຊື່ທີ່ເປັນມາດຕະຖານ (normalized name), ແຕ່ໃຫ້ສະແດງຊື່ທີ່ລະບຸໄວ້ແທນ " +"(ເມື່ອຈຳເປັນກ່ອນການແກ້ໄຂໄປຫາແພັກເກດທີ່ຕິດຕັ້ງແລ້ວ), ຫຼື ອ່ານຟິລທີ່ກ່ຽວຂ້ອງໃນ Core Metadata, " +"ເນື່ອງຈາກຄ່າທີ່ລະບຸໄວ້ຢູ່ບັ້ນນັ້ນບໍ່ໄດ້ຖືກແປງ (unescaped) ແລະ ສະທ້ອນເຖິງການແຈກຢາຍຢ່າງຖືກຕ້ອງ. " +"ໄລບຣາຣີຄວນສະໜອງ API ສຳລັບເຄື່ອງມືດັ່ງກ່າວ ເພື່ອໃຫ້ເຄື່ອງມືສາມາດເຂົ້າເຖິງຊື່ທີ່ບໍ່ໄດ້ເປັນມາດຕະຖານ " +"(unnormalized name) ເມື່ອສະແດງຂໍ້ມູນການແຈກຢາຍ." + +#: ../source/specifications/recording-installed-packages.rst:56 +msgid "" +"This ``.dist-info`` directory may contain the following files, described in " +"detail below:" +msgstr "ໄດເລັກທໍຣີ ``.dist-info`` ນີ້ອາດຈະປະກອບມີໄຟລ໌ດັ່ງຕໍ່ໄປນີ້, ເຊິ່ງອະທິບາຍລະອຽດໄວ້ຂ້າງລຸ່ມ:" + +#: ../source/specifications/recording-installed-packages.rst:59 +msgid "``METADATA``: contains project metadata" +msgstr "``METADATA``: ປະກອບມີ metadata ຂອງໂຄງການ" + +#: ../source/specifications/recording-installed-packages.rst:60 +msgid "``RECORD``: records the list of installed files." +msgstr "``RECORD``: ບັນທຶກລາຍຊື່ຂອງໄຟລ໌ທີ່ຕິດຕັ້ງ." + +#: ../source/specifications/recording-installed-packages.rst:61 +msgid "" +"``INSTALLER``: records the name of the tool used to install the project." +msgstr "``INSTALLER``: ບັນທຶກຊື່ຂອງເຄື່ອງມືທີ່ໃຊ້ເພື່ອຕິດຕັ້ງໂຄງການ." + +#: ../source/specifications/recording-installed-packages.rst:62 +msgid "``entry_points.txt``: see :ref:`entry-points` for details" +msgstr "``entry_points.txt``: ເບິ່ງ :ref:`entry-points` ສຳລັບລາຍລະອຽດ" + +#: ../source/specifications/recording-installed-packages.rst:63 +msgid "``direct_url.json``: see :ref:`direct-url` for details" +msgstr "``direct_url.json``: ເບິ່ງ :ref:`direct-url` ສຳລັບລາຍລະອຽດ" + +#: ../source/specifications/recording-installed-packages.rst:65 +msgid "" +"The ``METADATA`` file is mandatory. All other files may be omitted at the " +"installing tool's discretion. Additional installer-specific files may be " +"present." +msgstr "" +"ໄຟລ໌ ``METADATA`` ແມ່ນຈຳເປັນ (mandatory). " +"ໄຟລ໌ອື່ນໆທັງໝົດອາດຈະຖືກລະເວັ້ນໄດ້ຕາມການພິຈາລະນາຂອງເຄື່ອງມືຕິດຕັ້ງ. " +"ອາດມີໄຟລ໌ເພີ່ມເຕີມສະເພາະຂອງຕົວຕິດຕັ້ງນຳອີກ." + +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directories, " +"described in detail below:" +msgstr "" +"ໄດເລັກທໍຣີ :file:`.dist-info/` ນີ້ອາດຈະປະກອບມີໄດເລັກທໍຣີດັ່ງຕໍ່ໄປນີ້, ເຊິ່ງອະທິບາຍລະອຽດໄວ້ຂ້າງລຸ່ມ:" + +#: ../source/specifications/recording-installed-packages.rst:72 +msgid ":file:`licenses/`: contains license files." +msgstr ":file:`licenses/`: ປະກອບມີໄຟລ໌ໃບອະນຸຍາດ (license files)." + +#: ../source/specifications/recording-installed-packages.rst:73 +msgid ":file:`sboms/`: contains Software Bill-of-Materials files (SBOMs)." +msgstr ":file:`sboms/`: ປະກອບມີໄຟລ໌ Software Bill-of-Materials (SBOMs)." + +#: ../source/specifications/recording-installed-packages.rst:77 +msgid "" +"The :ref:`binary-distribution-format` specification describes additional " +"files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " +"Such files may be copied to the ``.dist-info`` directory of an installed " +"project." +msgstr "" +"ຂໍ້ກຳນົດ :ref:`binary-distribution-format` " +"ອະທິບາຍເຖິງໄຟລ໌ເພີ່ມເຕີມທີ່ອາດຈະປາກົດຢູ່ໃນໄດເລັກທໍຣີ ``.dist-info`` ຂອງ :term:`Wheel`. " +"ໄຟລ໌ດັ່ງກ່າວອາດຈະຖືກກັອບປີ້ໄປຍັງໄດເລັກທໍຣີ ``.dist-info`` ຂອງໂຄງການທີ່ຕິດຕັ້ງແລ້ວ." + +#: ../source/specifications/recording-installed-packages.rst:82 +msgid "" +"The previous versions of this specification also specified a ``REQUESTED`` " +"file. This file is now considered a tool-specific extension, but may be " +"standardized again in the future. See `PEP 376 `_ for its original meaning." +msgstr "" +"ເວີຊັນກ່ອນໜ້າຂອງຂໍ້ກຳນົດນີ້ຍັງໄດ້ລະບຸໄຟລ໌ ``REQUESTED``. " +"ຕອນນີ້ໄຟລ໌ນີ້ຖືກຖືວ່າເປັນສ່ວນຂະຫຍາຍສະເພາະຂອງເຄື່ອງມື, " +"ແຕ່ອາດຈະຖືກເຮັດໃຫ້ເປັນມາດຕະຖານອີກຄັ້ງໃນອະນາຄົດ. ເບິ່ງ `PEP 376 `_ ສຳລັບຄວາມໝາຍດັ້ງເດີມຂອງມັນ." + +#: ../source/specifications/recording-installed-packages.rst:89 +msgid "The METADATA file" +msgstr "ໄຟລ໌ METADATA" + +#: ../source/specifications/recording-installed-packages.rst:91 +msgid "" +"The ``METADATA`` file contains metadata as described in the :ref:`core-" +"metadata` specification, version 1.1 or greater." +msgstr "" +"ໄຟລ໌ ``METADATA`` ປະກອບມີ metadata ຕາມທີ່ອະທິບາຍໄວ້ໃນຂໍ້ກຳນົດ :ref:`core-metadata`, " +"ເວີຊັນ 1.1 ຫຼື ສູງກວ່າ." + +#: ../source/specifications/recording-installed-packages.rst:94 +msgid "" +"The ``METADATA`` file is mandatory. If it cannot be created, or if required " +"core metadata is not available, installers must report an error and fail to " +"install the project." +msgstr "" +"ໄຟລ໌ ``METADATA`` ແມ່ນຈຳເປັນ (mandatory). ຫາກບໍ່ສາມາດສ້າງມັນໄດ້, ຫຼື ຫາກບໍ່ມີ core " +"metadata ທີ່ຈຳເປັນ, ຕົວຕິດຕັ້ງຈະຕ້ອງລາຍງານຂໍ້ຜິດພາດ ແລະ ຢຸດການຕິດຕັ້ງໂຄງການ." + +#: ../source/specifications/recording-installed-packages.rst:100 +msgid "The RECORD file" +msgstr "ໄຟລ໌ RECORD" + +#: ../source/specifications/recording-installed-packages.rst:102 +msgid "" +"The ``RECORD`` file holds the list of installed files. It is a CSV file " +"containing one record (line) per installed file." +msgstr "" +"ໄຟລ໌ ``RECORD`` ເກັບລາຍຊື່ຂອງໄຟລ໌ທີ່ຕິດຕັ້ງ. ມັນເປັນໄຟລ໌ CSV ທີ່ປະກອບມີໜຶ່ງລະບົບ (ແຖວ) " +"ຕໍ່ໜຶ່ງໄຟລ໌ທີ່ຕິດຕັ້ງ." + +#: ../source/specifications/recording-installed-packages.rst:105 +msgid "" +"The CSV dialect must be readable with the default ``reader`` of Python's " +"``csv`` module:" +msgstr "" +"ຮູບແບບ (dialect) ຂອງ CSV ຕ້ອງສາມາດອ່ານໄດ້ດ້ວຍ ``reader`` ເລີ່ມຕົ້ນຂອງໂມດູນ ``csv`` ຂອງ " +"Python:" + +#: ../source/specifications/recording-installed-packages.rst:108 +msgid "field delimiter: ``,`` (comma)," +msgstr "ຕົວແຍກຟິລ: ``,`` (ຈ້ຳຈຸດ)," + +#: ../source/specifications/recording-installed-packages.rst:109 +msgid "quoting char: ``\"`` (straight double quote)," +msgstr "ຕົວອັກສອນຄອບຂໍ້ຄວາມ (quoting char): ``\"`` (ເຄື່ອງໝາຍວົງຢືມຄູ່)," + +#: ../source/specifications/recording-installed-packages.rst:110 +msgid "line terminator: either ``\\r\\n`` or ``\\n``." +msgstr "ຕົວຢຸດແຖວ (line terminator): ອາດຈະເປັນ ``\\r\\n`` ຫຼື ``\\n``." + +#: ../source/specifications/recording-installed-packages.rst:112 +msgid "" +"Each record is composed of three elements: the file's **path**, the **hash** " +"of the contents, and its **size**." +msgstr "" +"ແຕ່ລະແຖວປະກອບດ້ວຍສາມອົງປະກອບ: **path** ຂອງໄຟລ໌, **hash** ຂອງເນື້ອໃນ, ແລະ **ຂະໜາດ " +"(size)** ຂອງມັນ." + +#: ../source/specifications/recording-installed-packages.rst:115 +msgid "" +"The *path* may be either absolute, or relative to the directory containing " +"the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " +"Windows, directories may be separated either by forward- or backslashes (``/" +"`` or ``\\``)." +msgstr "" +"*path* ອາດຈະເປັນແບບ absolute (ເຕັມ), ຫຼື relative (ທຽບເຄືອງ) ກັບໄດເລັກທໍຣີທີ່ບັນຈຸໄດເລັກທໍຣີ " +"``.dist-info`` (ໂດຍທົ່ວໄປແມ່ນໄດເລັກທໍຣີ ``site-packages``). ໃນ Windows, " +"ໄດເລັກທໍຣີອາດຈະຖືກແຍກດ້ວຍ forward- ຫຼື backslashes (``/`` ຫຼື ``\\``)." + +#: ../source/specifications/recording-installed-packages.rst:120 +msgid "" +"The *hash* is either an empty string or the name of a hash algorithm " +"from :py:data:`hashlib.algorithms_guaranteed`, followed by the equals " +"character ``=`` and the digest of the file's contents, encoded with the " +"urlsafe-base64-nopad encoding (:py:func:`base64.urlsafe_b64encode(digest) " +"` with trailing ``=`` removed)." +msgstr "" +"*hash* ອາດຈະເປັນ string ຫວ່າງ ຫຼື ຊື່ຂອງ algorithm hash " +"ຈາກ :py:data:`hashlib.algorithms_guaranteed`, ຕາມດ້ວຍເຄື່ອງໝາຍເທົ່າກັບ ``=`` ແລະ " +"digest ຂອງເນື້ອໃນໄຟລ໌, ເຊິ່ງຖືກເຂົ້າລະຫັດດ້ວຍ urlsafe-base64-nopad " +"(:py:func:`base64.urlsafe_b64encode(digest) ` " +"ໂດຍຕັດເຄື່ອງໝາຍ ``=`` ທາງທ້າຍອອກ)." + +#: ../source/specifications/recording-installed-packages.rst:125 +msgid "" +"The *size* is either the empty string, or file's size in bytes, as a base 10 " +"integer." +msgstr "" +"*size* ອາດຈະເປັນ string ຫວ່າງ, ຫຼື ຂະໜາດຂອງໄຟລ໌ເປັນໄບຕ໌ (bytes), ໃນຮູບແບບເລກຖານ 10." + +#: ../source/specifications/recording-installed-packages.rst:128 +msgid "" +"For any file, either or both of the *hash* and *size* fields may be left " +"empty. Commonly, entries for ``.pyc`` files and the ``RECORD`` file itself " +"have empty *hash* and *size*. For other files, leaving the information out " +"is discouraged, as it prevents verifying the integrity of the installed " +"project." +msgstr "" +"ສຳລັບໄຟລ໌ໃດໜຶ່ງ, ຟິລ *hash* ຫຼື *size* (ຫຼື ທັງສອງຢ່າງ) ອາດຈະຖືກປະຫວ່າງໄວ້ໄດ້. ໂດຍທົ່ວໄປແລ້ວ, " +"ຂໍ້ມູນຂອງໄຟລ໌ ``.pyc`` ແລະ ໄຟລ໌ ``RECORD`` ເອງ ມັກຈະມີ *hash* ແລະ *size* ຫວ່າງເປົ່າ. " +"ສຳລັບໄຟລ໌ອື່ນໆ, ບໍ່ແນະນຳໃຫ້ປະຂໍ້ມູນນີ້ໄວ້ ເພາະມັນຈະເຮັດໃຫ້ບໍ່ສາມາດກວດສອບຄວາມຖືກຕ້ອງ (integrity) " +"ຂອງໂຄງການທີ່ຕິດຕັ້ງແລ້ວໄດ້." + +#: ../source/specifications/recording-installed-packages.rst:134 +msgid "" +"If the ``RECORD`` file is present, it must list all installed files of the " +"project, except ``.pyc`` files corresponding to ``.py`` files listed in " +"``RECORD``, which are optional. Notably, the contents of the ``.dist-info`` " +"directory (including the ``RECORD`` file itself) must be listed. Directories " +"should not be listed." +msgstr "" +"ຫາກມີໄຟລ໌ ``RECORD``, ມັນຈະຕ້ອງລະບຸລາຍຊື່ໄຟລ໌ທັງໝົດຂອງໂຄງການທີ່ຕິດຕັ້ງ, ຍົກເວັ້ນໄຟລ໌ ``.pyc`` " +"ທີ່ກົງກັບໄຟລ໌ ``.py`` ທີ່ລະບຸໄວ້ໃນ ``RECORD`` ເຊິ່ງເປັນທາງເລືອກ. ທີ່ສຳຄັນ, ເນື້ອໃນຂອງໄດເລັກທໍຣີ " +"``.dist-info`` (ລວມທັງໄຟລ໌ ``RECORD`` ເອງ) ຈະຕ້ອງຖືກລະບຸໄວ້. ສ່ວນໄດເລັກທໍຣີຕ່າງໆ " +"ແມ່ນບໍ່ຄວນລະບຸໄວ້." + +#: ../source/specifications/recording-installed-packages.rst:141 +msgid "" +"To completely uninstall a package, a tool needs to remove all files listed " +"in ``RECORD``, all ``.pyc`` files (of all optimization levels) corresponding " +"to removed ``.py`` files, and any directories emptied by the uninstallation." +msgstr "" +"ເພື່ອຖອນການຕິດຕັ້ງແພັກເກດໃຫ້ສົມບູນ, ເຄື່ອງມືຕ້ອງລຶບໄຟລ໌ທັງໝົດທີ່ລະບຸໄວ້ໃນ ``RECORD``, ໄຟລ໌ " +"``.pyc`` ທັງໝົດ (ຂອງທຸກລະດັບ optimization) ທີ່ກົງກັບໄຟລ໌ ``.py`` ທີ່ຖືກລຶບອອກ, ແລະ " +"ໄດເລັກທໍຣີໃດໆ ທີ່ວ່າງເປົ່າຫຼັງຈາກການຖອນການຕິດຕັ້ງ." + +#: ../source/specifications/recording-installed-packages.rst:146 +msgid "Here is an example snippet of a possible ``RECORD`` file::" +msgstr "ນີ້ແມ່ນຕົວຢ່າງບາງສ່ວນຂອງໄຟລ໌ ``RECORD`` ທີ່ເປັນໄປໄດ້::" + +#: ../source/specifications/recording-installed-packages.rst:165 +msgid "" +"If the ``RECORD`` file is missing, tools that rely on ``.dist-info`` must " +"not attempt to uninstall or upgrade the package. (This restriction does not " +"apply to tools that rely on other sources of information, such as system " +"package managers in Linux distros.)" +msgstr "" +"ຫາກບໍ່ມີໄຟລ໌ ``RECORD``, ເຄື່ອງມືທີ່ອີງໃສ່ ``.dist-info`` ຈະຕ້ອງບໍ່ພະຍາຍາມຖອນການຕິດຕັ້ງ ຫຼື " +"ອັບເກຣດແພັກເກດ. (ຂໍ້ຈຳກັດນີ້ບໍ່ໄດ້ໃຊ້ກັບເຄື່ອງມືທີ່ອີງໃສ່ແຫຼ່ງຂໍ້ມູນອື່ນໆ, ເຊັ່ນ ຕົວຈັດການແພັກເກດລະບົບໃນ " +"Linux distros.)" + +#: ../source/specifications/recording-installed-packages.rst:172 +msgid "" +"It is *strongly discouraged* for an installed package to modify itself " +"(e.g., store cache files under its namespace in ``site-packages``). Changes " +"inside ``site-packages`` should be left to specialized installer tools such " +"as pip. If a package is nevertheless modified in this way, then the " +"``RECORD`` must be updated, otherwise uninstalling the package will leave " +"unlisted files in place (possibly resulting in a zombie namespace package)." +msgstr "" +"*ບໍ່ແນະນຳຢ່າງເດັດຂາດ* ໃຫ້ແພັກເກດທີ່ຕິດຕັ້ງແລ້ວແກ້ໄຂຕົວມັນເອງ (ເຊັ່ນ: ການເກັບໄຟລ໌ cache ໄວ້ພາຍໃຕ້ " +"namespace ຂອງມັນໃນ ``site-packages``). ການປ່ຽນແປງພາຍໃນ ``site-packages`` " +"ຄວນປ່ອຍໃຫ້ເປັນໜ້າທີ່ຂອງເຄື່ອງມືຕິດຕັ້ງສະເພາະທາງ ເຊັ່ນ pip. ຢ່າງໃດກໍຕາມ, " +"ຫາກແພັກເກດຖືກແກ້ໄຂໃນລັກສະນະນີ້, ``RECORD`` ຈະຕ້ອງຖືກອັບເດດ, " +"ຖ້າບໍ່ດັ່ງນັ້ນການຖອນການຕິດຕັ້ງແພັກເກດຈະເຮັດໃຫ້ມີໄຟລ໌ທີ່ບໍ່ໄດ້ລະບຸໄວ້ຕົກຄ້າງຢູ່ (ເຊິ່ງອາດສົ່ງຜົນໃຫ້ເກີດ zombie " +"namespace package)." + +#: ../source/specifications/recording-installed-packages.rst:181 +msgid "The INSTALLER file" +msgstr "ໄຟລ໌ INSTALLER" + +#: ../source/specifications/recording-installed-packages.rst:183 +msgid "" +"If present, ``INSTALLER`` is a single-line text file naming the tool used to " +"install the project. If the installer is executable from the command line, " +"``INSTALLER`` should contain the command name. Otherwise, it should contain " +"a printable ASCII string." +msgstr "" +"ຫາກມີ, ``INSTALLER`` ແມ່ນໄຟລ໌ຂໍ້ຄວາມແຖວດຽວທີ່ລະບຸຊື່ຂອງເຄື່ອງມືທີ່ໃຊ້ເພື່ອຕິດຕັ້ງໂຄງການ. " +"ຫາກຕົວຕິດຕັ້ງສາມາດເອີ້ນໃຊ້ໄດ້ຈາກ command line, ``INSTALLER`` ຄວນປະກອບດ້ວຍຊື່ຄຳສັ່ງ. " +"ຖ້າບໍ່ດັ່ງນັ້ນ, ມັນຄວນປະກອບດ້ວຍ string ASCII ທີ່ສາມາດພິມໄດ້." + +#: ../source/specifications/recording-installed-packages.rst:189 +msgid "The file can be terminated by zero or more ASCII whitespace characters." +msgstr "ໄຟລ໌ສາມາດຈົບລົງດ້ວຍຕົວອັກສອນ ASCII whitespace ສູນ ຫຼື ຫຼາຍກວ່ານັ້ນ." + +#: ../source/specifications/recording-installed-packages.rst:191 +msgid "Here are examples of two possible ``INSTALLER`` files::" +msgstr "ນີ້ແມ່ນຕົວຢ່າງຂອງໄຟລ໌ ``INSTALLER`` ທີ່ເປັນໄປໄດ້ສອງແບບ::" + +#: ../source/specifications/recording-installed-packages.rst:199 +msgid "" +"This value should be used for informational purposes only. For example, if a " +"tool is asked to uninstall a project but finds no ``RECORD`` file, it may " +"suggest that the tool named in ``INSTALLER`` may be able to do the " +"uninstallation." +msgstr "" +"ຄ່ານີ້ຄວນຖືກໃຊ້ເພື່ອຈຸດປະສົງໃນການໃຫ້ຂໍ້ມູນເທົ່ານັ້ນ. ຕົວຢ່າງ: ຫາກເຄື່ອງມືຖືກຮ້ອງຂໍໃຫ້ຖອນການຕິດຕັ້ງໂຄງການ " +"ແຕ່ບໍ່ພົບໄຟລ໌ ``RECORD``, ມັນອາດຈະແນະນຳວ່າເຄື່ອງມືທີ່ລະບຸຊື່ໄວ້ໃນ ``INSTALLER`` " +"ອາດຈະສາມາດເຮັດການຖອນການຕິດຕັ້ງໄດ້." + +#: ../source/specifications/recording-installed-packages.rst:206 +msgid "The entry_points.txt file" +msgstr "ໄຟລ໌ entry_points.txt" + +#: ../source/specifications/recording-installed-packages.rst:208 +msgid "" +"This file MAY be created by installers to indicate when packages contain " +"components intended for discovery and use by other code, including console " +"scripts and other applications that the installer has made available for " +"execution." +msgstr "" +"ໄຟລ໌ນີ້ ອາດຈະ (MAY) ຖືກສ້າງຂຶ້ນໂດຍຕົວຕິດຕັ້ງ ເພື່ອບົ່ງບອກວ່າເມື່ອໃດທີ່ແພັກເກດມີອົງປະກອບທີ່ມີໄວ້ເພື່ອໃຫ້ " +"code ອື່ນຄົ້ນຫາ ແລະ ໃຊ້ງານ, ລວມທັງ console scripts ແລະ ແອັບພລິເຄຊັນອື່ນໆ " +"ທີ່ຕົວຕິດຕັ້ງໄດ້ເຮັດໃຫ້ພ້ອມສຳລັບການປະຕິບັດງານ." + +#: ../source/specifications/recording-installed-packages.rst:213 +msgid "Its detailed specification is at :ref:`entry-points`." +msgstr "ຂໍ້ກຳນົດລະອຽດຂອງມັນແມ່ນຢູ່ທີ່ :ref:`entry-points`." + +#: ../source/specifications/recording-installed-packages.rst:217 +msgid "The direct_url.json file" +msgstr "ໄຟລ໌ direct_url.json" + +#: ../source/specifications/recording-installed-packages.rst:219 +msgid "" +"This file MUST be created by installers when installing a distribution from " +"a requirement specifying a direct URL reference (including a VCS URL)." +msgstr "" +"ໄຟລ໌ນີ້ ຈະຕ້ອງ (MUST) ຖືກສ້າງຂຶ້ນໂດຍຕົວຕິດຕັ້ງ ເມື່ອຕິດຕັ້ງການແຈກຢາຍຈາກ requirement ທີ່ລະບຸ URL " +"ອ້າງອີງໂດຍກົງ (ລວມທັງ VCS URL)." + +#: ../source/specifications/recording-installed-packages.rst:225 +msgid "Its detailed specification is at :ref:`direct-url`." +msgstr "ຂໍ້ກຳນົດລະອຽດຂອງມັນແມ່ນຢູ່ທີ່ :ref:`direct-url`." + +#: ../source/specifications/recording-installed-packages.rst:229 +msgid "The :file:`licenses/` subdirectory" +msgstr "ໄດເລັກທໍຣີຍ່ອຍ :file:`licenses/`" + +#: ../source/specifications/recording-installed-packages.rst:231 +msgid "" +"If the metadata version is 2.4 or greater and one or more ``License-File`` " +"fields is specified, the :file:`.dist-info/` directory MUST contain " +"a :file:`licenses/` subdirectory which MUST contain the files listed in the " +"``License-File`` fields in the :file:`METADATA` file at their respective " +"paths relative to the :file:`licenses/` directory. Any files in this " +"directory MUST be copied from wheels by the install tools." +msgstr "" +"ຫາກເວີຊັນຂອງ metadata ແມ່ນ 2.4 ຫຼື ສູງກວ່າ ແລະ ມີການລະບຸຟິລ ``License-File`` ໜຶ່ງຟິລ ຫຼື " +"ຫຼາຍກວ່າ, ໄດເລັກທໍຣີ :file:`.dist-info/` ຈະຕ້ອງ (MUST) " +"ປະກອບມີໄດເລັກທໍຣີຍ່ອຍ :file:`licenses/` ເຊິ່ງຈະຕ້ອງປະກອບມີໄຟລ໌ທີ່ລະບຸໄວ້ໃນຟິລ ``License-" +"File`` ໃນໄຟລ໌ :file:`METADATA` ຕາມ path " +"ຂອງພວກມັນທີ່ທຽບເຄືອງກັບໄດເລັກທໍຣີ :file:`licenses/`. ໄຟລ໌ໃດໆ ໃນໄດເລັກທໍຣີນີ້ ຈະຕ້ອງ (MUST) " +"ຖືກກັອບປີ້ມາຈາກ wheels ໂດຍເຄື່ອງມືຕິດຕັ້ງ." + +#: ../source/specifications/recording-installed-packages.rst:240 +msgid "The :file:`sboms/` subdirectory" +msgstr "ໄດເລັກທໍຣີຍ່ອຍ :file:`sboms/`" + +#: ../source/specifications/recording-installed-packages.rst:242 +msgid "" +"All files contained within the :file:`.dist-info/sboms/` directory MUST be " +"Software Bill-of-Materials (SBOM) files that describe software contained " +"within the installed package. Any files in this directory MUST be copied " +"from wheels by the install tools." +msgstr "" +"ໄຟລ໌ທັງໝົດທີ່ບັນຈຸຢູ່ພາຍໃນໄດເລັກທໍຣີ :file:`.dist-info/sboms/` ຈະຕ້ອງ (MUST) ເປັນໄຟລ໌ " +"Software Bill-of-Materials (SBOM) ທີ່ອະທິບາຍຊອບແວທີ່ບັນຈຸຢູ່ພາຍໃນແພັກເກດທີ່ຕິດຕັ້ງ. ໄຟລ໌ໃດໆ " +"ໃນໄດເລັກທໍຣີນີ້ ຈະຕ້ອງ (MUST) ຖືກກັອບປີ້ມາຈາກ wheels ໂດຍເຄື່ອງມືຕິດຕັ້ງ." + +#: ../source/specifications/recording-installed-packages.rst:249 +msgid "Intentionally preventing changes to installed packages" +msgstr "ການເຈດຕະນາປ້ອງກັນການປ່ຽນແປງຕໍ່ແພັກເກດທີ່ຕິດຕັ້ງແລ້ວ" + +#: ../source/specifications/recording-installed-packages.rst:251 +msgid "" +"In some cases (such as when needing to manage external dependencies in " +"addition to Python ecosystem dependencies), it is desirable for a tool that " +"installs packages into a Python environment to ensure that other tools are " +"not used to uninstall or otherwise modify that installed package, as doing " +"so may cause compatibility problems with the wider environment." +msgstr "" +"ໃນບາງກໍລະນີ (ເຊັ່ນ: ເມື່ອຈຳເປັນຕ້ອງຈັດການ dependencies ພາຍນອກ ເພີ່ມເຕີມຈາກ dependencies " +"ຂອງລະບົບນິເວດ Python), ມັນເປັນສິ່ງທີ່ເພິ່ງປາຖະໜາສຳລັບເຄື່ອງມືທີ່ຕິດຕັ້ງແພັກເກດລົງໃນສະພາບແວດລ້ອມ " +"Python ເພື່ອໃຫ້ແນ່ໃຈວ່າເຄື່ອງມືອື່ນໆ ຈະບໍ່ຖືກນຳມາໃຊ້ເພື່ອຖອນການຕິດຕັ້ງ ຫຼື ແກ້ໄຂແພັກເກດທີ່ຕິດຕັ້ງນັ້ນ, " +"ເພາະການເຮັດແນວນັ້ນອາດເຮັດໃຫ້ເກີດບັນຫາຄວາມເຂົ້າກັນໄດ້ກັບສະພາບແວດລ້ອມໂດຍລວມ." + +#: ../source/specifications/recording-installed-packages.rst:257 +msgid "To achieve this, affected tools should take the following steps:" +msgstr "ເພື່ອບັນລຸສິ່ງນີ້, ເຄື່ອງມືທີ່ກ່ຽວຂ້ອງຄວນດຳເນີນການຕາມຂັ້ນຕອນດັ່ງຕໍ່ໄປນີ້:" + +#: ../source/specifications/recording-installed-packages.rst:259 +msgid "" +"Rename or remove the ``RECORD`` file to prevent changes via other tools " +"(e.g. appending a suffix to create a non-standard ``RECORD.tool`` file if " +"the tool itself needs the information, or omitting the file entirely if the " +"package contents are tracked and managed via other means)" +msgstr "" +"ປ່ຽນຊື່ ຫຼື ລຶບໄຟລ໌ ``RECORD`` ອອກເພື່ອປ້ອງກັນການປ່ຽນແປງຜ່ານເຄື່ອງມືອື່ນ (ເຊັ່ນ: " +"ການເພີ່ມນາມສະກຸນເພື່ອສ້າງໄຟລ໌ ``RECORD.tool`` ທີ່ບໍ່ເປັນມາດຕະຖານ ຫາກຕົວເຄື່ອງມືເອງຕ້ອງການຂໍ້ມູນ, " +"ຫຼື ລະເວັ້ນໄຟລ໌ນັ້ນທັງໝົດ ຫາກເນື້ອໃນຂອງແພັກເກດຖືກຕິດຕາມ ແລະ ຈັດການຜ່ານວິທີອື່ນ)" + +#: ../source/specifications/recording-installed-packages.rst:263 +msgid "" +"Write an ``INSTALLER`` file indicating the name of the tool that should be " +"used to manage the package (this allows ``RECORD``-aware tools to provide " +"better error notices when asked to modify affected packages)" +msgstr "" +"ຂຽນໄຟລ໌ ``INSTALLER`` ເພື່ອບົ່ງບອກຊື່ຂອງເຄື່ອງມືທີ່ຄວນໃຊ້ເພື່ອຈັດການແພັກເກດ " +"(ສິ່ງນີ້ຊ່ວຍໃຫ້ເຄື່ອງມືທີ່ຮູ້ຈັກ ``RECORD`` ສາມາດແຈ້ງເຕືອນຂໍ້ຜິດພາດໄດ້ດີຂຶ້ນ " +"ເມື່ອຖືກຮ້ອງຂໍໃຫ້ແກ້ໄຂແພັກເກດທີ່ກ່ຽວຂ້ອງ)" + +#: ../source/specifications/recording-installed-packages.rst:267 +msgid "" +"Python runtime providers may also prevent inadvertent modification of " +"platform provided packages by modifying the default Python package " +"installation scheme to use a location other than that used by platform " +"provided packages (while also ensuring both locations appear on the default " +"Python import path)." +msgstr "" +"ຜູ້ໃຫ້ບໍລິການ Python runtime ຍັງອາດປ້ອງກັນການແກ້ໄຂແພັກເກດທີ່ມາພ້ອມກັບແພລດຟອມໂດຍບໍ່ໄດ້ຕັ້ງໃຈ " +"ໂດຍການແກ້ໄຂຮູບແບບການຕິດຕັ້ງແພັກເກດ Python " +"ເລີ່ມຕົ້ນໃຫ້ໄປໃຊ້ຕຳແໜ່ງອື່ນທີ່ບໍ່ແມ່ນບ່ອນທີ່ແພັກເກດຂອງແພລດຟອມໃຊ້ " +"(ໃນຂະນະທີ່ຍັງເຮັດໃຫ້ແນ່ໃຈວ່າທັງສອງຕຳແໜ່ງປາກົດຢູ່ໃນ path ການ import ເລີ່ມຕົ້ນຂອງ Python)." + +#: ../source/specifications/recording-installed-packages.rst:272 +msgid "" +"In some circumstances, it may be desirable to block even installation of " +"additional packages via Python-specific tools. For these cases refer " +"to :ref:`externally-managed-environments`" +msgstr "" +"ໃນບາງສະຖານະການ, " +"ມັນອາດຈະເປັນສິ່ງທີ່ເພິ່ງປາຖະໜາທີ່ຈະບລັອກແມ່ນແຕ່ການຕິດຕັ້ງແພັກເກດເພີ່ມເຕີມຜ່ານເຄື່ອງມືສະເພາະຂອງ " +"Python. ສຳລັບກໍລະນີເຫຼົ່ານີ້ ໃຫ້ເບິ່ງທີ່ :ref:`externally-managed-environments`" + +#: ../source/specifications/recording-installed-packages.rst:280 +msgid "" +"June 2009: The original version of this specification was approved " +"through :pep:`376`. At the time, it was known as the *Database of Installed " +"Python Distributions*." +msgstr "" +"ມິຖຸນາ 2009: ເວີຊັນດັ້ງເດີມຂອງຂໍ້ກຳນົດນີ້ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`376`. ໃນເວລານັ້ນ, " +"ມັນຖືກຮູ້ຈັກໃນຊື່ *Database of Installed Python Distributions*." + +#: ../source/specifications/recording-installed-packages.rst:283 +msgid "" +"March 2020: The specification of the ``direct_url.json`` file was approved " +"through :pep:`610`. It is only mentioned on this page; see :ref:`direct-url` " +"for the full definition." +msgstr "" +"ມີນາ 2020: ຂໍ້ກຳນົດຂອງໄຟລ໌ ``direct_url.json`` ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`610`. " +"ມັນຖືກກ່າວເຖິງໃນໜ້ານີ້ເທົ່ານັ້ນ; ເບິ່ງ :ref:`direct-url` ສຳລັບຄຳນິຍາມເຕັມ." + +#: ../source/specifications/recording-installed-packages.rst:286 +msgid "" +"September 2020: Various amendments and clarifications were approved " +"through :pep:`627`." +msgstr "ກັນຍາ 2020: ການປັບປຸງ ແລະ ການຊີ້ແຈງຕ່າງໆ ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`627`." + +#: ../source/specifications/schemas/index.rst:4 +msgid "PyPA schemas" +msgstr "PyPA schemas" + +#: ../source/specifications/schemas/index.rst:6 +msgid "`direct_url.json `_" +msgstr "`direct_url.json `_" + +#: ../source/specifications/schemas/index.rst:7 +msgid "`build-details.json `_" +msgstr "`build-details.json `_" + +#: ../source/specifications/schemas/index.rst:8 +msgid "`pylock.toml `_" +msgstr "`pylock.toml `_" + +#: ../source/specifications/section-distribution-formats.rst:3 +msgid "Package Distribution File Formats" +msgstr "ຮູບແບບໄຟລ໌ການແຈກຢາຍແພັກເກດ" + +#: ../source/specifications/section-distribution-metadata.rst:3 +msgid "Package Distribution Metadata" +msgstr "Metadata ຂອງການແຈກຢາຍແພັກເກດ" + +#: ../source/specifications/section-installation-metadata.rst:3 +msgid "Package Installation Metadata" +msgstr "Metadata ຂອງການຕິດຕັ້ງແພັກເກດ" + +#: ../source/specifications/section-package-indices.rst:3 +msgid "Package Index Interfaces" +msgstr "ອິນເຕີເຟດດັດຊະນີແພັກເກດ" + +#: ../source/specifications/section-python-description-formats.rst:3 +msgid "Python Description Formats" +msgstr "ຮູບແບບການອະທິບາຍຂອງ Python" + +#: ../source/specifications/section-reproducible-environments.rst:3 +msgid "Reproducible Environments" +msgstr "ສະພາບແວດລ້ອມທີ່ສາມາດເຮັດຊ້ຳໄດ້" + +#: ../source/specifications/simple-repository-api.rst:6 +msgid "Simple repository API" +msgstr "Simple repository API" + +#: ../source/specifications/simple-repository-api.rst:8 +msgid "" +"The keywords \"**MUST**\", \"**MUST NOT**\", \"**REQUIRED**\", " +"\"**SHALL**\", \"**SHALL NOT**\", \"**SHOULD**\", \"**SHOULD NOT**\", " +"\"**RECOMMENDED**\", \"**MAY**\", and \"**OPTIONAL**\"\" in this document " +"are to be interpreted as described in :rfc:`2119`." +msgstr "" +"ຄຳສຳຄັນ \"**MUST**\", \"**MUST NOT**\", \"**REQUIRED**\", \"**SHALL**\", " +"\"**SHALL NOT**\", \"**SHOULD**\", \"**SHOULD NOT**\", \"**RECOMMENDED**\", " +"\"**MAY**\", ແລະ \"**OPTIONAL**\" ໃນເອກະສານນີ້ " +"ແມ່ນໃຫ້ຕີຄວາມໝາຍຕາມທີ່ອະທິບາຍໄວ້ໃນ :rfc:`2119`." + +#: ../source/specifications/simple-repository-api.rst:13 +msgid "" +"The interface for querying available package versions and retrieving " +"packages from an index server comes in two forms: :ref:`HTML ` and :ref:`JSON `." +msgstr "" +"ອິນເຕີເຟດສຳລັບການສອບຖາມເວີຊັນຂອງແພັກເກດທີ່ມີຢູ່ ແລະ ການດຶງແພັກເກດຈາກເຊີບເວີດັດຊະນີ (index " +"server) ມີສອງຮູບແບບ: :ref:`HTML ` " +"ແລະ :ref:`JSON `." + +#: ../source/specifications/simple-repository-api.rst:21 +msgid "Base API" +msgstr "API ພື້ນຖານ" + +#: ../source/specifications/simple-repository-api.rst:23 +msgid "" +"A repository that implements the simple API is defined by its base URL. This " +"is the top level URL that all additional URLs are below. The API is named " +"the \"simple\" repository due to the fact that PyPI's base URL is ``https://" +"pypi.org/simple/``." +msgstr "" +"ຄັງເກັບ (repository) ທີ່ປະຕິບັດຕາມ simple API ແມ່ນຖືກກຳນົດໂດຍ URL ພື້ນຖານ (base URL) " +"ຂອງມັນ. ນີ້ແມ່ນ URL ລະດັບສູງສຸດ ເຊິ່ງ URL ເພີ່ມເຕີມທັງໝົດຈະຢູ່ພາຍໃຕ້ URL ນີ້. API ນີ້ຖືກຕັ້ງຊື່ວ່າ " +"\"simple\" repository ເນື່ອງຈາກຄວາມຈິງທີ່ວ່າ base URL ຂອງ PyPI ແມ່ນ ``https://" +"pypi.org/simple/``." + +#: ../source/specifications/simple-repository-api.rst:28 +msgid "" +"All subsequent URLs in this document will be relative to this base URL (so " +"given PyPI's URL, a URL of ``/foo/`` would be ``https://pypi.org/simple/foo/" +"``." +msgstr "" +"URL ທີ່ຕາມມາທັງໝົດໃນເອກະສານນີ້ ຈະທຽບເຄືອງກັບ base URL ນີ້ (ດັ່ງນັ້ນ ຫາກໃຫ້ URL ຂອງ PyPI ມາ, " +"URL ຂອງ ``/foo/`` ກໍຈະເປັນ ``https://pypi.org/simple/foo/``)." + +#: ../source/specifications/simple-repository-api.rst:33 +msgid "Normalized Names" +msgstr "ຊື່ທີ່ເປັນມາດຕະຖານ" + +#: ../source/specifications/simple-repository-api.rst:35 +msgid "" +"This spec references the concept of a \"normalized\" project name. As " +"per :ref:`the name normalization specification ` the " +"only valid characters in a name are the ASCII alphabet, ASCII numbers, " +"``.``, ``-``, and ``_``. The name should be lowercased with all runs of the " +"characters ``.``, ``-``, or ``_`` replaced with a single ``-`` character. " +"This can be implemented in Python with the ``re`` module::" +msgstr "" +"ຂໍ້ກຳນົດນີ້ອ້າງອີງເຖິງແນວຄວາມຄິດຂອງຊື່ໂຄງການທີ່ເປັນ \"ມາດຕະຖານ\" (normalized). " +"ຕາມ :ref:`ຂໍ້ກຳນົດການເຮັດໃຫ້ຊື່ເປັນມາດຕະຖານ ` " +"ຕົວອັກສອນທີ່ໃຊ້ໄດ້ໃນຊື່ມີພຽງແຕ່ ຕົວອັກສອນ ASCII, ຕົວເລກ ASCII, ``.``, ``-``, ແລະ ``_``. " +"ຊື່ຄວນເປັນຕົວພິມນ້ອຍ ໂດຍທີ່ຕົວອັກສອນ ``.``, ``-``, ຫຼື ``_`` ທີ່ຢູ່ຕິດກັນທັງໝົດ " +"ຈະຖືກປ່ຽນແທນດ້ວຍເຄື່ອງໝາຍ ``-`` ພຽງອັນດຽວ. ສິ່ງນີ້ສາມາດປະຕິບັດໄດ້ໃນ Python ດ້ວຍໂມດູນ " +"``re``::" + +#: ../source/specifications/simple-repository-api.rst:50 +msgid "Versioning PyPI's Simple API" +msgstr "ການກຳນົດເວີຊັນໃຫ້ກັບ Simple API ຂອງ PyPI" + +#: ../source/specifications/simple-repository-api.rst:52 +msgid "" +"This spec proposes the inclusion of a meta tag on the responses of every " +"successful request to a simple API page, which contains a name attribute of " +"``pypi:repository-version``, and a content that is a :ref:`version " +"specifiers specification ` compatible version number, " +"which is further constrained to ONLY be Major.Minor, and none of the " +"additional features supported by :ref:`the version specifiers specification " +"`." +msgstr "" +"ຂໍ້ກຳນົດນີ້ສະເໜີໃຫ້ລວມເອົາ meta tag ໃນການຕອບສະໜອງຂອງທຸກໆ request ທີ່ສຳເລັດໄປຫາໜ້າ simple " +"API, ເຊິ່ງປະກອບດ້ວຍ attribute ຊື່ວ່າ ``pypi:repository-version``, ແລະ ເນື້ອໃນ " +"(content) ທີ່ເປັນໝາຍເລກເວີຊັນທີ່ເຂົ້າກັນໄດ້ກັບ :ref:`ຂໍ້ກຳນົດຕົວລະບຸເວີຊັນ `, ເຊິ່ງຖືກກຳນົດເພີ່ມເຕີມໃຫ້ເປັນພຽງ Major.Minor ເທົ່ານັ້ນ, ແລະ ບໍ່ມີຟີເຈີເພີ່ມເຕີມອື່ນໆ " +"ທີ່ຮອງຮັບໂດຍ :ref:`ຂໍ້ກຳນົດຕົວລະບຸເວີຊັນ `." + +#: ../source/specifications/simple-repository-api.rst:60 +msgid "This would end up looking like:" +msgstr "ສິ່ງນີ້ຈະມີລັກສະນະຄື:" + +#: ../source/specifications/simple-repository-api.rst:66 +msgid "When interpreting the repository version:" +msgstr "ເມື່ອແປຄວາມໝາຍຂອງເວີຊັນຄັງເກັບ:" + +#: ../source/specifications/simple-repository-api.rst:68 +msgid "" +"Incrementing the major version is used to signal a backwards incompatible " +"change such that existing clients would no longer be expected to be able to " +"meaningfully use the API." +msgstr "" +"ການເພີ່ມໝາຍເລກເວີຊັນຫຼັກ (major version) " +"ແມ່ນໃຊ້ເພື່ອສົ່ງສັນຍານການປ່ຽນແປງທີ່ບໍ່ເຂົ້າກັນກັບເວີຊັນກ່ອນໜ້າ ຈົນເຖິງຂັ້ນທີ່ clients ທີ່ມີຢູ່ ບໍ່ສາມາດໃຊ້ງານ " +"API ໄດ້ຢ່າງມີຄວາມໝາຍອີກຕໍ່ໄປ." + +#: ../source/specifications/simple-repository-api.rst:71 +msgid "" +"Incrementing the minor version is used to signal a backwards compatible " +"change such that existing clients would still be expected to be able to " +"meaningfully use the API." +msgstr "" +"ການເພີ່ມໝາຍເລກເວີຊັນຍ່ອຍ (minor version) " +"ແມ່ນໃຊ້ເພື່ອສົ່ງສັນຍານການປ່ຽນແປງທີ່ເຂົ້າກັນໄດ້ກັບເວີຊັນກ່ອນໜ້າ ໂດຍທີ່ clients ທີ່ມີຢູ່ " +"ຍັງຄາດວ່າຈະສາມາດໃຊ້ງານ API ໄດ້ຢ່າງມີຄວາມໝາຍ." + +#: ../source/specifications/simple-repository-api.rst:75 +msgid "" +"It is left up to the discretion of any future specs as to what specifically " +"constitutes a backwards incompatible vs compatible change beyond the broad " +"suggestion that existing clients will be able to \"meaningfully\" continue " +"to use the API, and can include adding, modifying, or removing existing " +"features." +msgstr "" +"ມັນຂຶ້ນຢູ່ກັບການພິຈາລະນາຂອງຂໍ້ກຳນົດໃນອະນາຄົດວ່າ ສິ່ງໃດຈະຖືວ່າເປັນການປ່ຽນແປງທີ່ບໍ່ເຂົ້າກັນ ຫຼື " +"ເຂົ້າກັນໄດ້ກັບເວີຊັນກ່ອນໜ້າ ນອກເໜືອຈາກຄຳແນະນຳກວ້າງໆ ທີ່ວ່າ clients ທີ່ມີຢູ່ຈະສາມາດໃຊ້ API " +"ຕໍ່ໄປໄດ້ຢ່າງ \"ມີຄວາມໝາຍ\", ແລະ ສາມາດລວມເຖິງການເພີ່ມ, ການແກ້ໄຂ ຫຼື ການລຶບຟີເຈີທີ່ມີຢູ່." + +#: ../source/specifications/simple-repository-api.rst:81 +msgid "" +"It is expectation of this spec that the major version will never be " +"incremented, and any future major API evolutions would utilize a different " +"mechanism for API evolution. However the major version is included to " +"disambiguate with future versions (e.g. a hypothetical simple api v2 that " +"lived at /v2/, but which would be confusing if the repository-version was " +"set to a version >= 2)." +msgstr "" +"ຂໍ້ກຳນົດນີ້ຄາດການວ່າເວີຊັນຫຼັກຈະບໍ່ຖືກເພີ່ມຂຶ້ນເລີຍ, ແລະ ການພັດທະນາ API ຫຼັກໃດໆ ໃນອະນາຄົດ " +"ຈະໃຊ້ກົນໄກອື່ນໃນການພັດທະນາ API. ຢ່າງໃດກໍຕາມ, " +"ເວີຊັນຫຼັກໄດ້ຖືກລວມໄວ້ເພື່ອແຍກຄວາມແຕກຕ່າງກັບເວີຊັນໃນອະນາຄົດ (ຕົວຢ່າງ: ຫາກມີ simple api v2 " +"ທີ່ຢູ່ທີ່ /v2/ ແຕ່ອາດຈະເຮັດໃຫ້ສັບສົນຫາກ repository-version ຖືກຕັ້ງເປັນເວີຊັນ >= 2)." + +#: ../source/specifications/simple-repository-api.rst:89 +msgid "API Version History" +msgstr "ປະຫວັດເວີຊັນ API" + +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"This section contains only an abbreviated history of changes, as marked by " +"the API version number. For a full history of changes including changes made " +"before API versioning, see :ref:`History `." +msgstr "" +"ສ່ວນນີ້ປະກອບມີພຽງແຕ່ປະຫວັດການປ່ຽນແປງແບບຫຍໍ້, ຕາມທີ່ລະບຸໂດຍໝາຍເລກເວີຊັນ API. " +"ສຳລັບປະຫວັດການປ່ຽນແປງທັງໝົດ ລວມທັງການປ່ຽນແປງກ່ອນທີ່ຈະມີການກຳນົດເວີຊັນ API, " +"ໃຫ້ເບິ່ງ :ref:`History `." + +#: ../source/specifications/simple-repository-api.rst:95 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "API ເວີຊັນ 1.0: ເວີຊັນເລີ່ມຕົ້ນຂອງ API, ປະກາດໃຊ້ດ້ວຍ :pep:`629`." + +#: ../source/specifications/simple-repository-api.rst:96 +msgid "" +"API version 1.1: Added ``versions``, ``files[].size``, and ``files[].upload-" +"time`` metadata to the JSON serialization, declared with :pep:`700`." +msgstr "" +"API ເວີຊັນ 1.1: ເພີ່ມ metadata ``versions``, ``files[].size``, ແລະ " +"``files[].upload-time`` ເຂົ້າໃນການເຮັດ JSON serialization, " +"ປະກາດໃຊ້ດ້ວຍ :pep:`700`." + +#: ../source/specifications/simple-repository-api.rst:98 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared " +"with :pep:`708`." +msgstr "API ເວີຊັນ 1.2: ເພີ່ມ metadata \"tracks\" ຂອງຄັງເກັບ, ປະກາດໃຊ້ດ້ວຍ :pep:`708`." + +#: ../source/specifications/simple-repository-api.rst:99 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "API ເວີຊັນ 1.3: ເພີ່ມ metadata ແຫຼ່ງທີ່ມາ (provenance), ປະກາດໃຊ້ດ້ວຍ :pep:`740`." + +#: ../source/specifications/simple-repository-api.rst:100 +msgid "API version 1.4: Added status markers, declared with :pep:`792`." +msgstr "API ເວີຊັນ 1.4: ເພີ່ມຕົວບົ່ງບອກສະຖານະ, ປະກາດໃຊ້ດ້ວຍ :pep:`792`." + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "Clients" +msgstr "ລູກຄ້າ (Clients)" + +#: ../source/specifications/simple-repository-api.rst:105 +msgid "" +"Clients interacting with the simple API **SHOULD** introspect each response " +"for the repository version, and if that data does not exist **MUST** assume " +"that it is version 1.0." +msgstr "" +"Clients ທີ່ໂຕ້ຕອບກັບ simple API ຄວນ (SHOULD) " +"ກວດສອບແຕ່ລະການຕອບສະໜອງສຳລັບເວີຊັນຂອງຄັງເກັບ, ແລະ ຫາກບໍ່ມີຂໍ້ມູນນັ້ນ ຈະຕ້ອງ (MUST) " +"ສັນນິຖານວ່າມັນເປັນເວີຊັນ 1.0." + +#: ../source/specifications/simple-repository-api.rst:109 +msgid "" +"When encountering a major version greater than expected, clients **MUST** " +"hard fail with an appropriate error message for the user." +msgstr "" +"ເມື່ອພົບເວີຊັນຫຼັກທີ່ສູງກວ່າທີ່ຄາດໄວ້, clients ຈະຕ້ອງ (MUST) ຢຸດການເຮັດວຽກທັນທີ (hard fail) " +"ພ້ອມກັບຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດທີ່ເໝາະສົມສຳລັບຜູ້ໃຊ້." + +#: ../source/specifications/simple-repository-api.rst:112 +msgid "" +"When encountering a minor version greater than expected, clients **SHOULD** " +"warn users with an appropriate message." +msgstr "" +"ເມື່ອພົບເວີຊັນຍ່ອຍທີ່ສູງກວ່າທີ່ຄາດໄວ້, clients ຄວນ (SHOULD) ແຈ້ງເຕືອນຜູ້ໃຊ້ດ້ວຍຂໍ້ຄວາມທີ່ເໝາະສົມ." + +#: ../source/specifications/simple-repository-api.rst:115 +msgid "" +"Clients **MAY** still continue to use feature detection in order to " +"determine what features a repository uses." +msgstr "" +"Clients ອາດຈະ (MAY) ຍັງຄົງໃຊ້ການກວດຫາຟີເຈີ (feature detection) ຕໍ່ໄປ " +"ເພື່ອພິຈາລະນາວ່າມີຟີເຈີໃດທີ່ຄັງເກັບນັ້ນໃຊ້." + +#: ../source/specifications/simple-repository-api.rst:121 +msgid "HTML Serialization" +msgstr "ການເຮັດ HTML Serialization" + +#: ../source/specifications/simple-repository-api.rst:127 +msgid "" +"The HTML representation is considered \"frozen\" and is not expected to be " +"updated. Producers and consumers of the simple API should prefer " +"the :ref:`JSON representation `." +msgstr "" +"ການສະແດງຜົນແບບ HTML ຖືກຖືວ່າ \"ຄົງທີ່\" (frozen) ແລະ ຄາດວ່າຈະບໍ່ມີການອັບເດດອີກ. ຜູ້ຜະລິດ ແລະ " +"ຜູ້ໃຊ້ simple API ຄວນເລືອກໃຊ້ :ref:`ການສະແດງຜົນແບບ JSON `." + +#: ../source/specifications/simple-repository-api.rst:131 +msgid "" +"See :pep:`833` for additional information about the HTML representation's " +"status." +msgstr "ເບິ່ງ :pep:`833` ສຳລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບສະຖານະຂອງການສະແດງຜົນແບບ HTML." + +#: ../source/specifications/simple-repository-api.rst:134 +msgid "" +"The following constraints apply to all HTML serialized responses described " +"in this spec:" +msgstr "ຂໍ້ຈຳກັດດັ່ງຕໍ່ໄປນີ້ໃຊ້ກັບທຸກການຕອບສະໜອງໃນຮູບແບບ HTML ທີ່ອະທິບາຍໄວ້ໃນຂໍ້ກຳນົດນີ້:" + +#: ../source/specifications/simple-repository-api.rst:137 +msgid "All HTML responses **MUST** be a valid HTML5 document." +msgstr "ທຸກການຕອບສະໜອງແບບ HTML ຈະຕ້ອງ (MUST) ເປັນເອກະສານ HTML5 ທີ່ຖືກຕ້ອງ." + +#: ../source/specifications/simple-repository-api.rst:138 +msgid "" +"HTML responses **MAY** contain one or more ``meta`` tags in the ```` " +"section. The semantics of these tags are defined below." +msgstr "" +"ການຕອບສະໜອງແບບ HTML ອາດຈະ (MAY) ປະກອບມີ ``meta`` tags ໜຶ່ງ ຫຼື ຫຼາຍອັນໃນສ່ວນ " +"````. ຄວາມໝາຍຂອງ tags ເຫຼົ່ານີ້ແມ່ນຖືກກຳນົດໄວ້ຂ້າງລຸ່ມ." + +#: ../source/specifications/simple-repository-api.rst:142 +#: ../source/specifications/simple-repository-api.rst:437 +msgid "Project List" +msgstr "ລາຍຊື່ໂຄງການ" + +#: ../source/specifications/simple-repository-api.rst:144 +msgid "" +"Within a repository, the root URL (``/`` for this spec which represents the " +"base URL) **MUST** be a valid HTML5 page with a single anchor element per " +"project in the repository." +msgstr "" +"ພາຍໃນຄັງເກັບ, root URL (``/`` ສຳລັບຂໍ້ກຳນົດນີ້ ເຊິ່ງສະແດງເຖິງ base URL) ຈະຕ້ອງ (MUST) " +"ເປັນໜ້າ HTML5 ທີ່ຖືກຕ້ອງ ໂດຍມີອົງປະກອບ anchor ພຽງອັນດຽວຕໍ່ໜຶ່ງໂຄງການໃນຄັງເກັບ." + +#: ../source/specifications/simple-repository-api.rst:148 +msgid "" +"The text of each anchor tag **MUST** be the name of the project and the " +"``href`` attribute **MUST** link to the URL for that particular project. As " +"an example:" +msgstr "" +"ຂໍ້ຄວາມຂອງແຕ່ລະ anchor tag ຈະຕ້ອງ (MUST) ເປັນຊື່ຂອງໂຄງການ ແລະ attribute ``href`` " +"ຈະຕ້ອງ (MUST) ລິ້ງໄປຫາ URL ສຳລັບໂຄງການນັ້ນໆ. ຕົວຢ່າງ:" + +#: ../source/specifications/simple-repository-api.rst:165 +#: ../source/specifications/simple-repository-api.rst:482 +msgid "Project Detail" +msgstr "ລາຍລະອຽດໂຄງການ" + +#: ../source/specifications/simple-repository-api.rst:167 +msgid "" +"Below the root URL is another URL for each individual project contained " +"within a repository. The format of this URL is ``//``, where the " +"```` is replaced by the normalized name for that project." +msgstr "" +"ຖັດຈາກ root URL ແມ່ນ URL ອື່ນສຳລັບແຕ່ລະໂຄງການທີ່ຢູ່ໃນຄັງເກັບ. ຮູບແບບຂອງ URL ນີ້ແມ່ນ ``/" +"/``, ໂດຍທີ່ ```` ຈະຖືກແທນທີ່ດ້ວຍຊື່ທີ່ເປັນມາດຕະຖານສຳລັບໂຄງການນັ້ນ." + +#: ../source/specifications/simple-repository-api.rst:173 +msgid "" +"For example, a project named \"HolyGrail\" would have a URL like ``/" +"holygrail/``." +msgstr "ຕົວຢ່າງ: ໂຄງການທີ່ຊື່ວ່າ \"HolyGrail\" ຈະມີ URL ເຊັ່ນ ``/holygrail/``." + +#: ../source/specifications/simple-repository-api.rst:176 +msgid "" +"The project detail URL must respond with a valid HTML5 page with a single " +"anchor element per file for the project. The ``href`` attribute **MUST** be " +"a URL that links to the location of the file for download, and the text of " +"the anchor tag **MUST** match the final path component (the filename) of the " +"URL." +msgstr "" +"URL ລາຍລະອຽດໂຄງການຕ້ອງຕອບສະໜອງດ້ວຍໜ້າ HTML5 ທີ່ຖືກຕ້ອງ ໂດຍມີອົງປະກອບ anchor " +"ພຽງອັນດຽວຕໍ່ໜຶ່ງໄຟລ໌ຂອງໂຄງການ. attribute ``href`` ຈະຕ້ອງ (MUST) ເປັນ URL " +"ທີ່ລິ້ງໄປຫາຕຳແໜ່ງຂອງໄຟລ໌ເພື່ອດາວໂຫຼດ, ແລະ ຂໍ້ຄວາມຂອງ anchor tag ຈະຕ້ອງ (MUST) " +"ກົງກັບສ່ວນປະກອບສຸດທ້າຍຂອງ path (ຊື່ໄຟລ໌) ຂອງ URL." + +#: ../source/specifications/simple-repository-api.rst:181 +msgid "" +"Each file URL **SHOULD** include a hash in the form of a URL fragment with " +"the following syntax: ``#=``, where ```` is " +"the lowercase name of the hash function (such as ``sha256``) and " +"```` is the hex encoded digest." +msgstr "" +"ແຕ່ລະ URL ຂອງໄຟລ໌ ຄວນ (SHOULD) ລວມເອົາ hash ໃນຮູບແບບຂອງ URL fragment " +"ດ້ວຍໄວຍາກອນດັ່ງນີ້: ``#=``, ໂດຍທີ່ ```` " +"ແມ່ນຊື່ຕົວພິມນ້ອຍຂອງ hash function (ເຊັ່ນ ``sha256``) ແລະ ```` ແມ່ນ digest " +"ທີ່ຖືກເຂົ້າລະຫັດແບບ hex." + +#: ../source/specifications/simple-repository-api.rst:186 +msgid "" +"In addition to the above, the following constraints are placed on the API:" +msgstr "ນອກເໜືອຈາກຂ້າງເທິງແລ້ວ, ຍັງມີຂໍ້ຈຳກັດດັ່ງຕໍ່ໄປນີ້ສຳລັບ API:" + +#: ../source/specifications/simple-repository-api.rst:188 +msgid "" +"All URLs which respond with an HTML5 page **MUST** end with a ``/`` and the " +"repository **SHOULD** redirect the URLs without a ``/`` to add a ``/`` to " +"the end." +msgstr "" +"ທຸກ URL ທີ່ຕອບສະໜອງດ້ວຍໜ້າ HTML5 ຈະຕ້ອງ (MUST) ລົງທ້າຍດ້ວຍ ``/`` ແລະ ຄັງເກັບ ຄວນ " +"(SHOULD) redirect URL ທີ່ບໍ່ມີ ``/`` ໃຫ້ເພີ່ມ ``/`` ເຂົ້າທາງທ້າຍ." + +#: ../source/specifications/simple-repository-api.rst:192 +msgid "" +"URLs may be either absolute or relative as long as they point to the correct " +"location." +msgstr "URL ອາດຈະເປັນແບບ absolute ຫຼື relative ກໍໄດ້ ຕາບໃດທີ່ພວກມັນຊີ້ໄປຫາຕຳແໜ່ງທີ່ຖືກຕ້ອງ." + +#: ../source/specifications/simple-repository-api.rst:195 +msgid "" +"There are no constraints on where the files must be hosted relative to the " +"repository." +msgstr "ບໍ່ມີຂໍ້ຈຳກັດກ່ຽວກັບບ່ອນທີ່ໄຟລ໌ຈະຕ້ອງຖືກໂຮສ (hosted) ເມື່ອທຽບກັບຄັງເກັບ." + +#: ../source/specifications/simple-repository-api.rst:198 +msgid "" +"There may be any other HTML elements on the API pages as long as the " +"required anchor elements exist." +msgstr "ອາດມີອົງປະກອບ HTML ອື່ນໆ ໃນໜ້າ API ໄດ້ ຕາບໃດທີ່ຍັງມີອົງປະກອບ anchor ທີ່ຈຳເປັນຢູ່." + +#: ../source/specifications/simple-repository-api.rst:201 +msgid "" +"Repositories **MAY** redirect unnormalized URLs to the canonical normalized " +"URL (e.g. ``/Foobar/`` may redirect to ``/foobar/``), however clients **MUST " +"NOT** rely on this redirection and **MUST** request the normalized URL." +msgstr "" +"ຄັງເກັບ ອາດຈະ (MAY) redirect URL ທີ່ບໍ່ເປັນມາດຕະຖານ ໄປຫາ URL ທີ່ເປັນມາດຕະຖານຫຼັກ " +"(canonical) (ເຊັ່ນ: ``/Foobar/`` ອາດຈະ redirect ໄປຫາ ``/foobar/``), ຢ່າງໃດກໍຕາມ " +"clients ຈະຕ້ອງບໍ່ (MUST NOT) ເພິ່ງພາການ redirect ນີ້ ແລະ ຈະຕ້ອງ (MUST) ຮ້ອງຂໍ URL " +"ທີ່ເປັນມາດຕະຖານ." + +#: ../source/specifications/simple-repository-api.rst:206 +msgid "" +"Repositories **SHOULD** choose a hash function from one of the ones " +"guaranteed to be available via the :py:mod:`hashlib` module in the Python " +"standard library (currently ``md5``, ``sha1``, ``sha224``, ``sha256``, " +"``sha384``, ``sha512``). The current recommendation is to use ``sha256``." +msgstr "" +"ຄັງເກັບ ຄວນ (SHOULD) ເລືອກ hash function " +"ຈາກອັນໃດອັນໜຶ່ງທີ່ຮັບປະກັນວ່າມີໃຫ້ໃຊ້ຜ່ານໂມດູນ :py:mod:`hashlib` ໃນ standard library ຂອງ " +"Python (ປັດຈຸບັນແມ່ນ ``md5``, ``sha1``, ``sha224``, ``sha256``, ``sha384``, " +"``sha512``). ຄຳແນະນຳໃນປັດຈຸບັນແມ່ນໃຫ້ໃຊ້ ``sha256``." + +#: ../source/specifications/simple-repository-api.rst:211 +msgid "" +"If there is a GPG signature for a particular distribution file it **MUST** " +"live alongside that file with the same name with a ``.asc`` appended to it. " +"So if the file ``/packages/HolyGrail-1.0.tar.gz`` existed and had an " +"associated signature, the signature would be located at ``/packages/" +"HolyGrail-1.0.tar.gz.asc``." +msgstr "" +"ຫາກມີລາຍເຊັນ GPG ສຳລັບໄຟລ໌ການແຈກຢາຍສະເພາະໃດໜຶ່ງ, ມັນ ຈະຕ້ອງ (MUST) " +"ຢູ່ຄຽງຄູ່ກັບໄຟລ໌ນັ້ນໂດຍມີຊື່ດຽວກັນ ແລະ ຕໍ່ທ້າຍດ້ວຍ ``.asc``. ດັ່ງນັ້ນ ຫາກມີໄຟລ໌ ``/packages/" +"HolyGrail-1.0.tar.gz`` ແລະ ມີລາຍເຊັນທີ່ກ່ຽວຂ້ອງ, ລາຍເຊັນນັ້ນຈະຕັ້ງຢູ່ທີ່ ``/packages/" +"HolyGrail-1.0.tar.gz.asc``." + +#: ../source/specifications/simple-repository-api.rst:217 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "ຄັງເກັບ ອາດຈະ (MAY) ລວມເອົາ attribute ``data-core-metadata`` ໃນລິ້ງຂອງໄຟລ໌." + +#: ../source/specifications/simple-repository-api.rst:220 +msgid "" +"The repository **SHOULD** provide the hash of the Core Metadata file as the " +"``data-core-metadata`` attribute's value using the syntax " +"``=``, where ```` is the lower cased name of " +"the hash function used, and ```` is the hex encoded digest. The " +"repository **MAY** use ``true`` as the attribute's value if a hash is " +"unavailable." +msgstr "" +"ຄັງເກັບ ຄວນ (SHOULD) ສະໜອງ hash ຂອງໄຟລ໌ Core Metadata ເປັນຄ່າຂອງ attribute ``data-" +"core-metadata`` ໂດຍໃຊ້ໄວຍາກອນ ``=``, ໂດຍທີ່ ```` " +"ແມ່ນຊື່ຕົວພິມນ້ອຍຂອງ hash function ທີ່ໃຊ້, ແລະ ```` ແມ່ນ digest " +"ທີ່ຖືກເຂົ້າລະຫັດແບບ hex. ຄັງເກັບ ອາດຈະ (MAY) ໃຊ້ ``true`` ເປັນຄ່າຂອງ attribute ຫາກບໍ່ມີ " +"hash ໃຫ້ໃຊ້." + +#: ../source/specifications/simple-repository-api.rst:226 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" +"ຄັງເກັບ ອາດຈະ (MAY) ລວມເອົາ attribute ``data-dist-info-metadata`` ໃນລິ້ງຂອງໄຟລ໌." + +#: ../source/specifications/simple-repository-api.rst:229 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" +"Index clients ອາດຈະ (MAY) ໃຊ້ຄີນີ້ຫາກມີຢູ່, ເພື່ອເປັນການຮອງຮັບແບບເກົ່າ (legacy fallback) " +"ສຳລັບ ``data-core-metadata``." + +#: ../source/specifications/simple-repository-api.rst:234 +msgid "" +"``data-dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``data-core-metadata`` with :pep:`714`." +msgstr "" +"``data-dist-info-metadata`` ໄດ້ຖືກເຮັດໃຫ້ເປັນມາດຕະຖານດ້ວຍ :pep:`658` ແລະ ປ່ຽນຊື່ເປັນ " +"``data-core-metadata`` ດ້ວຍ :pep:`714`." + +#: ../source/specifications/simple-repository-api.rst:237 +msgid "" +"A repository **MAY** include a ``data-gpg-sig`` attribute on a file link " +"with a value of either ``true`` or ``false`` to indicate whether or not " +"there is a GPG signature. Repositories that do this **SHOULD** include it on " +"every link." +msgstr "" +"ຄັງເກັບ ອາດຈະ (MAY) ລວມເອົາ attribute ``data-gpg-sig`` ໃນລິ້ງຂອງໄຟລ໌ ໂດຍມີຄ່າເປັນ " +"``true`` ຫຼື ``false`` ເພື່ອບົ່ງບອກວ່າມີລາຍເຊັນ GPG ຫຼື ບໍ່. ຄັງເກັບທີ່ເຮັດແນວນີ້ ຄວນ (SHOULD) " +"ລວມເອົາມັນໄວ້ໃນທຸກລິ້ງ." + +#: ../source/specifications/simple-repository-api.rst:241 +msgid "" +"A repository **MAY** include a ``data-requires-python`` attribute on a file " +"link. This exposes the :ref:`core-metadata-requires-python` metadata field " +"for the corresponding release. Where this is present, installer tools " +"**SHOULD** ignore the download when installing to a Python version that " +"doesn't satisfy the requirement. For example:" +msgstr "" +"ຄັງເກັບ ອາດຈະ (MAY) ລວມເອົາ attribute ``data-requires-python`` ໃນລິ້ງຂອງໄຟລ໌. " +"ສິ່ງນີ້ສະແດງຟິລ metadata :ref:`core-metadata-requires-python` ສຳລັບ release " +"ທີ່ກ່ຽວຂ້ອງ. ໃນບ່ອນທີ່ມີຂໍ້ມູນນີ້, ເຄື່ອງມືຕິດຕັ້ງ ຄວນ (SHOULD) " +"ລະເວັ້ນການດາວໂຫຼດເມື່ອຕິດຕັ້ງລົງໃນເວີຊັນຂອງ Python ທີ່ບໍ່ກົງກັບຄວາມຕ້ອງການ. ຕົວຢ່າງ:" + +#: ../source/specifications/simple-repository-api.rst:251 +msgid "" +"In the attribute value, < and > have to be HTML encoded as ``<`` and " +"``>``, respectively." +msgstr "" +"ໃນຄ່າຂອງ attribute, < ແລະ > ຈະຕ້ອງຖືກເຂົ້າລະຫັດເປັນ HTML ເຊັ່ນ ``<`` ແລະ ``>`` " +"ຕາມລຳດັບ." + +#: ../source/specifications/simple-repository-api.rst:254 +msgid "" +"A repository **MAY** include a ``data-yanked`` attribute on a file link." +msgstr "ຄັງເກັບ ອາດຈະ (MAY) ລວມເອົາ attribute ``data-yanked`` ໃນລິ້ງຂອງໄຟລ໌." + +#: ../source/specifications/simple-repository-api.rst:256 +msgid "" +"The ``data-yanked`` attribute may have no value, or may have an arbitrary " +"string as a value. The presence of a ``data-yanked`` attribute **SHOULD** be " +"interpreted as indicating that the file pointed to by this particular link " +"has been \"Yanked\", and should not generally be selected by an installer, " +"except under specific scenarios." +msgstr "" +"ແອດທຣິບິວ (attribute) ``data-yanked`` ອາດຈະບໍ່ມີຄ່າ, ຫຼື ອາດຈະມີສະຕຣິງໃດໜຶ່ງເປັນຄ່າ. " +"ການມີຢູ່ຂອງແອດທຣິບິວ ``data-yanked`` **ຄວນ** ຖືກຕີຄວາມໝາຍວ່າໄຟລ໌ທີ່ລິ້ງນີ້ຊີ້ໄປໄດ້ຖືກ \"ດຶງອອກ\" " +"(Yanked), ແລະ ໂດຍທົ່ວໄປແລ້ວ ບໍ່ຄວນຖືກເລືອກໂດຍເຄື່ອງມືຕິດຕັ້ງ, " +"ຍົກເວັ້ນພາຍໃຕ້ສະຖານະການສະເພາະໃດໜຶ່ງ." + +#: ../source/specifications/simple-repository-api.rst:262 +msgid "" +"The value of the ``data-yanked`` attribute, if present, is an arbitrary " +"string that represents the reason for why the file has been yanked." +msgstr "" +"ຄ່າຂອງ attribute ``data-yanked``, ຫາກມີ, ແມ່ນ string " +"ໃດໜຶ່ງທີ່ສະແດງເຖິງເຫດຜົນວ່າເປັນຫຍັງໄຟລ໌ຈຶ່ງຖືກ yanked." + +#: ../source/specifications/simple-repository-api.rst:267 +#: ../source/specifications/simple-repository-api.rst:612 +msgid "" +"The semantics of how tools should handle yanked files is described " +"in :ref:`file-yanking`." +msgstr "" +"ຄວາມໝາຍ (semantics) ຂອງການທີ່ເຄື່ອງມືຄວນຈັດການກັບໄຟລ໌ທີ່ຖືກ yanked " +"ແມ່ນຖືກອະທິບາຍໄວ້ໃນ :ref:`file-yanking`." + +#: ../source/specifications/simple-repository-api.rst:270 +msgid "" +"A repository **MAY** include a ``data-provenance`` attribute on a file link. " +"The value of this attribute **MUST** be a fully qualified URL, signaling " +"that the file's provenance can be found at that URL. This URL **MUST** " +"represent a `secure origin `_." +msgstr "" +"ຄັງເກັບ ອາດຈະ (MAY) ລວມເອົາ attribute ``data-provenance`` ໃນລິ້ງຂອງໄຟລ໌. ຄ່າຂອງ " +"attribute ນີ້ ຈະຕ້ອງ (MUST) ເປັນ URL ແບບເຕັມ, ເຊິ່ງສົ່ງສັນຍານວ່າແຫຼ່ງທີ່ມາຂອງໄຟລ໌ສາມາດພົບໄດ້ຢູ່ທີ່ " +"URL ນັ້ນ. URL ນີ້ ຈະຕ້ອງ (MUST) ສະແດງເຖິງ `ແຫຼ່ງກຳເນີດທີ່ປອດໄພ `_." + +#: ../source/specifications/simple-repository-api.rst:277 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "ແອດທຣິບິວ ``data-provenance`` ໄດ້ຖືກເພີ່ມເຂົ້າໃນ API ເວີຊັນ 1.3." + +#: ../source/specifications/simple-repository-api.rst:281 +msgid "" +"The format of the linked provenance is defined in :ref:`index-hosted-" +"attestations`." +msgstr "" +"ຮູບແບບຂອງ provenance ທີ່ລິ້ງໄວ້ນັ້ນແມ່ນຖືກກຳນົດໄວ້ໃນ :ref:`index-hosted-attestations`." + +#: ../source/specifications/simple-repository-api.rst:283 +msgid "" +"A repository **MAY** include ``pypi:project-status`` and ``pypi:project-" +"status-reason`` meta tags on the response itself." +msgstr "" +"ຄັງເກັບ ອາດຈະ (MAY) ລວມເອົາ meta tags ``pypi:project-status`` ແລະ " +"``pypi:project-status-reason`` ໃນການຕອບສະໜອງເອງ." + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "" +"The value of ``pypi:project-status`` **MUST** be a valid project status " +"marker, while the value of ``pypi:project-status-reason`` **MUST** be an " +"arbitrary string if present." +msgstr "" +"ຄ່າຂອງ ``pypi:project-status`` ຈະຕ້ອງ (MUST) ເປັນຕົວບົ່ງບອກສະຖານະໂຄງການທີ່ຖືກຕ້ອງ, " +"ໃນຂະນະທີ່ຄ່າຂອງ ``pypi:project-status-reason`` ຈະຕ້ອງ (MUST) ເປັນ string " +"ໃດໜຶ່ງຫາກມີຢູ່." + +#: ../source/specifications/simple-repository-api.rst:292 +#: ../source/specifications/simple-repository-api.rst:498 +msgid "" +"The set of valid project status markers and their semantics is described " +"in :ref:`project-status-markers`." +msgstr "" +"ຊຸດຂອງຕົວບົ່ງບອກສະຖານະໂຄງການທີ່ຖືກຕ້ອງ ແລະ " +"ຄວາມໝາຍຂອງພວກມັນແມ່ນຖືກອະທິບາຍໄວ້ໃນ :ref:`project-status-markers`." + +#: ../source/specifications/simple-repository-api.rst:297 +msgid "" +"The ``pypi:project-status`` and ``pypi:project-status-reason`` meta tags " +"were added with API version 1.4." +msgstr "" +"ເມຕາແທັກ (meta tags) ``pypi:project-status`` ແລະ ``pypi:project-status-" +"reason`` ໄດ້ຖືກເພີ່ມເຂົ້າໃນ API ເວີຊັນ 1.4." + +#: ../source/specifications/simple-repository-api.rst:303 +msgid "Serve Distribution Metadata in the Simple Repository API" +msgstr "ການໃຫ້ບໍລິການ Distribution Metadata ໃນ Simple Repository API" + +#: ../source/specifications/simple-repository-api.rst:305 +msgid "" +"In a simple repository's project page, each anchor tag pointing to a " +"distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " +"presence of the attribute indicates the distribution represented by the " +"anchor tag **MUST** contain a Core Metadata file that will not be modified " +"when the distribution is processed and/or installed." +msgstr "" +"ໃນໜ້າໂຄງການຂອງ simple repository, ແຕ່ລະ anchor tag ທີ່ຊີ້ໄປຫາການແຈກຢາຍ ອາດຈະ (MAY) " +"ມີ attribute ``data-dist-info-metadata``. ການມີຢູ່ຂອງ attribute " +"ບົ່ງບອກວ່າການແຈກຢາຍທີ່ສະແດງໂດຍ anchor tag ນັ້ນ ຈະຕ້ອງ (MUST) ປະກອບມີໄຟລ໌ Core Metadata " +"ທີ່ຈະບໍ່ຖືກແກ້ໄຂເມື່ອການແຈກຢາຍຖືກປະມວນຜົນ ແລະ/ຫຼື ຕິດຕັ້ງ." + +#: ../source/specifications/simple-repository-api.rst:311 +msgid "" +"If a ``data-dist-info-metadata`` attribute is present, the repository " +"**MUST** serve the distribution's Core Metadata file alongside the " +"distribution with a ``.metadata`` appended to the distribution's file name. " +"For example, the Core Metadata of a distribution served at ``/files/" +"distribution-1.0-py3.none.any.whl`` would be located at ``/files/" +"distribution-1.0-py3.none.any.whl.metadata``. This is similar to " +"how :ref:`the base HTML API specification ` " +"specifies the GPG signature file's location." +msgstr "" +"ຫາກມີ attribute ``data-dist-info-metadata``, ຄັງເກັບ ຈະຕ້ອງ (MUST) ໃຫ້ບໍລິການໄຟລ໌ " +"Core Metadata ຂອງການແຈກຢາຍນັ້ນຄຽງຄູ່ກັບການແຈກຢາຍ ໂດຍມີການຕໍ່ທ້າຍດ້ວຍ ``.metadata`` " +"ໃສ່ຊື່ໄຟລ໌ຂອງການແຈກຢາຍ. ຕົວຢ່າງ: Core Metadata ຂອງການແຈກຢາຍທີ່ໃຫ້ບໍລິການຢູ່ທີ່ ``/files/" +"distribution-1.0-py3.none.any.whl`` ຈະຕັ້ງຢູ່ທີ່ ``/files/distribution-1.0-" +"py3.none.any.whl.metadata``. ສິ່ງນີ້ຄ້າຍຄືກັບວິທີທີ່ :ref:`ຂໍ້ກຳນົດ base HTML API ` ລະບຸຕຳແໜ່ງໄຟລ໌ລາຍເຊັນ GPG." + +#: ../source/specifications/simple-repository-api.rst:320 +msgid "" +"The repository **SHOULD** provide the hash of the Core Metadata file as the " +"``data-dist-info-metadata`` attribute's value using the syntax " +"``=``, where ```` is the lower cased name of " +"the hash function used, and ```` is the hex encoded digest. The " +"repository **MAY** use ``true`` as the attribute's value if a hash is " +"unavailable." +msgstr "" +"ຄັງເກັບ ຄວນ (SHOULD) ສະໜອງ hash ຂອງໄຟລ໌ Core Metadata ເປັນຄ່າຂອງ attribute ``data-" +"dist-info-metadata`` ໂດຍໃຊ້ໄວຍາກອນ ``=``, ໂດຍທີ່ " +"```` ແມ່ນຊື່ຕົວພິມນ້ອຍຂອງ hash function ທີ່ໃຊ້, ແລະ ```` ແມ່ນ " +"digest ທີ່ຖືກເຂົ້າລະຫັດແບບ hex. ຄັງເກັບ ອາດຈະ (MAY) ໃຊ້ ``true`` ເປັນຄ່າຂອງ attribute " +"ຫາກບໍ່ມີ hash ໃຫ້ໃຊ້." + +#: ../source/specifications/simple-repository-api.rst:328 +msgid "Backwards Compatibility" +msgstr "ຄວາມເຂົ້າກັນໄດ້ກັບເວີຊັນກ່ອນໜ້າ" + +#: ../source/specifications/simple-repository-api.rst:330 +msgid "" +"If an anchor tag lacks the ``data-dist-info-metadata`` attribute, tools are " +"expected to revert to their current behaviour of downloading the " +"distribution to inspect the metadata." +msgstr "" +"ຫາກ anchor tag ບໍ່ມີ attribute ``data-dist-info-metadata``, ເຄື່ອງມືຕ່າງໆ " +"ຈະຖືກຄາດໝາຍໃຫ້ກັບໄປໃຊ້ພຶດຕິກຳປັດຈຸບັນຂອງພວກມັນໃນການດາວໂຫຼດການແຈກຢາຍເພື່ອທົດສອບ metadata." + +#: ../source/specifications/simple-repository-api.rst:334 +msgid "" +"Older tools not supporting the new ``data-dist-info-metadata`` attribute are " +"expected to ignore the attribute and maintain their current behaviour of " +"downloading the distribution to inspect the metadata. This is similar to how " +"prior ``data-`` attribute additions expect existing tools to operate." +msgstr "" +"ເຄື່ອງມືລຸ້ນເກົ່າທີ່ບໍ່ຮອງຮັບ attribute ``data-dist-info-metadata`` ໃໝ່ນີ້ " +"ຈະຖືກຄາດໝາຍໃຫ້ລະເວັ້ນ attribute ແລະ " +"ຄົງຮັກສາພຶດຕິກຳປັດຈຸບັນຂອງພວກມັນໃນການດາວໂຫຼດການແຈກຢາຍເພື່ອທົດສອບ metadata. " +"ສິ່ງນີ້ຄ້າຍຄືກັບວິທີທີ່ການເພີ່ມ attribute ``data-`` ກ່ອນໜ້ານີ້ຄາດໝາຍໃຫ້ເຄື່ອງມືທີ່ມີຢູ່ແລ້ວເຮັດວຽກ." + +#: ../source/specifications/simple-repository-api.rst:343 +msgid "JSON-based Simple API for Python Package Indexes" +msgstr "Simple API ທີ່ອີງໃສ່ JSON ສຳລັບດັດຊະນີແພັກເກດ Python" + +#: ../source/specifications/simple-repository-api.rst:345 +msgid "" +"To enable response parsing with only the standard library, this spec " +"specifies that all responses (besides the files themselves, and the HTML " +"responses from :ref:`the base HTML API specification `) should be serialized using `JSON `_." +msgstr "" +"ເພື່ອໃຫ້ສາມາດແປ (parsing) ການຕອບສະໜອງໄດ້ໂດຍໃຊ້ພຽງແຕ່ standard library, " +"ຂໍ້ກຳນົດນີ້ລະບຸວ່າທຸກໆການຕອບສະໜອງ (ນອກເໜືອຈາກໄຟລ໌ເອງ ແລະ ການຕອບສະໜອງແບບ HTML " +"ຈາກ :ref:`ຂໍ້ກຳນົດ base HTML API `) ຄວນຖືກເຮັດ " +"serialization ໂດຍໃຊ້ `JSON `_." + +#: ../source/specifications/simple-repository-api.rst:350 +msgid "" +"To enable zero configuration discovery and to minimize the amount of " +"additional HTTP requests, this spec extends :ref:`the base HTML API " +"specification ` such that all of the API " +"endpoints (other than the files themselves) will utilize HTTP content " +"negotiation to allow client and server to select the correct serialization " +"format to serve, i.e. either HTML or JSON." +msgstr "" +"ເພື່ອໃຫ້ສາມາດຄົ້ນຫາໄດ້ໂດຍບໍ່ຕ້ອງມີການຕັ້ງຄ່າ (zero configuration discovery) ແລະ " +"ເພື່ອຫຼຸດຜ່ອນຈຳນວນ request HTTP ເພີ່ມເຕີມ, ຂໍ້ກຳນົດນີ້ໄດ້ຂະຫຍາຍ :ref:`ຂໍ້ກຳນົດ base HTML API " +"` ເພື່ອໃຫ້ທຸກ endpoints ຂອງ API (ນອກເໜືອຈາກໄຟລ໌ເອງ) " +"ຈະໃຊ້ HTTP content negotiation ເພື່ອໃຫ້ client ແລະ server ສາມາດເລືອກຮູບແບບ " +"serialization ທີ່ຖືກຕ້ອງເພື່ອໃຫ້ບໍລິການ, ນັ້ນຄື HTML ຫຼື JSON." + +#: ../source/specifications/simple-repository-api.rst:360 +msgid "" +"Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " +"existing HTML responses to be ``1.0``. Since this spec does not introduce " +"new features into the API, rather it describes a different serialization " +"format for the existing features, this spec does not change the existing " +"``1.0`` version, and instead just describes how to serialize that into JSON." +msgstr "" +"ການກຳນົດເວີຊັນຈະປະຕິບັດຕາມຮູບແບບ :ref:`ຂໍ້ກຳນົດການກຳນົດເວີຊັນ API ` (``Major.Minor``), ເຊິ່ງໄດ້ກຳນົດໃຫ້ການຕອບສະໜອງແບບ HTML ທີ່ມີຢູ່ແລ້ວເປັນ " +"``1.0``. ເນື່ອງຈາກຂໍ້ກຳນົດນີ້ບໍ່ໄດ້ແນະນຳຟີເຈີໃໝ່ເຂົ້າໃນ API, ແຕ່ມັນອະທິບາຍເຖິງຮູບແບບ " +"serialization ທີ່ແຕກຕ່າງກັນສຳລັບຟີເຈີທີ່ມີຢູ່, ຂໍ້ກຳນົດນີ້ຈຶ່ງບໍ່ໄດ້ປ່ຽນແປງເວີຊັນ ``1.0`` ທີ່ມີຢູ່, " +"ແຕ່ພຽງແຕ່ອະທິບາຍວິທີການເຮັດ serialization ສິ່ງນັ້ນໃຫ້ເປັນ JSON." + +#: ../source/specifications/simple-repository-api.rst:367 +msgid "" +"Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " +"changes to the new format would result in no longer being able to expect " +"existing clients to meaningfully understand the format." +msgstr "" +"ເຊັ່ນດຽວກັນກັບ :ref:`ຂໍ້ກຳນົດການກຳນົດເວີຊັນ API `, " +"ໝາຍເລກເວີຊັນຫຼັກ ຈະຕ້ອງ (MUST) ເພີ່ມຂຶ້ນ ຫາກການປ່ຽນແປງໃດໆ " +"ໃນຮູບແບບໃໝ່ຈະສົ່ງຜົນໃຫ້ບໍ່ສາມາດຄາດຫວັງໃຫ້ clients ທີ່ມີຢູ່ເຂົ້າໃຈຮູບແບບນັ້ນໄດ້ຢ່າງມີຄວາມໝາຍອີກຕໍ່ໄປ." + +#: ../source/specifications/simple-repository-api.rst:373 +msgid "" +"Likewise, the minor version **MUST** be incremented if features are added or " +"removed from the format, but existing clients would be expected to continue " +"to meaningfully understand the format." +msgstr "" +"ໃນທຳນອງດຽວກັນ, ເວີຊັນຍ່ອຍ ຈະຕ້ອງ (MUST) ເພີ່ມຂຶ້ນ ຫາກມີການເພີ່ມ ຫຼື ລຶບຟີເຈີອອກຈາກຮູບແບບ, ແຕ່ " +"clients ທີ່ມີຢູ່ຍັງຄົງຄາດວ່າຈະສາມາດເຂົ້າໃຈຮູບແບບນັ້ນໄດ້ຢ່າງມີຄວາມໝາຍຕໍ່ໄປ." + +#: ../source/specifications/simple-repository-api.rst:377 +msgid "" +"Changes that would not result in existing clients being unable to " +"meaningfully understand the format and which do not represent features being " +"added or removed may occur without changing the version number." +msgstr "" +"ການປ່ຽນແປງທີ່ບໍ່ສົ່ງຜົນໃຫ້ clients ທີ່ມີຢູ່ບໍ່ສາມາດເຂົ້າໃຈຮູບແບບນັ້ນໄດ້ຢ່າງມີຄວາມໝາຍ ແລະ " +"ເຊິ່ງບໍ່ໄດ້ສະແດງເຖິງການເພີ່ມ ຫຼື ລຶບຟີເຈີ ອາດຈະເກີດຂຶ້ນໄດ້ໂດຍບໍ່ຕ້ອງປ່ຽນແປງໝາຍເລກເວີຊັນ." + +#: ../source/specifications/simple-repository-api.rst:381 +msgid "" +"This is intentionally vague, as this spec believes it is best left up to " +"future specs that make any changes to the API to investigate and decide " +"whether or not that change should increment the major or minor version." +msgstr "" +"ສິ່ງນີ້ແມ່ນມີຄວາມກຳກວມໂດຍເຈດຕະນາ, " +"ເນື່ອງຈາກຂໍ້ກຳນົດນີ້ເຊື່ອວ່າມັນຈະເປັນການດີທີ່ສຸດທີ່ຈະປ່ອຍໃຫ້ເປັນໜ້າທີ່ຂອງຂໍ້ກຳນົດໃນອະນາຄົດທີ່ຈະເຮັດການປ່ຽນແປງໃດໆ " +"ກັບ API ເພື່ອສຶກສາ ແລະ ຕັດສິນໃຈວ່າການປ່ຽນແປງນັ້ນຄວນຈະເພີ່ມໝາຍເລກເວີຊັນຫຼັກ ຫຼື ເວີຊັນຍ່ອຍ." + +#: ../source/specifications/simple-repository-api.rst:385 +msgid "" +"Future versions of the API may add things that can only be represented in a " +"subset of the available serializations of that version. All serializations " +"version numbers, within a major version, **SHOULD** be kept in sync, but the " +"specifics of how a feature serializes into each format may differ, including " +"whether or not that feature is present at all." +msgstr "" +"ເວີຊັນໃນອະນາຄົດຂອງ API ອາດຈະເພີ່ມສິ່ງຕ່າງໆ ທີ່ສາມາດສະແດງໄດ້ໃນບາງສ່ວນຂອງ serializations " +"ທີ່ມີຢູ່ໃນເວີຊັນນັ້ນເທົ່ານັ້ນ. ທຸກໝາຍເລກເວີຊັນຂອງ serializations, ພາຍໃນເວີຊັນຫຼັກດຽວກັນ, ຄວນ " +"(SHOULD) ຖືກຮັກສາໃຫ້ກົງກັນ, ແຕ່ລາຍລະອຽດຂອງວິທີທີ່ຟີເຈີໜຶ່ງຈະຖືກເຮັດ serialization " +"ເຂົ້າໃນແຕ່ລະຮູບແບບອາດຈະແຕກຕ່າງກັນ, ລວມທັງວ່າຟີເຈີນັ້ນຈະມີຢູ່ຫຼືບໍ່." + +#: ../source/specifications/simple-repository-api.rst:391 +msgid "" +"It is the intent of this spec that the API should be thought of as URL " +"endpoints that return data, whose interpretation is defined by the version " +"of that data, and then serialized into the target serialization format." +msgstr "" +"ເຈດຕະນາຂອງຂໍ້ກຳນົດນີ້ຄື API ຄວນຖືກມອງວ່າເປັນ URL endpoints ທີ່ສົ່ງຄືນຂໍ້ມູນ, " +"ເຊິ່ງການແປຄວາມໝາຍຂອງມັນຖືກກຳນົດໂດຍເວີຊັນຂອງຂໍ້ມູນນັ້ນ, ແລ້ວຈຶ່ງຖືກເຮັດ serialization " +"ເຂົ້າໃນຮູບແບບ serialization ເປົ້າໝາຍ." + +#: ../source/specifications/simple-repository-api.rst:399 +msgid "JSON Serialization" +msgstr "ການເຮັດ JSON Serialization" + +#: ../source/specifications/simple-repository-api.rst:401 +msgid "" +"The URL structure from :ref:`the base HTML API specification ` still applies, as this spec only adds an " +"additional serialization format for the already existing API." +msgstr "" +"ໂຄງສ້າງ URL ຈາກ :ref:`ຂໍ້ກຳນົດ base HTML API ` ຍັງຄົງໃຊ້ໄດ້, ເນື່ອງຈາກຂໍ້ກຳນົດນີ້ພຽງແຕ່ເພີ່ມຮູບແບບ serialization " +"ເພີ່ມເຕີມສຳລັບ API ທີ່ມີຢູ່ແລ້ວເທົ່ານັ້ນ." + +#: ../source/specifications/simple-repository-api.rst:405 +msgid "" +"The following constraints apply to all JSON serialized responses described " +"in this spec:" +msgstr "ຂໍ້ຈຳກັດດັ່ງຕໍ່ໄປນີ້ໃຊ້ກັບທຸກການຕອບສະໜອງໃນຮູບແບບ JSON ທີ່ອະທິບາຍໄວ້ໃນຂໍ້ກຳນົດນີ້:" + +#: ../source/specifications/simple-repository-api.rst:408 +msgid "" +"All JSON responses will *always* be a JSON object rather than an array or " +"other type." +msgstr "" +"ທຸກການຕອບສະໜອງແບບ JSON ຈະເປັນ JSON object *ສະເໝີ* ແທນທີ່ຈະເປັນ array ຫຼື ປະເພດອື່ນໆ." + +#: ../source/specifications/simple-repository-api.rst:411 +msgid "" +"While JSON doesn't natively support a URL type, any value that represents an " +"URL in this API may be either absolute or relative as long as they point to " +"the correct location. If relative, they are relative to the current URL as " +"if it were HTML." +msgstr "" +"ເຖິງແມ່ນວ່າ JSON ຈະບໍ່ຮອງຮັບປະເພດ URL ໂດຍກົງ, ແຕ່ຄ່າໃດໆ ທີ່ສະແດງເຖິງ URL ໃນ API ນີ້ " +"ອາດຈະເປັນແບບ absolute ຫຼື relative ກໍໄດ້ ຕາບໃດທີ່ພວກມັນຊີ້ໄປຫາຕຳແໜ່ງທີ່ຖືກຕ້ອງ. ຫາກເປັນແບບ " +"relative, ພວກມັນຈະທຽບເຄືອງກັບ URL ປັດຈຸບັນຄືກັບວ່າມັນເປັນ HTML." + +#: ../source/specifications/simple-repository-api.rst:416 +msgid "" +"Additional keys may be added to any dictionary objects in the API responses " +"and clients **MUST** ignore keys that they don't understand." +msgstr "" +"ອາດມີການເພີ່ມຄີ (keys) ເພີ່ມເຕີມເຂົ້າໃນ dictionary objects ໃດໆ ໃນການຕອບສະໜອງຂອງ API " +"ແລະ clients ຈະຕ້ອງ (MUST) ລະເວັ້ນຄີທີ່ພວກເຂົາບໍ່ເຂົ້າໃຈ." + +#: ../source/specifications/simple-repository-api.rst:419 +msgid "" +"All JSON responses will have a ``meta`` key, which contains information " +"related to the response itself, rather than the content of the response." +msgstr "" +"ທຸກການຕອບສະໜອງແບບ JSON ຈະມີຄີ ``meta``, ເຊິ່ງປະກອບມີຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບການຕອບສະໜອງນັ້ນເອງ, " +"ແທນທີ່ຈະເປັນເນື້ອໃນຂອງການຕອບສະໜອງ." + +#: ../source/specifications/simple-repository-api.rst:422 +msgid "" +"All JSON responses will have a ``meta.api-version`` key, which will be a " +"string that contains the :ref:`API versioning specification ` ``Major.Minor`` version number, with the same " +"fail/warn semantics as defined in :ref:`the API versioning specification " +"`." +msgstr "" +"ທຸກການຕອບສະໜອງແບບ JSON ຈະມີຄີ ``meta.api-version``, ເຊິ່ງຈະເປັນ string " +"ທີ່ປະກອບດ້ວຍໝາຍເລກເວີຊັນ ``Major.Minor`` ຕາມ :ref:`ຂໍ້ກຳນົດການກຳນົດເວີຊັນ API `, ໂດຍມີ semantics ຂອງການ fail/warn " +"ແບບດຽວກັນກັບທີ່ກຳນົດໄວ້ໃນ :ref:`ຂໍ້ກຳນົດການກຳນົດເວີຊັນ API `." + +#: ../source/specifications/simple-repository-api.rst:428 +msgid "" +"All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." +msgstr "" +"ທຸກຂໍ້ກຳນົດຂອງ :ref:`ຂໍ້ກຳນົດ base HTML API ` " +"ທີ່ບໍ່ແມ່ນສະເພາະສຳລັບ HTML ແມ່ນຍັງຄົງໃຊ້ໄດ້." + +#: ../source/specifications/simple-repository-api.rst:431 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" +"ຄີ (ໃນທຸກລະດັບ) ທີ່ເລີ່ມຕົ້ນດ້ວຍເຄື່ອງໝາຍຂີດກ້ອງ (underscore) " +"ແມ່ນຖືກສະຫງວນໄວ້ເປັນການສ່ວນຕົວສຳລັບການໃຊ້ງານຂອງ index server. ຈະບໍ່ມີມາດຕະຖານໃດໆ " +"ໃນອະນາຄົດກຳນົດຄວາມໝາຍໃຫ້ກັບຄີດັ່ງກ່າວ." + +#: ../source/specifications/simple-repository-api.rst:439 +msgid "" +"The root URL ``/`` for this spec (which represents the base URL) will be a " +"JSON encoded dictionary which has a two keys:" +msgstr "" +"URL ຮາກ (root) ``/`` ສຳລັບຂໍ້ກຳນົດນີ້ (ເຊິ່ງສະແດງເຖິງ base URL) ຈະເປັນດິກຊັນນາຣີ " +"(dictionary) ທີ່ເຂົ້າລະຫັດແບບ JSON ເຊິ່ງມີສອງຄີ:" + +#: ../source/specifications/simple-repository-api.rst:442 +msgid "" +"``projects``: An array where each entry is a dictionary with a single key, " +"``name``, which represents string of the project name." +msgstr "" +"``projects``: array ເຊິ່ງແຕ່ລະລາຍການແມ່ນ dictionary ທີ່ມີຄີດຽວຄື ``name``, " +"ເຊິ່ງສະແດງເຖິງ string ຂອງຊື່ໂຄງການ." + +#: ../source/specifications/simple-repository-api.rst:443 +#: ../source/specifications/simple-repository-api.rst:517 +msgid "" +"``meta``: The general response metadata as `described earlier `__." +msgstr "" +"``meta``: metadata ທົ່ວໄປຂອງການຕອບສະໜອງຕາມທີ່ `ໄດ້ອະທິບາຍໄວ້ກ່ອນໜ້ານີ້ `__." + +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:643 +msgid "As an example:" +msgstr "ຕົວຢ່າງ:" + +#: ../source/specifications/simple-repository-api.rst:462 +msgid "" +"The ``name`` field is the same as the one from :ref:`the base HTML API " +"specification `, which does not specify whether " +"it is the non-normalized display name or the normalized name. In practice " +"different implementations of these specs are choosing differently here, so " +"relying on it being either non-normalized or normalized is relying on an " +"implementation detail of the repository in question." +msgstr "" +"ຟິລ ``name`` ແມ່ນອັນດຽວກັນກັບອັນທີ່ມີໃນ :ref:`ຂໍ້ກຳນົດ base HTML API `, ເຊິ່ງບໍ່ໄດ້ລະບຸວ່າມັນເປັນຊື່ທີ່ສະແດງແບບບໍ່ເປັນມາດຕະຖານ ຫຼື ເປັນຊື່ທີ່ເປັນມາດຕະຖານ. " +"ໃນທາງປະຕິບັດ, ແຕ່ລະລະບົບຂອງຂໍ້ກຳນົດເຫຼົ່ານີ້ແມ່ນເລືອກໃຊ້ແຕກຕ່າງກັນ, " +"ດັ່ງນັ້ນການເພິ່ງພາວ່າມັນຈະເປັນແບບບໍ່ເປັນມາດຕະຖານ ຫຼື ເປັນມາດຕະຖານ " +"ແມ່ນເປັນການເພິ່ງພາລາຍລະອຽດການຈັດເຮັດ (implementation detail) ຂອງຄັງເກັບນັ້ນໆ." + +#: ../source/specifications/simple-repository-api.rst:472 +msgid "" +"While the ``projects`` key is an array, and thus is required to be in some " +"kind of an order, neither :ref:`the base HTML API specification ` nor this spec requires any specific ordering nor that " +"the ordering is consistent from one request to the next. Mentally this is " +"best thought of as a set, but both JSON and HTML lack the functionality to " +"have sets." +msgstr "" +"ເຖິງແມ່ນວ່າຄີ ``projects`` ຈະເປັນ array, ແລະ ດັ່ງນັ້ນຈຶ່ງຈຳເປັນຕ້ອງມີການລຽງລໍາດັບບາງຢ່າງ, " +"ແຕ່ທັງ :ref:`ຂໍ້ກຳນົດ base HTML API ` ແລະ " +"ຂໍ້ກຳນົດນີ້ກໍບໍ່ໄດ້ກຳນົດການລຽງລຳດັບສະເພາະໃດໆ ຫຼື ຂໍໃຫ້ການລຽງລຳດັບນັ້ນຄົງທີ່ໃນແຕ່ລະ request. " +"ໃນທາງຄວາມຄິດ ສິ່ງນີ້ແມ່ນຖືວ່າເປັນ set, ແຕ່ທັງ JSON ແລະ HTML ຍັງຂາດຟັງຊັນສຳລັບການມີ set." + +#: ../source/specifications/simple-repository-api.rst:484 +msgid "" +"The format of this URL is ``//`` where the ```` is " +"replaced by the :ref:`the base HTML API specification ` normalized name for that project, so a project named \"Silly_Walk\" " +"would have a URL like ``/silly-walk/``." +msgstr "" +"ຮູບແບບຂອງ URL ນີ້ແມ່ນ ``//`` ໂດຍທີ່ ```` " +"ຈະຖືກແທນທີ່ດ້ວຍຊື່ທີ່ເປັນມາດຕະຖານຕາມ :ref:`ຂໍ້ກຳນົດ base HTML API ` ສຳລັບໂຄງການນັ້ນ, ດັ່ງນັ້ນໂຄງການທີ່ຊື່ວ່າ \"Silly_Walk\" ຈະມີ URL ເຊັ່ນ ``/silly-walk/" +"``." + +#: ../source/specifications/simple-repository-api.rst:489 +msgid "" +"This URL must respond with a JSON encoded dictionary that has five keys:" +msgstr "URL ນີ້ຕ້ອງຕອບສະໜອງດ້ວຍ JSON encoded dictionary ທີ່ມີຫ້າຄີ:" + +#: ../source/specifications/simple-repository-api.rst:491 +msgid "``name``: The normalized name of the project." +msgstr "``name``: ຊື່ໂຄງການທີ່ປັບໃຫ້ເປັນມາດຕະຖານແລ້ວ." + +#: ../source/specifications/simple-repository-api.rst:492 +msgid "``project-status``: An optional dictionary, containing the following:" +msgstr "``project-status``: ດິກຊັນນາຣີທາງເລືອກ, ເຊິ່ງປະກອບມີດັ່ງຕໍ່ໄປນີ້:" + +#: ../source/specifications/simple-repository-api.rst:494 +msgid "``status``: If present, this **MUST** be a valid project status marker." +msgstr "``status``: ຖ້າມີ, ນີ້ **ຕ້ອງ** ເປັນເຄື່ອງໝາຍສະຖານະໂຄງການທີ່ຖືກຕ້ອງ." + +#: ../source/specifications/simple-repository-api.rst:503 +msgid "The ``status`` key was added with API version 1.4." +msgstr "ຄີ ``status`` ຖືກເພີ່ມເຂົ້າມາໃນ API ເວີຊັນ 1.4." + +#: ../source/specifications/simple-repository-api.rst:505 +msgid "" +"``reason``: If present, this **MUST** be an arbitrary string description of " +"the project status." +msgstr "``reason``: ຖ້າມີ, ນີ້ **ຕ້ອງ** ເປັນຂໍ້ຄວາມອະທິບາຍສະຖານະຂອງໂຄງການ." + +#: ../source/specifications/simple-repository-api.rst:510 +msgid "The ``reason`` key was added with API version 1.4." +msgstr "ຄີ ``reason`` ຖືກເພີ່ມເຂົ້າມາໃນ API ເວີຊັນ 1.4." + +#: ../source/specifications/simple-repository-api.rst:514 +msgid "The ``project-status`` key was added with API version 1.4." +msgstr "ຄີ ``project-status`` ຖືກເພີ່ມເຂົ້າມາໃນ API ເວີຊັນ 1.4." + +#: ../source/specifications/simple-repository-api.rst:516 +msgid "" +"``files``: A list of dictionaries, each one representing an individual file." +msgstr "``files``: ລາຍການຂອງດິກຊັນນາຣີ, ເຊິ່ງແຕ່ລະອັນສະແດງເຖິງແຕ່ລະໄຟລ໌." + +#: ../source/specifications/simple-repository-api.rst:518 +msgid "" +"``versions``: A list of version strings specifying all of the project " +"versions uploaded for this project. The value of ``versions`` is logically a " +"set, and as such may not contain duplicates, and the order of the versions " +"is not significant." +msgstr "" +"``versions``: ລາຍການຂອງສະຕຣິງເວີຊັນທີ່ລະບຸທຸກເວີຊັນຂອງໂຄງການທີ່ໄດ້ອັບໂຫຼດແລ້ວ. ຄ່າຂອງ " +"``versions`` ຕາມຫຼັກການແລ້ວແມ່ນເປັນເຊັດ (set), ດັ່ງນັ້ນຈຶ່ງບໍ່ສາມາດມີຄ່າຊ້ຳກັນໄດ້ ແລະ " +"ລຳດັບຂອງເວີຊັນແມ່ນບໍ່ມີຄວາມສຳຄັນ." + +#: ../source/specifications/simple-repository-api.rst:525 +msgid "" +"All of the files listed in the ``files`` key MUST be associated with one of " +"the versions in the ``versions`` key. The ``versions`` key MAY contain " +"versions with no associated files (to represent versions with no files " +"uploaded, if the server has such a concept)." +msgstr "" +"ທຸກໆໄຟລ໌ທີ່ລະບຸໃນຄີ ``files`` ຕ້ອງກ່ຽວຂ້ອງກັບເວີຊັນໃດໜຶ່ງໃນຄີ ``versions``. ຄີ ``versions`` " +"ອາດຈະປະກອບມີເວີຊັນທີ່ບໍ່ມີໄຟລ໌ກ່ຽວຂ້ອງ (ເພື່ອສະແດງເຖິງເວີຊັນທີ່ບໍ່ມີການອັບໂຫຼດໄຟລ໌, " +"ຖ້າເຊີບເວີມີແນວຄວາມຄິດດັ່ງກ່າວ)." + +#: ../source/specifications/simple-repository-api.rst:532 +msgid "" +"Because servers may hold \"legacy\" data from before the adoption " +"of :ref:`the version specifiers specification (VSS) `, " +"version strings currently cannot be required to be valid VSS versions, and " +"therefore cannot be assumed to be orderable using the VSS rules. However, " +"servers **SHOULD** use normalized VSS versions where possible." +msgstr "" +"ເນື່ອງຈາກເຊີບເວີອາດຈະເກັບຂໍ້ມູນ \"ແບບເກົ່າ\" " +"ກ່ອນທີ່ຈະມີການນຳໃຊ້ :ref:`ຂໍ້ກຳນົດສະເພາະຂອງຕົວລະບຸເວີຊັນ (VSS) `, " +"ໃນປັດຈຸບັນສະຕຣິງເວີຊັນຈຶ່ງຍັງບໍ່ສາມາດບັງຄັບໃຫ້ເປັນເວີຊັນ VSS ທີ່ຖືກຕ້ອງໄດ້, " +"ດັ່ງນັ້ນຈຶ່ງບໍ່ສາມາດສົມມຸດໄດ້ວ່າຈະຈັດລຳດັບໂດຍໃຊ້ກົດເກນ VSS ໄດ້. ຢ່າງໃດກໍຕາມ, ເຊີບເວີ **ຄວນ** " +"ໃຊ້ເວີຊັນ VSS ທີ່ປັບເປັນມາດຕະຖານແລ້ວໃນກໍລະນີທີ່ເປັນໄປໄດ້." + +#: ../source/specifications/simple-repository-api.rst:540 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "ຄີ ``versions`` ຖືກເພີ່ມເຂົ້າມາໃນ API ເວີຊັນ 1.1." + +#: ../source/specifications/simple-repository-api.rst:542 +msgid "Each individual file dictionary has the following keys:" +msgstr "ແຕ່ລະດິກຊັນນາຣີຂອງໄຟລ໌ມີຄີດັ່ງຕໍ່ໄປນີ້:" + +#: ../source/specifications/simple-repository-api.rst:544 +msgid "``filename``: The filename that is being represented." +msgstr "``filename``: ຊື່ໄຟລ໌ທີ່ຖືກສະແດງ." + +#: ../source/specifications/simple-repository-api.rst:545 +msgid "``url``: The URL that the file can be fetched from." +msgstr "``url``: URL ທີ່ສາມາດດາວໂຫຼດໄຟລ໌ໄດ້." + +#: ../source/specifications/simple-repository-api.rst:546 +msgid "" +"``hashes``: A dictionary mapping a hash name to a hex encoded digest of the " +"file. Multiple hashes can be included, and it is up to the client to decide " +"what to do with multiple hashes (it may validate all of them or a subset of " +"them, or nothing at all). These hash names **SHOULD** always be normalized " +"to be lowercase." +msgstr "" +"``hashes``: ດິກຊັນນາຣີທີ່ຈັບຄູ່ຊື່ແຮຊ (hash name) ກັບຄ່າໄດເຈສ (digest) " +"ທີ່ເຂົ້າລະຫັດຖານສິບຫົກຂອງໄຟລ໌. ສາມາດໃສ່ໄດ້ຫຼາຍແຮຊ, ແລະ ຂຶ້ນກັບໄຄລເອັນ (client) " +"ທີ່ຈະຕັດສິນໃຈວ່າຈະເຮັດແນວໃດກັບແຮຊເຫຼົ່ານັ້ນ (ອາດຈະກວດສອບທັງໝົດ ຫຼື ບາງສ່ວນ, ຫຼື ບໍ່ກວດເລີຍກໍໄດ້). " +"ຊື່ແຮຊເຫຼົ່ານີ້ **ຄວນ** ປັບໃຫ້ເປັນຕົວພິມນ້ອຍສະເໝີ." + +#: ../source/specifications/simple-repository-api.rst:551 +msgid "" +"The ``hashes`` dictionary **MUST** be present, even if no hashes are " +"available for the file, however it is **HIGHLY** recommended that at least " +"one secure, guaranteed-to-be-available hash is always included." +msgstr "" +"ດິກຊັນນາຣີ ``hashes`` **ຕ້ອງ** ມີຢູ່, ເຖິງແມ່ນວ່າຈະບໍ່ມີແຮຊສຳລັບໄຟລ໌ນັ້ນກໍຕາມ, ຢ່າງໃດກໍຕາມ " +"ຂໍແນະນຳ **ຢ່າງຍິ່ງ** ວ່າຄວນຈະມີຢ່າງໜ້ອຍໜຶ່ງແຮຊທີ່ມີຄວາມປອດໄພ ແລະ ຮັບປະກັນວ່ານຳໃຊ້ໄດ້." + +#: ../source/specifications/simple-repository-api.rst:555 +msgid "" +"By default, any hash algorithm available via :py:mod:`hashlib` (specifically " +"any that can be passed to :py:func:`hashlib.new()` and do not require " +"additional parameters) can be used as a key for the hashes dictionary. At " +"least one secure algorithm from :py:data:`hashlib.algorithms_guaranteed` " +"**SHOULD** always be included. At the time of this spec, ``sha256`` " +"specifically is recommended." +msgstr "" +"ໂດຍມາດຕະຖານ, ອັລກໍຣິທຶມແຮຊໃດໆທີ່ມີຢູ່ໃນ :py:mod:`hashlib` " +"(ໂດຍສະເພາະອັນທີ່ສາມາດສົ່ງໄປຫາ :py:func:`hashlib.new()` ໂດຍບໍ່ຕ້ອງມີພາຣາມີເຕີເພີ່ມເຕີມ) " +"ແມ່ນສາມາດໃຊ້ເປັນຄີສຳລັບດິກຊັນນາຣີແຮຊໄດ້. " +"ຢ່າງໜ້ອຍໜຶ່ງອັລກໍຣິທຶມທີ່ປອດໄພຈາກ :py:data:`hashlib.algorithms_guaranteed` **ຄວນ** " +"ຖືກລວມເຂົ້າສະເໝີ. ໃນຂະນະທີ່ຂຽນຂໍ້ກຳນົດນີ້, ຂໍແນະນຳເປັນພິເສດໃຫ້ໃຊ້ ``sha256``." + +#: ../source/specifications/simple-repository-api.rst:560 +msgid "" +"``requires-python``: An **optional** key that exposes the :ref:`core-" +"metadata-requires-python` metadata field. Where this is present, installer " +"tools **SHOULD** ignore the download when installing to a Python version " +"that doesn't satisfy the requirement." +msgstr "" +"``requires-python``: ຄີ **ທາງເລືອກ** ທີ່ສະແດງຟິວເມຕາເດຕາ :ref:`core-metadata-" +"requires-python`. ໃນບ່ອນທີ່ມີຄີນີ້, ເຄື່ອງມືການຕິດຕັ້ງ **ຄວນ (SHOULD)** ເມີນເສີຍຕໍ່ການດາວໂຫຼດ " +"ເມື່ອຕິດຕັ້ງໃສ່ເວີຊັນ Python ທີ່ບໍ່ຕອບສະໜອງຕາມຂໍ້ກໍານົດ." + +#: ../source/specifications/simple-repository-api.rst:566 +msgid "" +"Unlike ``data-requires-python`` in :ref:`the base HTML API specification " +"`, the ``requires-python`` key does not require " +"any special escaping other than anything JSON does naturally." +msgstr "" +"ແຕກຕ່າງຈາກ ``data-requires-python`` ໃນ :ref:`ຂໍ້ກຳນົດພື້ນຖານຂອງ HTML API `, ຄີ ``requires-python`` ບໍ່ຈຳເປັນຕ້ອງມີການຈັດການຕົວອັກສອນພິເສດ " +"(escaping) ໃດໆ ນອກຈາກສິ່ງທີ່ JSON ເຮັດຕາມປົກກະຕິ." + +#: ../source/specifications/simple-repository-api.rst:569 +msgid "" +"``core-metadata``: An **optional** key that indicates that metadata for this " +"file is available, via the same location as specified in :ref:`the API " +"metadata file specification ` " +"(``{file_url}.metadata``). Where this is present, it **MUST** be either a " +"boolean to indicate if the file has an associated metadata file, or a " +"dictionary mapping hash names to a hex encoded digest of the metadata's hash." +msgstr "" +"``core-metadata``: ຄີ **ທາງເລືອກ** ທີ່ບົ່ງບອກວ່າ ມີເມຕາເດຕາສຳລັບໄຟລ໌ນີ້, " +"ໂດຍຜ່ານຕຳແໜ່ງດຽວກັນກັບທີ່ລະບຸໄວ້ໃນ :ref:`ຂໍ້ກຳນົດໄຟລ໌ເມຕາເດຕາຂອງ API ` (``{file_url}.metadata``). ຖ້າມີຄີນີ້, ມັນ **ຕ້ອງ** ເປັນຄ່າບູລີນ " +"(boolean) ເພື່ອບອກວ່າໄຟລ໌ນັ້ນມີໄຟລ໌ເມຕາເດຕາກ່ຽວຂ້ອງຫຼືບໍ່, ຫຼື " +"ເປັນດິກຊັນນາຣີທີ່ຈັບຄູ່ຊື່ແຮຊກັບຄ່າໄດເຈສຂອງແຮຊເມຕາເດຕາ." + +#: ../source/specifications/simple-repository-api.rst:577 +msgid "" +"When this is a dictionary of hashes instead of a boolean, then all the same " +"requirements and recommendations as the ``hashes`` key hold true for this " +"key as well." +msgstr "" +"ເມື່ອຄີນີ້ເປັນດິກຊັນນາຣີຂອງແຮຊແທນທີ່ຈະເປັນຄ່າບູລີນ, ຂໍ້ກຳນົດ ແລະ ຄຳແນະນຳທັງໝົດຄືກັນກັບຄີ ``hashes`` " +"ກໍໃຫ້ໃຊ້ກັບຄີນີ້ເຊັ່ນກັນ." + +#: ../source/specifications/simple-repository-api.rst:581 +msgid "" +"If this key is missing then the metadata file may or may not exist. If the " +"key value is truthy, then the metadata file is present, and if it is falsey " +"then it is not." +msgstr "" +"ຖ້າບໍ່ມີຄີນີ້, ໄຟລ໌ເມຕາເດຕາອາດຈະມີ ຫຼື ບໍ່ມີກໍໄດ້. ຖ້າຄ່າຂອງຄີເປັນຈິງ (truthy), " +"ສະແດງວ່າໄຟລ໌ເມຕາເດຕາມີຢູ່, ແລະ ຖ້າເປັນເທັດ (falsey) ສະແດງວ່າບໍ່ມີ." + +#: ../source/specifications/simple-repository-api.rst:585 +msgid "" +"It is recommended that servers make the hashes of the metadata file " +"available if possible." +msgstr "ຂໍແນະນຳໃຫ້ເຊີບເວີສະໜອງຄ່າແຮຊຂອງໄຟລ໌ເມຕາເດຕາຫາກເປັນໄປໄດ້." + +#: ../source/specifications/simple-repository-api.rst:588 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" +"``dist-info-metadata``: ຊື່ເອີ້ນແທນ (alias) ຂອງ ``core-metadata`` ເຊິ່ງເປັນ " +"**ທາງເລືອກ** ແລະ ຖືກຍົກເລີກການນຳໃຊ້ແລ້ວ." + +#: ../source/specifications/simple-repository-api.rst:590 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" +"Index clients **ອາດຈະ** ໃຊ້ຄີນີ້ຫາກມີຢູ່, ເພື່ອເປັນການຮອງຮັບແບບເກົ່າ (fallback) ສຳລັບ " +"``core-metadata``." + +#: ../source/specifications/simple-repository-api.rst:595 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" +"``dist-info-metadata`` ຖືກເຮັດໃຫ້ເປັນມາດຕະຖານໃນ :pep:`658` ແລະ ຖືກປ່ຽນຊື່ເປັນ ``core-" +"metadata`` ໃນ :pep:`714`." + +#: ../source/specifications/simple-repository-api.rst:598 +msgid "" +"``gpg-sig``: An **optional** key that acts a boolean to indicate if the file " +"has an associated GPG signature or not. The URL for the signature file " +"follows what is specified in :ref:`the base HTML API specification ` (``{file_url}.asc``). If this key does not exist, then " +"the signature may or may not exist." +msgstr "" +"``gpg-sig``: ຄີ **ທາງເລືອກ** ທີ່ເຮັດໜ້າທີ່ເປັນຄ່າບູລີນເພື່ອບອກວ່າໄຟລ໌ມີລາຍເຊັນ GPG ກ່ຽວຂ້ອງຫຼືບໍ່. " +"URL ສຳລັບໄຟລ໌ລາຍເຊັນແມ່ນເປັນໄປຕາມທີ່ລະບຸໃນ :ref:`ຂໍ້ກຳນົດພື້ນຖານຂອງ HTML API ` (``{file_url}.asc``). ຖ້າບໍ່ມີຄີນີ້, ລາຍເຊັນອາດຈະມີ ຫຼື ບໍ່ມີກໍໄດ້." + +#: ../source/specifications/simple-repository-api.rst:604 +msgid "" +"``yanked``: An **optional** key which may be either a boolean to indicate if " +"the file has been yanked, or a non empty, but otherwise arbitrary, string to " +"indicate that a file has been yanked with a specific reason. If the " +"``yanked`` key is present and is a truthy value, then it **SHOULD** be " +"interpreted as indicating that the file pointed to by the ``url`` field has " +"been \"Yanked\"." +msgstr "" +"``yanked``: ຄີ **ທາງເລືອກ** ເຊິ່ງອາດຈະເປັນຄ່າບູລີນເພື່ອບອກວ່າໄຟລ໌ຖືກຖອນອອກ (yanked) ຫຼື ບໍ່, " +"ຫຼື ເປັນສະຕຣິງຂໍ້ຄວາມເພື່ອບອກວ່າໄຟລ໌ຖືກຖອນອອກຍ້ອນເຫດຜົນສະເພາະໃດໜຶ່ງ. ຖ້າມີຄີ ``yanked`` ແລະ " +"ມີຄ່າເປັນຈິງ, ມັນ **ຄວນ** ຖືກຕີຄວາມໝາຍວ່າໄຟລ໌ທີ່ລະບຸໃນຟີວ ``url`` ໄດ້ຖືກ \"ຖອນອອກ\"." + +#: ../source/specifications/simple-repository-api.rst:615 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" +"``size``: ຄີທີ່ **ຈຳເປັນ**. ມັນ **ຕ້ອງ** ປະກອບມີຕົວເລກຈຳນວນຖ້ວນ " +"ເຊິ່ງແມ່ນຂະໜາດຂອງໄຟລ໌ເປັນໄບຕ໌ (bytes)." + +#: ../source/specifications/simple-repository-api.rst:619 +msgid "The ``size`` key was added with API version 1.1." +msgstr "ຄີ ``size`` ຖືກເພີ່ມເຂົ້າມາໃນ API ເວີຊັນ 1.1." + +#: ../source/specifications/simple-repository-api.rst:621 +msgid "" +"``upload-time``: An **optional** key that, if present, **MUST** contain a " +"valid ISO 8601 date/time string in the format ``yyyy-mm-" +"ddThh:mm:ss.ffffffZ`` which represents the time the file was uploaded to the " +"index." +msgstr "" +"``upload-time``: ຄີ **ທາງເລືອກ** ທີ່ຖ້າມີ, **ຕ້ອງ** ປະກອບມີສະຕຣິງ ວັນທີ/ເວລາ " +"ຕາມມາດຕະຖານ ISO 8601 ໃນຮູບແບບ ``yyyy-mm-ddThh:mm:ss.ffffffZ`` " +"ເຊິ່ງສະແດງເຖິງເວລາທີ່ໄຟລ໌ຖືກອັບໂຫຼດເຂົ້າໄປໃນອິນເດັກ." + +#: ../source/specifications/simple-repository-api.rst:625 +msgid "" +"As indicated by the ``Z`` suffix, the upload time **MUST** use the UTC " +"timezone. The fractional seconds part of the timestamp (the ``.ffffff`` " +"part) is optional, and if present may contain up to 6 digits of precision. " +"If a server does not record upload time information for a file, it **MAY** " +"omit the ``upload-time`` key." +msgstr "" +"ຕາມທີ່ລະບຸດ້ວຍຕົວອັກສອນ ``Z`` ຕໍ່ທ້າຍ, ເວລາອັບໂຫຼດ **ຕ້ອງ** ໃຊ້ເຂດເວລາ UTC. ສ່ວນຂອງເສດວິນາທີ " +"(ສ່ວນ ``.ffffff``) ແມ່ນເປັນທາງເລືອກ, ແລະ ຖ້າມີ ອາດມີຄວາມລະອຽດໄດ້ສູງສຸດ 6 ຫຼັກ. " +"ຖ້າເຊີບເວີບໍ່ໄດ້ບັນທຶກຂໍ້ມູນເວລາອັບໂຫຼດສຳລັບໄຟລ໌, ມັນ **ອາດຈະ** ລະເວັ້ນຄີ ``upload-time`` ນີ້." + +#: ../source/specifications/simple-repository-api.rst:632 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "ຄີ ``upload-time`` ຖືກເພີ່ມເຂົ້າມາໃນ API ເວີຊັນ 1.1." + +#: ../source/specifications/simple-repository-api.rst:634 +msgid "" +"``provenance``: An **optional** key which, if present **MUST** be either a " +"JSON string or ``null``. If not ``null``, it **MUST** be a URL to the file's " +"associated provenance, with the same rules as ``data-provenance`` in " +"the :ref:`base HTML API specification `." +msgstr "" +"``provenance``: ຄີ **ທາງເລືອກ** ເຊິ່ງຖ້າມີ **ຕ້ອງ** ເປັນສະຕຣິງ JSON ຫຼື ``null``. " +"ຖ້າບໍ່ແມ່ນ ``null``, ມັນ **ຕ້ອງ** ເປັນ URL ໄປຫາຂໍ້ມູນແຫຼ່ງທີ່ມາກ່ຽວຂ້ອງຂອງໄຟລ໌, " +"ໂດຍໃຊ້ກົດເກນດຽວກັນກັບ ``data-provenance`` ໃນ :ref:`ຂໍ້ກຳນົດພື້ນຖານຂອງ HTML API " +"`." + +#: ../source/specifications/simple-repository-api.rst:641 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "ຟີວ ``provenance`` ຖືກເພີ່ມເຂົ້າມາໃນ API ເວີຊັນ 1.3." + +#: ../source/specifications/simple-repository-api.rst:679 +msgid "" +"While the ``files`` key is an array, and thus is required to be in some kind " +"of an order, neither :ref:`the base HTML API specification ` nor this spec requires any specific ordering nor that " +"the ordering is consistent from one request to the next. Mentally this is " +"best thought of as a set, but both JSON and HTML lack the functionality to " +"have sets." +msgstr "" +"ເຖິງແມ່ນວ່າຄີ ``files`` ຈະເປັນອາເຣ (array), ເຊິ່ງຈຳເປັນຕ້ອງມີລຳດັບບາງຢ່າງ, " +"ແຕ່ທັງ :ref:`ຂໍ້ກຳນົດພື້ນຖານຂອງ HTML API ` ແລະ " +"ຂໍ້ກຳນົດນີ້ບໍ່ໄດ້ບັງຄັບການຈັດລຳດັບສະເພາະໃດໆ ຫຼື ບັງຄັບໃຫ້ລຳດັບຕ້ອງຄືກັນໃນທຸກໆຄັ້ງທີ່ຮ້ອງຂໍ. " +"ໃນທາງຄວາມຄິດແລ້ວ ຄວນເບິ່ງມັນເປັນເຊັດ (set), ແຕ່ທັງ JSON ແລະ HTML " +"ຍັງບໍ່ມີຄວາມສາມາດໃນການຮອງຮັບເຊັດ." + +#: ../source/specifications/simple-repository-api.rst:688 +msgid "Content-Types" +msgstr "ປະເພດເນື້ອຫາ (Content-Types)" + +#: ../source/specifications/simple-repository-api.rst:690 +msgid "" +"This spec proposes that all responses from the Simple API will have a " +"standard content type that describes what the response is (a Simple API " +"response), what version of the API it represents, and what serialization " +"format has been used." +msgstr "" +"ຂໍ້ກຳນົດນີ້ສະເໜີວ່າ ທຸກໆການຕອບກັບຈາກ Simple API ຈະມີປະເພດເນື້ອຫາທີ່ເປັນມາດຕະຖານ " +"ເຊິ່ງອະທິບາຍວ່າການຕອບກັບນັ້ນແມ່ນຫຍັງ (ເປັນການຕອບກັບຂອງ Simple API), ແມ່ນ API ເວີຊັນໃດ, ແລະ " +"ໃຊ້ຮູບແບບການແປງຂໍ້ມູນ (serialization) ໃດ." + +#: ../source/specifications/simple-repository-api.rst:694 +msgid "The structure of this content type will be:" +msgstr "ໂຄງສ້າງຂອງປະເພດເນື້ອຫານີ້ຈະແມ່ນ:" + +#: ../source/specifications/simple-repository-api.rst:700 +msgid "" +"Since only major versions should be disruptive to clients attempting to " +"understand one of these API responses, only the major version will be " +"included in the content type, and will be prefixed with a ``v`` to clarify " +"that it is a version number." +msgstr "" +"ເນື່ອງຈາກມີພຽງແຕ່ເວີຊັນຫຼັກ (major versions) ເທົ່ານັ້ນທີ່ຈະມີຜົນກະທົບຕໍ່ໄຄລເອັນ, " +"ດັ່ງນັ້ນຈຶ່ງມີພຽງແຕ່ເວີຊັນຫຼັກທີ່ຈະຖືກລວມເຂົ້າໃນປະເພດເນື້ອຫາ, ແລະ ຈະມີຕົວອັກສອນ ``v`` " +"ນຳໜ້າເພື່ອໃຫ້ຊັດເຈນວ່າເປັນເລກເວີຊັນ." + +#: ../source/specifications/simple-repository-api.rst:705 +msgid "Which means that for the existing 1.0 API, the content types would be:" +msgstr "ເຊິ່ງໝາຍຄວາມວ່າສຳລັບ API 1.0 ທີ່ມີຢູ່, ປະເພດເນື້ອຫາຈະແມ່ນ:" + +#: ../source/specifications/simple-repository-api.rst:707 +msgid "**JSON:** ``application/vnd.pypi.simple.v1+json``" +msgstr "**JSON:** ``application/vnd.pypi.simple.v1+json``" + +#: ../source/specifications/simple-repository-api.rst:708 +msgid "**HTML:** ``application/vnd.pypi.simple.v1+html``" +msgstr "**HTML:** ``application/vnd.pypi.simple.v1+html``" + +#: ../source/specifications/simple-repository-api.rst:710 +msgid "" +"In addition to the above, a special \"meta\" version is supported named " +"``latest``, whose purpose is to allow clients to request the absolute latest " +"version, without having to know ahead of time what that version is. It is " +"recommended however, that clients be explicit about what versions they " +"support." +msgstr "" +"ນອກຈາກຂ້າງເທິງແລ້ວ, ຍັງມີການຮອງຮັບເວີຊັນ \"meta\" ພິເສດທີ່ຊື່ວ່າ ``latest``, " +"ເຊິ່ງມີຈຸດປະສົງເພື່ອໃຫ້ໄຄລເອັນສາມາດຮ້ອງຂໍເວີຊັນຫຼ້າສຸດໄດ້ ໂດຍບໍ່ຈຳເປັນຕ້ອງຮູ້ລ່ວງໜ້າວ່າເວີຊັນນັ້ນແມ່ນຫຍັງ. " +"ຢ່າງໃດກໍຕາມ, ຂໍແນະນຳໃຫ້ໄຄລເອັນລະບຸເວີຊັນທີ່ພວກເຂົາຮອງຮັບໃຫ້ຊັດເຈນ." + +#: ../source/specifications/simple-repository-api.rst:715 +msgid "" +"To support existing clients which expect the existing :ref:`the base HTML " +"API specification ` API responses to use the " +"``text/html`` content type, this spec further defines ``text/html`` as an " +"alias for the ``application/vnd.pypi.simple.v1+html`` content type." +msgstr "" +"ເພື່ອຮອງຮັບໄຄລເອັນເດີມທີ່ຕ້ອງການການຕອບກັບ API ຕາມ :ref:`ຂໍ້ກຳນົດພື້ນຖານຂອງ HTML API " +"` ທີ່ໃຊ້ປະເພດເນື້ອຫາ ``text/html``, ຂໍ້ກຳນົດນີ້ຈຶ່ງກຳນົດໃຫ້ " +"``text/html`` ເປັນຊື່ເອີ້ນແທນສຳລັບປະເພດເນື້ອຫາ ``application/" +"vnd.pypi.simple.v1+html``." + +#: ../source/specifications/simple-repository-api.rst:722 +msgid "Version + Format Selection" +msgstr "ການເລືອກເວີຊັນ + ຮູບແບບ" + +#: ../source/specifications/simple-repository-api.rst:724 +msgid "" +"Now that there is multiple possible serializations, we need a mechanism to " +"allow clients to indicate what serialization formats they're able to " +"understand. In addition, it would be beneficial if any possible new major " +"version to the API can be added without disrupting existing clients " +"expecting the previous API version." +msgstr "" +"ເນື່ອງຈາກຕອນນີ້ມີຮູບແບບການແປງຂໍ້ມູນຫຼາຍຮູບແບບ, " +"ພວກເຮົາຈຶ່ງຕ້ອງການກົນໄກເພື່ອໃຫ້ໄຄລເອັນສາມາດບົ່ງບອກໄດ້ວ່າຮູບແບບໃດທີ່ພວກເຂົາເຂົ້າໃຈ. ນອກຈາກນັ້ນ, " +"ມັນຈະເປັນປະໂຫຍດຫຼາຍຖ້າຫາກສາມາດເພີ່ມເວີຊັນຫຼັກໃໝ່ຂອງ API ໄດ້ ໂດຍບໍ່ມີຜົນກະທົບຕໍ່ໄຄລເອັນເດີມທີ່ຍັງໃຊ້ " +"API ເວີຊັນກ່ອນໜ້ານີ້." + +#: ../source/specifications/simple-repository-api.rst:729 +msgid "" +"To enable this, this spec standardizes on the use of HTTP's `Server-Driven " +"Content Negotiation `_." +msgstr "" +"ເພື່ອເຮັດສິ່ງນີ້ໄດ້, ຂໍ້ກຳນົດນີ້ຈຶ່ງໃຊ້ `ການຕໍ່ຮອງເນື້ອຫາໂດຍເຊີບເວີ (Server-Driven Content " +"Negotiation) `_ ຂອງ HTTP ເປັນມາດຕະຖານ." + +#: ../source/specifications/simple-repository-api.rst:732 +msgid "" +"While this spec won't fully describe the entirety of server-driven content " +"negotiation, the flow is roughly:" +msgstr "" +"ເຖິງແມ່ນວ່າຂໍ້ກຳນົດນີ້ຈະບໍ່ໄດ້ອະທິບາຍລາຍລະອຽດທັງໝົດຂອງການຕໍ່ຮອງເນື້ອຫາໂດຍເຊີບເວີ, " +"ແຕ່ຂັ້ນຕອນໂດຍປະມານແມ່ນ:" + +#: ../source/specifications/simple-repository-api.rst:735 +msgid "" +"The client makes an HTTP request containing an ``Accept`` header listing all " +"of the version+format content types that they are able to understand." +msgstr "" +"ໄຄລເອັນສົ່ງຄຳຮ້ອງ HTTP ທີ່ມີເຮດເດີ (header) ``Accept`` ເຊິ່ງລະບຸລາຍການປະເພດເນື້ອຫາ " +"ເວີຊັນ+ຮູບແບບ ທັງໝົດທີ່ພວກເຂົາເຂົ້າໃຈ." + +#: ../source/specifications/simple-repository-api.rst:737 +msgid "" +"The server inspects that header, selects one of the listed content types, " +"then returns a response using that content type (treating the absence of an " +"``Accept`` header as ``Accept: */*``)." +msgstr "" +"ເຊີບເວີກວດສອບເຮດເດີນັ້ນ, ເລືອກປະເພດເນື້ອຫາອັນໃດອັນໜຶ່ງຈາກລາຍການ, " +"ແລ້ວສົ່ງການຕອບກັບໂດຍໃຊ້ປະເພດເນື້ອຫານັ້ນ (ຖ້າບໍ່ມີເຮດເດີ ``Accept`` ຈະຖືວ່າເປັນ ``Accept: */" +"*``)." + +#: ../source/specifications/simple-repository-api.rst:740 +msgid "" +"If the server does not support any of the content types in the ``Accept`` " +"header then they are able to choose between 3 different options for how to " +"respond:" +msgstr "" +"ຖ້າເຊີບເວີບໍ່ຮອງຮັບປະເພດເນື້ອຫາໃດໆໃນເຮດເດີ ``Accept``, ພວກເຂົາສາມາດເລືອກໄດ້ລະຫວ່າງ 3 " +"ທາງເລືອກໃນການຕອບກັບ:" + +#: ../source/specifications/simple-repository-api.rst:744 +msgid "" +"Select a default content type other than what the client has requested and " +"return a response with that." +msgstr "ເລືອກປະເພດເນື້ອຫາມາດຕະຖານອື່ນນອກຈາກທີ່ໄຄລເອັນຮ້ອງຂໍ ແລະ ສົ່ງການຕອບກັບດ້ວຍຄ່ານັ້ນ." + +#: ../source/specifications/simple-repository-api.rst:746 +msgid "" +"Return a HTTP ``406 Not Acceptable`` response to indicate that none of the " +"requested content types were available, and the server was unable or " +"unwilling to select a default content type to respond with." +msgstr "" +"ສົ່ງການຕອບກັບ HTTP ``406 Not Acceptable`` ເພື່ອບອກວ່າບໍ່ມີປະເພດເນື້ອຫາທີ່ຮ້ອງຂໍ, ແລະ " +"ເຊີບເວີບໍ່ສາມາດ ຫຼື ບໍ່ຕ້ອງການເລືອກປະເພດເນື້ອຫາມາດຕະຖານເພື່ອຕອບກັບ." + +#: ../source/specifications/simple-repository-api.rst:749 +msgid "" +"Return a HTTP ``300 Multiple Choices`` response that contains a list of all " +"of the possible responses that could have been chosen." +msgstr "" +"ສົ່ງການຕອບກັບ HTTP ``300 Multiple Choices`` " +"ເຊິ່ງປະກອບມີລາຍການຂອງການຕອບກັບທັງໝົດທີ່ອາດຈະເລືອກໄດ້." + +#: ../source/specifications/simple-repository-api.rst:751 +msgid "" +"The client interprets the response, handling the different types of " +"responses that the server may have responded with." +msgstr "ໄຄລເອັນຕີຄວາມໝາຍການຕອບກັບ, ໂດຍຈັດການກັບຮູບແບບຕ່າງໆທີ່ເຊີບເວີອາດຈະສົ່ງມານັ້ນ." + +#: ../source/specifications/simple-repository-api.rst:754 +msgid "" +"This spec does not specify which choices the server makes in regards to " +"handling a content type that it isn't able to return, and clients **SHOULD** " +"be prepared to handle all of the possible responses in whatever way makes " +"the most sense for that client." +msgstr "" +"ຂໍ້ກຳນົດນີ້ບໍ່ໄດ້ລະບຸວ່າເຊີບເວີຕ້ອງເລືອກທາງໃດໃນການຈັດການກັບປະເພດເນື້ອຫາທີ່ບໍ່ສາມາດສົ່ງໃຫ້ໄດ້, ແລະ " +"ໄຄລເອັນ **ຄວນ** " +"ກຽມພ້ອມທີ່ຈະຈັດການກັບການຕອບກັບທຸກຮູບແບບທີ່ເປັນໄປໄດ້ໃນວິທີທີ່ເໝາະສົມທີ່ສຸດສຳລັບໄຄລເອັນນັ້ນ." + +#: ../source/specifications/simple-repository-api.rst:759 +msgid "" +"However, as there is no standard format for how a ``300 Multiple Choices`` " +"response can be interpreted, this spec highly discourages servers from " +"utilizing that option, as clients will have no way to understand and select " +"a different content-type to request. In addition, it's unlikely that the " +"client *could* understand a different content type anyways, so at best this " +"response would likely just be treated the same as a ``406 Not Acceptable`` " +"error." +msgstr "" +"ຢ່າງໃດກໍຕາມ, ເນື່ອງຈາກບໍ່ມີຮູບແບບມາດຕະຖານໃນການຕີຄວາມໝາຍການຕອບກັບ ``300 Multiple " +"Choices``, ຂໍ້ກຳນົດນີ້ຈຶ່ງບໍ່ແນະນຳໃຫ້ເຊີບເວີໃຊ້ທາງເລືອກນີ້, ເພາະໄຄລເອັນຈະບໍ່ມີທາງເຂົ້າໃຈ ແລະ " +"ເລືອກປະເພດເນື້ອຫາອື່ນເພື່ອຮ້ອງຂໍໄດ້. ນອກຈາກນັ້ນ, " +"ມັນກໍເປັນໄປໄດ້ຍາກທີ່ໄຄລເອັນຈະເຂົ້າໃຈປະເພດເນື້ອຫາອື່ນຢູ່ແລ້ວ, ດັ່ງນັ້ນ " +"ຢ່າງດີທີ່ສຸດການຕອບກັບນີ້ກໍຈະຖືກປະຕິບັດຄືກັນກັບຂໍ້ຜິດພາດ ``406 Not Acceptable``." + +#: ../source/specifications/simple-repository-api.rst:766 +msgid "" +"This spec **does** require that if the meta version ``latest`` is being " +"used, the server **MUST** respond with the content type for the actual " +"version that is contained in the response (i.e. an ``Accept: application/" +"vnd.pypi.simple.latest+json`` request that returns a ``v1.x`` response " +"should have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." +msgstr "" +"ຂໍ້ກຳນົດນີ້ **ບັງຄັບ** ວ່າຖ້າໃຊ້ເມຕາເວີຊັນ ``latest``, ເຊີບເວີ **ຕ້ອງ** " +"ຕອບກັບດ້ວຍປະເພດເນື້ອຫາສຳລັບເວີຊັນຕົວຈິງທີ່ຢູ່ໃນການຕອບກັບນັ້ນ (ຕົວຢ່າງ: ຄຳຮ້ອງ ``Accept: " +"application/vnd.pypi.simple.latest+json`` ທີ່ສົ່ງເວີຊັນ ``v1.x`` ກັບມາ ຄວນມີ " +"``Content-Type`` ເປັນ ``application/vnd.pypi.simple.v1+json``)." + +#: ../source/specifications/simple-repository-api.rst:773 +msgid "" +"The ``Accept`` header is a comma separated list of content types that the " +"client understands and is able to process. It supports three different " +"formats for each content type that is being requested:" +msgstr "" +"ເຮດເດີ ``Accept`` ແມ່ນລາຍການປະເພດເນື້ອຫາທີ່ແຍກດ້ວຍຈຸດ ເຊິ່ງໄຄລເອັນເຂົ້າໃຈ ແລະ " +"ສາມາດປະມວນຜົນໄດ້. ມັນຮອງຮັບ 3 ຮູບແບບທີ່ແຕກຕ່າງກັນສຳລັບແຕ່ລະປະເພດເນື້ອຫາທີ່ຮ້ອງຂໍ:" + +#: ../source/specifications/simple-repository-api.rst:777 +msgid "``$type/$subtype``" +msgstr "``$type/$subtype``" + +#: ../source/specifications/simple-repository-api.rst:778 +msgid "``$type/*``" +msgstr "``$type/*``" + +#: ../source/specifications/simple-repository-api.rst:779 +msgid "``*/*``" +msgstr "``*/*``" + +#: ../source/specifications/simple-repository-api.rst:781 +msgid "" +"For the use of selecting a version+format, the most useful of these is " +"``$type/$subtype``, as that is the only way to actually specify the version " +"and format you want." +msgstr "" +"ສຳລັບການເລືອກ ເວີຊັນ+ຮູບແບບ, ຮູບແບບທີ່ມີປະໂຫຍດທີ່ສຸດແມ່ນ ``$type/$subtype``, " +"ເພາະວ່າເປັນວິທີດຽວທີ່ຈະລະບຸເວີຊັນ ແລະ ຮູບແບບທີ່ຕ້ອງການໄດ້ແທ້ຈິງ." + +#: ../source/specifications/simple-repository-api.rst:785 +msgid "" +"The order of the content types listed in the ``Accept`` header does not have " +"any specific meaning, and the server **SHOULD** consider all of them to be " +"equally valid to respond with. If a client wishes to specify that they " +"prefer a specific content type over another, they may use the ``Accept`` " +"header's `quality value `_ syntax." +msgstr "" +"ລຳດັບຂອງປະເພດເນື້ອຫາໃນເຮດເດີ ``Accept`` ບໍ່ມີຄວາມໝາຍສະເພາະໃດໆ, ແລະ ເຊີບເວີ **ຄວນ** " +"ຖືວ່າທຸກອັນມີຄວາມຖືກຕ້ອງເທົ່າກັນໃນການຕອບກັບ. " +"ຖ້າໄຄລເອັນຕ້ອງການລະບຸວ່າພວກເຂົາມັກປະເພດເນື້ອຫາໃດໜຶ່ງຫຼາຍກວ່າ, ພວກເຂົາສາມາດໃຊ້ໄວຍາກອນ " +"`quality value `_ ຂອງເຮດເດີ ``Accept``." + +#: ../source/specifications/simple-repository-api.rst:792 +msgid "" +"This allows a client to specify a priority for a specific entry in their " +"``Accept`` header, by appending a ``;q=`` followed by a value between ``0`` " +"and ``1`` inclusive, with up to 3 decimal digits. When interpreting this " +"value, an entry with a higher quality has priority over an entry with a " +"lower quality, and any entry without a quality present will default to a " +"quality of ``1``." +msgstr "" +"ສິ່ງນີ້ຊ່ວຍໃຫ້ໄຄລເອັນລະບຸລຳດັບຄວາມສຳຄັນສຳລັບແຕ່ລະລາຍການໃນເຮດເດີ ``Accept``, ໂດຍການເຕີມ " +"``;q=`` ຕາມດ້ວຍຄ່າລະຫວ່າງ ``0`` ຫາ ``1``, ເຊິ່ງມີທົດສະນິຍົມໄດ້ສູງສຸດ 3 ຫຼັກ. " +"ໃນການຕີຄວາມໝາຍຄ່ານີ້, ລາຍການທີ່ມີຄ່າຄຸນນະພາບສູງກວ່າຈະມີບຸລິມະສິດຫຼາຍກວ່າ, ແລະ " +"ລາຍການໃດທີ່ບໍ່ມີຄ່າຄຸນນະພາບຈະຖືກກຳນົດໃຫ້ເປັນ ``1`` ໂດຍອັດຕະໂນມັດ." + +#: ../source/specifications/simple-repository-api.rst:798 +msgid "" +"However, clients should keep in mind that a server is free to select **any** " +"of the content types they've asked for, regardless of their requested " +"priority, and it may even return a content type that they did **not** ask " +"for." +msgstr "" +"ຢ່າງໃດກໍຕາມ, ໄຄລເອັນຄວນຈື່ໄວ້ວ່າ ເຊີບເວີມີສິດທີ່ຈະເລືອກປະເພດເນື້ອຫາ **ໃດກໍໄດ້** ທີ່ໄດ້ຮ້ອງຂໍໄປ, " +"ໂດຍບໍ່ຄຳນຶງເຖິງບຸລິມະສິດທີ່ລະບຸ, ແລະ ມັນອາດຈະສົ່ງປະເພດເນື້ອຫາທີ່ **ບໍ່ໄດ້** ຮ້ອງຂໍຄືນມາກໍໄດ້." + +#: ../source/specifications/simple-repository-api.rst:802 +msgid "" +"To aid clients in determining the content type of the response that they " +"have received from an API request, this spec requires that servers always " +"include a ``Content-Type`` header indicating the content type of the " +"response. This is technically a backwards incompatible change, however in " +"practice `pip has been enforcing this requirement `_ so the risks for actual breakages is low." +msgstr "" +"ເພື່ອຊ່ວຍໄຄລເອັນໃນການກຳນົດປະເພດເນື້ອຫາຂອງການຕອບກັບຈາກ API, " +"ຂໍ້ກຳນົດນີ້ບັງຄັບໃຫ້ເຊີບເວີຕ້ອງໃສ່ເຮດເດີ ``Content-Type`` " +"ເພື່ອບອກປະເພດເນື້ອຫາຂອງການຕອບກັບສະເໝີ. ໃນທາງເຕັກນິກແລ້ວ " +"ນີ້ແມ່ນການປ່ຽນແປງທີ່ບໍ່ຮອງຮັບກັບເວີຊັນເກົ່າ, ແຕ່ໃນທາງປະຕິບັດ `pip ໄດ້ບັງຄັບໃຊ້ຂໍ້ກຳນົດນີ້ແລ້ວ `_ ດັ່ງນັ້ນຄວາມສ່ຽງທີ່ຈະເກີດບັນຫາຈຶ່ງມີໜ້ອຍ." + +#: ../source/specifications/simple-repository-api.rst:809 +msgid "An example of how a client can operate would look like:" +msgstr "ຕົວຢ່າງວິທີທີ່ໄຄລເອັນສາມາດເຮັດວຽກໄດ້ແມ່ນ:" + +#: ../source/specifications/simple-repository-api.rst:860 +msgid "" +"If a client wishes to only support HTML or only support JSON, then they " +"would just remove the content types that they do not want from the " +"``Accept`` header, and turn receiving them into an error." +msgstr "" +"ຖ້າໄຄລເອັນຕ້ອງການຮອງຮັບພຽງແຕ່ HTML ຫຼື ພຽງແຕ່ JSON, " +"ພວກເຂົາກໍພຽງແຕ່ເອົາປະເພດເນື້ອຫາທີ່ບໍ່ຕ້ອງການອອກຈາກເຮດເດີ ``Accept``, ແລະ " +"ກຳນົດໃຫ້ການໄດ້ຮັບປະເພດເນື້ອຫາເຫຼົ່ານັ້ນເປັນຂໍ້ຜິດພາດ." + +#: ../source/specifications/simple-repository-api.rst:866 +msgid "Alternative Negotiation Mechanisms" +msgstr "ກົນໄກການຕໍ່ຮອງທາງເລືອກອື່ນ" + +#: ../source/specifications/simple-repository-api.rst:868 +msgid "" +"While using HTTP's Content negotiation is considered the standard way for a " +"client and server to coordinate to ensure that the client is getting an HTTP " +"response that it is able to understand, there are situations where that " +"mechanism may not be sufficient. For those cases this spec has alternative " +"negotiation mechanisms that may *optionally* be used instead." +msgstr "" +"ເຖິງແມ່ນວ່າການໃຊ້ Content negotiation ຂອງ HTTP " +"ຈະຖືວ່າເປັນວິທີມາດຕະຖານໃນການປະສານງານລະຫວ່າງໄຄລເອັນ ແລະ ເຊີບເວີ, " +"ແຕ່ກໍມີບາງສະຖານະການທີ່ກົນໄກດັ່ງກ່າວອາດຈະບໍ່ພຽງພໍ. ສຳລັບກໍລະນີເຫຼົ່ານັ້ນ, " +"ຂໍ້ກຳນົດນີ້ມີກົນໄກການຕໍ່ຮອງທາງເລືອກອື່ນທີ່ອາດຈະໃຊ້ເປັນ **ທາງເລືອກ** ແທນໄດ້." + +#: ../source/specifications/simple-repository-api.rst:876 +msgid "URL Parameter" +msgstr "ພາຣາມີເຕີ URL" + +#: ../source/specifications/simple-repository-api.rst:878 +msgid "" +"Servers that implement the Simple API may choose to support a URL parameter " +"named ``format`` to allow the clients to request a specific version of the " +"URL." +msgstr "" +"ເຊີບເວີທີ່ນຳໃຊ້ Simple API ອາດຈະເລືອກຮອງຮັບພາຣາມີເຕີ URL ທີ່ຊື່ວ່າ ``format`` " +"ເພື່ອໃຫ້ໄຄລເອັນສາມາດຮ້ອງຂໍເວີຊັນສະເພາະຂອງ URL ໄດ້." + +#: ../source/specifications/simple-repository-api.rst:881 +msgid "" +"The value of the ``format`` parameter should be **one** of the valid content " +"types. Passing multiple content types, wild cards, quality values, etc... is " +"**not** supported." +msgstr "" +"ຄ່າຂອງພາຣາມີເຕີ ``format`` ຄວນເປັນ **ອັນໃດອັນໜຶ່ງ** ຂອງປະເພດເນື້ອຫາທີ່ຖືກຕ້ອງ. " +"ການສົ່ງຫຼາຍປະເພດເນື້ອຫາ, ຕົວອັກສອນ wild card, ຄ່າຄຸນນະພາບ ແລະ ອື່ນໆ ແມ່ນ **ບໍ່ຮອງຮັບ**." + +#: ../source/specifications/simple-repository-api.rst:885 +msgid "" +"Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " +"for interacting with the API. This negotiation mechanism is intended to " +"allow for easier human based exploration of the API within a browser, or to " +"allow documentation or notes to link to a specific version+format." +msgstr "" +"ການຮອງຮັບພາຣາມີເຕີນີ້ແມ່ນເປັນທາງເລືອກ, ແລະ ໄຄລເອັນ **ບໍ່ຄວນ** ອີງໃສ່ມັນໃນການໂຕ້ຕອບກັບ API. " +"ກົນໄກການຕໍ່ຮອງນີ້ມີຈຸດປະສົງເພື່ອໃຫ້ຄົນສາມາດສຳຫຼວດ API ໃນບຣາວເຊີໄດ້ງ່າຍຂຶ້ນ, ຫຼື ເພື່ອໃຫ້ເອກະສານ ຫຼື " +"ໝາຍເຫດສາມາດເຊື່ອມຕໍ່ໄປຫາ ເວີຊັນ+ຮູບແບບ ສະເພາະໃດໜຶ່ງໄດ້." + +#: ../source/specifications/simple-repository-api.rst:890 +msgid "" +"Servers that do not support this parameter may choose to return an error " +"when it is present, or they may simple ignore its presence." +msgstr "" +"ເຊີບເວີທີ່ບໍ່ຮອງຮັບພາຣາມີເຕີນີ້ອາດຈະເລືອກສົ່ງຂໍ້ຜິດພາດກັບຄືນມາເມື່ອມີການໃຊ້ຄ່ານີ້, ຫຼື ອາດຈະລະເວັ້ນມັນໄປເລີຍ." + +#: ../source/specifications/simple-repository-api.rst:893 +msgid "" +"When a server does implement this parameter, it **SHOULD** take precedence " +"over any values in the client's ``Accept`` header, and if the server does " +"not support the requested format, it may choose to fall back to the " +"``Accept`` header, or choose any of the error conditions that standard " +"server-driven content negotiation typically has (e.g. ``406 Not Available``, " +"``303 Multiple Choices``, or selecting a default type to return)." +msgstr "" +"ເມື່ອເຊີບເວີນຳໃຊ້ພາຣາມີເຕີນີ້, ມັນ **ຄວນ** ມີບຸລິມະສິດສູງກວ່າຄ່າໃນເຮດເດີ ``Accept`` ຂອງໄຄລເອັນ, " +"ແລະ ຖ້າເຊີບເວີບໍ່ຮອງຮັບຮູບແບບທີ່ຮ້ອງຂໍ, ມັນອາດຈະເລືອກກັບໄປໃຊ້ເຮດເດີ ``Accept``, ຫຼື " +"ເລືອກສະຖານະຂໍ້ຜິດພາດໃດໜຶ່ງ (ເຊັ່ນ: ``406 Not Available``, ``303 Multiple Choices``, " +"ຫຼື ເລືອກປະເພດມາດຕະຖານເພື່ອຕອບກັບ)." + +#: ../source/specifications/simple-repository-api.rst:902 +msgid "Endpoint Configuration" +msgstr "ການກຳນົດຄ່າຈຸດເຊື່ອມຕໍ່ (Endpoint Configuration)" + +#: ../source/specifications/simple-repository-api.rst:904 +msgid "" +"This option technically is not a special option at all, it is just a natural " +"consequence of using content negotiation and allowing servers to select " +"which of the available content types is their default." +msgstr "" +"ທາງເລືອກນີ້ໃນທາງເຕັກນິກແລ້ວບໍ່ແມ່ນທາງເລືອກພິເສດຫຍັງເລີຍ, " +"ມັນເປັນພຽງຜົນທີ່ຕາມມາຂອງການໃຊ້ການຕໍ່ຮອງເນື້ອຫາ ແລະ " +"ການອະນຸຍາດໃຫ້ເຊີບເວີເລືອກວ່າປະເພດເນື້ອຫາໃດທີ່ມີຢູ່ເປັນຄ່າມາດຕະຖານ." + +#: ../source/specifications/simple-repository-api.rst:908 +msgid "" +"If a server is unwilling or unable to implement the server-driven content " +"negotiation, and would instead rather require users to explicitly configure " +"their client to select the version they want, then that is a supported " +"configuration." +msgstr "" +"ຖ້າເຊີບເວີບໍ່ຕ້ອງການ ຫຼື ບໍ່ສາມາດນຳໃຊ້ການຕໍ່ຮອງເນື້ອຫາໂດຍເຊີບເວີໄດ້, ແລະ " +"ຕ້ອງການໃຫ້ຜູ້ໃຊ້ກຳນົດຄ່າໄຄລເອັນເອງເພື່ອເລືອກເວີຊັນທີ່ຕ້ອງການ, " +"ນັ້ນກໍແມ່ນຮູບແບບການກຳນົດຄ່າທີ່ຮອງຮັບເຊັ່ນກັນ." + +#: ../source/specifications/simple-repository-api.rst:912 +msgid "" +"To enable this, a server should make multiple endpoints (for instance, ``/" +"simple/v1+html/`` and/or ``/simple/v1+json/``) for each version+format that " +"they wish to support. Under that endpoint, they can host a copy of their " +"repository that only supports one (or a subset) of the content-types. When a " +"client makes a request using the ``Accept`` header, the server can ignore it " +"and return the content type that corresponds to that endpoint." +msgstr "" +"ເພື່ອເຮັດແບບນີ້, ເຊີບເວີຄວນສ້າງຫຼາຍຈຸດເຊື່ອມຕໍ່ (ຕົວຢ່າງ: ``/simple/v1+html/`` ແລະ/ຫຼື ``/" +"simple/v1+json/``) ສຳລັບແຕ່ລະ ເວີຊັນ+ຮູບແບບ ທີ່ພວກເຂົາຕ້ອງການຮອງຮັບ. ພາຍໃຕ້ຈຸດເຊື່ອມຕໍ່ນັ້ນ, " +"ພວກເຂົາສາມາດເກັບສຳເນົາຂອງຄັງເກັບຂໍ້ມູນ (repository) ທີ່ຮອງຮັບພຽງປະເພດເນື້ອຫາດຽວ (ຫຼື " +"ບາງສ່ວນ). ເມື່ອໄຄລເອັນສົ່ງຄຳຮ້ອງໂດຍໃຊ້ເຮດເດີ ``Accept``, ເຊີບເວີສາມາດລະເວັ້ນມັນ ແລະ " +"ສົ່ງປະເພດເນື້ອຫາທີ່ກົງກັບຈຸດເຊື່ອມຕໍ່ນັ້ນຄືນມາ." + +#: ../source/specifications/simple-repository-api.rst:919 +msgid "" +"For clients that wish to require specific configuration, they can keep track " +"of which version+format a specific repository URL was configured for, and " +"when making a request to that server, emit an ``Accept`` header that *only* " +"includes the correct content type." +msgstr "" +"ສຳລັບໄຄລເອັນທີ່ຕ້ອງການການກຳນົດຄ່າສະເພາະ, ພວກເຂົາສາມາດບັນທຶກໄວ້ວ່າ URL ຂອງ repository " +"ໃດໜຶ່ງຖືກກຳນົດຄ່າໄວ້ສຳລັບ ເວີຊັນ+ຮູບແບບ ໃດ, ແລະ ເມື່ອສົ່ງຄຳຮ້ອງໄປຫາເຊີບເວີນັ້ນ, ກໍໃຫ້ສົ່ງເຮດເດີ " +"``Accept`` ທີ່ປະກອບມີ *ສະເພາະ* ປະເພດເນື້ອຫາທີ່ຖືກຕ້ອງເທົ່ານັ້ນ." + +#: ../source/specifications/simple-repository-api.rst:927 +msgid "" +"This section is non-normative, and represents what the spec authors believe " +"to be the best default implementation decisions for something implementing " +"this spec, but it does **not** represent any sort of requirement to match " +"these decisions." +msgstr "" +"ພາກສ່ວນນີ້ບໍ່ແມ່ນຂໍ້ບັງຄັບ, ແລະ " +"ເປັນສິ່ງທີ່ຜູ້ຂຽນຂໍ້ກຳນົດເຊື່ອວ່າເປັນການຕັດສິນໃຈໃນການນຳໃຊ້ທີ່ດີທີ່ສຸດສຳລັບຜູ້ທີ່ຈະນຳຂໍ້ກຳນົດນີ້ໄປໃຊ້, ແຕ່ມັນ " +"**ບໍ່ໄດ້** ໝາຍເຖິງຂໍ້ບັງຄັບວ່າຕ້ອງເຮັດຕາມການຕັດສິນໃຈເຫຼົ່ານີ້." + +#: ../source/specifications/simple-repository-api.rst:931 +msgid "" +"These decisions have been chosen to maximize the number of requests that can " +"be moved onto the newest version of an API, while maintaining the greatest " +"amount of compatibility. In addition, they've also tried to make using the " +"API provide guardrails that attempt to push clients into making the best " +"choices it can." +msgstr "" +"ການຕັດສິນໃຈເຫຼົ່ານີ້ຖືກເລືອກເພື່ອເພີ່ມຈຳນວນຄຳຮ້ອງທີ່ຈະຍ້າຍໄປຫາ API ເວີຊັນໃໝ່ໃຫ້ໄດ້ຫຼາຍທີ່ສຸດ, " +"ໃນຂະນະທີ່ຍັງຮັກສາຄວາມສາມາດໃນການເຮັດວຽກຮ່ວມກັນໄດ້ຫຼາຍທີ່ສຸດ. ນອກຈາກນັ້ນ, " +"ພວກເຂົາຍັງພະຍາຍາມເຮັດໃຫ້ການໃຊ້ API ມີການປ້ອງກັນເພື່ອພະຍາຍາມຊຸກດັນໃຫ້ໄຄລເອັນເລືອກສິ່ງທີ່ດີທີ່ສຸດ." + +#: ../source/specifications/simple-repository-api.rst:936 +msgid "It is recommended that servers:" +msgstr "ຂໍແນະນຳໃຫ້ເຊີບເວີ:" + +#: ../source/specifications/simple-repository-api.rst:938 +msgid "" +"Support all 3 content types described in this spec, using server-driven " +"content negotiation, for as long as they reasonably can, or at least as long " +"as they're receiving non trivial traffic that uses the HTML responses." +msgstr "" +"ຮອງຮັບທັງ 3 ປະເພດເນື້ອຫາທີ່ອະທິບາຍໄວ້ໃນຂໍ້ກຳນົດນີ້, ໂດຍໃຊ້ການຕໍ່ຮອງເນື້ອຫາໂດຍເຊີບເວີ, " +"ໃຫ້ດົນທີ່ສຸດເທົ່າທີ່ຈະເຮັດໄດ້, ຫຼື ຢ່າງໜ້ອຍກໍຕາບໃດທີ່ຍັງມີປະລິມານການນຳໃຊ້ທີ່ບໍ່ໜ້ອຍຈາກການຕອບກັບແບບ HTML." + +#: ../source/specifications/simple-repository-api.rst:942 +msgid "" +"When encountering an ``Accept`` header that does not contain any content " +"types that it knows how to work with, the server should not ever return a " +"``300 Multiple Choice`` response, and instead return a ``406 Not " +"Acceptable`` response." +msgstr "" +"ເມື່ອພົບກັບ ``Accept`` header ທີ່ບໍ່ມີປະເພດເນື້ອຫາ (content types) ໃດໆທີ່ມັນຮູ້ຈັກວິທີເຮັດວຽກນຳ, " +"ເຊີບເວີບໍ່ຄວນຕອບກັບດ້ວຍ ``300 Multiple Choice``, ແຕ່ໃຫ້ຕອບກັບດ້ວຍ ``406 Not " +"Acceptable`` ແທນ." + +#: ../source/specifications/simple-repository-api.rst:947 +msgid "" +"However, if choosing to use the endpoint configuration, you should prefer to " +"return a ``200 OK`` response in the expected content type for that endpoint." +msgstr "" +"ຢ່າງໃດກໍຕາມ, ຖ້າເລືອກໃຊ້ການກຳນົດຄ່າຈຸດເຊື່ອມຕໍ່ (endpoint configuration), " +"ທ່ານຄວນເລືອກສົ່ງການຕອບກັບ ``200 OK`` ໃນປະເພດເນື້ອຫາທີ່ຄາດໄວ້ສຳລັບຈຸດເຊື່ອມຕໍ່ນັ້ນ." + +#: ../source/specifications/simple-repository-api.rst:950 +msgid "" +"When selecting an acceptable version, the server should choose the highest " +"version that the client supports, with the most expressive/featureful " +"serialization format, taking into account the specificity of the client " +"requests as well as any quality priority values they have expressed, and it " +"should only use the ``text/html`` content type as a last resort." +msgstr "" +"ເມື່ອເລືອກເວີຊັນທີ່ຍອມຮັບໄດ້, ເຊີບເວີຄວນເລືອກເວີຊັນສູງສຸດທີ່ໄຄລເອັນຮອງຮັບ, " +"ພ້ອມກັບຮູບແບບການແປງຂໍ້ມູນທີ່ມີລັກສະນະຄົບຖ້ວນທີ່ສຸດ, " +"ໂດຍຄຳນຶງເຖິງຄວາມສະເພາະເຈາະຈົງຂອງຄຳຮ້ອງຈາກໄຄລເອັນ ລວມທັງຄ່າບຸລິມະສິດທີ່ພວກເຂົາລະບຸ, ແລະ " +"ຄວນໃຊ້ປະເພດເນື້ອຫາ ``text/html`` ເປັນທາງເລືອກສຸດທ້າຍເທົ່ານັ້ນ." + +#: ../source/specifications/simple-repository-api.rst:956 +msgid "It is recommended that clients:" +msgstr "ຂໍແນະນຳໃຫ້ໄຄລເອັນ:" + +#: ../source/specifications/simple-repository-api.rst:958 +msgid "" +"Support all 3 content types described in this spec, using server-driven " +"content negotiation, for as long as they reasonably can." +msgstr "" +"ຮອງຮັບທັງ 3 ປະເພດເນື້ອຫາທີ່ອະທິບາຍໄວ້ໃນຂໍ້ກຳນົດນີ້, ໂດຍໃຊ້ການຕໍ່ຮອງເນື້ອຫາໂດຍເຊີບເວີ, " +"ໃຫ້ດົນທີ່ສຸດເທົ່າທີ່ຈະເຮັດໄດ້." + +#: ../source/specifications/simple-repository-api.rst:961 +msgid "" +"When constructing an ``Accept`` header, include all of the content types " +"that you support." +msgstr "ເມື່ອສ້າງເຮດເດີ ``Accept``, ໃຫ້ລວມເອົາທຸກປະເພດເນື້ອຫາທີ່ທ່ານຮອງຮັບ." + +#: ../source/specifications/simple-repository-api.rst:964 +msgid "" +"You should generally *not* include a quality priority value for your content " +"types, unless you have implementation specific reasons that you want the " +"server to take into account (for example, if you're using the standard " +"library HTML parser and you're worried that there may be some kinds of HTML " +"responses that you're unable to parse in some edge cases)." +msgstr "" +"ໂດຍທົ່ວໄປແລ້ວ ທ່ານ *ບໍ່ຄວນ* ໃສ່ຄ່າບຸລິມະສິດ (quality priority) ສຳລັບປະເພດເນື້ອຫາຂອງທ່ານ, " +"ເວັ້ນເສຍແຕ່ທ່ານມີເຫດຜົນສະເພາະໃນການນຳໃຊ້ທີ່ຕ້ອງການໃຫ້ເຊີບເວີຄຳນຶງເຖິງ (ຕົວຢ່າງ: ຖ້າທ່ານໃຊ້ຕົວແຍກ " +"(parser) HTML ມາດຕະຖານ ແລະ ກັງວົນວ່າມີບາງຮູບແບບຂອງ HTML ທີ່ທ່ານບໍ່ສາມາດແຍກໄດ້ໃນບາງກໍລະນີ)." + +#: ../source/specifications/simple-repository-api.rst:970 +msgid "" +"The one exception to this recommendation is that it is recommended that you " +"*should* include a ``;q=0.01`` value on the legacy ``text/html`` content " +"type, unless it is the only content type that you are requesting." +msgstr "" +"ຂໍ້ຍົກເວັ້ນອັນໜຶ່ງສຳລັບຄຳແນະນຳນີ້ຄື ຂໍແນະນຳວ່າທ່ານ *ຄວນ* ໃສ່ຄ່າ ``;q=0.01`` " +"ໃຫ້ກັບປະເພດເນື້ອຫາແບບເກົ່າ ``text/html``, ເວັ້ນເສຍແຕ່ວ່າມັນເປັນປະເພດເນື້ອຫາດຽວທີ່ທ່ານຮ້ອງຂໍ." + +#: ../source/specifications/simple-repository-api.rst:974 +msgid "" +"Explicitly select what versions they are looking for, rather than using the " +"``latest`` meta version during normal operation." +msgstr "" +"ລະບຸເວີຊັນທີ່ທ່ານຕ້ອງການໃຫ້ຊັດເຈນ, ແທນທີ່ຈະໃຊ້ເມຕາເວີຊັນ ``latest`` ໃນລະຫວ່າງການເຮັດວຽກປົກກະຕິ." + +#: ../source/specifications/simple-repository-api.rst:977 +msgid "" +"Check the ``Content-Type`` of the response and ensure it matches something " +"that you were expecting." +msgstr "ກວດສອບ ``Content-Type`` ຂອງການຕອບກັບ ແລະ ໃຫ້ແນ່ໃຈວ່າມັນກົງກັບສິ່ງທີ່ທ່ານຄາດໄວ້." + +#: ../source/specifications/simple-repository-api.rst:985 +msgid "September 2015: initial form of the HTML format, in :pep:`503`" +msgstr "ກັນຍາ 2015: ຮູບແບບເລີ່ມຕົ້ນຂອງ HTML, ໃນ :pep:`503`" + +#: ../source/specifications/simple-repository-api.rst:986 +msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" +msgstr "ກໍລະກົດ 2016: ເມຕາເດຕາ Requires-Python, ໃນການອັບເດດ :pep:`503`" + +#: ../source/specifications/simple-repository-api.rst:987 +msgid "May 2019: \"yank\" support, in :pep:`592`" +msgstr "ພຶດສະພາ 2019: ການຮອງຮັບ \"yank\", ໃນ :pep:`592`" + +#: ../source/specifications/simple-repository-api.rst:988 +msgid "" +"July 2020: API versioning convention and metadata, and declaring the HTML " +"format as API v1, in :pep:`629`" +msgstr "" +"ກໍລະກົດ 2020: ຂໍ້ກຳນົດການຕັ້ງເວີຊັນ API ແລະ ເມຕາເດຕາ, ແລະ ການປະກາດໃຫ້ຮູບແບບ HTML ເປັນ " +"API v1, ໃນ :pep:`629`" + +#: ../source/specifications/simple-repository-api.rst:990 +msgid "" +"May 2021: providing package metadata independently from a package, " +"in :pep:`658`" +msgstr "" +"ພຶດສະພາ 2021: ການສະໜອງເມຕາເດຕາຂອງແພັກເກດແຍກຕ່າງຫາກຈາກຕົວແພັກເກດ, ໃນ :pep:`658`" + +#: ../source/specifications/simple-repository-api.rst:992 +msgid "" +"May 2022: initial form of the JSON format, with a mechanism for clients to " +"choose between them, and declaring both formats as API v1, in :pep:`691`" +msgstr "" +"ພຶດສະພາ 2022: ຮູບແບບເລີ່ມຕົ້ນຂອງ JSON, ພ້ອມກັບກົນໄກໃຫ້ໄຄລເອັນເລືອກລະຫວ່າງພວກມັນ, ແລະ " +"ການປະກາດໃຫ້ທັງສອງຮູບແບບເປັນ API v1, ໃນ :pep:`691`" + +#: ../source/specifications/simple-repository-api.rst:994 +msgid "" +"October 2022: project versions and file size and upload-time in the JSON " +"format, in :pep:`700`" +msgstr "" +"ຕຸລາ 2022: ເວີຊັນໂຄງການ, ຂະໜາດໄຟລ໌ ແລະ ເວລາອັບໂຫຼດໃນຮູບແບບ JSON, ໃນ :pep:`700`" + +#: ../source/specifications/simple-repository-api.rst:996 +msgid "" +"June 2023: renaming the field which provides package metadata independently " +"from a package, in :pep:`714`" +msgstr "" +"ມິຖຸນາ 2023: ການປ່ຽນຊື່ຟີວທີ່ສະໜອງເມຕາເດຕາຂອງແພັກເກດແຍກຕ່າງຫາກຈາກແພັກເກດ, ໃນ :pep:`714`" + +#: ../source/specifications/simple-repository-api.rst:998 +msgid "" +"November 2024: provenance metadata in the HTML and JSON formats, " +"in :pep:`740`" +msgstr "" +"ພະຈິກ 2024: ເມຕາເດຕາແຫຼ່ງທີ່ມາ (provenance) ໃນຮູບແບບ HTML ແລະ JSON, ໃນ :pep:`740`" + +#: ../source/specifications/simple-repository-api.rst:999 +msgid "" +"July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" +msgstr "ກໍລະກົດ 2025: ເຄື່ອງໝາຍສະຖານະໂຄງການໃນຮູບແບບ HTML ແລະ JSON, ໃນ :pep:`792`" + +#: ../source/specifications/simple-repository-api.rst:1000 +msgid "" +"July 2025: layout changes (dedicated page for file yanking, introduce " +"concepts before API details)" +msgstr "" +"ກໍລະກົດ 2025: ການປ່ຽນແປງການຈັດວາງ (ໜ້າສະເພາະສຳລັບການຖອນໄຟລ໌, " +"ແນະນຳແນວຄວາມຄິດກ່ອນລາຍລະອຽດຂອງ API)" + +#: ../source/specifications/simple-repository-api.rst:1001 +msgid "" +"June 2026: :pep:`833` formally \"freezes\" the HTML representation of the " +"simple API" +msgstr "" +"ມິຖຸນາ 2026: :pep:`833` ໄດ້ມີການ \"ຢຸດການປ່ຽນແປງ (freezes)\" ຮູບແບບ HTML ຂອງ simple " +"API ຢ່າງເປັນທາງການ" + +#: ../source/specifications/source-distribution-format.rst:6 +msgid "Source distribution format" +msgstr "ຮູບແບບການແຈກຈ່າຍຊອດໂຄ້ດ (Source distribution)" + +#: ../source/specifications/source-distribution-format.rst:8 +msgid "" +"The current standard source distribution format is identified by the " +"presence of a :file:`pyproject.toml` file in the distribution archive. The " +"layout of such a distribution was originally specified in :pep:`517` and is " +"formally documented here." +msgstr "" +"ຮູບແບບການແຈກຈ່າຍຊອດໂຄ້ດມາດຕະຖານໃນປະຈຸບັນແມ່ນຖືກລະບຸໂດຍການມີໄຟລ໌ :file:`pyproject.toml` " +"ຢູ່ໃນບ່ອນເກັບມ້ຽນໄຟລ໌ (archive) ຂອງການແຈກຈ່າຍ. " +"ໂຄງສ້າງຂອງການແຈກຈ່າຍດັ່ງກ່າວໄດ້ຖືກກຳນົດໄວ້ໃນ :pep:`517` ແລະ " +"ໄດ້ຖືກບັນທຶກເປັນເອກະສານຢ່າງເປັນທາງການຢູ່ທີ່ນີ້." + +#: ../source/specifications/source-distribution-format.rst:13 +msgid "" +"There is also the legacy source distribution format, implicitly defined by " +"the behaviour of ``distutils`` module in the standard library, when " +"executing :command:`setup.py sdist`. This document does not attempt to " +"standardise this format, except to note that if a legacy source distribution " +"contains a ``PKG-INFO`` file using metadata version 2.2 or later, then it " +"MUST follow the rules applicable to source distributions defined in the " +"metadata specification." +msgstr "" +"ນອກຈາກນີ້ຍັງມີຮູບແບບການແຈກຈ່າຍຊອດໂຄ້ດແບບເກົ່າ (legacy), ເຊິ່ງຖືກກຳນົດໂດຍພຶດຕິກຳຂອງໂມດູນ " +"``distutils`` ໃນໄລບຣາຣີມາດຕະຖານ ເມື່ອມີການລັນຄຳສັ່ງ :command:`setup.py sdist`. " +"ເອກະສານສະບັບນີ້ຈະບໍ່ພະຍາຍາມເຮັດໃຫ້ຮູບແບບນີ້ເປັນມາດຕະຖານ, ຍົກເວັ້ນແຕ່ການລະບຸວ່າ " +"ຖ້າການແຈກຈ່າຍຊອດໂຄ້ດແບບເກົ່າ ມີໄຟລ໌ ``PKG-INFO`` ທີ່ໃຊ້ເມຕາເດຕາ (metadata) ເວີຊັນ 2.2 ຫຼື " +"ສູງກວ່າ, ມັນ \"ຕ້ອງ\" " +"ປະຕິບັດຕາມກົດລະບຽບທີ່ໃຊ້ກັບການແຈກຈ່າຍຊອດໂຄ້ດທີ່ກຳນົດໄວ້ໃນຂໍ້ກຳນົດຂອງເມຕາເດຕາ." + +#: ../source/specifications/source-distribution-format.rst:21 +msgid "Source distributions are also known as *sdists* for short." +msgstr "ການແຈກຈ່າຍຊອດໂຄ້ດ (Source distributions) ຍັງຖືກເອີ້ນສັ້ນໆວ່າ *sdists*." + +#: ../source/specifications/source-distribution-format.rst:26 +msgid "Source trees" +msgstr "ຊອດທຣີ (Source trees)" + +#: ../source/specifications/source-distribution-format.rst:28 +msgid "" +"A *source tree* is a collection of files and directories -- like a version " +"control system checkout -- which contains a :file:`pyproject.toml` file that " +"can be used to build a source distribution from the contained files and " +"directories. :pep:`517` and :pep:`518` specify what is required to meet the " +"definition of what :file:`pyproject.toml` must contain for something to be " +"deemed a source tree." +msgstr "" +"*ຊອດທຣີ (source tree)* ແມ່ນກຸ່ມຂອງໄຟລ໌ ແລະ ໂຟນເດີ -- ຄືກັນກັບການ checkout " +"ຈາກລະບົບຄວບຄຸມເວີຊັນ -- ເຊິ່ງປະກອບມີໄຟລ໌ :file:`pyproject.toml` " +"ທີ່ສາມາດໃຊ້ເພື່ອສ້າງການແຈກຈ່າຍຊອດໂຄ້ດຈາກໄຟລ໌ ແລະ ໂຟນເດີເຫຼົ່ານັ້ນ. :pep:`517` " +"ແລະ :pep:`518` ໄດ້ລະບຸສິ່ງທີ່ຈຳເປັນເພື່ອໃຫ້ກົງກັບຄຳນິຍາມຂອງສິ່ງທີ່ :file:`pyproject.toml` " +"ຕ້ອງມີ ເພື່ອໃຫ້ສິ່ງນັ້ນຖືກຖືວ່າເປັນຊອດທຣີ." + +#: ../source/specifications/source-distribution-format.rst:38 +msgid "Source distribution file name" +msgstr "ຊື່ໄຟລ໌ການແຈກຈ່າຍຊອດໂຄ້ດ" + +#: ../source/specifications/source-distribution-format.rst:40 +msgid "" +"The file name of a sdist was standardised in :pep:`625`. The file name must " +"be in the form ``{name}-{version}.tar.gz``, where ``{name}`` is normalised " +"according to the same rules as for binary distributions (see :ref:`binary-" +"distribution-format`), and ``{version}`` is the canonicalized form of the " +"project version (see :ref:`version-specifiers`)." +msgstr "" +"ຊື່ໄຟລ໌ຂອງ sdist ໄດ້ຖືກເຮັດໃຫ້ເປັນມາດຕະຖານໃນ :pep:`625`. ຊື່ໄຟລ໌ຕ້ອງຢູ່ໃນຮູບແບບ ``{name}-" +"{version}.tar.gz``, ໂດຍທີ່ ``{name}`` ຈະຖືກປັບໃຫ້ເປັນມາດຕະຖານ (normalised) " +"ຕາມກົດລະບຽບດຽວກັນກັບການແຈກຈ່າຍແບບໄບນາຣີ (ເບິ່ງ :ref:`binary-distribution-format`), " +"ແລະ ``{version}`` ແມ່ນຮູບແບບມາດຕະຖານ (canonicalized) ຂອງເວີຊັນໂປຣເຈັກ " +"(ເບິ່ງ :ref:`version-specifiers`)." + +#: ../source/specifications/source-distribution-format.rst:46 +msgid "" +"The name and version components of the filename MUST match the values stored " +"in the metadata contained in the file." +msgstr "ສ່ວນປະກອບຂອງຊື່ ແລະ ເວີຊັນໃນຊື່ໄຟລ໌ \"ຕ້ອງ\" ກົງກັບຄ່າທີ່ເກັບໄວ້ໃນເມຕາເດຕາທີ່ຢູ່ໃນໄຟລ໌ນັ້ນ." + +#: ../source/specifications/source-distribution-format.rst:49 +msgid "" +"Code that produces a source distribution file MUST give the file a name that " +"matches this specification. This includes the ``build_sdist`` hook of " +"a :term:`build backend `." +msgstr "" +"ໂຄ້ດທີ່ສ້າງໄຟລ໌ການແຈກຈ່າຍຊອດໂຄ້ດ \"ຕ້ອງ\" ຕັ້ງຊື່ໄຟລ໌ໃຫ້ກົງກັບຂໍ້ກຳນົດນີ້. ເຊິ່ງລວມເຖິງ " +"``build_sdist`` hook ຂອງ :term:`build backend `." + +#: ../source/specifications/source-distribution-format.rst:53 +msgid "" +"Code that processes source distribution files MAY recognise source " +"distribution files by the ``.tar.gz`` suffix and the presence of precisely " +"*one* hyphen in the filename. Code that does this may then use the " +"distribution name and version from the filename without further verification." +msgstr "" +"ໂຄ້ດທີ່ປະມວນຜົນໄຟລ໌ການແຈກຈ່າຍຊອດໂຄ້ດ \"ອາດຈະ\" ຈຳແນກໄຟລ໌ການແຈກຈ່າຍຊອດໂຄ້ດດ້ວຍນາມສະກຸນ " +"``.tar.gz`` ແລະ ການມີເຄື່ອງໝາຍຂີດກາງ (hyphen) ພຽງ \"ອັນດຽວ\" ໃນຊື່ໄຟລ໌. " +"ໂຄ້ດທີ່ເຮັດແບບນີ້ອາດຈະໃຊ້ຊື່ ແລະ ເວີຊັນການແຈກຈ່າຍຈາກຊື່ໄຟລ໌ໄດ້ໂດຍບໍ່ຕ້ອງມີການກວດສອບເພີ່ມເຕີມ." + +#: ../source/specifications/source-distribution-format.rst:59 +msgid "Source distribution file format" +msgstr "ຮູບແບບໄຟລ໌ການແຈກຈ່າຍຊອດໂຄ້ດ" + +#: ../source/specifications/source-distribution-format.rst:61 +msgid "" +"A ``.tar.gz`` source distribution (sdist) contains a single top-level " +"directory called ``{name}-{version}`` (e.g. ``foo-1.0``), containing the " +"source files of the package. The name and version MUST match the metadata " +"stored in the file. This directory must also contain " +"a :file:`pyproject.toml` in the format defined in :ref:`pyproject-toml-" +"spec`, and a :file:`PKG-INFO` file containing metadata in the format " +"described in the :ref:`core-metadata` specification. The metadata MUST " +"conform to at least version 2.2 of the metadata specification." +msgstr "" +"ການແຈກຈ່າຍຊອດໂຄ້ດ (sdist) ແບບ ``.tar.gz`` ປະກອບມີໂຟນເດີລະດັບສູງສຸດພຽງອັນດຽວທີ່ຊື່ວ່າ " +"``{name}-{version}`` (ຕົວຢ່າງ: ``foo-1.0``), ເຊິ່ງບັນຈຸໄຟລ໌ຊອດໂຄ້ດຂອງແພັກເກດ. ຊື່ ແລະ " +"ເວີຊັນ \"ຕ້ອງ\" ກົງກັບເມຕາເດຕາທີ່ເກັບໄວ້ໃນໄຟລ໌. " +"ໂຟນເດີນີ້ຍັງຕ້ອງປະກອບມີ :file:`pyproject.toml` ໃນຮູບແບບທີ່ກຳນົດໄວ້ໃນ :ref:`pyproject-" +"toml-spec`, ແລະ ໄຟລ໌ :file:`PKG-INFO` " +"ທີ່ບັນຈຸເມຕາເດຕາໃນຮູບແບບທີ່ອະທິບາຍໄວ້ໃນຂໍ້ກຳນົດ :ref:`core-metadata`. ເມຕາເດຕາ \"ຕ້ອງ\" " +"ຮອງຮັບຢ່າງໜ້ອຍເວີຊັນ 2.2 ຂອງຂໍ້ກຳນົດເມຕາເດຕາ." + +#: ../source/specifications/source-distribution-format.rst:69 +msgid "" +"If the metadata version is 2.4 or greater, the source distribution MUST " +"contain any license files specified by the ``License-File`` field in " +"the :file:`PKG-INFO` at their respective paths relative to the root " +"directory of the sdist (containing the :file:`pyproject.toml` and " +"the :file:`PKG-INFO` metadata)." +msgstr "" +"ຖ້າເວີຊັນຂອງເມຕາເດຕາແມ່ນ 2.4 ຫຼື ສູງກວ່າ, ການແຈກຈ່າຍຊອດໂຄ້ດ \"ຕ້ອງ\" ປະກອບມີໄຟລ໌ໃບອະນຸຍາດ " +"(license) ທີ່ລະບຸໂດຍຟິວ ``License-File`` ໃນ :file:`PKG-INFO` " +"ຕາມເສັ້ນທາງທີ່ກ່ຽວຂ້ອງກັບໂຟນເດີຮາກຂອງ sdist (ເຊິ່ງປະກອບມີ :file:`pyproject.toml` ແລະ " +"ເມຕາເດຕາ :file:`PKG-INFO`)." + +#: ../source/specifications/source-distribution-format.rst:74 +msgid "" +"No other content of a sdist is required or defined. Build systems can store " +"whatever information they need in the sdist to build the project." +msgstr "" +"ບໍ່ມີການກຳນົດ ຫຼື ບັງຄັບເນື້ອຫາອື່ນໆຂອງ sdist. ລະບົບການສ້າງ (Build systems) " +"ສາມາດເກັບຂໍ້ມູນໃດໆກໍຕາມທີ່ພວກເຂົາຕ້ອງການໃນ sdist ເພື່ອສ້າງໂປຣເຈັກ." + +#: ../source/specifications/source-distribution-format.rst:77 +msgid "" +"The tarball must use the modern POSIX.1-2001 pax tar format, which specifies " +"UTF-8 based file names. In particular, source distribution files must be " +"readable using the standard library tarfile module with the open flag 'r:gz'." +msgstr "" +"ໄຟລ໌ tarball ຕ້ອງໃຊ້ຮູບແບບ pax tar ຂອງ POSIX.1-2001 ທີ່ທັນສະໄໝ, ເຊິ່ງກຳນົດຊື່ໄຟລ໌ເປັນແບບ " +"UTF-8. ໂດຍສະເພາະແມ່ນ ໄຟລ໌ການແຈກຈ່າຍຊອດໂຄ້ດຕ້ອງສາມາດອ່ານໄດ້ໂດຍໃຊ້ໂມດູນ tarfile " +"ຂອງໄລບຣາຣີມາດຕະຖານ ດ້ວຍການໃຊ້ແຟລັກ 'r:gz' ໃນການເປີດ." + +#: ../source/specifications/source-distribution-format.rst:85 +msgid "Source distribution archive features" +msgstr "ຄຸນສົມບັດຂອງບ່ອນເກັບໄຟລ໌ການແຈກຈ່າຍຊອດໂຄ້ດ" + +#: ../source/specifications/source-distribution-format.rst:87 +msgid "" +"Because extracting tar files as-is is dangerous, and the results are " +"platform-specific, archive features of source distributions are limited." +msgstr "" +"ເນື່ອງຈາກການແຕກໄຟລ໌ tar ໂດຍກົງນັ້ນເປັນອັນຕະລາຍ ແລະ ຜົນທີ່ໄດ້ອາດຈະຂຶ້ນກັບແຕ່ລະແພລັດຟອມ, " +"ຄຸນສົມບັດຂອງບ່ອນເກັບໄຟລ໌ການແຈກຈ່າຍຊອດໂຄ້ດຈຶ່ງຖືກຈຳກັດໄວ້." + +#: ../source/specifications/source-distribution-format.rst:91 +msgid "Unpacking with the data filter" +msgstr "ການແຕກໄຟລ໌ດ້ວຍ data filter" + +#: ../source/specifications/source-distribution-format.rst:93 +msgid "" +"When extracting a source distribution, tools MUST either " +"use :py:func:`tarfile.data_filter` (e.g. :py:meth:`TarFile.extractall(..., " +"filter='data') `), OR follow the *Unpacking " +"without the data filter* section below." +msgstr "" +"ເມື່ອແຕກໄຟລ໌ການແຈກຈ່າຍຊອດໂຄ້ດ, ເຄື່ອງມື \"ຕ້ອງ\" ໃຊ້ :py:func:`tarfile.data_filter` " +"(ຕົວຢ່າງ: :py:meth:`TarFile.extractall(..., filter='data') " +"`), ຫຼື ປະຕິບັດຕາມຫົວຂໍ້ *ການແຕກໄຟລ໌ໂດຍບໍ່ມີ data filter* " +"ດ້ານລຸ່ມນີ້." + +#: ../source/specifications/source-distribution-format.rst:97 +msgid "" +"As an exception, on Python interpreters without :py:func:`hasattr(tarfile, " +"'data_filter') ` (:pep:`706`), tools that normally use " +"that filter (directly on indirectly) MAY warn the user and ignore this " +"specification. The trade-off between usability (e.g. fully trusting the " +"archive) and security (e.g. refusing to unpack) is left up to the tool in " +"this case." +msgstr "" +"ໃນກໍລະນີຍົກເວັ້ນ, ສຳລັບຕົວແປພາສາ Python ທີ່ບໍ່ມີ :py:func:`hasattr(tarfile, " +"'data_filter') ` (:pep:`706`), ເຄື່ອງມືທີ່ປົກກະຕິໃຊ້ filter ນັ້ນ " +"(ທັງທາງກົງ ຫຼື ທາງອ້ອມ) \"ອາດຈະ\" ແຈ້ງເຕືອນຜູ້ໃຊ້ ແລະ ລະເລີຍຂໍ້ກຳນົດນີ້. " +"ການຕັດສິນໃຈລະຫວ່າງຄວາມສະດວກໃນການໃຊ້ງານ (ເຊັ່ນ: ການໄວ້ວາງໃຈໄຟລ໌ທັງໝົດ) ແລະ ຄວາມປອດໄພ " +"(ເຊັ່ນ: ການປະຕິເສດທີ່ຈະແຕກໄຟລ໌) ແມ່ນຂຶ້ນກັບການຕັດສິນໃຈຂອງເຄື່ອງມືນັ້ນໆ." + +#: ../source/specifications/source-distribution-format.rst:105 +msgid "Unpacking without the data filter" +msgstr "ການແຕກໄຟລ໌ໂດຍບໍ່ມີ data filter" + +#: ../source/specifications/source-distribution-format.rst:107 +msgid "" +"Tools that do not use the ``data`` filter directly (e.g. for backwards " +"compatibility, allowing additional features, or not using Python) MUST " +"follow this section. (At the time of this writing, the ``data`` filter also " +"follows this section, but it may get out of sync in the future.)" +msgstr "" +"ເຄື່ອງມືທີ່ບໍ່ໄດ້ໃຊ້ ``data`` filter ໂດຍກົງ (ຕົວຢ່າງ: ເພື່ອຄວາມເຂົ້າກັນໄດ້ກັບເວີຊັນເກົ່າ, " +"ການອະນຸຍາດຄຸນສົມບັດເພີ່ມເຕີມ, ຫຼື ບໍ່ໄດ້ໃຊ້ Python) \"ຕ້ອງ\" ປະຕິບັດຕາມພາກສ່ວນນີ້. " +"(ໃນຂະນະທີ່ຂຽນນີ້, ``data`` filter ກໍປະຕິບັດຕາມພາກສ່ວນນີ້ຄືກັນ, " +"ແຕ່ມັນອາດຈະມີການປ່ຽນແປງໃນອະນາຄົດ.)" + +#: ../source/specifications/source-distribution-format.rst:113 +msgid "" +"The following files are invalid in an *sdist* archive. Upon encountering " +"such an entry, tools SHOULD notify the user, MUST NOT unpack the entry, and " +"MAY abort with a failure:" +msgstr "" +"ໄຟລ໌ຕໍ່ໄປນີ້ຖືວ່າບໍ່ຖືກຕ້ອງໃນບ່ອນເກັບໄຟລ໌ *sdist*. ເມື່ອພົບລາຍການດັ່ງກ່າວ, ເຄື່ອງມື \"ຄວນ\" " +"ແຈ້ງໃຫ້ຜູ້ໃຊ້ຊາບ, \"ຕ້ອງບໍ່\" ແຕກໄຟລ໌ລາຍການນັ້ນ, ແລະ \"ອາດຈະ\" ຍົກເລີກການເຮັດວຽກດ້ວຍຂໍ້ຜິດພາດ:" + +#: ../source/specifications/source-distribution-format.rst:117 +msgid "Files that would be placed outside the destination directory." +msgstr "ໄຟລ໌ທີ່ຈະຖືກວາງໄວ້ນອກໂຟນເດີປາຍທາງ." + +#: ../source/specifications/source-distribution-format.rst:118 +msgid "Links (symbolic or hard) pointing outside the destination directory." +msgstr "ລິ້ງ (symbolic ຫຼື hard) ທີ່ຊີ້ໄປນອກໂຟນເດີປາຍທາງ." + +#: ../source/specifications/source-distribution-format.rst:119 +msgid "Device files (including pipes)." +msgstr "ໄຟລ໌ອຸປະກອນ (ລວມເຖິງ pipes)." + +#: ../source/specifications/source-distribution-format.rst:121 +msgid "" +"The following are also invalid. Tools MAY treat them as above, but are NOT " +"REQUIRED to do so:" +msgstr "" +"ສິ່ງຕໍ່ໄປນີ້ຖືວ່າບໍ່ຖືກຕ້ອງຄືກັນ. ເຄື່ອງມື \"ອາດຈະ\" ຈັດການກັບພວກມັນຄືກັບຂ້າງເທິງ, ແຕ່ \"ບໍ່ໄດ້ຖືກບັງຄັບ\" " +"ໃຫ້ເຮັດເຊັ່ນນັ້ນ:" + +#: ../source/specifications/source-distribution-format.rst:124 +msgid "Files with a ``..`` component in the filename or link target." +msgstr "ໄຟລ໌ທີ່ມີສ່ວນປະກອບ ``..`` ໃນຊື່ໄຟລ໌ ຫຼື ເປົ້າໝາຍຂອງລິ້ງ." + +#: ../source/specifications/source-distribution-format.rst:125 +msgid "Links pointing to a file that is not part of the archive." +msgstr "ລິ້ງທີ່ຊີ້ໄປຫາໄຟລ໌ທີ່ບໍ່ໄດ້ເປັນສ່ວນໜຶ່ງຂອງບ່ອນເກັບໄຟລ໌." + +#: ../source/specifications/source-distribution-format.rst:127 +msgid "" +"Tools MAY unpack links (symbolic or hard) as regular files, using content " +"from the archive." +msgstr "" +"ເຄື່ອງມື \"ອາດຈະ\" ແຕກລິ້ງ (symbolic ຫຼື hard) ໃຫ້ເປັນໄຟລ໌ທຳມະດາ " +"ໂດຍໃຊ້ເນື້ອຫາຈາກບ່ອນເກັບໄຟລ໌." + +#: ../source/specifications/source-distribution-format.rst:130 +msgid "When extracting *sdist* archives:" +msgstr "ເມື່ອແຕກໄຟລ໌ຈາກບ່ອນເກັບໄຟລ໌ *sdist*:" + +#: ../source/specifications/source-distribution-format.rst:132 +msgid "" +"Leading slashes in file names MUST be dropped. (This is nowadays standard " +"behaviour for ``tar`` unpacking.)" +msgstr "" +"ເຄື່ອງໝາຍ slash (/) ທີ່ຢູ່ທາງໜ້າຊື່ໄຟລ໌ \"ຕ້ອງ\" ຖືກຕັດອອກ. (ປະຈຸບັນນີ້ແມ່ນພຶດຕິກຳມາດຕະຖານ " +"ສຳລັບການແຕກໄຟລ໌ ``tar``.)" + +#: ../source/specifications/source-distribution-format.rst:134 +msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" +msgstr "" +"ສຳລັບແຕ່ລະບິດຂອງ ``mode`` (ສິດການເຂົ້າເຖິງແບບ Unix), ເຄື່ອງມື \"ຕ້ອງ\" ເລືອກຢ່າງໃດຢ່າງໜຶ່ງ:" + +#: ../source/specifications/source-distribution-format.rst:136 +msgid "use the platform's default for a new file/directory (respectively)," +msgstr "ໃຊ້ຄ່າເລີ່ມຕົ້ນຂອງແພລັດຟອມສຳລັບໄຟລ໌/ໂຟນເດີໃໝ່ (ຕາມລຳດັບ)," + +#: ../source/specifications/source-distribution-format.rst:137 +msgid "set the bit according to the archive, or" +msgstr "ຕັ້ງຄ່າບິດຕາມທີ່ລະບຸໃນບ່ອນເກັບໄຟລ໌, ຫຼື" + +#: ../source/specifications/source-distribution-format.rst:138 +msgid "" +"use the bit from ``rw-r--r--`` (``0o644``) for non-executable files or " +"``rwxr-xr-x`` (``0o755``) for executable files and directories." +msgstr "" +"ໃຊ້ຄ່າບິດຈາກ ``rw-r--r--`` (``0o644``) ສຳລັບໄຟລ໌ທີ່ລັນບໍ່ໄດ້ ຫຼື ``rwxr-xr-x`` " +"(``0o755``) ສຳລັບໄຟລ໌ ແລະ ໂຟນເດີທີ່ລັນໄດ້ (executable)." + +#: ../source/specifications/source-distribution-format.rst:141 +msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." +msgstr "ບິດ ``mode`` ລະດັບສູງ (setuid, setgid, sticky) \"ຕ້ອງ\" ຖືກລ້າງອອກ." + +#: ../source/specifications/source-distribution-format.rst:142 +msgid "It is RECOMMENDED to preserve the user *executable* bit." +msgstr "ແມ່ນ \"ແນະນຳ (RECOMMENDED)\" ໃຫ້ຮັກສາບິດ *executable* ຂອງຜູ້ໃຊ້ໄວ້." + +#: ../source/specifications/source-distribution-format.rst:146 +msgid "Further hints" +msgstr "ຄຳແນະນຳເພີ່ມເຕີມ" + +#: ../source/specifications/source-distribution-format.rst:148 +msgid "" +"Tool authors are encouraged to consider how *hints for further verification* " +"in ``tarfile`` documentation apply to their tool." +msgstr "" +"ຜູ້ພັດທະນາເຄື່ອງມືຄວນພິຈາລະນາວ່າ *ຄຳແນະນຳສຳລັບການກວດສອບເພີ່ມເຕີມ* ໃນເອກະສານຂອງ " +"``tarfile`` ສາມາດນຳມາໃຊ້ກັບເຄື່ອງມືຂອງຕົນໄດ້ແນວໃດ." + +#: ../source/specifications/source-distribution-format.rst:155 +msgid "" +"November 2020: The original version of this specification was approved " +"through :pep:`643`." +msgstr "ພະຈິກ 2020: ເວີຊັນເລີ່ມຕົ້ນຂອງຂໍ້ກຳນົດນີ້ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`643`." + +#: ../source/specifications/source-distribution-format.rst:157 +msgid "July 2021: Defined what a source tree is." +msgstr "ກໍລະກົດ 2021: ໄດ້ກຳນົດຄຳນິຍາມຂອງ ຊອດທຣີ (source tree)." + +#: ../source/specifications/source-distribution-format.rst:158 +msgid "" +"September 2022: The filename of a source distribution was standardized " +"through :pep:`625`." +msgstr "ກັນຍາ 2022: ຊື່ໄຟລ໌ຂອງການແຈກຈ່າຍຊອດໂຄ້ດໄດ້ຖືກເຮັດໃຫ້ເປັນມາດຕະຖານຜ່ານ :pep:`625`." + +#: ../source/specifications/source-distribution-format.rst:160 +msgid "" +"August 2023: Source distribution archive features were standardized " +"through :pep:`721`." +msgstr "" +"ສິງຫາ 2023: " +"ຄຸນສົມບັດຂອງບ່ອນເກັບໄຟລ໌ການແຈກຈ່າຍຊອດໂຄ້ດໄດ້ຖືກເຮັດໃຫ້ເປັນມາດຕະຖານຜ່ານ :pep:`721`." + +#: ../source/specifications/source-distribution-format.rst:162 +msgid "" +"December 2024: License files inclusion into source distribution was " +"standardized through :pep:`639`." +msgstr "" +"ທັນວາ 2024: " +"ການລວມໄຟລ໌ໃບອະນຸຍາດເຂົ້າໃນການແຈກຈ່າຍຊອດໂຄ້ດໄດ້ຖືກເຮັດໃຫ້ເປັນມາດຕະຖານຜ່ານ :pep:`639`." + +#: ../source/specifications/version-specifiers.rst:7 +#: ../source/specifications/version-specifiers.rst:797 +msgid "Version specifiers" +msgstr "ຕົວລະບຸເວີຊັນ (Version specifiers)" + +#: ../source/specifications/version-specifiers.rst:10 +msgid "" +"This specification describes a scheme for identifying versions of Python " +"software distributions, and declaring dependencies on particular versions." +msgstr "" +"ຂໍ້ກຳນົດນີ້ອະທິບາຍເຖິງຮູບແບບການລະບຸເວີຊັນຂອງການແຈກຈ່າຍຊອບແວ Python ແລະ " +"ການປະກາດສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ (dependencies) ສຳລັບເວີຊັນສະເພາະໃດໜຶ່ງ." + +#: ../source/specifications/version-specifiers.rst:15 +msgid "Definitions" +msgstr "ຄຳນິຍາມ" + +#: ../source/specifications/version-specifiers.rst:17 +msgid "" +"The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL " +"NOT\", \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and " +"\"OPTIONAL\" in this document are to be interpreted as described " +"in :rfc:`2119`." +msgstr "" +"ຄຳສຳຄັນ \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\", " +"\"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", ແລະ \"OPTIONAL\" " +"ໃນເອກະສານສະບັບນີ້ ແມ່ນໃຫ້ຕີຄວາມໝາຍຕາມທີ່ໄດ້ອະທິບາຍໄວ້ໃນ :rfc:`2119`." + +#: ../source/specifications/version-specifiers.rst:21 +msgid "" +"\"Build tools\" are automated tools intended to run on development systems, " +"producing source and binary distribution archives. Build tools may also be " +"invoked by integration tools in order to build software distributed as " +"sdists rather than prebuilt binary archives." +msgstr "" +"\"ເຄື່ອງມືໃນການສ້າງ (Build tools)\" " +"ແມ່ນເຄື່ອງມືອັດຕະໂນມັດທີ່ມີຈຸດປະສົງເພື່ອລັນໃນລະບົບການພັດທະນາ, " +"ເພື່ອສ້າງບ່ອນເກັບໄຟລ໌ການແຈກຈ່າຍແບບຊອດໂຄ້ດ ແລະ ແບບໄບນາຣີ. ເຄື່ອງມືໃນການສ້າງອາດຈະຖືກເອີ້ນໃຊ້ໂດຍ " +"ເຄື່ອງມືການລວມລະບົບ (integration tools) ເພື່ອສ້າງຊອບແວທີ່ຖືກແຈກຈ່າຍເປັນ sdists ແທນທີ່ຈະເປັນ " +"ໄບນາຣີທີ່ສ້າງໄວ້ລ່ວງໜ້າ." + +#: ../source/specifications/version-specifiers.rst:26 +msgid "" +"\"Index servers\" are active distribution registries which publish version " +"and dependency metadata and place constraints on the permitted metadata." +msgstr "" +"\"ອິນເດັກເຊີເວີ (Index servers)\" " +"ແມ່ນລະບົບລົງທະບຽນການແຈກຈ່າຍທີ່ເຮັດໜ້າທີ່ເຜີຍແຜ່ເມຕາເດຕາຂອງເວີຊັນ ແລະ ສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້, " +"ພ້ອມທັງກຳນົດຂໍ້ຈຳກັດຂອງເມຕາເດຕາທີ່ອະນຸຍາດ." + +#: ../source/specifications/version-specifiers.rst:29 +msgid "" +"\"Publication tools\" are automated tools intended to run on development " +"systems and upload source and binary distribution archives to index servers." +msgstr "" +"\"ເຄື່ອງມືໃນການເຜີຍແຜ່ (Publication tools)\" " +"ແມ່ນເຄື່ອງມືອັດຕະໂນມັດທີ່ມີຈຸດປະສົງເພື່ອລັນໃນລະບົບການພັດທະນາ ແລະ " +"ອັບໂຫຼດບ່ອນເກັບໄຟລ໌ການແຈກຈ່າຍແບບຊອດໂຄ້ດ ແລະ ແບບໄບນາຣີ ໄປຫາອິນເດັກເຊີເວີ." + +#: ../source/specifications/version-specifiers.rst:32 +msgid "" +"\"Installation tools\" are integration tools specifically intended to run on " +"deployment targets, consuming source and binary distribution archives from " +"an index server or other designated location and deploying them to the " +"target system." +msgstr "" +"\"ເຄື່ອງມືໃນການຕິດຕັ້ງ (Installation tools)\" " +"ແມ່ນເຄື່ອງມືການລວມລະບົບທີ່ມີຈຸດປະສົງສະເພາະເພື່ອລັນໃນ ລະບົບເປົ້າໝາຍທີ່ຈະຕິດຕັ້ງ, " +"ໂດຍດຶງເອົາບ່ອນເກັບໄຟລ໌ການແຈກຈ່າຍແບບຊອດໂຄ້ດ ແລະ ແບບໄບນາຣີ ຈາກອິນເດັກເຊີເວີ ຫຼື " +"ສະຖານທີ່ອື່ນໆທີ່ກຳນົດໄວ້ ແລະ ນຳພວກມັນໄປຕິດຕັ້ງໃນລະບົບເປົ້າໝາຍ." + +#: ../source/specifications/version-specifiers.rst:37 +msgid "" +"\"Automated tools\" is a collective term covering build tools, index " +"servers, publication tools, integration tools and any other software that " +"produces or consumes distribution version and dependency metadata." +msgstr "" +"\"ເຄື່ອງມືອັດຕະໂນມັດ (Automated tools)\" ແມ່ນຄຳສັບລວມທີ່ຄຸມເຖິງ ເຄື່ອງມືໃນການສ້າງ, " +"ອິນເດັກເຊີເວີ, ເຄື່ອງມືໃນການເຜີຍແຜ່, ເຄື່ອງມືການລວມລະບົບ ແລະ ຊອບແວອື່ນໆທີ່ສ້າງ ຫຼື " +"ໃຊ້ຂໍ້ມູນເມຕາເດຕາຂອງເວີຊັນການແຈກຈ່າຍ ແລະ ສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້." + +#: ../source/specifications/version-specifiers.rst:43 +msgid "Version scheme" +msgstr "ຮູບແບບເວີຊັນ (Version scheme)" + +#: ../source/specifications/version-specifiers.rst:45 +msgid "" +"Distributions are identified by a public version identifier which supports " +"all defined version comparison operations" +msgstr "" +"ການແຈກຈ່າຍຕ່າງໆແມ່ນຖືກລະບຸດ້ວຍ ຕົວລະບຸເວີຊັນສາທາລະນະ (public version identifier) " +"ເຊິ່ງຮອງຮັບທຸກການດຳເນີນການປຽບທຽບເວີຊັນທີ່ໄດ້ກຳນົດໄວ້" + +#: ../source/specifications/version-specifiers.rst:48 +msgid "" +"The version scheme is used both to describe the distribution version " +"provided by a particular distribution archive, as well as to place " +"constraints on the version of dependencies needed in order to build or run " +"the software." +msgstr "" +"ຮູບແບບເວີຊັນຖືກໃຊ້ທັງເພື່ອອະທິບາຍເວີຊັນການແຈກຈ່າຍທີ່ມີຢູ່ໃນບ່ອນເກັບໄຟລ໌ນັ້ນໆ, ແລະ " +"ເພື່ອກຳນົດຂໍ້ຈຳກັດຂອງເວີຊັນຂອງສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ (dependencies) ທີ່ຕ້ອງການໃນການສ້າງ ຫຼື " +"ການລັນຊອບແວ." + +#: ../source/specifications/version-specifiers.rst:57 +msgid "Public version identifiers" +msgstr "ຕົວລະບຸເວີຊັນສາທາລະນະ" + +#: ../source/specifications/version-specifiers.rst:59 +msgid "" +"The canonical public version identifiers MUST comply with the following " +"scheme::" +msgstr "ຕົວລະບຸເວີຊັນສາທາລະນະແບບມາດຕະຖານ (canonical) \"ຕ້ອງ\" ປະຕິບັດຕາມຮູບແບບຕໍ່ໄປນີ້::" + +#: ../source/specifications/version-specifiers.rst:64 +msgid "" +"Public version identifiers MUST NOT include leading or trailing whitespace." +msgstr "ຕົວລະບຸເວີຊັນສາທາລະນະ \"ຕ້ອງບໍ່\" ມີຍະຫວ່າງ (whitespace) ທາງໜ້າ ຫຼື ທາງຫຼັງ." + +#: ../source/specifications/version-specifiers.rst:66 +msgid "Public version identifiers MUST be unique within a given distribution." +msgstr "ຕົວລະບຸເວີຊັນສາທາລະນະ \"ຕ້ອງ\" ບໍ່ຊ້ຳກັນພາຍໃນການແຈກຈ່າຍໜຶ່ງໆ." + +#: ../source/specifications/version-specifiers.rst:68 +msgid "" +"Installation tools SHOULD ignore any public versions which do not comply " +"with this scheme but MUST also include the normalizations specified below. " +"Installation tools MAY warn the user when non-compliant or ambiguous " +"versions are detected." +msgstr "" +"ເຄື່ອງມືໃນການຕິດຕັ້ງ \"ຄວນ\" ລະເລີຍເວີຊັນສາທາລະນະໃດໆທີ່ບໍ່ປະຕິບັດຕາມຮູບແບບນີ້ ແຕ່ກໍ \"ຕ້ອງ\" " +"ລວມເອົາການປັບໃຫ້ເປັນມາດຕະຖານ (normalizations) ທີ່ລະບຸໄວ້ດ້ານລຸ່ມນີ້ດ້ວຍ. ເຄື່ອງມືໃນການຕິດຕັ້ງ " +"\"ອາດຈະ\" ແຈ້ງເຕືອນຜູ້ໃຊ້ເມື່ອພົບເວີຊັນທີ່ບໍ່ຖືກຕ້ອງຕາມຂໍ້ກຳນົດ ຫຼື ເວີຊັນທີ່ກຳກວມ." + +#: ../source/specifications/version-specifiers.rst:73 +msgid "" +"See also :ref:`version-specifiers-regex` which provides a regular expression " +"to check strict conformance with the canonical format, as well as a more " +"permissive regular expression accepting inputs that may require subsequent " +"normalization." +msgstr "" +"ເບິ່ງ :ref:`version-specifiers-regex` ທີ່ໃຫ້ regular expression " +"ເພື່ອກວດສອບຄວາມຖືກຕ້ອງຕາມ ຮູບແບບມາດຕະຖານຢ່າງເຂັ້ມງວດ, ພ້ອມທັງ regular expression " +"ແບບຜ່ອນຜັນທີ່ຍອມຮັບຄ່າທີ່ອາດຈະ ຕ້ອງມີການປັບໃຫ້ເປັນມາດຕະຖານໃນພາຍຫຼັງ." + +#: ../source/specifications/version-specifiers.rst:78 +msgid "Public version identifiers are separated into up to five segments:" +msgstr "ຕົວລະບຸເວີຊັນສາທາລະນະຖືກແບ່ງອອກເປັນສູງສຸດຫ້າພາກສ່ວນ:" + +#: ../source/specifications/version-specifiers.rst:80 +msgid "Epoch segment: ``N!``" +msgstr "ພາກສ່ວນອີພັອກ (Epoch segment): ``N!``" + +#: ../source/specifications/version-specifiers.rst:81 +msgid "Release segment: ``N(.N)*``" +msgstr "ພາກສ່ວນການປ່ອຍ (Release segment): ``N(.N)*``" + +#: ../source/specifications/version-specifiers.rst:82 +msgid "Pre-release segment: ``{a|b|rc}N``" +msgstr "ພາກສ່ວນກ່ອນການປ່ອຍ (Pre-release segment): ``{a|b|rc}N``" + +#: ../source/specifications/version-specifiers.rst:83 +msgid "Post-release segment: ``.postN``" +msgstr "ພາກສ່ວນຫຼັງການປ່ອຍ (Post-release segment): ``.postN``" + +#: ../source/specifications/version-specifiers.rst:84 +msgid "Development release segment: ``.devN``" +msgstr "ພາກສ່ວນລະຫວ່າງການພັດທະນາ (Development release segment): ``.devN``" + +#: ../source/specifications/version-specifiers.rst:86 +msgid "" +"Any given release will be a \"final release\", \"pre-release\", \"post-" +"release\" or \"developmental release\" as defined in the following sections." +msgstr "" +"ການປ່ອຍໃດໆກໍຕາມຈະເປັນ \"ການປ່ອຍເວີຊັນສົມບູນ (final release)\", \"ເວີຊັນກ່ອນອອກຈິງ (pre-" +"release)\", \"ເວີຊັນຫຼັງອອກຈິງ (post-release)\" ຫຼື \"ເວີຊັນລະຫວ່າງການພັດທະນາ " +"(developmental release)\" ຕາມທີ່ໄດ້ກຳນົດໄວ້ໃນພາກສ່ວນຕໍ່ໆໄປ." + +#: ../source/specifications/version-specifiers.rst:89 +msgid "" +"All numeric components MUST be non-negative integers represented as " +"sequences of ASCII digits." +msgstr "" +"ສ່ວນປະກອບທີ່ເປັນຕົວເລກທັງໝົດ \"ຕ້ອງ\" ເປັນຈຳນວນຖ້ວນບວກ ເຊິ່ງສະແດງອອກໃນຮູບແບບຂອງ ລຳດັບຕົວເລກ " +"ASCII." + +#: ../source/specifications/version-specifiers.rst:92 +msgid "" +"All numeric components MUST be interpreted and ordered according to their " +"numeric value, not as text strings." +msgstr "" +"ສ່ວນປະກອບທີ່ເປັນຕົວເລກທັງໝົດ \"ຕ້ອງ\" ຖືກຕີຄວາມໝາຍ ແລະ ຈັດລຳດັບຕາມຄ່າຂອງຕົວເລກ, " +"ບໍ່ແມ່ນຕາມລຳດັບຕົວອັກສອນ (text strings)." + +#: ../source/specifications/version-specifiers.rst:95 +msgid "" +"All numeric components MAY be zero. Except as described below for the " +"release segment, a numeric component of zero has no special significance " +"aside from always being the lowest possible value in the version ordering." +msgstr "" +"ສ່ວນປະກອບຕົວເລກທັງໝົດ \"ອາດຈະ\" ເປັນສູນ. ຍົກເວັ້ນຕາມທີ່ໄດ້ອະທິບາຍໄວ້ດ້ານລຸ່ມສຳລັບພາກສ່ວນການປ່ອຍ, " +"ສ່ວນປະກອບຕົວເລກທີ່ເປັນສູນບໍ່ມີຄວາມໝາຍພິເສດໃດໆ ນອກຈາກການເປັນຄ່າທີ່ຕ່ຳສຸດສະເໝີໃນການຈັດລຳດັບເວີຊັນ." + +#: ../source/specifications/version-specifiers.rst:101 +msgid "" +"Some hard to read version identifiers are permitted by this scheme in order " +"to better accommodate the wide range of versioning practices across existing " +"public and private Python projects." +msgstr "" +"ຕົວລະບຸເວີຊັນບາງຢ່າງທີ່ອ່ານຍາກກໍໄດ້ຮັບການອະນຸຍາດໃນຮູບແບບນີ້ ເພື່ອໃຫ້ຮອງຮັບການຕັ້ງເວີຊັນ " +"ທີ່ຫຼາກຫຼາຍໃນໂປຣເຈັກ Python ທີ່ມີຢູ່ທັງແບບສາທາລະນະ ແລະ ສ່ວນຕົວ." + +#: ../source/specifications/version-specifiers.rst:105 +msgid "" +"Accordingly, some of the versioning practices which are technically " +"permitted by the specification are strongly discouraged for new projects. " +"Where this is the case, the relevant details are noted in the following " +"sections." +msgstr "" +"ດັ່ງນັ້ນ, ບາງວິທີການຕັ້ງເວີຊັນທີ່ໄດ້ຮັບການອະນຸຍາດທາງດ້ານເຕັກນິກ ໂດຍຂໍ້ກຳນົດນີ້ ແມ່ນ \"ບໍ່ແນະນຳຢ່າງຍິ່ງ\" " +"ສຳລັບໂປຣເຈັກໃໝ່. ໃນກໍລະນີດັ່ງກ່າວ, ລາຍລະອຽດທີ່ກ່ຽວຂ້ອງຈະຖືກລະບຸໄວ້ໃນພາກສ່ວນຕໍ່ໆໄປ." + +#: ../source/specifications/version-specifiers.rst:116 +msgid "Local version identifiers MUST comply with the following scheme::" +msgstr "ຕົວລະບຸເວີຊັນທ້ອງຖິ່ນ (Local version identifiers) \"ຕ້ອງ\" ປະຕິບັດຕາມຮູບແບບຕໍ່ໄປນີ້::" + +#: ../source/specifications/version-specifiers.rst:120 +msgid "" +"They consist of a normal public version identifier (as defined in the " +"previous section), along with an arbitrary \"local version label\", " +"separated from the public version identifier by a plus. Local version labels " +"have no specific semantics assigned, but some syntactic restrictions are " +"imposed." +msgstr "" +"ພວກມັນປະກອບດ້ວຍຕົວລະບຸເວີຊັນສາທາລະນະປົກກະຕິ (ຕາມທີ່ໄດ້ກຳນົດໃນພາກສ່ວນກ່ອນໜ້ານີ້), ພ້ອມກັບ " +"\"ປ້າຍກຳກັບເວີຊັນທ້ອງຖິ່ນ (local version label)\" ທີ່ກຳນົດເອງ, " +"ເຊິ່ງແຍກຈາກຕົວລະບຸເວີຊັນສາທາລະນະດ້ວຍເຄື່ອງໝາຍບວກ (+). ປ້າຍກຳກັບເວີຊັນທ້ອງຖິ່ນບໍ່ມີຄວາມໝາຍສະເພາະ " +"ແຕ່ມີຂໍ້ຈຳກັດບາງຢ່າງທາງດ້ານໄວຍາກອນ." + +#: ../source/specifications/version-specifiers.rst:125 +msgid "" +"Local version identifiers are used to denote fully API (and, if applicable, " +"ABI) compatible patched versions of upstream projects. For example, these " +"may be created by application developers and system integrators by applying " +"specific backported bug fixes when upgrading to a new upstream release would " +"be too disruptive to the application or other integrated system (such as a " +"Linux distribution)." +msgstr "" +"ຕົວລະບຸເວີຊັນທ້ອງຖິ່ນຖືກໃຊ້ເພື່ອລະບຸເວີຊັນທີ່ມີການແກ້ໄຂ (patched) ເຊິ່ງເຂົ້າກັນໄດ້ກັບ API (ແລະ ABI " +"ຖ້າມີ) ຂອງໂປຣເຈັກຕົ້ນທາງ (upstream). ຕົວຢ່າງ: ສິ່ງເຫຼົ່ານີ້ອາດຖືກສ້າງຂຶ້ນໂດຍຜູ້ພັດທະນາແອັບພລິເຄຊັນ " +"ແລະ ຜູ້ລວມລະບົບ ໂດຍການນຳເອົາການແກ້ໄຂບັກ (backported bug fixes) ມາໃຊ້ ເມື່ອການອັບເກຣດ " +"ໄປຫາເວີຊັນຕົ້ນທາງໃໝ່ອາດຈະສົ່ງຜົນກະທົບຕໍ່ແອັບພລິເຄຊັນ ຫຼື ລະບົບອື່ນໆ (ເຊັ່ນ Linux distribution) " +"ຫຼາຍເກີນໄປ." + +#: ../source/specifications/version-specifiers.rst:132 +msgid "" +"The inclusion of the local version label makes it possible to differentiate " +"upstream releases from potentially altered rebuilds by downstream " +"integrators. The use of a local version identifier does not affect the kind " +"of a release but, when applied to a source distribution, does indicate that " +"it may not contain the exact same code as the corresponding upstream release." +msgstr "" +"ການລວມເອົາປ້າຍກຳກັບເວີຊັນທ້ອງຖິ່ນເຮັດໃຫ້ສາມາດແຍກແຍະການປ່ອຍເວີຊັນຕົ້ນທາງ ອອກຈາກເວີຊັນທີ່ອາດມີການ " +"ປ່ຽນແປງໂດຍຜູ້ລວມລະບົບປາຍທາງ (downstream). ການໃຊ້ຕົວລະບຸເວີຊັນທ້ອງຖິ່ນບໍ່ໄດ້ສົ່ງຜົນກະທົບຕໍ່ປະເພດ " +"ຂອງການປ່ອຍ, ແຕ່ເມື່ອນຳໃຊ້ກັບການແຈກຈ່າຍຊອດໂຄ້ດ, ມັນສະແດງໃຫ້ເຫັນວ່າໄຟລ໌ນັ້ນອາດຈະບໍ່ມີໂຄ້ດທີ່ຄືກັນ " +"ກັບເວີຊັນຕົ້ນທາງທຸກປະການ." + +#: ../source/specifications/version-specifiers.rst:138 +msgid "" +"To ensure local version identifiers can be readily incorporated as part of " +"filenames and URLs, and to avoid formatting inconsistencies in hexadecimal " +"hash representations, local version labels MUST be limited to the following " +"set of permitted characters:" +msgstr "" +"ເພື່ອໃຫ້ແນ່ໃຈວ່າຕົວລະບຸເວີຊັນທ້ອງຖິ່ນສາມາດນຳໄປໃຊ້ເປັນສ່ວນໜຶ່ງຂອງຊື່ໄຟລ໌ ແລະ URL ໄດ້ຢ່າງສະດວກ, ແລະ " +"ເພື່ອຫຼີກເວັ້ນຄວາມບໍ່ສອດຄ່ອງໃນການສະແດງຮູບແບບ hash ເລກຖານສິບຫົກ, ປ້າຍກຳກັບເວີຊັນທ້ອງຖິ່ນ \"ຕ້ອງ\" " +"ຖືກຈຳກັດໃຫ້ໃຊ້ພຽງແຕ່ກຸ່ມຕົວອັກສອນຕໍ່ໄປນີ້:" + +#: ../source/specifications/version-specifiers.rst:143 +msgid "ASCII letters (``[a-zA-Z]``)" +msgstr "ຕົວອັກສອນ ASCII (``[a-zA-Z]``)" + +#: ../source/specifications/version-specifiers.rst:144 +msgid "ASCII digits (``[0-9]``)" +msgstr "ຕົວເລກ ASCII (``[0-9]``)" + +#: ../source/specifications/version-specifiers.rst:145 +msgid "periods (``.``)" +msgstr "ຈຸດ (``.``)" + +#: ../source/specifications/version-specifiers.rst:147 +msgid "Local version labels MUST start and end with an ASCII letter or digit." +msgstr "ປ້າຍກຳກັບເວີຊັນທ້ອງຖິ່ນ \"ຕ້ອງ\" ເລີ່ມຕົ້ນ ແລະ ຈົບລົງດ້ວຍຕົວອັກສອນ ຫຼື ຕົວເລກ ASCII." + +#: ../source/specifications/version-specifiers.rst:149 +msgid "" +"Comparison and ordering of local versions considers each segment of the " +"local version (divided by a ``.``) separately. If a segment consists " +"entirely of ASCII digits then that section should be considered an integer " +"for comparison purposes and if a segment contains any ASCII letters then " +"that segment is compared lexicographically with case insensitivity. When " +"comparing a numeric and lexicographic segment, the numeric section always " +"compares as greater than the lexicographic segment. Additionally a local " +"version with a great number of segments will always compare as greater than " +"a local version with fewer segments, as long as the shorter local version's " +"segments match the beginning of the longer local version's segments exactly." +msgstr "" +"ການປຽບທຽບ ແລະ ການຈັດລຳດັບຂອງເວີຊັນທ້ອງຖິ່ນຈະພິຈາລະນາແຕ່ລະພາກສ່ວນ (ທີ່ແຍກດ້ວຍ ``.``) " +"ແຍກກັນ. ຖ້າພາກສ່ວນໃດໜຶ່ງປະກອບດ້ວຍຕົວເລກ ASCII ທັງໝົດ, " +"ພາກສ່ວນນັ້ນຈະຖືກຖືວ່າເປັນຈຳນວນຖ້ວນໃນການປຽບທຽບ, ແລະ ຖ້າພາກສ່ວນໃດມີຕົວອັກສອນ ASCII, " +"ພາກສ່ວນນັ້ນຈະຖືກປຽບທຽບຕາມລຳດັບຕົວອັກສອນ (lexicographically) ໂດຍບໍ່ແຍກຕົວພິມໃຫຍ່ພິມນ້ອຍ. " +"ເມື່ອປຽບທຽບພາກສ່ວນຕົວເລກກັບພາກສ່ວນຕົວອັກສອນ, ພາກສ່ວນຕົວເລກ " +"ຈະຖືກຖືວ່າສູງກວ່າພາກສ່ວນຕົວອັກສອນສະເໝີ. ນອກຈາກນີ້, ເວີຊັນທ້ອງຖິ່ນທີ່ມີຈຳນວນພາກສ່ວນຫຼາຍກວ່າ " +"ຈະຖືກຖືວ່າສູງກວ່າເວີຊັນທ້ອງຖິ່ນທີ່ມີພາກສ່ວນໜ້ອຍກວ່າ, ຕາບໃດທີ່ພາກສ່ວນຂອງເວີຊັນທີ່ສັ້ນກວ່າ " +"ນັ້ນກົງກັບພາກສ່ວນເລີ່ມຕົ້ນຂອງເວີຊັນທີ່ຍາວກວ່າຢ່າງແນ່ນອນ." + +#: ../source/specifications/version-specifiers.rst:160 +msgid "" +"An \"upstream project\" is a project that defines its own public versions. A " +"\"downstream project\" is one which tracks and redistributes an upstream " +"project, potentially backporting security and bug fixes from later versions " +"of the upstream project." +msgstr "" +"\"ໂປຣເຈັກຕົ້ນທາງ (upstream project)\" ແມ່ນໂປຣເຈັກທີ່ກຳນົດເວີຊັນສາທາລະນະຂອງຕົນເອງ. " +"\"ໂປຣເຈັກປາຍທາງ (downstream project)\" ແມ່ນໂປຣເຈັກທີ່ຕິດຕາມ ແລະ ນຳເອົາໂປຣເຈັກຕົ້ນທາງ " +"ມາແຈກຈ່າຍຕໍ່, ເຊິ່ງອາດຈະມີການນຳເອົາການແກ້ໄຂຄວາມປອດໄພ ແລະ ບັກຈາກເວີຊັນຫຼ້າສຸດຂອງຕົ້ນທາງ " +"ມາໃສ່ໃນເວີຊັນເກົ່າ (backporting)." + +#: ../source/specifications/version-specifiers.rst:165 +msgid "" +"Local version identifiers SHOULD NOT be used when publishing upstream " +"projects to a public index server, but MAY be used to identify private " +"builds created directly from the project source. Local version identifiers " +"SHOULD be used by downstream projects when releasing a version that is API " +"compatible with the version of the upstream project identified by the public " +"version identifier, but contains additional changes (such as bug fixes). As " +"the Python Package Index is intended solely for indexing and hosting " +"upstream projects, it MUST NOT allow the use of local version identifiers." +msgstr "" +"ຕົວລະບຸເວີຊັນທ້ອງຖິ່ນ \"ບໍ່ຄວນ\" ຖືກໃຊ້ເມື່ອເຜີຍແຜ່ໂປຣເຈັກຕົ້ນທາງໄປຫາອິນເດັກເຊີເວີສາທາລະນະ, ແຕ່ " +"\"ອາດຈະ\" ໃຊ້ເພື່ອລະບຸເວີຊັນທີ່ສ້າງຂຶ້ນເປັນສ່ວນຕົວຈາກຊອດໂຄ້ດຂອງໂປຣເຈັກ. ຕົວລະບຸເວີຊັນທ້ອງຖິ່ນ " +"\"ຄວນ\" ຖືກໃຊ້ໂດຍໂປຣເຈັກປາຍທາງເມື່ອມີການປ່ອຍເວີຊັນທີ່ເຂົ້າກັນໄດ້ກັບ API ຂອງໂປຣເຈັກຕົ້ນທາງ, " +"ແຕ່ມີການປ່ຽນແປງເພີ່ມເຕີມ (ເຊັ່ນການແກ້ໄຂບັກ). ເນື່ອງຈາກ Python Package Index " +"ມີຈຸດປະສົງເພື່ອໃຊ້ເກັບລາຍຊື່ ແລະ ໂຮສຕິງໂປຣເຈັກຕົ້ນທາງເທົ່ານັ້ນ, ມັນ \"ຕ້ອງບໍ່\" ອະນຸຍາດ " +"ໃຫ້ໃຊ້ຕົວລະບຸເວີຊັນທ້ອງຖິ່ນ." + +#: ../source/specifications/version-specifiers.rst:177 +msgid "Final releases" +msgstr "ການປ່ອຍເວີຊັນສົມບູນ (Final releases)" + +#: ../source/specifications/version-specifiers.rst:179 +msgid "" +"A version identifier that consists solely of a release segment and " +"optionally an epoch identifier is termed a \"final release\"." +msgstr "" +"ຕົວລະບຸເວີຊັນທີ່ປະກອບດ້ວຍພາກສ່ວນການປ່ອຍ (release segment) ພຽງຢ່າງດຽວ ແລະ " +"ອາດຈະມີຕົວລະບຸອີພັອກ (epoch identifier) ຈະຖືກເອີ້ນວ່າ \"ການປ່ອຍເວີຊັນສົມບູນ (final release)" +"\"." + +#: ../source/specifications/version-specifiers.rst:182 +msgid "" +"The release segment consists of one or more non-negative integer values, " +"separated by dots::" +msgstr "ພາກສ່ວນການປ່ອຍປະກອບດ້ວຍຄ່າຈຳນວນຖ້ວນບວກໜຶ່ງຕົວ ຫຼື ຫຼາຍກວ່າ, ແຍກກັນດ້ວຍຈຸດ::" + +#: ../source/specifications/version-specifiers.rst:187 +msgid "" +"Final releases within a project MUST be numbered in a consistently " +"increasing fashion, otherwise automated tools will not be able to upgrade " +"them correctly." +msgstr "" +"ການປ່ອຍເວີຊັນສົມບູນພາຍໃນໂປຣເຈັກ \"ຕ້ອງ\" ຖືກຕັ້ງເລກໃນຮູບແບບທີ່ເພີ່ມຂຶ້ນຢ່າງຕໍ່ເນື່ອງ, " +"ບໍ່ດັ່ງນັ້ນເຄື່ອງມືອັດຕະໂນມັດຈະບໍ່ສາມາດອັບເກຣດພວກມັນໄດ້ຢ່າງຖືກຕ້ອງ." + +#: ../source/specifications/version-specifiers.rst:191 +msgid "" +"Comparison and ordering of release segments considers the numeric value of " +"each component of the release segment in turn. When comparing release " +"segments with different numbers of components, the shorter segment is padded " +"out with additional zeros as necessary." +msgstr "" +"ການປຽບທຽບ ແລະ ການຈັດລຳດັບຂອງພາກສ່ວນການປ່ອຍຈະພິຈາລະນາຄ່າຕົວເລກຂອງແຕ່ລະສ່ວນປະກອບ " +"ຕາມລຳດັບ. ເມື່ອປຽບທຽບພາກສ່ວນການປ່ອຍທີ່ມີຈຳນວນສ່ວນປະກອບຕ່າງກັນ, ພາກສ່ວນທີ່ສັ້ນກວ່າ " +"ຈະຖືກຕື່ມດ້ວຍເລກສູນຕາມຄວາມຈຳເປັນ." + +#: ../source/specifications/version-specifiers.rst:196 +msgid "" +"While any number of additional components after the first are permitted " +"under this scheme, the most common variants are to use two components " +"(\"major.minor\") or three components (\"major.minor.micro\")." +msgstr "" +"ເຖິງແມ່ນວ່າຈະສາມາດມີສ່ວນປະກອບເພີ່ມເຕີມໄດ້ບໍ່ຈຳກັດຫຼັງຈາກສ່ວນທຳອິດ, ແຕ່ຮູບແບບທີ່ນິຍົມທີ່ສຸດ " +"ແມ່ນການໃຊ້ສອງສ່ວນ (\"major.minor\") ຫຼື ສາມສ່ວນ (\"major.minor.micro\")." + +#: ../source/specifications/version-specifiers.rst:215 +msgid "" +"A release series is any set of final release numbers that start with a " +"common prefix. For example, ``3.3.1``, ``3.3.5`` and ``3.3.9.45`` are all " +"part of the ``3.3`` release series." +msgstr "" +"ຊຸດຂອງການປ່ອຍ (release series) ແມ່ນກຸ່ມຂອງເລກເວີຊັນສົມບູນທີ່ເລີ່ມຕົ້ນດ້ວຍຕົວເລກທາງໜ້າທີ່ຄືກັນ. " +"ຕົວຢ່າງ: ``3.3.1``, ``3.3.5`` ແລະ ``3.3.9.45`` ທັງໝົດແມ່ນສ່ວນໜຶ່ງຂອງຊຸດການປ່ອຍ ``3.3``." + +#: ../source/specifications/version-specifiers.rst:221 +msgid "" +"``X.Y`` and ``X.Y.0`` are not considered distinct release numbers, as the " +"release segment comparison rules implicit expand the two component form to " +"``X.Y.0`` when comparing it to any release segment that includes three " +"components." +msgstr "" +"``X.Y`` ແລະ ``X.Y.0`` ບໍ່ຖືວ່າເປັນເລກການປ່ອຍທີ່ແຕກຕ່າງກັນ, ເພາະວ່າກົດລະບຽບການປຽບທຽບ " +"ພາກສ່ວນການປ່ອຍຈະຂະຫຍາຍຮູບແບບສອງສ່ວນໃຫ້ເປັນ ``X.Y.0`` ໂດຍອັດຕະໂນມັດ ເມື່ອປຽບທຽບກັບ " +"ພາກສ່ວນການປ່ອຍທີ່ມີສາມສ່ວນ." + +#: ../source/specifications/version-specifiers.rst:226 +msgid "" +"Date-based release segments are also permitted. An example of a date-based " +"release scheme using the year and month of the release::" +msgstr "" +"ພາກສ່ວນການປ່ອຍແບບອີງຕາມວັນທີກໍໄດ້ຮັບການອະນຸຍາດ. ຕົວຢ່າງຂອງຮູບແບບການປ່ອຍແບບອີງຕາມປີ ແລະ " +"ເດືອນ::" + +#: ../source/specifications/version-specifiers.rst:240 +msgid "Pre-releases" +msgstr "ເວີຊັນກ່ອນອອກຈິງ (Pre-releases)" + +#: ../source/specifications/version-specifiers.rst:242 +msgid "" +"Some projects use an \"alpha, beta, release candidate\" pre-release cycle to " +"support testing by their users prior to a final release." +msgstr "" +"ບາງໂປຣເຈັກໃຊ້ວົງຈອນ \"alpha, beta, release candidate\" ກ່ອນການປ່ອຍເວີຊັນສົມບູນ " +"ເພື່ອໃຫ້ຜູ້ໃຊ້ໄດ້ທົດສອບກ່ອນ." + +#: ../source/specifications/version-specifiers.rst:245 +msgid "" +"If used as part of a project's development cycle, these pre-releases are " +"indicated by including a pre-release segment in the version identifier::" +msgstr "" +"ຖ້າຖືກໃຊ້ເປັນສ່ວນໜຶ່ງຂອງວົງຈອນການພັດທະນາ, ເວີຊັນກ່ອນອອກຈິງເຫຼົ່ານີ້ຈະຖືກລະບຸໂດຍການລວມເອົາ ພາກສ່ວນ " +"pre-release ເຂົ້າໃນຕົວລະບຸເວີຊັນ::" + +#: ../source/specifications/version-specifiers.rst:253 +msgid "" +"A version identifier that consists solely of a release segment and a pre-" +"release segment is termed a \"pre-release\"." +msgstr "" +"ຕົວລະບຸເວີຊັນທີ່ປະກອບດ້ວຍພາກສ່ວນການປ່ອຍ (release segment) ແລະ ພາກສ່ວນ pre-release " +"ພຽງເທົ່ານັ້ນ ຈະຖືກເອີ້ນວ່າ \"ເວີຊັນກ່ອນອອກຈິງ (pre-release)\"." + +#: ../source/specifications/version-specifiers.rst:256 +msgid "" +"The pre-release segment consists of an alphabetical identifier for the pre-" +"release phase, along with a non-negative integer value. Pre-releases for a " +"given release are ordered first by phase (alpha, beta, release candidate) " +"and then by the numerical component within that phase." +msgstr "" +"ພາກສ່ວນ pre-release ປະກອບດ້ວຍຕົວອັກສອນລະບຸໄລຍະຂອງ pre-release ພ້ອມກັບຄ່າຈຳນວນຖ້ວນບວກ. " +"ເວີຊັນກ່ອນອອກຈິງຈະຖືກຈັດລຳດັບຕາມໄລຍະ (alpha, beta, release candidate) ແລະ " +"ຕາມດ້ວຍຄ່າຕົວເລກພາຍໃນໄລຍະນັ້ນ." + +#: ../source/specifications/version-specifiers.rst:261 +msgid "" +"Installation tools MAY accept both ``c`` and ``rc`` releases for a common " +"release segment in order to handle some existing legacy distributions." +msgstr "" +"ເຄື່ອງມືໃນການຕິດຕັ້ງ \"ອາດຈະ\" ຍອມຮັບທັງເວີຊັນ ``c`` ແລະ ``rc`` ສຳລັບພາກສ່ວນການປ່ອຍດຽວກັນ " +"ເພື່ອຮອງຮັບການແຈກຈ່າຍແບບເກົ່າບາງຢ່າງທີ່ມີຢູ່." + +#: ../source/specifications/version-specifiers.rst:264 +msgid "" +"Installation tools SHOULD interpret ``c`` versions as being equivalent to " +"``rc`` versions (that is, ``c1`` indicates the same version as ``rc1``)." +msgstr "" +"ເຄື່ອງມືໃນການຕິດຕັ້ງ \"ຄວນ\" ຕີຄວາມໝາຍເວີຊັນ ``c`` ໃຫ້ເທົ່າກັບເວີຊັນ ``rc`` (ໝາຍຄວາມວ່າ " +"``c1`` ລະບຸເວີຊັນດຽວກັນກັບ ``rc1``)." + +#: ../source/specifications/version-specifiers.rst:267 +msgid "" +"Build tools, publication tools and index servers SHOULD disallow the " +"creation of both ``rc`` and ``c`` releases for a common release segment." +msgstr "" +"ເຄື່ອງມືໃນການສ້າງ, ເຄື່ອງມືໃນການເຜີຍແຜ່ ແລະ ອິນເດັກເຊີເວີ \"ຄວນ\" ບໍ່ອະນຸຍາດ ໃຫ້ສ້າງທັງເວີຊັນ " +"``rc`` ແລະ ``c`` ສຳລັບພາກສ່ວນການປ່ອຍດຽວກັນ." + +#: ../source/specifications/version-specifiers.rst:272 +msgid "Post-releases" +msgstr "ເວີຊັນຫຼັງອອກຈິງ (Post-releases)" + +#: ../source/specifications/version-specifiers.rst:274 +msgid "" +"Some projects use post-releases to address minor errors in a final release " +"that do not affect the distributed software (for example, correcting an " +"error in the release notes)." +msgstr "" +"ບາງໂປຣເຈັກໃຊ້ເວີຊັນຫຼັງອອກຈິງເພື່ອແກ້ໄຂຂໍ້ຜິດພາດເລັກນ້ອຍໃນເວີຊັນສົມບູນ ເຊິ່ງບໍ່ມີຜົນກະທົບຕໍ່ຊອບແວ " +"(ຕົວຢ່າງ: ການແກ້ໄຂຄຳຜິດໃນເອກະສານແຈ້ງການປ່ອຍ)." + +#: ../source/specifications/version-specifiers.rst:278 +msgid "" +"If used as part of a project's development cycle, these post-releases are " +"indicated by including a post-release segment in the version identifier::" +msgstr "" +"ຖ້າຖືກໃຊ້ເປັນສ່ວນໜຶ່ງຂອງວົງຈອນການພັດທະນາ, ເວີຊັນຫຼັງອອກຈິງເຫຼົ່ານີ້ຈະຖືກລະບຸໂດຍການລວມເອົາ ພາກສ່ວນ " +"post-release ເຂົ້າໃນຕົວລະບຸເວີຊັນ::" + +#: ../source/specifications/version-specifiers.rst:283 +msgid "" +"A version identifier that includes a post-release segment without a " +"developmental release segment is termed a \"post-release\"." +msgstr "" +"ຕົວລະບຸເວີຊັນທີ່ມີພາກສ່ວນ post-release ໂດຍບໍ່ມີພາກສ່ວນ developmental release ຈະຖືກເອີ້ນວ່າ " +"\"ເວີຊັນຫຼັງອອກຈິງ (post-release)\"." + +#: ../source/specifications/version-specifiers.rst:286 +msgid "" +"The post-release segment consists of the string ``.post``, followed by a non-" +"negative integer value. Post-releases are ordered by their numerical " +"component, immediately following the corresponding release, and ahead of any " +"subsequent release." +msgstr "" +"ພາກສ່ວນ post-release ປະກອບດ້ວຍຂໍ້ຄວາມ ``.post`` ຕາມດ້ວຍຄ່າຈຳນວນຖ້ວນບວກ. " +"ເວີຊັນຫຼັງອອກຈິງຈະຖືກຈັດລຳດັບຕາມຄ່າຕົວເລກ, ໂດຍຕໍ່ຈາກເວີຊັນທີ່ກ່ຽວຂ້ອງທັນທີ ແລະ " +"ຢູ່ກ່ອນການປ່ອຍເວີຊັນຖັດໄປໃດໆ." + +#: ../source/specifications/version-specifiers.rst:293 +msgid "" +"The use of post-releases to publish maintenance releases containing actual " +"bug fixes is strongly discouraged. In general, it is better to use a longer " +"release number and increment the final component for each maintenance " +"release." +msgstr "" +"ການໃຊ້ post-releases ເພື່ອເຜີຍແຜ່ເວີຊັນປັບປຸງທີ່ມີການແກ້ໄຂບັກແທ້ໆນັ້ນແມ່ນ \"ບໍ່ແນະນຳຢ່າງຍິ່ງ\". " +"ໂດຍທົ່ວໄປແລ້ວ, ມັນດີກວ່າທີ່ຈະໃຊ້ເລກເວີຊັນທີ່ຍາວກວ່າ ແລະ ເພີ່ມຄ່າໃນສ່ວນປະກອບສຸດທ້າຍ " +"ສຳລັບແຕ່ລະເວີຊັນປັບປຸງ." + +#: ../source/specifications/version-specifiers.rst:298 +msgid "Post-releases are also permitted for pre-releases::" +msgstr "" +"ເວີຊັນຫຼັງອອກຈິງ (Post-releases) ຍັງຖືກອະນຸຍາດໃຫ້ໃຊ້ກັບເວີຊັນກ່ອນອອກຈິງ (pre-releases)::" + +#: ../source/specifications/version-specifiers.rst:306 +msgid "" +"Creating post-releases of pre-releases is strongly discouraged, as it makes " +"the version identifier difficult to parse for human readers. In general, it " +"is substantially clearer to simply create a new pre-release by incrementing " +"the numeric component." +msgstr "" +"ການສ້າງ post-releases ຂອງ pre-releases ແມ່ນ \"ບໍ່ແນະນຳຢ່າງຍິ່ງ\", ເພາະວ່າມັນເຮັດໃຫ້ " +"ຕົວລະບຸເວີຊັນອ່ານ ແລະ ເຂົ້າໃຈຍາກສຳລັບຄົນ. ໂດຍທົ່ວໄປແລ້ວ, ມັນຈະແຈ້ງກວ່າທີ່ຈະສ້າງ pre-release " +"ໃໝ່ໂດຍການເພີ່ມຄ່າຕົວເລກ." + +#: ../source/specifications/version-specifiers.rst:313 +msgid "Developmental releases" +msgstr "ເວີຊັນລະຫວ່າງການພັດທະນາ (Developmental releases)" + +#: ../source/specifications/version-specifiers.rst:315 +msgid "" +"Some projects make regular developmental releases, and system packagers " +"(especially for Linux distributions) may wish to create early releases " +"directly from source control which do not conflict with later project " +"releases." +msgstr "" +"ບາງໂປຣເຈັກມີການປ່ອຍເວີຊັນລະຫວ່າງການພັດທະນາເປັນປະຈຳ, ແລະ ຜູ້ຈັດເຮັດແພັກເກດລະບົບ " +"(ໂດຍສະເພາະສຳລັບ Linux distributions) ອາດຈະຕ້ອງການສ້າງເວີຊັນເລີ່ມຕົ້ນໂດຍກົງຈາກ " +"ລະບົບຄວບຄຸມຊອດໂຄ້ດ ເຊິ່ງບໍ່ໃຫ້ໄປຊ້ຳກັບການປ່ອຍເວີຊັນຂອງໂປຣເຈັກໃນພາຍຫຼັງ." + +#: ../source/specifications/version-specifiers.rst:320 +msgid "" +"If used as part of a project's development cycle, these developmental " +"releases are indicated by including a developmental release segment in the " +"version identifier::" +msgstr "" +"ຖ້າຖືກໃຊ້ເປັນສ່ວນໜຶ່ງຂອງວົງຈອນການພັດທະນາ, ເວີຊັນລະຫວ່າງການພັດທະນາເຫຼົ່ານີ້ຈະຖືກລະບຸໂດຍການລວມເອົາ " +"ພາກສ່ວນ developmental release ເຂົ້າໃນຕົວລະບຸເວີຊັນ::" + +#: ../source/specifications/version-specifiers.rst:326 +msgid "" +"A version identifier that includes a developmental release segment is termed " +"a \"developmental release\"." +msgstr "" +"ຕົວລະບຸເວີຊັນທີ່ມີພາກສ່ວນ developmental release ຈະຖືກເອີ້ນວ່າ \"ເວີຊັນລະຫວ່າງການພັດທະນາ " +"(developmental release)\"." + +#: ../source/specifications/version-specifiers.rst:329 +msgid "" +"The developmental release segment consists of the string ``.dev``, followed " +"by a non-negative integer value. Developmental releases are ordered by their " +"numerical component, immediately before the corresponding release (and " +"before any pre-releases with the same release segment), and following any " +"previous release (including any post-releases)." +msgstr "" +"ພາກສ່ວນ developmental release ປະກອບດ້ວຍຂໍ້ຄວາມ ``.dev`` ຕາມດ້ວຍຄ່າຈຳນວນຖ້ວນບວກ. " +"ເວີຊັນລະຫວ່າງການພັດທະນາຈະຖືກຈັດລຳດັບຕາມຄ່າຕົວເລກ, ໂດຍຢູ່ກ່ອນເວີຊັນທີ່ກ່ຽວຂ້ອງທັນທີ (ແລະ ກ່ອນ pre-" +"releases ທີ່ມີພາກສ່ວນການປ່ອຍດຽວກັນ), ແລະ ຕໍ່ຈາກເວີຊັນກ່ອນໜ້ານີ້ໃດໆ (ລວມເຖິງ post-releases)." + +#: ../source/specifications/version-specifiers.rst:335 +msgid "" +"Developmental releases are also permitted for pre-releases and post-" +"releases::" +msgstr "" +"ເວີຊັນລະຫວ່າງການພັດທະນາ (Developmental releases) ຍັງຖືກອະນຸຍາດໃຫ້ໃຊ້ກັບ pre-releases " +"ແລະ post-releases::" + +#: ../source/specifications/version-specifiers.rst:343 +msgid "" +"Do note that development releases are considered a type of pre-release when " +"handling them." +msgstr "ໃຫ້ສັງເກດວ່າເວີຊັນລະຫວ່າງການພັດທະນາຖືກຖືວ່າເປັນປະເພດໜຶ່ງຂອງ pre-release ໃນການຈັດການ." + +#: ../source/specifications/version-specifiers.rst:348 +msgid "" +"While they may be useful for continuous integration purposes, publishing " +"developmental releases of pre-releases to general purpose public index " +"servers is strongly discouraged, as it makes the version identifier " +"difficult to parse for human readers. If such a release needs to be " +"published, it is substantially clearer to instead create a new pre-release " +"by incrementing the numeric component." +msgstr "" +"ເຖິງວ່າມັນຈະມີປະໂຫຍດສຳລັບການເຮັດ continuous integration (CI), ແຕ່ການເຜີຍແຜ່ " +"developmental releases ຂອງ pre-releases ໄປຫາອິນເດັກເຊີເວີສາທາລະນະແມ່ນ " +"\"ບໍ່ແນະນຳຢ່າງຍິ່ງ\", ເນື່ອງຈາກມັນເຮັດໃຫ້ຕົວລະບຸເວີຊັນອ່ານ ແລະ ເຂົ້າໃຈຍາກ. " +"ຖ້າຈຳເປັນຕ້ອງເຜີຍແຜ່ເວີຊັນດັ່ງກ່າວ, ມັນຈະແຈ້ງກວ່າທີ່ຈະສ້າງ pre-release ໃໝ່ໂດຍການເພີ່ມຄ່າຕົວເລກ." + +#: ../source/specifications/version-specifiers.rst:355 +msgid "" +"Developmental releases of post-releases are also strongly discouraged, but " +"they may be appropriate for projects which use the post-release notation for " +"full maintenance releases which may include code changes." +msgstr "" +"ການອອກເວີຊັນສຳລັບການພັດທະນາ (Developmental releases) ຂອງ post-releases " +"ແມ່ນບໍ່ແນະນຳຢ່າງເດັດຂາດ, ແຕ່ພວກມັນອາດຈະເໝາະສົມສຳລັບໂປຣເຈັກທີ່ໃຊ້ຮູບແບບ post-release " +"ສຳລັບເວີຊັນການບຳລຸງຮັກສາແບບເຕັມຮູບແບບ ເຊິ່ງອາດລວມມີການປ່ຽນແປງລະຫັດ." + +#: ../source/specifications/version-specifiers.rst:361 +msgid "Version epochs" +msgstr "ອີພັອກຂອງເວີຊັນ (Version epochs)" + +#: ../source/specifications/version-specifiers.rst:363 +msgid "" +"If included in a version identifier, the epoch appears before all other " +"components, separated from the release segment by an exclamation mark::" +msgstr "" +"ຖ້າລວມຢູ່ໃນຕົວລະບຸເວີຊັນ, ອີພັອກຈະປະກົດຢູ່ທາງໜ້າສ່ວນປະກອບອື່ນໆທັງໝົດ, " +"ໂດຍແຍກຈາກພາກສ່ວນການປ່ອຍດ້ວຍເຄື່ອງໝາຍອັດສະຈັນ (!)::" + +#: ../source/specifications/version-specifiers.rst:368 +msgid "If no explicit epoch is given, the implicit epoch is ``0``." +msgstr "ຖ້າບໍ່ມີການກຳນົດອີພັອກຢ່າງຊັດເຈນ, ອີພັອກໂດຍນໄນຈະແມ່ນ ``0``." + +#: ../source/specifications/version-specifiers.rst:370 +msgid "" +"Most version identifiers will not include an epoch, as an explicit epoch is " +"only needed if a project *changes* the way it handles version numbering in a " +"way that means the normal version ordering rules will give the wrong answer. " +"For example, if a project is using date based versions like ``2014.04`` and " +"would like to switch to semantic versions like ``1.0``, then the new " +"releases would be identified as *older* than the date based releases when " +"using the normal sorting scheme::" +msgstr "" +"ຕົວລະບຸເວີຊັນສ່ວນໃຫຍ່ຈະບໍ່ມີອີພັອກ, ເພາະວ່າອີພັອກທີ່ຊັດເຈນແມ່ນຈຳເປັນກໍຕໍ່ເມື່ອໂປຣເຈັກ *ປ່ຽນ* " +"ວິທີການຕັ້ງເລກເວີຊັນ ເຊິ່ງເຮັດໃຫ້ກົດລະບຽບການຈັດລຳດັບເວີຊັນປົກກະຕິໃຫ້ຜົນທີ່ຜິດພາດ. ຕົວຢ່າງ: " +"ຖ້າໂປຣເຈັກໃຊ້ເວີຊັນແບບອີງຕາມວັນທີເຊັ່ນ ``2014.04`` ແລະ ຕ້ອງການປ່ຽນມາໃຊ້ ເວີຊັນແບບ semantic " +"ເຊັ່ນ ``1.0``, ເວີຊັນໃໝ່ຈະຖືກລະບຸວ່າ *ເກົ່າກວ່າ* ເວີຊັນແບບອີງຕາມວັນທີ " +"ເມື່ອໃຊ້ວິທີການຈັດລຳດັບແບບປົກກະຕິ::" + +#: ../source/specifications/version-specifiers.rst:384 +msgid "" +"However, by specifying an explicit epoch, the sort order can be changed " +"appropriately, as all versions from a later epoch are sorted after versions " +"from an earlier epoch::" +msgstr "" +"ແນວໃດກໍຕາມ, ໂດຍການກຳນົດອີພັອກທີ່ຊັດເຈນ, ລຳດັບການຈັດລຽງສາມາດຖືກປ່ຽນແປງໄດ້ຢ່າງເໝາະສົມ, " +"ເນື່ອງຈາກທຸກເວີຊັນຈາກອີພັອກທີ່ຫຼັງກວ່າຈະຖືກຈັດລຽງຕໍ່ຈາກເວີຊັນໃນອີພັອກກ່ອນໜ້ານັ້ນ::" + +#: ../source/specifications/version-specifiers.rst:396 +msgid "" +"Use of nonzero epochs is discouraged. They are often not supported or " +"discouraged by downstream packaging where Python packages may need to be " +"consumed, and due to their scarce use they may also not be well supported by " +"Python packaging tools." +msgstr "" +"ການໃຊ້ອີພັອກທີ່ບໍ່ແມ່ນສູນແມ່ນ \"ບໍ່ແນະນຳ\". ພວກມັນມັກຈະບໍ່ໄດ້ຮັບການຮອງຮັບ ຫຼື ບໍ່ໄດ້ຮັບການແນະນຳ " +"ໂດຍການຈັດເຮັດແພັກເກດປາຍທາງ (downstream), ແລະ ເນື່ອງຈາກການໃຊ້ງານທີ່ມີໜ້ອຍ, ພວກມັນອາດຈະ " +"ບໍ່ໄດ້ຮັບການຮອງຮັບທີ່ດີໂດຍເຄື່ອງມືຈັດການແພັກເກດຂອງ Python." + +#: ../source/specifications/version-specifiers.rst:401 +msgid "" +"When version scheme needs to be changed, it is preferable to continue with " +"monotonically increasing numbers in epoch zero. For example, the version " +"2026.x could be unambiguously followed by 3000.x." +msgstr "" +"ເມື່ອຕ້ອງການປ່ຽນຮູບແບບເວີຊັນ, ແມ່ນດີກວ່າທີ່ຈະໃຊ້ຕົວເລກທີ່ເພີ່ມຂຶ້ນເລື້ອຍໆໃນອີພັອກສູນ (epoch zero). " +"ຕົວຢ່າງ: ເວີຊັນ 2026.x ສາມາດຕາມດ້ວຍ 3000.x ໄດ້ໂດຍບໍ່ມີຄວາມກຳກວມ." + +#: ../source/specifications/version-specifiers.rst:405 +msgid "" +"See `Discouraging use of epoch segments in versions `__ for the relevant discussion." +msgstr "" +"ເບິ່ງ `Discouraging use of epoch segments in versions `__ ສຳລັບການສົນທະນາທີ່ກ່ຽວຂ້ອງ." + +#: ../source/specifications/version-specifiers.rst:413 +msgid "Normalization" +msgstr "ການປັບໃຫ້ເປັນມາດຕະຖານ (Normalization)" + +#: ../source/specifications/version-specifiers.rst:415 +msgid "" +"In order to maintain better compatibility with existing versions there are a " +"number of \"alternative\" syntaxes that MUST be taken into account when " +"parsing versions. These syntaxes MUST be considered when parsing a version, " +"however they should be \"normalized\" to the standard syntax defined above." +msgstr "" +"ເພື່ອຮັກສາຄວາມເຂົ້າກັນໄດ້ດີຂຶ້ນກັບເວີຊັນທີ່ມີຢູ່, ຍັງມີໄວຍາກອນ \"ທາງເລືອກ\" ຫຼາຍຢ່າງທີ່ \"ຕ້ອງ\" " +"ຖືກນຳມາພິຈາລະນາເມື່ອມີການວິເຄາະ (parsing) ເວີຊັນ. ໄວຍາກອນເຫຼົ່ານີ້ \"ຕ້ອງ\" ຖືກພິຈາລະນາ " +"ແຕ່ພວກມັນຄວນຈະຖືກ \"ປັບໃຫ້ເປັນມາດຕະຖານ (normalized)\" " +"ໃຫ້ເປັນໄວຍາກອນມາດຕະຖານທີ່ກຳນົດໄວ້ຂ້າງເທິງ." + +#: ../source/specifications/version-specifiers.rst:422 +msgid "Case sensitivity" +msgstr "ການແຍກຕົວພິມໃຫຍ່ພິມນ້ອຍ (Case sensitivity)" + +#: ../source/specifications/version-specifiers.rst:424 +msgid "" +"All ascii letters should be interpreted case insensitively within a version " +"and the normal form is lowercase. This allows versions such as ``1.1RC1`` " +"which would be normalized to ``1.1rc1``." +msgstr "" +"ຕົວອັກສອນ ASCII ທັງໝົດໃນເວີຊັນຄວນຖືກຕີຄວາມໝາຍໂດຍບໍ່ແຍກຕົວພິມໃຫຍ່ພິມນ້ອຍ ແລະ " +"ຮູບແບບປົກກະຕິແມ່ນຕົວພິມນ້ອຍ. ສິ່ງນີ້ຊ່ວຍໃຫ້ເວີຊັນເຊັ່ນ ``1.1RC1`` ຖືກປັບໃຫ້ເປັນມາດຕະຖານເປັນ " +"``1.1rc1``." + +#: ../source/specifications/version-specifiers.rst:430 +msgid "Integer Normalization" +msgstr "ການປັບຈຳນວນຖ້ວນໃຫ້ເປັນມາດຕະຖານ" + +#: ../source/specifications/version-specifiers.rst:432 +msgid "" +"All integers are interpreted via the ``int()`` built in and normalize to the " +"string form of the output. This means that an integer version of ``00`` " +"would normalize to ``0`` while ``09000`` would normalize to ``9000``. This " +"does not hold true for integers inside of an alphanumeric segment of a local " +"version such as ``1.0+foo0100`` which is already in its normalized form." +msgstr "" +"ຈຳນວນຖ້ວນທັງໝົດຈະຖືກຕີຄວາມໝາຍຜ່ານຟັງຊັນ ``int()`` ແລະ ປັບໃຫ້ເປັນຮູບແບບຂໍ້ຄວາມ (string) " +"ຂອງຜົນລັອກ. ໝາຍຄວາມວ່າ ເວີຊັນຕົວເລກ ``00`` ຈະຖືກປັບເປັນ ``0`` ໃນຂະນະທີ່ ``09000`` " +"ຈະຖືກປັບເປັນ ``9000``. ສິ່ງນີ້ບໍ່ລວມເຖິງຕົວເລກທີ່ຢູ່ໃນພາກສ່ວນຕົວອັກສອນປົນຕົວເລກຂອງ ເວີຊັນທ້ອງຖິ່ນ ເຊັ່ນ " +"``1.0+foo0100`` ເຊິ່ງຖືວ່າຢູ່ໃນຮູບແບບມາດຕະຖານຢູ່ແລ້ວ." + +#: ../source/specifications/version-specifiers.rst:440 +msgid "Pre-release separators" +msgstr "ຕົວແຍກ Pre-release" + +#: ../source/specifications/version-specifiers.rst:442 +msgid "" +"Pre-releases should allow a ``.``, ``-``, or ``_`` separator between the " +"release segment and the pre-release segment. The normal form for this is " +"without a separator. This allows versions such as ``1.1.a1`` or ``1.1-a1`` " +"which would be normalized to ``1.1a1``. It should also allow a separator to " +"be used between the pre-release signifier and the numeral. This allows " +"versions such as ``1.0a.1`` which would be normalized to ``1.0a1``." +msgstr "" +"Pre-releases ຄວນອະນຸຍາດໃຫ້ໃຊ້ຕົວແຍກ ``.``, ``-``, ຫຼື ``_`` ລະຫວ່າງພາກສ່ວນການປ່ອຍ ແລະ " +"ພາກສ່ວນ pre-release. ຮູບແບບປົກກະຕິແມ່ນບໍ່ມີຕົວແຍກ. ສິ່ງນີ້ຊ່ວຍໃຫ້ເວີຊັນເຊັ່ນ ``1.1.a1`` ຫຼື ``1.1-" +"a1`` ຖືກປັບເປັນ ``1.1a1``. ມັນຄວນຈະອະນຸຍາດໃຫ້ໃຊ້ຕົວແຍກ ລະຫວ່າງຕົວລະບຸ pre-release ແລະ " +"ຕົວເລກນຳດ້ວຍ. ສິ່ງນີ້ຊ່ວຍໃຫ້ເວີຊັນເຊັ່ນ ``1.0a.1`` ຖືກປັບເປັນ ``1.0a1``." + +#: ../source/specifications/version-specifiers.rst:451 +msgid "Pre-release spelling" +msgstr "ການສະກົດຄຳ Pre-release" + +#: ../source/specifications/version-specifiers.rst:453 +msgid "" +"Pre-releases allow the additional spellings of ``alpha``, ``beta``, ``c``, " +"``pre``, and ``preview`` for ``a``, ``b``, ``rc``, ``rc``, and ``rc`` " +"respectively. This allows versions such as ``1.1alpha1``, ``1.1beta2``, or " +"``1.1c3`` which normalize to ``1.1a1``, ``1.1b2``, and ``1.1rc3``. In every " +"case the additional spelling should be considered equivalent to their normal " +"forms." +msgstr "" +"Pre-releases ອະນຸຍາດໃຫ້ໃຊ້ການສະກົດຄຳເພີ່ມເຕີມເຊັ່ນ ``alpha``, ``beta``, ``c``, " +"``pre``, ແລະ ``preview`` ແທນ ``a``, ``b``, ``rc``, ``rc``, ແລະ ``rc`` " +"ຕາມລຳດັບ. ສິ່ງນີ້ຊ່ວຍໃຫ້ເວີຊັນເຊັ່ນ ``1.1alpha1``, ``1.1beta2``, ຫຼື ``1.1c3`` ຖືກປັບເປັນ " +"``1.1a1``, ``1.1b2``, ແລະ ``1.1rc3``. ໃນທຸກກໍລະນີ, ການສະກົດຄຳເພີ່ມເຕີມ " +"ຄວນຖືກຖືວ່າເທົ່າກັບຮູບແບບປົກກະຕິຂອງພວກມັນ." + +#: ../source/specifications/version-specifiers.rst:462 +msgid "Implicit pre-release number" +msgstr "ຕົວເລກ pre-release ໂດຍນໄນ" + +#: ../source/specifications/version-specifiers.rst:464 +msgid "" +"Pre releases allow omitting the numeral in which case it is implicitly " +"assumed to be ``0``. The normal form for this is to include the ``0`` " +"explicitly. This allows versions such as ``1.2a`` which is normalized to " +"``1.2a0``." +msgstr "" +"Pre releases ອະນຸຍາດໃຫ້ຕັດຕົວເລກອອກໄດ້ ເຊິ່ງໃນກໍລະນີນັ້ນຈະຖືກຄິດວ່າເປັນ ``0`` ໂດຍນໄນ. " +"ຮູບແບບປົກກະຕິແມ່ນການລວມເອົາ ``0`` ໄວ້ຢ່າງຊັດເຈນ. ສິ່ງນີ້ຊ່ວຍໃຫ້ເວີຊັນເຊັ່ນ ``1.2a`` ຖືກປັບເປັນ " +"``1.2a0``." + +#: ../source/specifications/version-specifiers.rst:470 +msgid "Post release separators" +msgstr "ຕົວແຍກ Post release" + +#: ../source/specifications/version-specifiers.rst:472 +msgid "" +"Post releases allow a ``.``, ``-``, or ``_`` separator as well as omitting " +"the separator all together. The normal form of this is with the ``.`` " +"separator. This allows versions such as ``1.2-post2`` or ``1.2post2`` which " +"normalize to ``1.2.post2``. Like the pre-release separator this also allows " +"an optional separator between the post release signifier and the numeral. " +"This allows versions like ``1.2.post-2`` which would normalize to " +"``1.2.post2``." +msgstr "" +"Post releases ອະນຸຍາດໃຫ້ໃຊ້ຕົວແຍກ ``.``, ``-``, ຫຼື ``_`` " +"ພ້ອມທັງສາມາດຕັດຕົວແຍກອອກໄດ້ເລີຍ. ຮູບແບບປົກກະຕິແມ່ນໃຊ້ຕົວແຍກ ``.``. ສິ່ງນີ້ຊ່ວຍໃຫ້ເວີຊັນເຊັ່ນ ``1.2-" +"post2`` ຫຼື ``1.2post2`` ຖືກປັບເປັນ ``1.2.post2``. ເຊັ່ນດຽວກັບຕົວແຍກ pre-release, " +"ສິ່ງນີ້ຍັງອະນຸຍາດ ໃຫ້ມີຕົວແຍກເສີມລະຫວ່າງຕົວລະບຸ post release ແລະ ຕົວເລກ. ສິ່ງນີ້ຊ່ວຍໃຫ້ເວີຊັນເຊັ່ນ " +"``1.2.post-2`` ຖືກປັບເປັນ ``1.2.post2``." + +#: ../source/specifications/version-specifiers.rst:481 +msgid "Post release spelling" +msgstr "ການສະກົດຄຳ Post release" + +#: ../source/specifications/version-specifiers.rst:483 +msgid "" +"Post-releases allow the additional spellings of ``rev`` and ``r``. This " +"allows versions such as ``1.0-r4`` which normalizes to ``1.0.post4``. As " +"with the pre-releases the additional spellings should be considered " +"equivalent to their normal forms." +msgstr "" +"Post-releases ອະນຸຍາດໃຫ້ໃຊ້ການສະກົດຄຳເພີ່ມເຕີມເຊັ່ນ ``rev`` ແລະ ``r``. " +"ສິ່ງນີ້ຊ່ວຍໃຫ້ເວີຊັນເຊັ່ນ ``1.0-r4`` ຖືກປັບເປັນ ``1.0.post4``. ເຊັ່ນດຽວກັບ pre-releases, " +"ການສະກົດຄຳເພີ່ມເຕີມຄວນຖືກຖືວ່າເທົ່າກັບຮູບແບບປົກກະຕິ." + +#: ../source/specifications/version-specifiers.rst:490 +msgid "Implicit post release number" +msgstr "ຕົວເລກ post release ໂດຍນໄນ" + +#: ../source/specifications/version-specifiers.rst:492 +msgid "" +"Post releases allow omitting the numeral in which case it is implicitly " +"assumed to be ``0``. The normal form for this is to include the ``0`` " +"explicitly. This allows versions such as ``1.2.post`` which is normalized to " +"``1.2.post0``." +msgstr "" +"Post releases ອະນຸຍາດໃຫ້ຕັດຕົວເລກອອກໄດ້ ເຊິ່ງໃນກໍລະນີນັ້ນຈະຖືກຄິດວ່າເປັນ ``0`` ໂດຍນໄນ. " +"ຮູບແບບປົກກະຕິແມ່ນການລວມເອົາ ``0`` ໄວ້ຢ່າງຊັດເຈນ. ສິ່ງນີ້ຊ່ວຍໃຫ້ເວີຊັນເຊັ່ນ ``1.2.post`` " +"ຖືກປັບເປັນ ``1.2.post0``." + +#: ../source/specifications/version-specifiers.rst:498 +msgid "Implicit post releases" +msgstr "Post releases ໂດຍນໄນ" + +#: ../source/specifications/version-specifiers.rst:500 +msgid "" +"Post releases allow omitting the ``post`` signifier all together. When using " +"this form the separator MUST be ``-`` and no other form is allowed. This " +"allows versions such as ``1.0-1`` to be normalized to ``1.0.post1``. This " +"particular normalization MUST NOT be used in conjunction with the implicit " +"post release number rule. In other words, ``1.0-`` is *not* a valid version " +"and it does *not* normalize to ``1.0.post0``." +msgstr "" +"Post releases ອະນຸຍາດໃຫ້ຕັດຕົວລະບຸ ``post`` ອອກໄດ້ທັງໝົດ. ເມື່ອໃຊ້ຮູບແບບນີ້ ຕົວແຍກ \"ຕ້ອງ\" " +"ແມ່ນ ``-`` ແລະ ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ຮູບແບບອື່ນ. ສິ່ງນີ້ຊ່ວຍໃຫ້ເວີຊັນ ເຊັ່ນ ``1.0-1`` ຖືກປັບເປັນ " +"``1.0.post1``. ການປັບໃຫ້ເປັນມາດຕະຖານແບບນີ້ \"ຕ້ອງບໍ່\" ຖືກໃຊ້ຮ່ວມກັບກົດລະບຽບຕົວເລກ post " +"release ໂດຍນໄນ. ໝາຍຄວາມວ່າ ``1.0-`` \"ບໍ່ແມ່ນ\" ເວີຊັນທີ່ຖືກຕ້ອງ ແລະ ມັນ \"ບໍ່ໄດ້\" " +"ຖືກປັບເປັນ ``1.0.post0``." + +#: ../source/specifications/version-specifiers.rst:509 +msgid "Development release separators" +msgstr "ຕົວແຍກ Development release" + +#: ../source/specifications/version-specifiers.rst:511 +msgid "" +"Development releases allow a ``.``, ``-``, or a ``_`` separator as well as " +"omitting the separator all together. The normal form of this is with the " +"``.`` separator. This allows versions such as ``1.2-dev2`` or ``1.2dev2`` " +"which normalize to ``1.2.dev2``." +msgstr "" +"Development releases ອະນຸຍາດໃຫ້ໃຊ້ຕົວແຍກ ``.``, ``-``, ຫຼື ``_`` " +"ພ້ອມທັງສາມາດຕັດຕົວແຍກອອກໄດ້ເລີຍ. ຮູບແບບປົກກະຕິແມ່ນໃຊ້ຕົວແຍກ ``.``. ສິ່ງນີ້ຊ່ວຍໃຫ້ເວີຊັນເຊັ່ນ ``1.2-" +"dev2`` ຫຼື ``1.2dev2`` ຖືກປັບເປັນ ``1.2.dev2``." + +#: ../source/specifications/version-specifiers.rst:518 +msgid "Implicit development release number" +msgstr "ຕົວເລກ development release ໂດຍນໄນ" + +#: ../source/specifications/version-specifiers.rst:520 +msgid "" +"Development releases allow omitting the numeral in which case it is " +"implicitly assumed to be ``0``. The normal form for this is to include the " +"``0`` explicitly. This allows versions such as ``1.2.dev`` which is " +"normalized to ``1.2.dev0``." +msgstr "" +"Development releases ອະນຸຍາດໃຫ້ຕັດຕົວເລກອອກໄດ້ ເຊິ່ງໃນກໍລະນີນັ້ນຈະຖືກຄິດວ່າເປັນ ``0`` " +"ໂດຍນໄນ. ຮູບແບບປົກກະຕິແມ່ນການລວມເອົາ ``0`` ໄວ້ຢ່າງຊັດເຈນ. ສິ່ງນີ້ຊ່ວຍໃຫ້ເວີຊັນເຊັ່ນ ``1.2.dev`` " +"ຖືກປັບເປັນ ``1.2.dev0``." + +#: ../source/specifications/version-specifiers.rst:527 +msgid "Local version segments" +msgstr "ພາກສ່ວນເວີຊັນທ້ອງຖິ່ນ" + +#: ../source/specifications/version-specifiers.rst:529 +msgid "" +"With a local version, in addition to the use of ``.`` as a separator of " +"segments, the use of ``-`` and ``_`` is also acceptable. The normal form is " +"using the ``.`` character. This allows versions such as ``1.0+ubuntu-1`` to " +"be normalized to ``1.0+ubuntu.1``." +msgstr "" +"ສຳລັບເວີຊັນທ້ອງຖິ່ນ, ນອກຈາກການໃຊ້ ``.`` ເປັນຕົວແຍກພາກສ່ວນແລ້ວ, ການໃຊ້ ``-`` ແລະ ``_`` " +"ກໍເປັນທີ່ຍອມຮັບໄດ້. ຮູບແບບປົກກະຕິແມ່ນການໃຊ້ຕົວອັກສອນ ``.``. ສິ່ງນີ້ຊ່ວຍໃຫ້ເວີຊັນເຊັ່ນ " +"``1.0+ubuntu-1`` ຖືກປັບເປັນ ``1.0+ubuntu.1``." + +#: ../source/specifications/version-specifiers.rst:536 +msgid "Preceding v character" +msgstr "ຕົວອັກສອນ v ທາງໜ້າ" + +#: ../source/specifications/version-specifiers.rst:538 +msgid "" +"In order to support the common version notation of ``v1.0`` versions may be " +"preceded by a single literal ``v`` character. This character MUST be ignored " +"for all purposes and should be omitted from all normalized forms of the " +"version. The same version with and without the ``v`` is considered " +"equivalent." +msgstr "" +"ເພື່ອຮອງຮັບຮູບແບບການຂຽນເວີຊັນທົ່ວໄປເຊັ່ນ ``v1.0``, ເວີຊັນຕ່າງໆອາດຈະມີຕົວອັກສອນ ``v`` ຢູ່ທາງໜ້າ. " +"ຕົວອັກສອນນີ້ ຕ້ອງ (MUST) ຖືກລະເລີຍໃນທຸກກໍລະນີ ແລະ " +"ຄວນຖືກຕັດອອກຈາກຮູບແບບມາດຕະຖານທັງໝົດຂອງເວີຊັນ. ເວີຊັນດຽວກັນທີ່ມີ ແລະ ບໍ່ມີ ``v`` " +"ແມ່ນຖືວ່າທຽບເທົ່າກັນ." + +#: ../source/specifications/version-specifiers.rst:545 +msgid "Leading and Trailing Whitespace" +msgstr "ຍະຫວ່າງທາງໜ້າ ແລະ ທາງຫຼັງ" + +#: ../source/specifications/version-specifiers.rst:547 +msgid "" +"Leading and trailing whitespace must be silently ignored and removed from " +"all normalized forms of a version. This includes ``\" \"``, ``\\t``, " +"``\\n``, ``\\r``, ``\\f``, and ``\\v``. This allows accidental whitespace to " +"be handled sensibly, such as a version like ``1.0\\n`` which normalizes to " +"``1.0``." +msgstr "" +"ຍະຫວ່າງ (whitespace) ທາງໜ້າ ແລະ ທາງຫຼັງຕ້ອງຖືກລະເລີຍ ແລະ " +"ຕັດອອກຈາກທຸກຮູບແບບມາດຕະຖານຂອງເວີຊັນ. ເຊິ່ງລວມເຖິງ ``\" \"``, ``\\t``, ``\\n``, " +"``\\r``, ``\\f``, ແລະ ``\\v``. " +"ສິ່ງນີ້ຊ່ວຍໃຫ້ການຈັດການກັບຍະຫວ່າງທີ່ບໍ່ໄດ້ຕັ້ງໃຈເປັນໄປຢ່າງເໝາະສົມ ເຊັ່ນເວີຊັນ ``1.0\\n`` ຈະຖືກປັບເປັນ " +"``1.0``." + +#: ../source/specifications/version-specifiers.rst:554 +msgid "Examples of compliant version schemes" +msgstr "ຕົວຢ່າງຂອງຮູບແບບເວີຊັນທີ່ຖືກຕ້ອງຕາມຂໍ້ກຳນົດ" + +#: ../source/specifications/version-specifiers.rst:556 +msgid "" +"The standard version scheme is designed to encompass a wide range of " +"identification practices across public and private Python projects. In " +"practice, a single project attempting to use the full flexibility offered by " +"the scheme would create a situation where human users had difficulty " +"figuring out the relative order of versions, even though the rules above " +"ensure all compliant tools will order them consistently." +msgstr "" +"ຮູບແບບເວີຊັນມາດຕະຖານຖືກອອກແບບມາເພື່ອໃຫ້ຄຸມເຖິງວິທີການລະບຸເວີຊັນທີ່ຫຼາກຫຼາຍ ໃນໂປຣເຈັກ Python " +"ທັງແບບສາທາລະນະ ແລະ ສ່ວນຕົວ. ໃນທາງປະຕິບັດ, ໂປຣເຈັກໜຶ່ງທີ່ " +"ພະຍາຍາມໃຊ້ຄວາມຍືດຍຸ່ນທັງໝົດທີ່ຮູບແບບນີ້ມີໃຫ້ ອາດຈະເຮັດໃຫ້ຜູ້ໃຊ້ທົ່ວໄປມີຄວາມຫຍຸ້ງຍາກ " +"ໃນການຈັດລຳດັບເວີຊັນ, ເຖິງແມ່ນວ່າກົດລະບຽບຂ້າງເທິງຈະຮັບປະກັນວ່າເຄື່ອງມືທັງໝົດ " +"ທີ່ເຮັດຕາມຂໍ້ກຳນົດຈະຈັດລຳດັບພວກມັນໄດ້ຢ່າງສອດຄ່ອງກັນກໍຕາມ." + +#: ../source/specifications/version-specifiers.rst:563 +msgid "" +"The following examples illustrate a small selection of the different " +"approaches projects may choose to identify their releases, while still " +"ensuring that the \"latest release\" and the \"latest stable release\" can " +"be easily determined, both by human users and automated tools." +msgstr "" +"ຕົວຢ່າງຕໍ່ໄປນີ້ສະແດງໃຫ້ເຫັນເຖິງວິທີການຕ່າງໆທີ່ໂປຣເຈັກອາດຈະເລືອກໃຊ້ເພື່ອລະບຸການປ່ອຍເວີຊັນ, " +"ໃນຂະນະທີ່ຍັງຮັບປະກັນວ່າ \"ການປ່ອຍຫຼ້າສຸດ\" ແລະ \"ການປ່ອຍເວີຊັນສະຖຽນຫຼ້າສຸດ\" " +"ສາມາດຖືກກຳນົດໄດ້ໂດຍງ່າຍ ທັງໂດຍຜູ້ໃຊ້ ແລະ ເຄື່ອງມືອັດຕະໂນມັດ." + +#: ../source/specifications/version-specifiers.rst:568 +msgid "Simple \"major.minor\" versioning::" +msgstr "ການຕັ້ງເວີຊັນແບບງ່າຍໆ \"major.minor\"::" + +#: ../source/specifications/version-specifiers.rst:577 +msgid "Simple \"major.minor.micro\" versioning::" +msgstr "ການຕັ້ງເວີຊັນແບບງ່າຍໆ \"major.minor.micro\"::" + +#: ../source/specifications/version-specifiers.rst:585 +msgid "" +"\"major.minor\" versioning with alpha, beta and candidate pre-releases::" +msgstr "" +"ການຕັ້ງເວີຊັນແບບ \"major.minor\" ພ້ອມກັບ alpha, beta ແລະ candidate pre-releases::" + +#: ../source/specifications/version-specifiers.rst:597 +msgid "" +"\"major.minor\" versioning with developmental releases, release candidates " +"and post-releases for minor corrections::" +msgstr "" +"ການຕັ້ງເວີຊັນແບບ \"major.minor\" ພ້ອມກັບ developmental releases, release " +"candidates ແລະ post-releases ສຳລັບການແກ້ໄຂເລັກນ້ອຍ::" + +#: ../source/specifications/version-specifiers.rst:612 +msgid "" +"Date based releases, using an incrementing serial within each year, skipping " +"zero::" +msgstr "ການປ່ອຍແບບອີງຕາມວັນທີ ໂດຍໃຊ້ເລກລຳດັບທີ່ເພີ່ມຂຶ້ນໃນແຕ່ລະປີ ແລະ ຂ້າມເລກສູນ::" + +#: ../source/specifications/version-specifiers.rst:626 +msgid "Summary of permitted suffixes and relative ordering" +msgstr "ບົດສະຫຼຸບຂອງນາມສະກຸນທີ່ອະນຸຍາດ ແລະ ລຳດັບການຈັດລຽງ" + +#: ../source/specifications/version-specifiers.rst:630 +msgid "" +"This section is intended primarily for authors of tools that automatically " +"process distribution metadata, rather than developers of Python " +"distributions deciding on a versioning scheme." +msgstr "" +"ພາກສ່ວນນີ້ມີຈຸດປະສົງຫຼັກສຳລັບຜູ້ພັດທະນາເຄື່ອງມືທີ່ປະມວນຜົນເມຕາເດຕາການແຈກຈ່າຍໂດຍອັດຕະໂນມັດ, " +"ຫຼາຍກວ່າທີ່ຈະເປັນຜູ້ພັດທະນາ Python distribution ທີ່ກຳລັງຕັດສິນໃຈເລືອກຮູບແບບເວີຊັນ." + +#: ../source/specifications/version-specifiers.rst:634 +msgid "" +"The epoch segment of version identifiers MUST be sorted according to the " +"numeric value of the given epoch. If no epoch segment is present, the " +"implicit numeric value is ``0``." +msgstr "" +"ພາກສ່ວນອີພັອກ (epoch) ຂອງຕົວລະບຸເວີຊັນ \"ຕ້ອງ\" ຖືກຈັດລຽງຕາມຄ່າຕົວເລກຂອງອີພັອກທີ່ໃຫ້ມາ. " +"ຖ້າບໍ່ມີພາກສ່ວນອີພັອກ, ຄ່າຕົວເລກໂດຍນໄນຈະແມ່ນ ``0``." + +#: ../source/specifications/version-specifiers.rst:638 +msgid "" +"The release segment of version identifiers MUST be sorted in the same order " +"as Python's tuple sorting when the normalized release segment is parsed as " +"follows::" +msgstr "" +"ພາກສ່ວນການປ່ອຍ (release segment) ຂອງຕົວລະບຸເວີຊັນ \"ຕ້ອງ\" ຖືກຈັດລຽງໃນລຳດັບດຽວກັນກັບ " +"ການຈັດລຽງ tuple ຂອງ Python ເມື່ອພາກສ່ວນການປ່ອຍທີ່ປັບເປັນມາດຕະຖານແລ້ວຖືກວິເຄາະດັ່ງນີ້::" + +#: ../source/specifications/version-specifiers.rst:644 +msgid "" +"All release segments involved in the comparison MUST be converted to a " +"consistent length by padding shorter segments with zeros as needed." +msgstr "" +"ພາກສ່ວນການປ່ອຍທັງໝົດທີ່ກ່ຽວຂ້ອງກັບການປຽບທຽບ \"ຕ້ອງ\" ຖືກປ່ຽນໃຫ້ມີຄວາມຍາວເທົ່າກັນ " +"ໂດຍການຕື່ມເລກສູນໃສ່ພາກສ່ວນທີ່ສັ້ນກວ່າຕາມຄວາມຈຳເປັນ." + +#: ../source/specifications/version-specifiers.rst:647 +msgid "" +"Within a numeric release (``1.0``, ``2.7.3``), the following suffixes are " +"permitted and MUST be ordered as shown::" +msgstr "" +"ພາຍໃນການປ່ອຍແບບຕົວເລກ (``1.0``, ``2.7.3``), ນາມສະກຸນຕໍ່ໄປນີ້ແມ່ນໄດ້ຮັບການອະນຸຍາດ ແລະ " +"\"ຕ້ອງ\" ຖືກຈັດລຳດັບຕາມທີ່ສະແດງ::" + +#: ../source/specifications/version-specifiers.rst:652 +msgid "" +"Note that ``c`` is considered to be semantically equivalent to ``rc`` and " +"must be sorted as if it were ``rc``. Tools MAY reject the case of having the " +"same ``N`` for both a ``c`` and a ``rc`` in the same release segment as " +"ambiguous and remain in compliance with the specification." +msgstr "" +"ໃຫ້ສັງເກດວ່າ ``c`` ຖືກຖືວ່າເທົ່າກັບ ``rc`` ໃນທາງຄວາມໝາຍ ແລະ ຕ້ອງຖືກຈັດລຽງຄືກັບວ່າມັນແມ່ນ " +"``rc``. ເຄື່ອງມື \"ອາດຈະ\" ປະຕິເສດກໍລະນີທີ່ມີເລກ ``N`` ດຽວກັນສຳລັບທັງ ``c`` ແລະ ``rc`` " +"ໃນພາກສ່ວນການປ່ອຍດຽວກັນ ຍ້ອນຄວາມກຳກວມ ແລະ ຍັງຄົງຖືວ່າຖືກຕ້ອງຕາມຂໍ້ກຳນົດ." + +#: ../source/specifications/version-specifiers.rst:657 +msgid "" +"Within an alpha (``1.0a1``), beta (``1.0b1``), or release candidate " +"(``1.0rc1``, ``1.0c1``), the following suffixes are permitted and MUST be " +"ordered as shown::" +msgstr "" +"ພາຍໃນ alpha (``1.0a1``), beta (``1.0b1``), ຫຼື release candidate (``1.0rc1``, " +"``1.0c1``), ຄໍາລົງທ້າຍ (suffixes) ຕໍ່ໄປນີ້ແມ່ນໄດ້ຮັບອະນຸຍາດ ແລະ ຕ້ອງ (MUST) " +"ຈັດລຽງຕາມທີ່ສະແດງໄວ້::" + +#: ../source/specifications/version-specifiers.rst:663 +msgid "" +"Within a post-release (``1.0.post1``), the following suffixes are permitted " +"and MUST be ordered as shown::" +msgstr "" +"ພາຍໃນ post-release (``1.0.post1``), ນາມສະກຸນຕໍ່ໄປນີ້ແມ່ນໄດ້ຮັບການອະນຸຍາດ ແລະ \"ຕ້ອງ\" " +"ຖືກຈັດລຳດັບຕາມທີ່ສະແດງ::" + +#: ../source/specifications/version-specifiers.rst:668 +msgid "" +"Note that ``devN`` and ``postN`` MUST always be preceded by a dot, even when " +"used immediately following a numeric version (e.g. ``1.0.dev456``, " +"``1.0.post1``)." +msgstr "" +"ໃຫ້ສັງເກດວ່າ ``devN`` ແລະ ``postN`` \"ຕ້ອງ\" ມີຈຸດນຳໜ້າສະເໝີ, ເຖິງແມ່ນວ່າຈະໃຊ້ " +"ຕໍ່ຈາກເວີຊັນຕົວເລກທັນທີກໍຕາມ (ຕົວຢ່າງ: ``1.0.dev456``, ``1.0.post1``)." + +#: ../source/specifications/version-specifiers.rst:672 +msgid "" +"Within a pre-release, post-release or development release segment with a " +"shared prefix, ordering MUST be by the value of the numeric component." +msgstr "" +"ພາຍໃນພາກສ່ວນ pre-release, post-release ຫຼື development release ທີ່ມີຄຳນຳໜ້າຄືກັນ, " +"ການຈັດລຳດັບ \"ຕ້ອງ\" ເປັນໄປຕາມຄ່າຂອງສ່ວນປະກອບຕົວເລກ." + +#: ../source/specifications/version-specifiers.rst:675 +msgid "The following example covers many of the possible combinations::" +msgstr "ຕົວຢ່າງຕໍ່ໄປນີ້ຄຸມເຖິງຫຼາຍຮູບແບບການປະສົມທີ່ເປັນໄປໄດ້::" + +#: ../source/specifications/version-specifiers.rst:700 +msgid "Version ordering across different metadata versions" +msgstr "ການຈັດລຳດັບເວີຊັນຂ້າມເວີຊັນຂອງເມຕາເດຕາທີ່ຕ່າງກັນ" + +#: ../source/specifications/version-specifiers.rst:702 +msgid "" +"Metadata v1.0 (:pep:`241`) and metadata v1.1 (:pep:`314`) do not specify a " +"standard version identification or ordering scheme. However metadata v1.2 " +"(:pep:`345`) does specify a scheme which is defined in :pep:`386`." +msgstr "" +"ເມຕາເດຕາ v1.0 (:pep:`241`) ແລະ ເມຕາເດຕາ v1.1 (:pep:`314`) ບໍ່ໄດ້ກຳນົດ " +"ຮູບແບບການລະບຸເວີຊັນ ຫຼື ການຈັດລຳດັບມາດຕະຖານ. ແນວໃດກໍຕາມ, ເມຕາເດຕາ v1.2 (:pep:`345`) " +"ໄດ້ກຳນົດຮູບແບບທີ່ລະບຸໄວ້ໃນ :pep:`386`." + +#: ../source/specifications/version-specifiers.rst:706 +msgid "" +"Due to the nature of the simple installer API it is not possible for an " +"installer to be aware of which metadata version a particular distribution " +"was using. Additionally installers required the ability to create a " +"reasonably prioritized list that includes all, or as many as possible, " +"versions of a project to determine which versions it should install. These " +"requirements necessitate a standardization across one parsing mechanism to " +"be used for all versions of a project." +msgstr "" +"ເນື່ອງຈາກທຳມະຊາດຂອງ API ຜູ້ຕິດຕັ້ງແບບງ່າຍ, ມັນເປັນໄປບໍ່ໄດ້ທີ່ຜູ້ຕິດຕັ້ງຈະຮູ້ວ່າ " +"ການແຈກຈ່າຍໃດໜຶ່ງກຳລັງໃຊ້ເມຕາເດຕາເວີຊັນໃດ. ນອກຈາກນີ້, ຜູ້ຕິດຕັ້ງຍັງຕ້ອງການຄວາມສາມາດ " +"ໃນການສ້າງລາຍຊື່ຕາມລຳດັບຄວາມສຳຄັນທີ່ລວມເອົາທຸກເວີຊັນ, ຫຼື ຫຼາຍເທົ່າທີ່ເປັນໄປໄດ້, " +"ຂອງໂປຣເຈັກເພື່ອຕັດສິນໃຈວ່າຄວນຕິດຕັ້ງເວີຊັນໃດ. ຂໍ້ກຳນົດເຫຼົ່ານີ້ເຮັດໃຫ້ຈຳເປັນຕ້ອງມີ " +"ມາດຕະຖານຜ່ານກົນໄກການວິເຄາະ (parsing) ອັນດຽວເພື່ອໃຊ້ກັບທຸກເວີຊັນຂອງໂປຣເຈັກ." + +#: ../source/specifications/version-specifiers.rst:714 +msgid "" +"Due to the above, this specification MUST be used for all versions of " +"metadata and supersedes :pep:`386` even for metadata v1.2. Tools SHOULD " +"ignore any versions which cannot be parsed by the rules in this " +"specification, but MAY fall back to implementation defined version parsing " +"and ordering schemes if no versions complying with this specification are " +"available." +msgstr "" +"ຈາກເຫດຜົນຂ້າງເທິງ, ຂໍ້ກຳນົດນີ້ \"ຕ້ອງ\" ຖືກໃຊ້ສຳລັບເມຕາເດຕາທຸກເວີຊັນ ແລະ " +"ເຂົ້າມາແທນທີ່ :pep:`386` ເຖິງແມ່ນວ່າຈະເປັນເມຕາເດຕາ v1.2 ກໍຕາມ. ເຄື່ອງມື \"ຄວນ\" " +"ລະເລີຍເວີຊັນໃດໆ ທີ່ບໍ່ສາມາດວິເຄາະໄດ້ດ້ວຍກົດລະບຽບໃນຂໍ້ກຳນົດນີ້, ແຕ່ \"ອາດຈະ\" " +"ກັບໄປໃຊ້ຮູບແບບການວິເຄາະ ແລະ ຈັດລຳດັບເວີຊັນທີ່ກຳນົດໂດຍການພັດທະນາຂອງຕົນເອງ " +"ຫາກບໍ່ມີເວີຊັນທີ່ຖືກຕ້ອງຕາມຂໍ້ກຳນົດນີ້ໃຫ້ໃຊ້." + +#: ../source/specifications/version-specifiers.rst:720 +msgid "" +"Distribution users may wish to explicitly remove non-compliant versions from " +"any private package indexes they control." +msgstr "" +"ຜູ້ໃຊ້ການແຈກຈ່າຍອາດຈະຕ້ອງການລຶບເວີຊັນທີ່ບໍ່ຖືກຕ້ອງຕາມຂໍ້ກຳນົດອອກຈາກ " +"ອິນເດັກແພັກເກດສ່ວນຕົວທີ່ພວກເຂົາຄວບຄຸມ." + +#: ../source/specifications/version-specifiers.rst:725 +msgid "Compatibility with other version schemes" +msgstr "ຄວາມເຂົ້າກັນໄດ້ກັບຮູບແບບເວີຊັນອື່ນໆ" + +#: ../source/specifications/version-specifiers.rst:727 +msgid "" +"Some projects may choose to use a version scheme which requires translation " +"in order to comply with the public version scheme defined in this " +"specification. In such cases, the project specific version can be stored in " +"the metadata while the translated public version is published in the version " +"field." +msgstr "" +"ບາງໂປຣເຈັກອາດຈະເລືອກໃຊ້ຮູບແບບເວີຊັນທີ່ຕ້ອງມີການແປງເພື່ອໃຫ້ສອດຄ່ອງກັບ " +"ຮູບແບບເວີຊັນສາທາລະນະທີ່ກຳນົດໃນຂໍ້ກຳນົດນີ້. ໃນກໍລະນີດັ່ງກ່າວ, ເວີຊັນສະເພາະຂອງໂປຣເຈັກ " +"ສາມາດເກັບໄວ້ໃນເມຕາເດຕາ ໃນຂະນະທີ່ເວີຊັນສາທາລະນະທີ່ແປງແລ້ວຈະຖືກເຜີຍແຜ່ໃນຟິວເວີຊັນ." + +#: ../source/specifications/version-specifiers.rst:732 +msgid "" +"This allows automated distribution tools to provide consistently correct " +"ordering of published releases, while still allowing developers to use the " +"internal versioning scheme they prefer for their projects." +msgstr "" +"ສິ່ງນີ້ຊ່ວຍໃຫ້ເຄື່ອງມືການແຈກຈ່າຍອັດຕະໂນມັດສາມາດຈັດລຳດັບການປ່ອຍເວີຊັນທີ່ເຜີຍແຜ່ ໄດ້ຢ່າງຖືກຕ້ອງ ແລະ " +"ສອດຄ່ອງກັນ, ໃນຂະນະທີ່ຍັງອະນຸຍາດໃຫ້ຜູ້ພັດທະນາໃຊ້ຮູບແບບເວີຊັນ " +"ພາຍໃນທີ່ພວກເຂົາຕ້ອງການສຳລັບໂປຣເຈັກຂອງຕົນເອງໄດ້." + +#: ../source/specifications/version-specifiers.rst:740 +msgid "" +"`Semantic versioning`_ is a popular version identification scheme that is " +"more prescriptive than this specification regarding the significance of " +"different elements of a release number. Even if a project chooses not to " +"abide by the details of semantic versioning, the scheme is worth " +"understanding as it covers many of the issues that can arise when depending " +"on other distributions, and when publishing a distribution that others rely " +"on." +msgstr "" +"`Semantic versioning`_ ແມ່ນຮູບແບບການລະບຸເວີຊັນທີ່ໄດ້ຮັບຄວາມນິຍົມ ເຊິ່ງມີຄວາມເຄັ່ງຄັດ " +"ຫຼາຍກວ່າຂໍ້ກຳນົດນີ້ກ່ຽວກັບຄວາມສຳຄັນຂອງສ່ວນປະກອບຕ່າງໆຂອງເລກເວີຊັນ. ເຖິງແມ່ນວ່າໂປຣເຈັກ " +"ຈະເລືອກທີ່ຈະບໍ່ປະຕິບັດຕາມລາຍລະອຽດຂອງ semantic versioning, ແຕ່ຮູບແບບນີ້ກໍຄຸ້ມຄ່າ " +"ທີ່ຈະທຳຄວາມເຂົ້າໃຈ ເພາະວ່າມັນຄຸມເຖິງຫຼາຍບັນຫາທີ່ອາດຈະເກີດຂຶ້ນເມື່ອຕ້ອງເພິ່ງພາ ການແຈກຈ່າຍອື່ນໆ, ແລະ " +"ເມື່ອເຜີຍແຜ່ການແຈກຈ່າຍທີ່ຄົນອື່ນນຳໄປໃຊ້ຕໍ່." + +#: ../source/specifications/version-specifiers.rst:747 +msgid "" +"The \"Major.Minor.Patch\" (described in this specification as " +"\"major.minor.micro\") aspects of semantic versioning (clauses 1-8 in the " +"2.0.0 specification) are fully compatible with the version scheme defined in " +"this specification, and abiding by these aspects is encouraged." +msgstr "" +"ດ້ານຕ່າງໆຂອງການກຳນົດລຸ້ນແບບເຊມັນຕິກ \"ຫຼັກ.ຍ່ອຍ.ແກ້ໄຂ\" (Major.Minor.Patch) " +"(ທີ່ອະທິບາຍໃນຂໍ້ກຳນົດນີ້ວ່າ \"major.minor.micro\") (ຂໍ້ທີ 1-8 ໃນຂໍ້ກຳນົດ 2.0.0) " +"ແມ່ນສາມາດເຂົ້າກັນໄດ້ຢ່າງສົມບູນກັບຮູບແບບເວີຊັນທີ່ກຳນົດໄວ້ໃນຂໍ້ກຳນົດນີ້, ແລະ ແນະນຳໃຫ້ປະຕິບັດຕາມດ້ານເຫຼົ່ານີ້." + +#: ../source/specifications/version-specifiers.rst:752 +msgid "" +"Semantic versions containing a hyphen (pre-releases - clause 10) or a plus " +"sign (builds - clause 11) are *not* compatible with this specification and " +"are not permitted in the public version field." +msgstr "" +"ເວີຊັນແບບເຊມັນຕິກທີ່ມີເຄື່ອງໝາຍຂີດຕໍ່ (ລຸ້ນກ່ອນອອກຈິງ - ຂໍ້ທີ 10) ຫຼື ເຄື່ອງໝາຍບວກ (ການບິວ - ຂໍ້ທີ 11) " +"ແມ່ນ *ບໍ່* ສາມາດເຂົ້າກັນໄດ້ກັບຂໍ້ກຳນົດນີ້ ແລະ ບໍ່ໄດ້ຮັບອະນຸຍາດໃຫ້ໃຊ້ໃນຊ່ອງຂໍ້ມູນເວີຊັນສາທາລະນະ." + +#: ../source/specifications/version-specifiers.rst:756 +msgid "" +"One possible mechanism to translate such semantic versioning based source " +"labels to compatible public versions is to use the ``.devN`` suffix to " +"specify the appropriate version order." +msgstr "" +"ກົນໄກໜຶ່ງທີ່ເປັນໄປໄດ້ໃນການແປງປ້າຍກຳກັບຊອດໂຄດທີ່ອີງຕາມການກຳນົດລຸ້ນແບບເຊມັນຕິກດັ່ງກ່າວ " +"ໃຫ້ເປັນເວີຊັນສາທາລະນະທີ່ເຂົ້າກັນໄດ້ ແມ່ນການໃຊ້ຄຳຕໍ່ທ້າຍ ``.devN`` ເພື່ອລະບຸລໍາດັບເວີຊັນທີ່ເໝາະສົມ." + +#: ../source/specifications/version-specifiers.rst:760 +msgid "" +"Specific build information may also be included in local version labels." +msgstr "ຂໍ້ມູນການບິວສະເພາະອາດຈະຖືກລວມເຂົ້າໃນປ້າຍກຳກັບເວີຊັນທ້ອງຖິ່ນນຳ." + +#: ../source/specifications/version-specifiers.rst:766 +msgid "DVCS based version labels" +msgstr "ປ້າຍກຳກັບເວີຊັນທີ່ອີງຕາມ DVCS" + +#: ../source/specifications/version-specifiers.rst:768 +msgid "" +"Many build tools integrate with distributed version control systems like Git " +"and Mercurial in order to add an identifying hash to the version identifier. " +"As hashes cannot be ordered reliably such versions are not permitted in the " +"public version field." +msgstr "" +"ເຄື່ອງມືບິວຫຼາຍຊະນິດມີການເຊື່ອມຕໍ່ກັບລະບົບຄວບຄຸມເວີຊັນແບບກະຈາຍ ເຊັ່ນ Git ແລະ Mercurial " +"ເພື່ອເພີ່ມຄ່າແຮັດຊ໌ລະບຸຕົວຕົນເຂົ້າໃນຕົວລະບຸເວີຊັນ. ເນື່ອງຈາກຄ່າແຮັດຊ໌ບໍ່ສາມາດຈັດລໍາດັບໄດ້ຢ່າງໜ້າເຊື່ອຖື, " +"ເວີຊັນດັ່ງກ່າວຈຶ່ງບໍ່ໄດ້ຮັບອະນຸຍາດໃຫ້ໃຊ້ໃນຊ່ອງຂໍ້ມູນເວີຊັນສາທາລະນະ." + +#: ../source/specifications/version-specifiers.rst:773 +msgid "" +"As with semantic versioning, the public ``.devN`` suffix may be used to " +"uniquely identify such releases for publication, while the original DVCS " +"based label can be stored in the project metadata." +msgstr "" +"ເຊັ່ນດຽວກັບການກຳນົດລຸ້ນແບບເຊມັນຕິກ, ຄຳຕໍ່ທ້າຍ ``.devN`` " +"ສາທາລະນະອາດຈະຖືກນຳໃຊ້ເພື່ອລະບຸລຸ້ນດັ່ງກ່າວໃຫ້ເປັນເອກະລັກເພື່ອການເຜີຍແຜ່, ໃນຂະນະທີ່ປ້າຍກຳກັບທີ່ອີງຕາມ " +"DVCS ດັ້ງເດີມສາມາດເກັບໄວ້ໃນເມຕາເດຕາຂອງໂຄງການໄດ້." + +#: ../source/specifications/version-specifiers.rst:777 +msgid "" +"Identifying hash information may also be included in local version labels." +msgstr "ຂໍ້ມູນຄ່າແຮັດຊ໌ລະບຸຕົວຕົນອາດຈະຖືກລວມເຂົ້າໃນປ້າຍກຳກັບເວີຊັນທ້ອງຖິ່ນນຳ." + +#: ../source/specifications/version-specifiers.rst:781 +msgid "Olson database versioning" +msgstr "ການກຳນົດລຸ້ນຖານຂໍ້ມູນ Olson" + +#: ../source/specifications/version-specifiers.rst:783 +msgid "" +"The ``pytz`` project inherits its versioning scheme from the corresponding " +"Olson timezone database versioning scheme: the year followed by a lowercase " +"character indicating the version of the database within that year." +msgstr "" +"ໂຄງການ ``pytz`` ສືບທອດຮູບແບບການກຳນົດລຸ້ນມາຈາກຮູບແບບການກຳນົດລຸ້ນຖານຂໍ້ມູນເຂດເວລາ Olson " +"ທີ່ກ່ຽວຂ້ອງ: ປີ ຕາມດ້ວຍຕົວອັກສອນພິມນ້ອຍທີ່ບົ່ງບອກເຖິງເວີຊັນຂອງຖານຂໍ້ມູນພາຍໃນປີນັ້ນ." + +#: ../source/specifications/version-specifiers.rst:787 +msgid "" +"This can be translated to a compliant public version identifier as ``." +"``, where the serial starts at zero or one (for the 'a' " +"release) and is incremented with each subsequent database update within the " +"year." +msgstr "" +"ສິ່ງນີ້ສາມາດແປງເປັນຕົວລະບຸເວີຊັນສາທາລະນະທີ່ຖືກຕ້ອງຕາມຂໍ້ກຳນົດເປັນ ``.``, " +"ໂດຍທີ່ລໍາດັບ (serial) ເລີ່ມຕົ້ນທີ່ສູນ ຫຼື ໜຶ່ງ (ສຳລັບລຸ້ນ 'a') ແລະ " +"ຈະເພີ່ມຂຶ້ນໃນແຕ່ລະຄັ້ງທີ່ມີການອັບເດດຖານຂໍ້ມູນພາຍໃນປີນັ້ນ." + +#: ../source/specifications/version-specifiers.rst:792 +msgid "" +"As with other translated version identifiers, the corresponding Olson " +"database version could be recorded in the project metadata." +msgstr "" +"ເຊັ່ນດຽວກັບຕົວລະບຸເວີຊັນທີ່ຖືກແປງອື່ນໆ, ເວີຊັນຖານຂໍ້ມູນ Olson " +"ທີ່ກ່ຽວຂ້ອງສາມາດບັນທຶກໄວ້ໃນເມຕາເດຕາຂອງໂຄງການໄດ້." + +#: ../source/specifications/version-specifiers.rst:799 +msgid "" +"A version specifier consists of a series of version clauses, separated by " +"commas. For example::" +msgstr "ຕົວກຳນົດເວີຊັນປະກອບດ້ວຍຊຸດຂອງຂໍ້ກຳນົດເວີຊັນ, ແຍກກັນດ້ວຍເຄື່ອງໝາຍຈຸດ. ຕົວຢ່າງ::" + +#: ../source/specifications/version-specifiers.rst:804 +msgid "The comparison operator determines the kind of version clause:" +msgstr "ຕົວດຳເນີນການປຽບທຽບບົ່ງບອກເຖິງປະເພດຂອງຂໍ້ກຳນົດເວີຊັນ:" + +#: ../source/specifications/version-specifiers.rst:806 +msgid "``~=``: `Compatible release`_ clause" +msgstr "``~=``: ຂໍ້ກຳນົດ `ລຸ້ນທີ່ເຂົ້າກັນໄດ້`_" + +#: ../source/specifications/version-specifiers.rst:807 +msgid "``==``: `Version matching`_ clause" +msgstr "``==``: ຂໍ້ກຳນົດ `ການຈັບຄູ່ເວີຊັນ`_" + +#: ../source/specifications/version-specifiers.rst:808 +msgid "``!=``: `Version exclusion`_ clause" +msgstr "``!=``: ຂໍ້ກຳນົດ `ການຍົກເວັ້ນເວີຊັນ`_" + +#: ../source/specifications/version-specifiers.rst:809 +msgid "``<=``, ``>=``: `Inclusive ordered comparison`_ clause" +msgstr "``<=``, ``>=``: ຂໍ້ກຳນົດ `ການປຽບທຽບລໍາດັບແບບລວມ`_" + +#: ../source/specifications/version-specifiers.rst:810 +msgid "``<``, ``>``: `Exclusive ordered comparison`_ clause" +msgstr "``<``, ``>``: ຂໍ້ກຳນົດ `ການປຽບທຽບລໍາດັບແບບແຍກ`_" + +#: ../source/specifications/version-specifiers.rst:811 +msgid "``===``: `Arbitrary equality`_ clause." +msgstr "``===``: ຂໍ້ກຳນົດ `ຄວາມເທົ່າກັນແບບກຳນົດເອງ`_." + +#: ../source/specifications/version-specifiers.rst:813 +msgid "" +"The comma (\",\") is equivalent to a logical **and** operator: a candidate " +"version must match all given version clauses in order to match the specifier " +"as a whole." +msgstr "" +"ເຄື່ອງໝາຍຈຸດ (\",\") ມີຄ່າເທົ່າກັບຕົວດຳເນີນການຕັກກະ **ແລະ**: " +"ເວີຊັນທີ່ຖືກພິຈາລະນາຕ້ອງກົງກັບທຸກຂໍ້ກຳນົດເວີຊັນທີ່ໃຫ້ມາ ເພື່ອໃຫ້ກົງກັບຕົວກຳນົດທັງໝົດ." + +#: ../source/specifications/version-specifiers.rst:817 +msgid "" +"Whitespace between a conditional operator and the following version " +"identifier is optional, as is the whitespace around the commas." +msgstr "" +"ຊ່ອງວ່າງລະຫວ່າງຕົວດຳເນີນການເງື່ອນໄຂ ແລະ ຕົວລະບຸເວີຊັນທີ່ຕາມມາແມ່ນຈະມີຫຼືບໍ່ມີກໍໄດ້, " +"ລວມທັງຊ່ອງວ່າງອ້ອມຮອບເຄື່ອງໝາຍຈຸດນຳ." + +#: ../source/specifications/version-specifiers.rst:820 +msgid "" +"When multiple candidate versions match a version specifier, the preferred " +"version SHOULD be the latest version as determined by the consistent " +"ordering defined by the standard `Version scheme`_. Whether or not pre-" +"releases are considered as candidate versions SHOULD be handled as described " +"in `Handling of pre-releases`_." +msgstr "" +"ເມື່ອມີຫຼາຍເວີຊັນທີ່ກົງກັບຕົວກຳນົດເວີຊັນ, ເວີຊັນທີ່ຄວນເລືອກ " +"ຄວນຈະເປັນເວີຊັນຫຼ້າສຸດຕາມການຈັດລໍາດັບທີ່ກຳນົດໂດຍມາດຕະຖານ `ຮູບແບບເວີຊັນ`_. " +"ສ່ວນການຈະພິຈາລະນາລຸ້ນກ່ອນອອກຈິງ (pre-releases) ຫຼື ບໍ່ນັ້ນ ຄວນຈັດການຕາມທີ່ອະທິບາຍໄວ້ໃນ " +"`ການຈັດການລຸ້ນກ່ອນອອກຈິງ`_." + +#: ../source/specifications/version-specifiers.rst:826 +msgid "" +"Except where specifically noted below, local version identifiers MUST NOT be " +"permitted in version specifiers, and local version labels MUST be ignored " +"entirely when checking if candidate versions match a given version specifier." +msgstr "" +"ຍົກເວັ້ນບ່ອນທີ່ມີການລະບຸໄວ້ເປັນພິເສດຂ້າງລຸ່ມນີ້, ຫ້າມບໍ່ໃຫ້ມີຕົວລະບຸເວີຊັນທ້ອງຖິ່ນໃນຕົວກຳນົດເວີຊັນຢ່າງເດັດຂາດ, " +"ແລະ ຕ້ອງບໍ່ສົນໃຈປ້າຍກຳກັບເວີຊັນທ້ອງຖິ່ນທັງໝົດໃນເວລາທີ່ກວດສອບວ່າເວີຊັນນັ້ນກົງກັບຕົວກຳນົດເວີຊັນທີ່ໃຫ້ມາຫຼືບໍ່." + +#: ../source/specifications/version-specifiers.rst:835 +msgid "Compatible release" +msgstr "ລຸ້ນທີ່ເຂົ້າກັນໄດ້" + +#: ../source/specifications/version-specifiers.rst:837 +msgid "" +"A compatible release clause consists of the compatible release operator " +"``~=`` and a version identifier. It matches any candidate version that is " +"expected to be compatible with the specified version." +msgstr "" +"ຂໍ້ກຳນົດລຸ້ນທີ່ເຂົ້າກັນໄດ້ປະກອບດ້ວຍຕົວດຳເນີນການລຸ້ນທີ່ເຂົ້າກັນໄດ້ ``~=`` ແລະ ຕົວລະບຸເວີຊັນ. " +"ມັນຈະຈັບຄູ່ກັບເວີຊັນໃດກໍຕາມທີ່ຄາດວ່າຈະເຂົ້າກັນໄດ້ກັບເວີຊັນທີ່ລະບຸໄວ້." + +#: ../source/specifications/version-specifiers.rst:841 +msgid "" +"The specified version identifier must be in the standard format described in " +"`Version scheme`_. Local version identifiers are NOT permitted in this " +"version specifier." +msgstr "" +"ຕົວລະບຸເວີຊັນທີ່ລະບຸໄວ້ຕ້ອງຢູ່ໃນຮູບແບບມາດຕະຖານທີ່ອະທິບາຍໄວ້ໃນ `ຮູບແບບເວີຊັນ`_. " +"ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ຕົວລະບຸເວີຊັນທ້ອງຖິ່ນໃນຕົວກຳນົດເວີຊັນນີ້." + +#: ../source/specifications/version-specifiers.rst:845 +msgid "" +"For a given release identifier ``V.N``, the compatible release clause is " +"approximately equivalent to the pair of comparison clauses::" +msgstr "" +"ສຳລັບຕົວລະບຸລຸ້ນ ``V.N`` ໃດໜຶ່ງ, ຂໍ້ກຳນົດລຸ້ນທີ່ເຂົ້າກັນໄດ້ຈະມີຄ່າໃກ້ຄຽງກັບຄູ່ຂອງຂໍ້ກຳນົດການປຽບທຽບ::" + +#: ../source/specifications/version-specifiers.rst:850 +msgid "" +"This operator MUST NOT be used with a single segment version number such as " +"``~=1``." +msgstr "ຫ້າມໃຊ້ຕົວດຳເນີນການນີ້ກັບໝາຍເລກເວີຊັນທີ່ມີສ່ວນດຽວ ເຊັ່ນ ``~=1``." + +#: ../source/specifications/version-specifiers.rst:853 +msgid "For example, the following groups of version clauses are equivalent::" +msgstr "ຕົວຢ່າງ, ກຸ່ມຂອງຂໍ້ກຳນົດເວີຊັນຕໍ່ໄປນີ້ແມ່ນມີຄ່າເທົ່າກັນ::" + +#: ../source/specifications/version-specifiers.rst:861 +msgid "" +"If a pre-release, post-release or developmental release is named in a " +"compatible release clause as ``V.N.suffix``, then the suffix is ignored when " +"determining the required prefix match::" +msgstr "" +"ຖ້າຫາກມີການລະບຸລຸ້ນກ່ອນອອກຈິງ, ລຸ້ນຫຼັງອອກຈິງ ຫຼື ລຸ້ນລະຫວ່າງການພັດທະນາໃນຂໍ້ກຳນົດລຸ້ນທີ່ເຂົ້າກັນໄດ້ເປັນ " +"``V.N.suffix``, ຄຳຕໍ່ທ້າຍຈະຖືກລະເວັ້ນໃນເວລາທີ່ກຳນົດການຈັບຄູ່ຄຳນຳໜ້າທີ່ຕ້ອງການ::" + +#: ../source/specifications/version-specifiers.rst:871 +msgid "" +"The padding rules for release segment comparisons means that the assumed " +"degree of forward compatibility in a compatible release clause can be " +"controlled by appending additional zeros to the version specifier::" +msgstr "" +"ກົດເກັນການຕື່ມຊ່ອງວ່າງ (padding) ສຳລັບການປຽບທຽບສ່ວນຂອງລຸ້ນ " +"ໝາຍຄວາມວ່າລະດັບການເຂົ້າກັນໄດ້ໃນອະນາຄົດທີ່ຄາດໄວ້ໃນຂໍ້ກຳນົດລຸ້ນທີ່ເຂົ້າກັນໄດ້ " +"ສາມາດຄວບຄຸມໄດ້ໂດຍການເພີ່ມເລກສູນຕໍ່ທ້າຍຕົວກຳນົດເວີຊັນ::" + +#: ../source/specifications/version-specifiers.rst:883 +msgid "Version matching" +msgstr "ການຈັບຄູ່ເວີຊັນ" + +#: ../source/specifications/version-specifiers.rst:885 +msgid "" +"A version matching clause includes the version matching operator ``==`` and " +"a version identifier." +msgstr "ຂໍ້ກຳນົດການຈັບຄູ່ເວີຊັນປະກອບດ້ວຍຕົວດຳເນີນການຈັບຄູ່ເວີຊັນ ``==`` ແລະ ຕົວລະບຸເວີຊັນ." + +#: ../source/specifications/version-specifiers.rst:888 +msgid "" +"The specified version identifier must be in the standard format described in " +"`Version scheme`_, but a trailing ``.*`` is permitted on public version " +"identifiers as described below." +msgstr "" +"ຕົວລະບຸເວີຊັນທີ່ລະບຸໄວ້ຕ້ອງຢູ່ໃນຮູບແບບມາດຕະຖານທີ່ອະທິບາຍໄວ້ໃນ `ຮູບແບບເວີຊັນ`_, ແຕ່ອະນຸຍາດໃຫ້ມີ " +"``.*`` ຕໍ່ທ້າຍຕົວລະບຸເວີຊັນສາທາລະນະໄດ້ຕາມທີ່ອະທິບາຍໄວ້ຂ້າງລຸ່ມ." + +#: ../source/specifications/version-specifiers.rst:892 +msgid "" +"By default, the version matching operator is based on a strict equality " +"comparison: the specified version must be exactly the same as the requested " +"version. The *only* substitution performed is the zero padding of the " +"release segment to ensure the release segments are compared with the same " +"length." +msgstr "" +"ໂດຍມາດຕະຖານ, ຕົວດຳເນີນການຈັບຄູ່ເວີຊັນຈະອີງຕາມການປຽບທຽບຄວາມເທົ່າກັນແບບເຄັ່ງຄັດ: " +"ເວີຊັນທີ່ລະບຸໄວ້ຕ້ອງຄືກັນກັບເວີຊັນທີ່ຮ້ອງຂໍທຸກປະການ. ການແທນທີ່ *ພຽງຢ່າງດຽວ* " +"ທີ່ເກີດຂຶ້ນແມ່ນການຕື່ມເລກສູນໃນສ່ວນຂອງລຸ້ນ ເພື່ອໃຫ້ແນ່ໃຈວ່າສ່ວນຂອງລຸ້ນຖືກປຽບທຽບດ້ວຍຄວາມຍາວທີ່ເທົ່າກັນ." + +#: ../source/specifications/version-specifiers.rst:898 +msgid "" +"Whether or not strict version matching is appropriate depends on the " +"specific use case for the version specifier. Automated tools SHOULD at least " +"issue warnings and MAY reject them entirely when strict version matches are " +"used inappropriately." +msgstr "" +"ການຈັບຄູ່ເວີຊັນແບບເຄັ່ງຄັດຈະເໝາະສົມຫຼືບໍ່ນັ້ນ ແມ່ນຂຶ້ນກັບກໍລະນີການນຳໃຊ້ສະເພາະຂອງຕົວກຳນົດເວີຊັນ. " +"ເຄື່ອງມືອັດຕະໂນມັດ ຄວນ ຈະອອກຄຳເຕືອນຢ່າງໜ້ອຍ ແລະ ອາດຈະ " +"ປະຕິເສດທັງໝົດເມື່ອມີການໃຊ້ການຈັບຄູ່ເວີຊັນແບບເຄັ່ງຄັດຢ່າງບໍ່ເໝາະສົມ." + +#: ../source/specifications/version-specifiers.rst:903 +msgid "" +"Prefix matching may be requested instead of strict comparison, by appending " +"a trailing ``.*`` to the version identifier in the version matching clause. " +"This means that additional trailing segments will be ignored when " +"determining whether or not a version identifier matches the clause. If the " +"specified version includes only a release segment, then trailing components " +"(or the lack thereof) in the release segment are also ignored." +msgstr "" +"ສາມາດຮ້ອງຂໍການຈັບຄູ່ຄຳນຳໜ້າ (prefix matching) ແທນການປຽບທຽບແບບເຄັ່ງຄັດໄດ້ ໂດຍການເພີ່ມ " +"``.*`` ຕໍ່ທ້າຍຕົວລະບຸເວີຊັນໃນຂໍ້ກຳນົດການຈັບຄູ່ເວີຊັນ. " +"ນີ້ໝາຍຄວາມວ່າສ່ວນຕໍ່ທ້າຍທີ່ເພີ່ມມາຈະຖືກລະເວັ້ນໃນເວລາທີ່ກຳນົດວ່າຕົວລະບຸເວີຊັນນັ້ນກົງກັບຂໍ້ກຳນົດຫຼືບໍ່. " +"ຖ້າເວີຊັນທີ່ລະບຸໄວ້ມີພຽງແຕ່ສ່ວນຂອງລຸ້ນ, ສ່ວນປະກອບຕໍ່ທ້າຍ (ຫຼື ການບໍ່ມີສ່ວນປະກອບນັ້ນ) " +"ໃນສ່ວນຂອງລຸ້ນກໍຈະຖືກລະເວັ້ນຄືກັນ." + +#: ../source/specifications/version-specifiers.rst:910 +#: ../source/specifications/version-specifiers.rst:971 +msgid "" +"For example, given the version ``1.1.post1``, the following clauses would " +"match or not as shown::" +msgstr "ຕົວຢ່າງ, ສຳລັບເວີຊັນ ``1.1.post1``, ຂໍ້ກຳນົດຕໍ່ໄປນີ້ຈະຈັບຄູ່ຫຼືບໍ່ ຕາມທີ່ສະແດງ::" + +#: ../source/specifications/version-specifiers.rst:917 +msgid "" +"For purposes of prefix matching, the pre-release segment is considered to " +"have an implied preceding ``.``, so given the version ``1.1a1``, the " +"following clauses would match or not as shown::" +msgstr "" +"ສຳລັບຈຸດປະສົງຂອງການຈັບຄູ່ຄຳນຳໜ້າ, ສ່ວນຂອງລຸ້ນກ່ອນອອກຈິງຈະຖືກພິຈາລະນາວ່າຄືກັບມີ ``.`` ນຳໜ້າ, " +"ດັ່ງນັ້ນສຳລັບເວີຊັນ ``1.1a1``, ຂໍ້ກຳນົດຕໍ່ໄປນີ້ຈະຈັບຄູ່ຫຼືບໍ່ ຕາມທີ່ສະແດງ::" + +#: ../source/specifications/version-specifiers.rst:925 +msgid "" +"An exact match is also considered a prefix match (this interpretation is " +"implied by the usual zero padding rules for the release segment of version " +"identifiers). Given the version ``1.1``, the following clauses would match " +"or not as shown::" +msgstr "" +"ການຈັບຄູ່ທີ່ຄືກັນທຸກປະການກໍຖືວ່າເປັນການຈັບຄູ່ຄຳນຳໜ້າ " +"(ການຕີຄວາມໝາຍນີ້ແມ່ນມາຈາກກົດເກັນການຕື່ມເລກສູນປົກກະຕິສຳລັບສ່ວນຂອງລຸ້ນຂອງຕົວລະບຸເວີຊັນ). ສຳລັບເວີຊັນ " +"``1.1``, ຂໍ້ກຳນົດຕໍ່ໄປນີ້ຈະຈັບຄູ່ຫຼືບໍ່ ຕາມທີ່ສະແດງ::" + +#: ../source/specifications/version-specifiers.rst:937 +msgid "" +"It is invalid to have a prefix match containing a development or local " +"release such as ``1.0.dev1.*`` or ``1.0+foo1.*``. If present, the " +"development release segment is always the final segment in the public " +"version, and the local version is ignored for comparison purposes, so using " +"either in a prefix match wouldn't make any sense." +msgstr "" +"ການຈັບຄູ່ຄຳນຳໜ້າທີ່ມີລຸ້ນລະຫວ່າງການພັດທະນາ ຫຼື ລຸ້ນທ້ອງຖິ່ນ ເຊັ່ນ ``1.0.dev1.*`` ຫຼື " +"``1.0+foo1.*`` ແມ່ນບໍ່ຖືກຕ້ອງ. ຖ້າມີ, " +"ສ່ວນຂອງລຸ້ນລະຫວ່າງການພັດທະນາຈະເປັນສ່ວນສຸດທ້າຍສະເໝີໃນເວີຊັນສາທາລະນະ, ແລະ " +"ເວີຊັນທ້ອງຖິ່ນຈະຖືກລະເວັ້ນເພື່ອຈຸດປະສົງໃນການປຽບທຽບ, " +"ດັ່ງນັ້ນການໃຊ້ຢ່າງໃດຢ່າງໜຶ່ງໃນການຈັບຄູ່ຄຳນຳໜ້າຈຶ່ງບໍ່ມີປະໂຫຍດ." + +#: ../source/specifications/version-specifiers.rst:943 +msgid "" +"The use of ``==`` (without at least the wildcard suffix) when defining " +"dependencies for published distributions is strongly discouraged as it " +"greatly complicates the deployment of security fixes. The strict version " +"comparison operator is intended primarily for use when defining dependencies " +"for repeatable *deployments of applications* while using a shared " +"distribution index." +msgstr "" +"ບໍ່ແນະນຳຢ່າງຍິ່ງໃຫ້ໃຊ້ ``==`` (ໂດຍບໍ່ມີຕົວແທນ (wildcard) ຕໍ່ທ້າຍຢ່າງໜ້ອຍໜຶ່ງຕົວ) " +"ເມື່ອກຳນົດຄວາມຂຶ້ນຕໍ່ກັນ (dependencies) ສຳລັບການເຜີຍແຜ່ຊອບແວ " +"ເພາະມັນຈະເຮັດໃຫ້ການອັບເດດຄວາມປອດໄພມີຄວາມຫຍຸ້ງຍາກຫຼາຍ. " +"ຕົວດຳເນີນການປຽບທຽບເວີຊັນແບບເຄັ່ງຄັດມີຈຸດປະສົງຫຼັກເພື່ອໃຊ້ໃນການກຳນົດຄວາມຂຶ້ນຕໍ່ກັນສຳລັບ " +"*ການຕິດຕັ້ງແອັບພລິເຄຊັນ* ທີ່ຕ້ອງການຄວາມແນ່ນອນ ໃນຂະນະທີ່ໃຊ້ດັດຊະນີການແຈກຢາຍຮ່ວມກັນ." + +#: ../source/specifications/version-specifiers.rst:950 +msgid "" +"If the specified version identifier is a public version identifier (no local " +"version label), then the local version label of any candidate versions MUST " +"be ignored when matching versions." +msgstr "" +"ຖ້າຕົວລະບຸເວີຊັນທີ່ລະບຸໄວ້ເປັນຕົວລະບຸເວີຊັນສາທາລະນະ (ບໍ່ມີປ້າຍກຳກັບເວີຊັນທ້ອງຖິ່ນ), ຕ້ອງ " +"ລະເວັ້ນປ້າຍກຳກັບເວີຊັນທ້ອງຖິ່ນຂອງເວີຊັນໃດກໍຕາມທີ່ຖືກພິຈາລະນາໃນເວລາທີ່ຈັບຄູ່ເວີຊັນ." + +#: ../source/specifications/version-specifiers.rst:954 +msgid "" +"If the specified version identifier is a local version identifier, then the " +"local version labels of candidate versions MUST be considered when matching " +"versions, with the public version identifier being matched as described " +"above, and the local version label being checked for equivalence using a " +"strict string equality comparison." +msgstr "" +"ຖ້າຕົວລະບຸເວີຊັນທີ່ລະບຸໄວ້ເປັນຕົວລະບຸເວີຊັນທ້ອງຖິ່ນ, ຕ້ອງ " +"ພິຈາລະນາປ້າຍກຳກັບເວີຊັນທ້ອງຖິ່ນຂອງເວີຊັນທີ່ຖືກພິຈາລະນາໃນເວລາທີ່ຈັບຄູ່ເວີຊັນ, " +"ໂດຍທີ່ຕົວລະບຸເວີຊັນສາທາລະນະຈະຖືກຈັບຄູ່ຕາມທີ່ອະທິບາຍໄວ້ຂ້າງເທິງ, ແລະ " +"ປ້າຍກຳກັບເວີຊັນທ້ອງຖິ່ນຈະຖືກກວດສອບຄວາມເທົ່າກັນໂດຍໃຊ້ການປຽບທຽບຂໍ້ຄວາມ (string) ແບບເຄັ່ງຄັດ." + +#: ../source/specifications/version-specifiers.rst:962 +msgid "Version exclusion" +msgstr "ການຍົກເວັ້ນເວີຊັນ" + +#: ../source/specifications/version-specifiers.rst:964 +msgid "" +"A version exclusion clause includes the version exclusion operator ``!=`` " +"and a version identifier." +msgstr "ຂໍ້ກຳນົດການຍົກເວັ້ນເວີຊັນປະກອບດ້ວຍຕົວດຳເນີນການຍົກເວັ້ນເວີຊັນ ``!=`` ແລະ ຕົວລະບຸເວີຊັນ." + +#: ../source/specifications/version-specifiers.rst:967 +msgid "" +"The allowed version identifiers and comparison semantics are the same as " +"those of the `Version matching`_ operator, except that the sense of any " +"match is inverted." +msgstr "" +"ຕົວລະບຸເວີຊັນທີ່ອະນຸຍາດ ແລະ ຫຼັກການປຽບທຽບແມ່ນຄືກັນກັບຕົວດຳເນີນການ `ການຈັບຄູ່ເວີຊັນ`_, " +"ຍົກເວັ້ນແຕ່ວ່າຜົນຂອງການຈັບຄູ່ຈະຖືກປີ້ນກັບກັນ." + +#: ../source/specifications/version-specifiers.rst:980 +msgid "Inclusive ordered comparison" +msgstr "ການປຽບທຽບລໍາດັບແບບລວມ" + +#: ../source/specifications/version-specifiers.rst:982 +msgid "" +"An inclusive ordered comparison clause includes a comparison operator and a " +"version identifier, and will match any version where the comparison is " +"correct based on the relative position of the candidate version and the " +"specified version given the consistent ordering defined by the standard " +"`Version scheme`_." +msgstr "" +"ຂໍ້ກຳນົດການປຽບທຽບລໍາດັບແບບລວມປະກອບດ້ວຍຕົວດຳເນີນການປຽບທຽບ ແລະ ຕົວລະບຸເວີຊັນ, ແລະ " +"ຈະຈັບຄູ່ກັບເວີຊັນໃດກໍຕາມທີ່ການປຽບທຽບນັ້ນຖືກຕ້ອງໂດຍອີງຕາມຕຳແໜ່ງທີ່ກ່ຽວຂ້ອງຂອງເວີຊັນທີ່ຖືກພິຈາລະນາ ແລະ " +"ເວີຊັນທີ່ລະບຸໄວ້ ຕາມການຈັດລໍາດັບທີ່ກຳນົດໂດຍມາດຕະຖານ `ຮູບແບບເວີຊັນ`_." + +#: ../source/specifications/version-specifiers.rst:988 +msgid "The inclusive ordered comparison operators are ``<=`` and ``>=``." +msgstr "ຕົວດຳເນີນການປຽບທຽບລໍາດັບແບບລວມແມ່ນ ``<=`` ແລະ ``>=``." + +#: ../source/specifications/version-specifiers.rst:990 +#: ../source/specifications/version-specifiers.rst:1020 +msgid "" +"As with version matching, the release segment is zero padded as necessary to " +"ensure the release segments are compared with the same length." +msgstr "" +"ເຊັ່ນດຽວກັບການຈັບຄູ່ເວີຊັນ, ສ່ວນຂອງລຸ້ນຈະຖືກຕື່ມເລກສູນຕາມຄວາມຈຳເປັນ " +"ເພື່ອໃຫ້ແນ່ໃຈວ່າສ່ວນຂອງລຸ້ນຖືກປຽບທຽບດ້ວຍຄວາມຍາວທີ່ເທົ່າກັນ." + +#: ../source/specifications/version-specifiers.rst:993 +#: ../source/specifications/version-specifiers.rst:1023 +msgid "Local version identifiers are NOT permitted in this version specifier." +msgstr "ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ຕົວລະບຸເວີຊັນທ້ອງຖິ່ນໃນຕົວກຳນົດເວີຊັນນີ້." + +#: ../source/specifications/version-specifiers.rst:997 +msgid "Exclusive ordered comparison" +msgstr "ການປຽບທຽບລໍາດັບແບບແຍກ" + +#: ../source/specifications/version-specifiers.rst:999 +msgid "" +"The exclusive ordered comparisons ``>`` and ``<`` are similar to the " +"inclusive ordered comparisons in that they rely on the relative position of " +"the candidate version and the specified version given the consistent " +"ordering defined by the standard `Version scheme`_. However, they " +"specifically exclude pre-releases, post-releases, and local versions of the " +"specified version." +msgstr "" +"ການປຽບທຽບລໍາດັບແບບແຍກ ``>`` ແລະ ``<`` ແມ່ນຄ້າຍຄືກັບການປຽບທຽບລໍາດັບແບບລວມ " +"ທີ່ພວກມັນອີງຕາມຕຳແໜ່ງທີ່ກ່ຽວຂ້ອງຂອງເວີຊັນທີ່ຖືກພິຈາລະນາ ແລະ ເວີຊັນທີ່ລະບຸໄວ້ " +"ຕາມການຈັດລໍາດັບທີ່ກຳນົດໂດຍມາດຕະຖານ `ຮູບແບບເວີຊັນ`_. ເຖິງຢ່າງໃດກໍຕາມ, " +"ພວກມັນຈະຍົກເວັ້ນລຸ້ນກ່ອນອອກຈິງ, ລຸ້ນຫຼັງອອກຈິງ, ແລະ ເວີຊັນທ້ອງຖິ່ນຂອງເວີຊັນທີ່ລະບຸໄວ້ໂດຍສະເພາະ." + +#: ../source/specifications/version-specifiers.rst:1005 +msgid "" +"The exclusive ordered comparison ``>V`` **MUST NOT** allow a post-release of " +"the given version unless ``V`` itself is a post release. You may mandate " +"that releases are later than a particular post release, including additional " +"post releases, by using ``>V.postN``. For example, ``>1.7`` will allow " +"``1.7.1`` but not ``1.7.0.post1`` and ``>1.7.post2`` will allow ``1.7.1`` " +"and ``1.7.0.post3`` but not ``1.7.0``." +msgstr "" +"ການປຽບທຽບລໍາດັບແບບແຍກ ``>V`` **ຕ້ອງບໍ່** ອະນຸຍາດໃຫ້ມີລຸ້ນຫຼັງອອກຈິງຂອງເວີຊັນທີ່ໃຫ້ມາ ຍົກເວັ້ນແຕ່ " +"``V`` ນັ້ນເອງຈະເປັນລຸ້ນຫຼັງອອກຈິງ. ທ່ານສາມາດບັງຄັບໃຫ້ລຸ້ນຕ່າງໆຕ້ອງໃໝ່ກວ່າລຸ້ນຫຼັງອອກຈິງໃດໜຶ່ງ, " +"ລວມທັງລຸ້ນຫຼັງອອກຈິງເພີ່ມເຕີມ, ໂດຍການໃຊ້ ``>V.postN``. ຕົວຢ່າງ, ``>1.7`` ຈະອະນຸຍາດ " +"``1.7.1`` ແຕ່ບໍ່ອະນຸຍາດ ``1.7.0.post1`` ແລະ ``>1.7.post2`` ຈະອະນຸຍາດ ``1.7.1`` " +"ແລະ ``1.7.0.post3`` ແຕ່ບໍ່ອະນຸຍາດ ``1.7.0``." + +#: ../source/specifications/version-specifiers.rst:1012 +msgid "" +"The exclusive ordered comparison ``>V`` **MUST NOT** match a local version " +"of the specified version." +msgstr "ການປຽບທຽບລໍາດັບແບບແຍກ ``>V`` **ຕ້ອງບໍ່** ຈັບຄູ່ກັບເວີຊັນທ້ອງຖິ່ນຂອງເວີຊັນທີ່ລະບຸໄວ້." + +#: ../source/specifications/version-specifiers.rst:1015 +msgid "" +"The exclusive ordered comparison ``=`` entry as part " +"of the URL fragment." +msgstr "" +"ສຳລັບການອ້າງອີງຊອດໂຄດ ແລະ ໄຟລ໌ wheel, ສາມາດລະບຸຄ່າແຮັດຊ໌ທີ່ຄາດໄວ້ໄດ້ໂດຍການລວມເອົາ ``=`` ເປັນສ່ວນໜຶ່ງຂອງ URL fragment." + +#: ../source/specifications/version-specifiers.rst:1145 +msgid "" +"For version control references, the ``VCS+protocol`` scheme SHOULD be used " +"to identify both the version control system and the secure transport, and a " +"version control system with hash based commit identifiers SHOULD be used. " +"Automated tools MAY omit warnings about missing hashes for version control " +"systems that do not provide hash based commit identifiers." +msgstr "" +"ສຳລັບການອ້າງອີງລະບົບຄວບຄຸມເວີຊັນ, ຄວນ ໃຊ້ຮູບແບບ ``VCS+protocol`` " +"ເພື່ອລະບຸທັງລະບົບຄວບຄຸມເວີຊັນ ແລະ ການສົ່ງຂໍ້ມູນທີ່ປອດໄພ, ແລະ ຄວນ " +"ໃຊ້ລະບົບຄວບຄຸມເວີຊັນທີ່ມີຕົວລະບຸການຄອມມິດ (commit) ທີ່ອີງຕາມຄ່າແຮັດຊ໌. ເຄື່ອງມືອັດຕະໂນມັດ ອາດຈະ " +"ລະເວັ້ນຄຳເຕືອນກ່ຽວກັບຄ່າແຮັດຊ໌ທີ່ຫາຍໄປສຳລັບລະບົບຄວບຄຸມເວີຊັນທີ່ບໍ່ມີຕົວລະບຸການຄອມມິດແບບຄ່າແຮັດຊ໌." + +#: ../source/specifications/version-specifiers.rst:1151 +msgid "" +"To handle version control systems that do not support including commit or " +"tag references directly in the URL, that information may be appended to the " +"end of the URL using the ``@`` or the ``@#`` " +"notation." +msgstr "" +"ເພື່ອຈັດການກັບລະບົບຄວບຄຸມເວີຊັນທີ່ບໍ່ຮອງຮັບການລວມເອົາການອ້າງອີງຄອມມິດ ຫຼື ແທັກ (tag) ເຂົ້າໃນ URL " +"ໂດຍກົງ, ສາມາດເພີ່ມຂໍ້ມູນນັ້ນຕໍ່ທ້າຍ URL ໄດ້ໂດຍໃຊ້ຮູບແບບ ``@`` ຫຼື " +"``@#``." + +#: ../source/specifications/version-specifiers.rst:1158 +msgid "" +"This isn't *quite* the same as the existing VCS reference notation supported " +"by pip. Firstly, the distribution name is moved in front rather than " +"embedded as part of the URL. Secondly, the commit hash is included even when " +"retrieving based on a tag, in order to meet the requirement above that " +"*every* link should include a hash to make things harder to forge (creating " +"a malicious repo with a particular tag is easy, creating one with a specific " +"*hash*, less so)." +msgstr "" +"ສິ່ງນີ້ *ບໍ່ຄືກັນ* ກັບຮູບແບບການອ້າງອີງ VCS ທີ່ມີຢູ່ໃນ pip. ຢ່າງທຳອິດ, " +"ຊື່ຂອງຊຸດແຈກຢາຍຈະຖືກຍ້າຍມາໄວ້ທາງໜ້າແທນທີ່ຈະຝັງໄວ້ເປັນສ່ວນໜຶ່ງຂອງ URL. ຢ່າງທີສອງ, " +"ຄ່າແຮັດຊ໌ຂອງຄອມມິດຈະຖືກລວມເຂົ້າໄປນຳເຖິງແມ່ນວ່າຈະດຶງຂໍ້ມູນຕາມແທັກກໍຕາມ, " +"ເພື່ອໃຫ້ເປັນໄປຕາມຂໍ້ກຳນົດຂ້າງເທິງທີ່ວ່າ *ທຸກໆ* ລິງກ໌ຄວນມີຄ່າແຮັດຊ໌ ເພື່ອເຮັດໃຫ້ການປອມແປງເຮັດໄດ້ຍາກຂຶ້ນ " +"(ການສ້າງບ່ອນເກັບໂຄດ (repo) ທີ່ເປັນອັນຕະລາຍດ້ວຍແທັກໃດໜຶ່ງນັ້ນເຮັດໄດ້ງ່າຍ, " +"ແຕ່ການສ້າງດ້ວຍຄ່າແຮັດຊ໌ສະເພາະໃດໜຶ່ງນັ້ນເຮັດໄດ້ຍາກກວ່າ)." + +#: ../source/specifications/version-specifiers.rst:1166 +msgid "Remote URL examples::" +msgstr "ຕົວຢ່າງ URL ໄລຍະໄກ::" + +#: ../source/specifications/version-specifiers.rst:1174 +msgid "File URLs" +msgstr "URL ຂອງໄຟລ໌" + +#: ../source/specifications/version-specifiers.rst:1176 +msgid "" +"File URLs take the form of ``file:///``. If the ```` is " +"omitted it is assumed to be ``localhost`` and even if the ```` is " +"omitted the third slash MUST still exist. The ```` defines what the " +"file path on the filesystem that is to be accessed." +msgstr "" +"URL ຂອງໄຟລ໌ຈະຢູ່ໃນຮູບແບບ ``file:///``. ຖ້າລະເວັ້ນ ```` ຈະຖືວ່າເປັນ " +"``localhost`` ແລະ ເຖິງແມ່ນວ່າຈະລະເວັ້ນ ```` ແຕ່ເຄື່ອງໝາຍທັບ (slash) ຕົວທີສາມ ກໍຕ້ອງ " +"ຍັງຄົງມີຢູ່. ```` ກຳນົດເສັ້ນທາງຂອງໄຟລ໌ໃນລະບົບໄຟລ໌ທີ່ຈະເຂົ້າເຖິງ." + +#: ../source/specifications/version-specifiers.rst:1181 +msgid "" +"On the various \\*nix operating systems the only allowed values for " +"```` is for it to be omitted, ``localhost``, or another FQDN that the " +"current machine believes matches its own host. In other words, on \\*nix the " +"``file://`` scheme can only be used to access paths on the local machine." +msgstr "" +"ໃນລະບົບປະຕິບັດການ \\*nix ຕ່າງໆ, ຄ່າທີ່ອະນຸຍາດສຳລັບ ```` ມີພຽງແຕ່ການລະເວັ້ນໄວ້, " +"``localhost``, ຫຼື FQDN ອື່ນທີ່ເຄື່ອງປະຈຸບັນເຊື່ອວ່າກົງກັບໂຮສ (host) ຂອງມັນເອງ. ເວົ້າອີກຢ່າງໜຶ່ງຄື, " +"ໃນ \\*nix ຮູບແບບ ``file://`` ສາມາດໃຊ້ເພື່ອເຂົ້າເຖິງເສັ້ນທາງໃນເຄື່ອງທ້ອງຖິ່ນເທົ່ານັ້ນ." + +#: ../source/specifications/version-specifiers.rst:1186 +msgid "" +"On Windows the file format should include the drive letter if applicable as " +"part of the ```` (e.g. ``file:///c:/path/to/a/file``). Unlike \\*nix " +"on Windows the ```` parameter may be used to specify a file residing " +"on a network share. In other words, in order to translate ``\\" +"\\machine\\volume\\file`` to a ``file://`` url, it would end up as ``file://" +"machine/volume/file``. For more information on ``file://`` URLs on Windows " +"see `MSDN `_." +msgstr "" +"ໃນ Windows, ຮູບແບບໄຟລ໌ຄວນລວມເອົາຕົວອັກສອນໄດຣ໌ (drive) ຖ້າມີ ເປັນສ່ວນໜຶ່ງຂອງ ```` " +"(ເຊັ່ນ ``file:///c:/path/to/a/file``). ຕ່າງຈາກ \\*nix, ໃນ Windows ພາຣາມິເຕີ " +"```` ສາມາດໃຊ້ເພື່ອລະບຸໄຟລ໌ທີ່ຢູ່ໃນເຄືອຂ່າຍທີ່ໃຊ້ຮ່ວມກັນ (network share) ໄດ້. " +"ເວົ້າອີກຢ່າງໜຶ່ງຄື, ເພື່ອແປງ ``\\\\machine\\volume\\file`` ເປັນ URL ແບບ ``file://``, " +"ມັນຈະກາຍເປັນ ``file://machine/volume/file``. ສຳລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບ URL ແບບ " +"``file://`` ໃນ Windows ເບິ່ງໄດ້ທີ່ `MSDN `_." + +#: ../source/specifications/version-specifiers.rst:1197 +msgid "Summary of differences from pkg_resources.parse_version" +msgstr "ສະຫຼຸບຄວາມແຕກຕ່າງຈາກ pkg_resources.parse_version" + +#: ../source/specifications/version-specifiers.rst:1199 +msgid "" +"Note: this comparison is to ``pkg_resources.parse_version`` as it existed at " +"the time :pep:`440` was written. After the PEP was accepted, setuptools 6.0 " +"and later versions adopted the behaviour described here." +msgstr "" +"ໝາຍເຫດ: ການປຽບທຽບນີ້ແມ່ນທຽບກັບ ``pkg_resources.parse_version`` " +"ຕາມທີ່ມີຢູ່ໃນເວລາທີ່ຂຽນ :pep:`440`. ຫຼັງຈາກ PEP ໄດ້ຮັບການຍອມຮັບ, setuptools 6.0 ແລະ " +"ເວີຊັນຕໍ່ໆມາໄດ້ນຳໃຊ້ພຶດຕິກຳຕາມທີ່ອະທິບາຍໄວ້ຢູ່ນີ້." + +#: ../source/specifications/version-specifiers.rst:1203 +msgid "" +"Local versions sort differently, this specification requires that they sort " +"as greater than the same version without a local version, whereas " +"``pkg_resources.parse_version`` considers it a pre-release marker." +msgstr "" +"ເວີຊັນທ້ອງຖິ່ນມີການຈັດລໍາດັບທີ່ແຕກຕ່າງກັນ, " +"ຂໍ້ກຳນົດນີ້ກຳນົດໃຫ້ພວກມັນຖືກຈັດລໍາດັບວ່າໃຫຍ່ກວ່າເວີຊັນດຽວກັນທີ່ບໍ່ມີເວີຊັນທ້ອງຖິ່ນ, ໃນຂະນະທີ່ " +"``pkg_resources.parse_version`` ຖືວ່າມັນເປັນເຄື່ອງໝາຍລຸ້ນກ່ອນອອກຈິງ." + +#: ../source/specifications/version-specifiers.rst:1207 +msgid "" +"This specification purposely restricts the syntax which constitutes a valid " +"version while ``pkg_resources.parse_version`` attempts to provide some " +"meaning from *any* arbitrary string." +msgstr "" +"ຂໍ້ກຳນົດນີ້ຕັ້ງໃຈຈຳກັດໄວຍາກອນທີ່ຈະຖືວ່າເປັນເວີຊັນທີ່ຖືກຕ້ອງ, ໃນຂະນະທີ່ " +"``pkg_resources.parse_version`` ພະຍາຍາມຕີຄວາມໝາຍຈາກຂໍ້ຄວາມໃດໆກໍຕາມ." + +#: ../source/specifications/version-specifiers.rst:1211 +msgid "" +"``pkg_resources.parse_version`` allows arbitrarily deeply nested version " +"signifiers like ``1.0.dev1.post1.dev5``. This specification however allows " +"only a single use of each type and they must exist in a certain order." +msgstr "" +"``pkg_resources.parse_version`` ອະນຸຍາດໃຫ້ມີຕົວກຳນົດເວີຊັນທີ່ຊ້ອນກັນໄດ້ຫຼາຍຊັ້ນ ເຊັ່ນ " +"``1.0.dev1.post1.dev5``. ເຖິງຢ່າງໃດກໍຕາມ, ຂໍ້ກຳນົດນີ້ອະນຸຍາດໃຫ້ໃຊ້ແຕ່ລະປະເພດໄດ້ພຽງຄັ້ງດຽວ " +"ແລະ ຕ້ອງຢູ່ໃນລໍາດັບທີ່ກຳນົດໄວ້." + +#: ../source/specifications/version-specifiers.rst:1220 +msgid "Appendix: Parsing version strings with regular expressions" +msgstr "ພາກຜະນວກ: ການແຍກຂໍ້ຄວາມເວີຊັນດ້ວຍ Regular Expressions" + +#: ../source/specifications/version-specifiers.rst:1222 +msgid "" +"As noted earlier in the :ref:`public-version-identifiers` section, published " +"version identifiers SHOULD use the canonical format. This section provides " +"regular expressions that can be used to test whether a version is already in " +"that form, and if it's not, extract the various components for subsequent " +"normalization." +msgstr "" +"ຕາມທີ່ໄດ້ລະບຸໄວ້ກ່ອນໜ້ານີ້ໃນສ່ວນ :ref:`public-version-identifiers`, ຕົວລະບຸເວີຊັນທີ່ເຜີຍແຜ່ " +"ຄວນ ໃຊ້ຮູບແບບມາດຕະຖານ (canonical format). ສ່ວນນີ້ໃຫ້ regular expressions " +"ທີ່ສາມາດໃຊ້ເພື່ອທົດສອບວ່າເວີຊັນຢູ່ໃນຮູບແບບນັ້ນແລ້ວຫຼືບໍ່, ແລະ ຖ້າບໍ່ແມ່ນ, " +"ໃຫ້ແຍກສ່ວນປະກອບຕ່າງໆອອກມາເພື່ອເຮັດໃຫ້ເປັນມາດຕະຖານໃນຂັ້ນຕອນຕໍ່ໄປ." + +#: ../source/specifications/version-specifiers.rst:1228 +msgid "" +"To test whether a version identifier is in the canonical format, you can use " +"the following function:" +msgstr "ເພື່ອທົດສອບວ່າຕົວລະບຸເວີຊັນຢູ່ໃນຮູບແບບມາດຕະຖານຫຼືບໍ່, ທ່ານສາມາດໃຊ້ຟັງຊັນຕໍ່ໄປນີ້:" + +#: ../source/specifications/version-specifiers.rst:1237 +msgid "" +"To extract the components of a version identifier, use the following regular " +"expression (as defined by the `packaging `_ project):" +msgstr "" +"ເພື່ອແຍກສ່ວນປະກອບຂອງຕົວລະບຸເວີຊັນ, ໃຫ້ໃຊ້ regular expression ຕໍ່ໄປນີ້ (ຕາມທີ່ກຳນົດໂດຍໂຄງການ " +"`packaging `_):" + +#: ../source/specifications/version-specifiers.rst:1284 +msgid "August 2014: This specification was approved through :pep:`440`." +msgstr "ສິງຫາ 2014: ຂໍ້ກຳນົດນີ້ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`440`." + +#: ../source/specifications/version-specifiers.rst:1285 +msgid "" +"May 2025: Clarify that development releases are a form of pre-release when " +"they are handled." +msgstr "" +"ພຶດສະພາ 2025: ຊີ້ແຈງວ່າລຸ້ນລະຫວ່າງການພັດທະນາແມ່ນຮູບແບບໜຶ່ງຂອງລຸ້ນກ່ອນອອກຈິງໃນເວລາທີ່ຖືກຈັດການ." + +#: ../source/specifications/version-specifiers.rst:1287 +msgid "Nov 2025: Make arbitrary equality case insensitivity explicit." +msgstr "ພະຈິກ 2025: ເຮັດໃຫ້ຄວາມເທົ່າກັນແບບກຳນົດເອງເປັນແບບບໍ່ແຍກຕົວພິມໃຫຍ່-ພິມນ້ອຍຢ່າງຊັດເຈນ." + +#: ../source/specifications/version-specifiers.rst:1288 +msgid "Jan 2026: The use of epochs was discouraged." +msgstr "ມັງກອນ 2026: ບໍ່ແນະນຳໃຫ້ມີການໃຊ້ epochs." + +#: ../source/specifications/virtual-environments.rst:6 +msgid "Python Virtual Environments" +msgstr "ສະພາບແວດລ້ອມສະເໝືອນຂອງ Python" + +#: ../source/specifications/virtual-environments.rst:8 +msgid "" +"For Python 3.3 and later versions, :pep:`405` introduced interpreter level " +"support for the concept of \"Python Virtual Environments\". Each virtual " +"environment has its own Python binary (allowing creation of environments " +"with various Python versions) and can have its own independent set of " +"installed Python packages in its site directories, but shares the standard " +"library with the base installed Python. While the concept of virtual " +"environments existed prior to this update, there was no previously " +"standardised mechanism for declaring or discovering them." +msgstr "" +"ສຳລັບ Python 3.3 ແລະ ເວີຊັນຕໍ່ໆມາ, :pep:`405` ໄດ້ນຳສະເໜີການຮອງຮັບໃນລະດັບອິນເຕີພຣີເຕີ " +"(interpreter) ສຳລັບແນວຄວາມຄິດຂອງ \"ສະພາບແວດລ້ອມສະເໝືອນຂອງ Python\" (Python " +"Virtual Environments). ແຕ່ລະສະພາບແວດລ້ອມສະເໝືອນຈະມີໄຟລ໌ໄບນາຣີ Python ຂອງຕົນເອງ " +"(ຊ່ວຍໃຫ້ສາມາດສ້າງສະພາບແວດລ້ອມທີ່ມີ Python ຫຼາຍເວີຊັນໄດ້) ແລະ ສາມາດມີຊຸດແພັກເກດ Python " +"ທີ່ຕິດຕັ້ງແຍກເປັນອິດສະຫຼະໃນໄດເຣັກທໍຣີ site ຂອງມັນເອງ, ແຕ່ຈະໃຊ້ໄລບຣາຣີມາດຕະຖານຮ່ວມກັບ Python " +"ຫຼັກທີ່ຕິດຕັ້ງໄວ້. ເຖິງວ່າແນວຄວາມຄິດຂອງສະພາບແວດລ້ອມສະເໝືອນຈະມີມາກ່ອນການອັບເດດນີ້, " +"ແຕ່ກ່ອນໜ້ານັ້ນຍັງບໍ່ມີກົນໄກມາດຕະຖານໃນການປະກາດ ຫຼື ກວດຫາພວກມັນ." + +#: ../source/specifications/virtual-environments.rst:18 +msgid "Runtime detection of virtual environments" +msgstr "ການກວດຫາສະພາບແວດລ້ອມສະເໝືອນໃນເວລາເຮັດວຽກ (Runtime)" + +#: ../source/specifications/virtual-environments.rst:20 +msgid "" +"At runtime, virtual environments can be identified by virtue " +"of :py:data:`sys.prefix` (the filesystem location of the running " +"interpreter) having a different value from :py:data:`sys.base_prefix` (the " +"default filesystem location of the standard library directories)." +msgstr "" +"ໃນເວລາເຮັດວຽກ, ສາມາດລະບຸສະພາບແວດລ້ອມສະເໝືອນໄດ້ໂດຍອາໄສຄ່າຂອງ :py:data:`sys.prefix` " +"(ຕຳແໜ່ງໃນລະບົບໄຟລ໌ຂອງອິນເຕີພຣີເຕີທີ່ກຳລັງເຮັດວຽກ) " +"ເຊິ່ງຈະມີຄ່າແຕກຕ່າງຈາກ :py:data:`sys.base_prefix` " +"(ຕຳແໜ່ງມາດຕະຖານໃນລະບົບໄຟລ໌ຂອງໄດເຣັກທໍຣີໄລບຣາຣີມາດຕະຖານ)." + +#: ../source/specifications/virtual-environments.rst:25 +msgid "" +":ref:`venv-explanation` in the Python standard library documentation for " +"the :py:mod:`venv` module covers this along with the concept of " +"\"activating\" a virtual environment in an interactive operating system " +"shell (this activation step is optional and hence the changes it makes can't " +"be reliably used to detect whether a Python program is running in a virtual " +"environment or not)." +msgstr "" +":ref:`venv-explanation` ໃນເອກະສານໄລບຣາຣີມາດຕະຖານຂອງ Python " +"ສຳລັບໂມດູນ :py:mod:`venv` ໄດ້ກວມເອົາເລື່ອງນີ້ ລວມທັງແນວຄວາມຄິດຂອງການ \"ເປີດໃຊ້\" " +"(activating) ສະພາບແວດລ້ອມສະເໝືອນໃນເຊລ (shell) ຂອງລະບົບປະຕິບັດການ " +"(ຂັ້ນຕອນການເປີດໃຊ້ນີ້ແມ່ນເປັນທາງເລືອກ, " +"ດັ່ງນັ້ນການປ່ຽນແປງທີ່ເກີດຂຶ້ນຈຶ່ງບໍ່ສາມາດໃຊ້ເພື່ອລະບຸໄດ້ຢ່າງໜ້າເຊື່ອຖືວ່າໂປຣແກຣມ Python " +"ກຳລັງເຮັດວຽກຢູ່ໃນສະພາບແວດລ້ອມສະເໝືອນຫຼືບໍ່)." + +#: ../source/specifications/virtual-environments.rst:33 +msgid "Declaring installation environments as Python virtual environments" +msgstr "ການປະກາດສະພາບແວດລ້ອມການຕິດຕັ້ງໃຫ້ເປັນສະພາບແວດລ້ອມສະເໝືອນຂອງ Python" + +#: ../source/specifications/virtual-environments.rst:35 +msgid "" +"As described in :pep:`405`, a Python virtual environment in its simplest " +"form consists of nothing more than a copy or symlink of the Python binary " +"accompanied by a ``site-packages`` directory and a ``pyvenv.cfg`` file with " +"a ``home`` key that indicates where to find the Python standard library " +"modules." +msgstr "" +"ຕາມທີ່ອະທິບາຍໄວ້ໃນ :pep:`405`, ສະພາບແວດລ້ອມສະເໝືອນຂອງ Python " +"ໃນຮູບແບບທີ່ງ່າຍທີ່ສຸດແມ່ນປະກອບດ້ວຍພຽງແຕ່ການກັອບປີ້ ຫຼື ຊິມລິງກ໌ (symlink) ຂອງໄຟລ໌ໄບນາຣີ Python " +"ພ້ອມກັບໄດເຣັກທໍຣີ ``site-packages`` ແລະ ໄຟລ໌ ``pyvenv.cfg`` ທີ່ມີຄີ (key) ຊື່ວ່າ ``home`` " +"ເຊິ່ງລະບຸບ່ອນທີ່ຈະຊອກຫາໂມດູນໄລບຣາຣີມາດຕະຖານຂອງ Python." + +#: ../source/specifications/virtual-environments.rst:40 +msgid "" +"While designed to meet the needs of the standard :py:mod:`venv` module, this " +"split installation and ``pyvenv.cfg`` file approach can be used by *any* " +"Python installation provider that desires Python-specific tools to be aware " +"that they are already operating in a virtual environment and no further " +"environment nesting is required or desired." +msgstr "" +"ເຖິງວ່າຈະຖືກອອກແບບມາເພື່ອຕອບສະໜອງຄວາມຕ້ອງການຂອງໂມດູນ :py:mod:`venv` ມາດຕະຖານ, " +"ແຕ່ການແຍກການຕິດຕັ້ງ ແລະ ການໃຊ້ໄຟລ໌ ``pyvenv.cfg`` ນີ້ ສາມາດຖືກນຳໃຊ້ໂດຍຜູ້ໃຫ້ບໍລິການຕິດຕັ້ງ " +"Python *ທຸກລາຍ* ທີ່ຕ້ອງການໃຫ້ເຄື່ອງມືສະເພາະຂອງ Python " +"ຮັບຮູ້ວ່າພວກມັນກຳລັງເຮັດວຽກຢູ່ໃນສະພາບແວດລ້ອມສະເໝືອນແລ້ວ ແລະ ບໍ່ຈຳເປັນ ຫຼື " +"ບໍ່ຕ້ອງການການຊ້ອນກັນຂອງສະພາບແວດລ້ອມອີກ." + +#: ../source/specifications/virtual-environments.rst:46 +msgid "" +"Even in the absence of a ``pyvenv.cfg`` file, any approach (e.g. " +"``sitecustomize.py``, patching the installed Python runtime) that results " +"in :py:data:`sys.prefix` and :py:data:`sys.base_prefix` having different " +"values, while still providing a matching default package installation scheme " +"in :py:mod:`sysconfig`, will be detected and behave as a Python virtual " +"environment." +msgstr "" +"ເຖິງແມ່ນວ່າຈະບໍ່ມີໄຟລ໌ ``pyvenv.cfg``, ວິທີການໃດກໍຕາມ (ເຊັ່ນ ``sitecustomize.py``, " +"ການແກ້ໄຂ Python runtime ທີ່ຕິດຕັ້ງໄວ້) ທີ່ເຮັດໃຫ້ຄ່າຂອງ :py:data:`sys.prefix` " +"ແລະ :py:data:`sys.base_prefix` ແຕກຕ່າງກັນ, " +"ໃນຂະນະທີ່ຍັງຄົງໃຫ້ຮູບແບບການຕິດຕັ້ງແພັກເກດມາດຕະຖານທີ່ກົງກັນໃນ :py:mod:`sysconfig`, " +"ຈະຖືກກວດພົບ ແລະ ເຮັດວຽກເປັນສະພາບແວດລ້ອມສະເໝືອນຂອງ Python." + +#: ../source/specifications/virtual-environments.rst:56 +msgid "May 2012: This specification was approved through :pep:`405`." +msgstr "ພຶດສະພາ 2012: ຂໍ້ກຳນົດນີ້ໄດ້ຮັບການອະນຸມັດຜ່ານ :pep:`405`." + +#: ../source/specifications/well-known-project-urls.rst:5 +msgid "Well-known Project URLs in Metadata" +msgstr "URL ຂອງໂຄງການທີ່ເປັນທີ່ຮູ້ຈັກໃນເມຕາເດຕາ" + +#: ../source/specifications/well-known-project-urls.rst:9 +msgid "" +"This document is primarily of interest to metadata *consumers*, who should " +"use the normalization rules and well-known list below to make their " +"presentation of project URLs consistent across the Python ecosystem." +msgstr "" +"ເອກະສານນີ້ແມ່ນເນັ້ນໃສ່ *ຝ່າຍນຳໃຊ້* ເມຕາເດຕາ (consumers), " +"ເຊິ່ງຄວນໃຊ້ກົດເກນການເຮັດໃຫ້ເປັນມາດຕະຖານ ແລະ ລາຍຊື່ທີ່ເປັນທີ່ຮູ້ຈັກຢູ່ລຸ່ມນີ້ ເພື່ອເຮັດໃຫ້ການສະແດງຜົນ URL " +"ຂອງໂຄງການມີຄວາມສອດຄ່ອງກັນໃນທົ່ວລະບົບນິເວດຂອງ Python." + +#: ../source/specifications/well-known-project-urls.rst:14 +msgid "" +"Metadata *producers* (such as build tools and individual package " +"maintainers) may continue to use any labels they please, within the overall " +"``Project-URL`` length restrictions. However, when possible, users are " +"*encouraged* to pick meaningful labels that normalize to well-known labels." +msgstr "" +"*ຝ່າຍສ້າງ* ເມຕາເດຕາ (producers) (ເຊັ່ນ: ເຄື່ອງມືໃນການບິວ (build tools) ແລະ " +"ຜູ້ເບິ່ງແຍງແພັກເກດ) ສາມາດເລືອກໃຊ້ປ້າຍຊື່ (labels) ໃດກໍໄດ້ຕາມຄວາມຕ້ອງການ " +"ພາຍໃຕ້ຂໍ້ກຳນົດຄວາມຍາວຂອງ ``Project-URL``. ແນວໃດກໍຕາມ, ຖ້າເປັນໄປໄດ້, ຜູ້ໃຊ້ໄດ້ຮັບການ " +"*ສະໜັບສະໜູນ* ໃຫ້ເລືອກປ້າຍຊື່ທີ່ມີຄວາມໝາຍ ເຊິ່ງສາມາດປ່ຽນເປັນມາດຕະຖານໃຫ້ກົງກັບປ້າຍຊື່ທີ່ເປັນທີ່ຮູ້ຈັກໄດ້." + +#: ../source/specifications/well-known-project-urls.rst:22 +msgid "" +"See :ref:`Writing your pyproject.toml - urls ` " +"for user-oriented guidance on choosing project URL labels in your package's " +"metadata." +msgstr "" +"ເບິ່ງ :ref:`Writing your pyproject.toml - urls ` " +"ສຳລັບຄຳແນະນຳສຳລັບຜູ້ໃຊ້ໃນການເລືອກປ້າຍຊື່ URL ຂອງໂຄງການໃນເມຕາເດຕາຂອງແພັກເກດຂອງທ່ານ." + +#: ../source/specifications/well-known-project-urls.rst:26 +msgid "This specification was originally defined in :pep:`753`." +msgstr "ຂໍ້ກຳນົດສະເພາະນີ້ຖືກກຳນົດໄວ້ໃນເບື້ອງຕົ້ນໃນ :pep:`753`." + +#: ../source/specifications/well-known-project-urls.rst:28 +msgid "" +":pep:`753` deprecates the :ref:`core-metadata-home-page` and :ref:`core-" +"metadata-download-url` metadata fields in favor of :ref:`core-metadata-" +"project-url`, and defines a normalization and lookup procedure for " +"determining whether a ``Project-URL`` is \"well-known,\" i.e. has the " +"semantics assigned to ``Home-page``, ``Download-URL``, or other common " +"project URLs." +msgstr "" +":pep:`753` ຍົກເລີກການໃຊ້ຟິວເມຕາເດຕາ :ref:`core-metadata-home-page` " +"ແລະ :ref:`core-metadata-download-url` ໂດຍປ່ຽນມາໃຊ້ :ref:`core-metadata-project-" +"url` ແທນ, ແລະ ກຳນົດຂັ້ນຕອນການເຮັດໃຫ້ເປັນມາດຕະຖານ ລວມທັງການກວດສອບວ່າ ``Project-URL`` " +"ນັ້ນແມ່ນ \"ເປັນທີ່ຮູ້ຈັກ\" ຫຼື ບໍ່, ເຊັ່ນ: ມີຄວາມໝາຍດຽວກັນກັບ ``Home-page``, ``Download-URL`` " +"ຫຼື URL ອື່ນໆ ທີ່ໃຊ້ກັນທົ່ວໄປ." + +#: ../source/specifications/well-known-project-urls.rst:35 +msgid "" +"This allows indices (such as the Python Package Index) and other downstream " +"metadata consumers to present project URLs in a consistent manner." +msgstr "" +"ສິ່ງນີ້ຊ່ວຍໃຫ້ລະບົບດັດຊະນີ (ເຊັ່ນ: Python Package Index) ແລະ ຝ່າຍນຳໃຊ້ເມຕາເດຕາອື່ນໆ " +"ສາມາດສະແດງ URL ຂອງໂຄງການໃນຮູບແບບທີ່ສອດຄ່ອງກັນ." + +#: ../source/specifications/well-known-project-urls.rst:42 +msgid "Label normalization" +msgstr "ການເຮັດໃຫ້ປ້າຍຊື່ເປັນມາດຕະຖານ" + +#: ../source/specifications/well-known-project-urls.rst:46 +msgid "" +"Label normalization is performed by metadata *consumers*, not metadata " +"producers." +msgstr "" +"ການເຮັດໃຫ້ປ້າຍຊື່ເປັນມາດຕະຖານແມ່ນຖືກປະຕິບັດໂດຍ *ຝ່າຍນຳໃຊ້* ເມຕາເດຕາ, ບໍ່ແມ່ນຝ່າຍສ້າງເມຕາເດຕາ." + +#: ../source/specifications/well-known-project-urls.rst:49 +msgid "" +"To determine whether a ``Project-URL`` label is \"well-known,\" metadata " +"consumers should normalize the label before comparing it to the :ref:`list " +"of well-known labels `." +msgstr "" +"ເພື່ອລະບຸວ່າປ້າຍຊື່ ``Project-URL`` ແມ່ນ \"ເປັນທີ່ຮູ້ຈັກ\" ຫຼື ບໍ່, " +"ຝ່າຍນຳໃຊ້ເມຕາເດຕາຄວນເຮັດໃຫ້ປ້າຍຊື່ເປັນມາດຕະຖານກ່ອນ " +"ແລ້ວຈຶ່ງນຳໄປປຽບທຽບກັບ :ref:`ລາຍຊື່ປ້າຍຊື່ທີ່ເປັນທີ່ຮູ້ຈັກ `." + +#: ../source/specifications/well-known-project-urls.rst:53 +msgid "" +"The normalization procedure for ``Project-URL`` labels is defined by the " +"following Python function:" +msgstr "" +"ຂັ້ນຕອນການເຮັດໃຫ້ເປັນມາດຕະຖານສຳລັບປ້າຍຊື່ ``Project-URL`` ແມ່ນຖືກກຳນົດໂດຍຟັງຊັນ Python " +"ຕໍ່ໄປນີ້:" + +#: ../source/specifications/well-known-project-urls.rst:65 +msgid "" +"In plain language: a label is *normalized* by deleting all ASCII punctuation " +"and whitespace, and then converting the result to lowercase." +msgstr "" +"ເວົ້າແບບເຂົ້າໃຈງ່າຍໆ: ປ້າຍຊື່ຈະຖືກ *ເຮັດໃຫ້ເປັນມາດຕະຖານ* ໂດຍການລຶບເຄື່ອງໝາຍວັກຕອນ ASCII ແລະ " +"ຍະຫວ່າງທັງໝົດອອກ, ຈາກນັ້ນປ່ຽນຜົນໄດ້ຮັບໃຫ້ເປັນໂຕພິມນ້ອຍ." + +#: ../source/specifications/well-known-project-urls.rst:68 +msgid "" +"The following table shows examples of labels before (raw) and after " +"normalization:" +msgstr "ຕາຕະລາງຕໍ່ໄປນີ້ສະແດງຕົວຢ່າງຂອງປ້າຍຊື່ກ່ອນ (ຕົ້ນສະບັບ) ແລະ ຫຼັງການເຮັດໃຫ້ເປັນມາດຕະຖານ:" + +#: ../source/specifications/well-known-project-urls.rst:74 +msgid "Raw" +msgstr "ຕົ້ນສະບັບ" + +#: ../source/specifications/well-known-project-urls.rst:75 +msgid "Normalized" +msgstr "ມາດຕະຖານ" + +#: ../source/specifications/well-known-project-urls.rst:76 +msgid "``Homepage``" +msgstr "``Homepage``" + +#: ../source/specifications/well-known-project-urls.rst:77 +#: ../source/specifications/well-known-project-urls.rst:79 +#: ../source/specifications/well-known-project-urls.rst:81 +msgid "``homepage``" +msgstr "``homepage``" + +#: ../source/specifications/well-known-project-urls.rst:78 +msgid "``Home-page``" +msgstr "``Home-page``" + +#: ../source/specifications/well-known-project-urls.rst:80 +msgid "``Home page``" +msgstr "``Home page``" + +#: ../source/specifications/well-known-project-urls.rst:82 +msgid "``Change_Log``" +msgstr "``Change_Log``" + +#: ../source/specifications/well-known-project-urls.rst:83 +msgid "``changelog``" +msgstr "``changelog``" + +#: ../source/specifications/well-known-project-urls.rst:84 +msgid "``What's New?``" +msgstr "``What's New?``" + +#: ../source/specifications/well-known-project-urls.rst:85 +msgid "``whatsnew``" +msgstr "``whatsnew``" + +#: ../source/specifications/well-known-project-urls.rst:86 +#: ../source/specifications/well-known-project-urls.rst:87 +msgid "``github``" +msgstr "``github``" + +#: ../source/specifications/well-known-project-urls.rst:92 +msgid "Well-known labels" +msgstr "ປ້າຍຊື່ທີ່ເປັນທີ່ຮູ້ຈັກ" + +#: ../source/specifications/well-known-project-urls.rst:96 +msgid "" +"The list of well-known labels is a living standard, maintained as part of " +"this document." +msgstr "" +"ລາຍຊື່ຂອງປ້າຍຊື່ທີ່ເປັນທີ່ຮູ້ຈັກແມ່ນມາດຕະຖານທີ່ມີການປັບປຸງຢູ່ສະເໝີ, ເຊິ່ງຖືກເບິ່ງແຍງເປັນສ່ວນໜຶ່ງຂອງເອກະສານນີ້." + +#: ../source/specifications/well-known-project-urls.rst:99 +msgid "" +"The following table lists labels that are well-known for the purpose of " +"specializing the presentation of ``Project-URL`` metadata:" +msgstr "" +"ຕາຕະລາງຕໍ່ໄປນີ້ສະແດງລາຍຊື່ປ້າຍຊື່ທີ່ເປັນທີ່ຮູ້ຈັກ ເພື່ອຈຸດປະສົງໃນການກຳນົດການສະແດງຜົນຂໍ້ມູນເມຕາເດຕາຂອງ " +"``Project-URL``:" + +#: ../source/specifications/well-known-project-urls.rst:105 +msgid "Label (Human-readable equivalent)" +msgstr "ປ້າຍຊື່ (ຄຳອະທິບາຍທີ່ຄົນເຂົ້າໃຈໄດ້)" + +#: ../source/specifications/well-known-project-urls.rst:107 +msgid "Aliases" +msgstr "ຊື່ເອີ້ນອື່ນ" + +#: ../source/specifications/well-known-project-urls.rst:108 +msgid "``homepage`` (Homepage)" +msgstr "``homepage`` (ໜ້າຫຼັກ)" + +#: ../source/specifications/well-known-project-urls.rst:109 +msgid "The project's home page" +msgstr "ໜ້າຫຼັກຂອງໂຄງການ" + +#: ../source/specifications/well-known-project-urls.rst:110 +#: ../source/specifications/well-known-project-urls.rst:116 +#: ../source/specifications/well-known-project-urls.rst:122 +msgid "*(none)*" +msgstr "*(ບໍ່ມີ)*" + +#: ../source/specifications/well-known-project-urls.rst:111 +msgid "``source`` (Source Code)" +msgstr "``source`` (ຊອດໂຄ້ດ)" + +#: ../source/specifications/well-known-project-urls.rst:112 +msgid "The project's hosted source code or repository" +msgstr "ບ່ອນເກັບຊອດໂຄ້ດ ຫຼື ຄັງເກັບ (repository) ຂອງໂຄງການ" + +#: ../source/specifications/well-known-project-urls.rst:113 +msgid "``repository``, ``sourcecode``, ``github``" +msgstr "``repository``, ``sourcecode``, ``github``" + +#: ../source/specifications/well-known-project-urls.rst:114 +msgid "``download`` (Download)" +msgstr "``download`` (ດາວໂຫຼດ)" + +#: ../source/specifications/well-known-project-urls.rst:115 +msgid "" +"A download URL for the current distribution, equivalent to ``Download-URL``" +msgstr "URL ສຳລັບດາວໂຫຼດເວີຊັນທີ່ມີການແຈກຢາຍໃນປັດຈຸບັນ, ມີຄ່າເທົ່າກັບ ``Download-URL``" + +#: ../source/specifications/well-known-project-urls.rst:117 +msgid "``changelog`` (Changelog)" +msgstr "``changelog`` (ບັນທຶກການປ່ຽນແປງ)" + +#: ../source/specifications/well-known-project-urls.rst:118 +msgid "The project's comprehensive changelog" +msgstr "ບັນທຶກການປ່ຽນແປງທີ່ລະອຽດຂອງໂຄງການ" + +#: ../source/specifications/well-known-project-urls.rst:119 +msgid "``changes``, ``whatsnew``, ``history``" +msgstr "``changes``, ``whatsnew``, ``history``" + +#: ../source/specifications/well-known-project-urls.rst:120 +msgid "``releasenotes`` (Release Notes)" +msgstr "``releasenotes`` (ບັນທຶກການປ່ອຍເວີຊັນ)" + +#: ../source/specifications/well-known-project-urls.rst:121 +msgid "The project's curated release notes" +msgstr "ບັນທຶກການປ່ອຍເວີຊັນທີ່ຄັດກອງມາແລ້ວຂອງໂຄງການ" + +#: ../source/specifications/well-known-project-urls.rst:123 +msgid "``documentation`` (Documentation)" +msgstr "``documentation`` (ເອກະສານອ້າງອີງ)" + +#: ../source/specifications/well-known-project-urls.rst:124 +msgid "The project's online documentation" +msgstr "ເອກະສານອ້າງອີງແບບອອນໄລນ໌ຂອງໂຄງການ" + +#: ../source/specifications/well-known-project-urls.rst:125 +msgid "``docs``" +msgstr "``docs``" + +#: ../source/specifications/well-known-project-urls.rst:126 +msgid "``issues`` (Issue Tracker)" +msgstr "``issues`` (ລະບົບຕິດຕາມບັນຫາ)" + +#: ../source/specifications/well-known-project-urls.rst:127 +msgid "The project's bug tracker" +msgstr "ລະບົບຕິດຕາມບັກ (bug) ຂອງໂຄງການ" + +#: ../source/specifications/well-known-project-urls.rst:128 +msgid "``bugs``, ``issue``, ``tracker``, ``issuetracker``, ``bugtracker``" +msgstr "``bugs``, ``issue``, ``tracker``, ``issuetracker``, ``bugtracker``" + +#: ../source/specifications/well-known-project-urls.rst:129 +msgid "``funding`` (Funding)" +msgstr "``funding`` (ການລະດົມທຶນ)" + +#: ../source/specifications/well-known-project-urls.rst:130 +msgid "Funding Information" +msgstr "ຂໍ້ມູນການລະດົມທຶນ" + +#: ../source/specifications/well-known-project-urls.rst:131 +msgid "``sponsor``, ``donate``, ``donation``" +msgstr "``sponsor``, ``donate``, ``donation``" + +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 +msgid "" +"Package metadata consumers may choose to render aliased labels the same as " +"their \"parent\" well known label, or further specialize them." +msgstr "" +"ຝ່າຍນຳໃຊ້ເມຕາເດຕາຂອງແພັກເກດອາດເລືອກສະແດງຜົນຊື່ເອີ້ນອື່ນ (aliased labels) " +"ໃຫ້ຄືກັບປ້າຍຊື່ຫຼັກທີ່ເປັນທີ່ຮູ້ຈັກ ຫຼື ອາດຈະກຳນົດຮູບແບບສະເພາະໃຫ້ພວກມັນກໍໄດ້." + +#: ../source/specifications/well-known-project-urls.rst:140 +msgid "Example behavior" +msgstr "ຕົວຢ່າງພຶດຕິກຳການເຮັດງານ" + +#: ../source/specifications/well-known-project-urls.rst:142 +msgid "" +"The following shows the flow of project URL metadata from ``pyproject.toml`` " +"to core metadata to a potential index presentation:" +msgstr "" +"ຕໍ່ໄປນີ້ແມ່ນການສະແດງຂັ້ນຕອນການສົ່ງຂໍ້ມູນ URL ຈາກ ``pyproject.toml`` ໄປຫາເມຕາເດຕາຫຼັກ " +"ຈົນເຖິງການສະແດງຜົນໃນໜ້າດັດຊະນີ:" + +#: ../source/specifications/well-known-project-urls.rst:145 +msgid "Example project URLs in standard configuration" +msgstr "ຕົວຢ່າງ URL ຂອງໂຄງການໃນການຕັ້ງຄ່າມາດຕະຖານ" + +#: ../source/specifications/well-known-project-urls.rst:154 +msgid "Core metadata representation" +msgstr "ຮູບແບບໃນເມຕາເດຕາຫຼັກ" + +#: ../source/specifications/well-known-project-urls.rst:162 +msgid "Potential rendering" +msgstr "ການສະແດງຜົນທີ່ອາດຈະເປັນໄປໄດ້" + +#: ../source/specifications/well-known-project-urls.rst:170 +msgid "" +"Observe that the core metadata appears in the form provided by the user " +"(since metadata *producers* do not perform normalization), but the metadata " +"*consumer* normalizes and identifies appropriate human-readable equivalents " +"based on the normalized form:" +msgstr "" +"ສັງເກດວ່າເມຕາເດຕາຫຼັກຈະປາກົດໃນຮູບແບບທີ່ຜູ້ໃຊ້ປ້ອນເຂົ້າມາ (ເນື່ອງຈາກ *ຝ່າຍສ້າງ* " +"ເມຕາເດຕາບໍ່ໄດ້ເຮັດໃຫ້ເປັນມາດຕະຖານ), ແຕ່ *ຝ່າຍນຳໃຊ້* ເມຕາເດຕາຈະເຮັດໃຫ້ເປັນມາດຕະຖານ ແລະ " +"ລະບຸຄຳອະທິບາຍທີ່ຄົນເຂົ້າໃຈໄດ້ຕາມຮູບແບບທີ່ປ່ຽນແລ້ວ:" + +#: ../source/specifications/well-known-project-urls.rst:175 +msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" +msgstr "``Home page`` ກາຍເປັນ ``homepage``, ເຊິ່ງຈະສະແດງຜົນເປັນ ``Homepage``" + +#: ../source/specifications/well-known-project-urls.rst:176 +msgid "" +"``DOCUMENTATION`` becomes ``documentation``, which is rendered as " +"``Documentation``" +msgstr "" +"``DOCUMENTATION`` ກາຍເປັນ ``documentation``, ເຊິ່ງຈະສະແດງຜົນເປັນ ``Documentation``" + +#: ../source/specifications/well-known-project-urls.rst:177 +msgid "" +"``Repository`` becomes ``repository``, which is rendered as ``Source Code``" +msgstr "``Repository`` ກາຍເປັນ ``repository``, ເຊິ່ງຈະສະແດງຜົນເປັນ ``Source Code``" + +#: ../source/specifications/well-known-project-urls.rst:178 +msgid "" +"``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " +"(as a specialization of ``Source Code``)" +msgstr "" +"``GitHub`` ກາຍເປັນ ``github``, ເຊິ່ງຈະສະແດງຜົນເປັນ ``Source Code (GitHub)`` " +"(ໃນຖານະເປັນຮູບແບບສະເພາະຂອງ ``Source Code``)" + +#: ../source/support.rst:3 +msgid "How to Get Support" +msgstr "ວິທີການຂໍຄວາມຊ່ວຍເຫຼືອ" + +#: ../source/support.rst:5 +msgid "" +"For support related to a specific project, see the links on " +"the :doc:`Projects ` page." +msgstr "" +"ສຳລັບຄວາມຊ່ວຍເຫຼືອທີ່ກ່ຽວຂ້ອງກັບໂຄງການໃດໜຶ່ງໂດຍສະເພາະ, ໃຫ້ເບິ່ງລິ້ງໃນໜ້າ :doc:`Projects " +"`." + +#: ../source/support.rst:8 +msgid "" +"For something more general, or when you're just not sure, please `open an " +"issue `_ on the `packaging-problems `_ repository on GitHub." +msgstr "" +"ສຳລັບເລື່ອງທົ່ວໄປ ຫຼື ເມື່ອທ່ານບໍ່ແນ່ໃຈ, ກະລຸນາ `ສ້າງ issue ໃໝ່ `_ ໃນຄັງເກັບ " +"`packaging-problems `_ ໃນ GitHub." + +#: ../source/tutorials/creating-documentation.rst:4 +msgid "Creating documentation" +msgstr "ການສ້າງເອກະສານອ້າງອີງ" + +#: ../source/tutorials/creating-documentation.rst:6 +msgid "" +"This tutorial has been removed since it is not related to packaging and was " +"unmaintained. Please see the `Sphinx tutorial `_ instead." +msgstr "" +"ບົດຮຽນນີ້ຖືກຍ້າຍອອກແລ້ວ ເນື່ອງຈາກມັນບໍ່ກ່ຽວຂ້ອງກັບການເຮັດແພັກເກດ ແລະ ບໍ່ມີການເບິ່ງແຍງຕໍ່. ກະລຸນາເບິ່ງ " +"`Sphinx tutorial `_ ແທນ." + +#: ../source/tutorials/index.rst:4 +msgid "" +"**Tutorials** are opinionated step-by-step guides to help you get familiar " +"with packaging concepts. For more detailed information on specific packaging " +"topics, see :doc:`/guides/index`." +msgstr "" +"**ບົດຮຽນ (Tutorials)** ແມ່ນຄຳແນະນຳແບບເທື່ອລະຂັ້ນຕອນ " +"ເພື່ອຊ່ວຍໃຫ້ທ່ານຄຸ້ນເຄີຍກັບແນວຄວາມຄິດຂອງການເຮັດແພັກເກດ. ສຳລັບຂໍ້ມູນລະອຽດເພີ່ມເຕີມໃນຫົວຂໍ້ສະເພາະ, " +"ໃຫ້ເບິ່ງ :doc:`/guides/index`." + +#: ../source/tutorials/installing-packages.rst:5 +msgid "Installing Packages" +msgstr "ການຕິດຕັ້ງແພັກເກດ" + +#: ../source/tutorials/installing-packages.rst:7 +msgid "" +"This section covers the basics of how to install Python :term:`packages " +"`." +msgstr "" +"ພາກສ່ວນນີ້ກວມເອົາພື້ນຖານກ່ຽວກັບວິທີການຕິດຕັ້ງ :term:`ແພັກເກດ (packages) ` ຂອງ Python." + +#: ../source/tutorials/installing-packages.rst:10 +msgid "" +"It's important to note that the term \"package\" in this context is being " +"used to describe a bundle of software to be installed (i.e. as a synonym for " +"a :term:`distribution `). It does not refer to the " +"kind of :term:`package ` that you import in your Python " +"source code (i.e. a container of modules). It is common in the Python " +"community to refer to a :term:`distribution ` using " +"the term \"package\". Using the term \"distribution\" is often not " +"preferred, because it can easily be confused with a Linux distribution, or " +"another larger software distribution like Python itself." +msgstr "" +"ສິ່ງສຳຄັນທີ່ຄວນຮູ້ຄື ຄຳວ່າ \"ແພັກເກດ (package)\" ໃນສະພາບການນີ້ " +"ແມ່ນໃຊ້ເພື່ອໝາຍເຖິງກຸ່ມຊອບແວທີ່ຈະຕິດຕັ້ງ (ຫຼື ເປັນຄຳໄວພົດຂອງ :term:`ການແຈກຢາຍ (distribution) " +"`). ມັນບໍ່ໄດ້ໝາຍເຖິງ :term:`ແພັກເກດ ` ທີ່ທ່ານ " +"import ໃນຊອດໂຄ້ດ Python (ເຊິ່ງເປັນບ່ອນເກັບໂມດູນ). ໃນກຸ່ມຜູ້ໃຊ້ Python " +"ມັກຈະເອີ້ນ :term:`ການແຈກຢາຍ (distribution) ` ວ່າ " +"\"ແພັກເກດ\". ການໃຊ້ຄຳວ່າ \"distribution\" ມັກຈະບໍ່ເປັນທີ່ນິຍົມ ເພາະມັນອາດເຮັດໃຫ້ສັບສົນກັບ " +"Linux distribution ຫຼື ການແຈກຢາຍຊອບແວຂະໜາດໃຫຍ່ອື່ນໆ ເຊັ່ນ ໂຕພາສາ Python ເອງ." + +#: ../source/tutorials/installing-packages.rst:24 +msgid "Requirements for Installing Packages" +msgstr "ສິ່ງທີ່ຈຳເປັນຕ້ອງມີກ່ອນການຕິດຕັ້ງແພັກເກດ" + +#: ../source/tutorials/installing-packages.rst:26 +msgid "" +"This section describes the steps to follow before installing other Python " +"packages." +msgstr "ພາກສ່ວນນີ້ອະທິບາຍຂັ້ນຕອນທີ່ຄວນເຮັດ ກ່ອນທີ່ຈະຕິດຕັ້ງແພັກເກດ Python ອື່ນໆ." + +#: ../source/tutorials/installing-packages.rst:31 +msgid "Ensure you can run Python from the command line" +msgstr "ກວດສອບໃຫ້ແນ່ໃຈວ່າທ່ານສາມາດລັນ Python ຈາກບັນທັດຄຳສັ່ງ (command line) ໄດ້" + +#: ../source/tutorials/installing-packages.rst:33 +msgid "" +"Before you go any further, make sure you have Python and that the expected " +"version is available from your command line. You can check this by running:" +msgstr "" +"ກ່ອນຈະໄປຂັ້ນຕອນຕໍ່ໄປ, ໃຫ້ແນ່ໃຈວ່າທ່ານມີ Python ແລະ " +"ເວີຊັນທີ່ຕ້ອງການສາມາດໃຊ້ງານໄດ້ຈາກບັນທັດຄຳສັ່ງຂອງທ່ານ. ທ່ານສາມາດກວດສອບໄດ້ໂດຍການລັນ:" + +#: ../source/tutorials/installing-packages.rst:49 +msgid "" +"You should get some output like ``Python 3.6.3``. If you do not have Python, " +"please install the latest 3.x version from `python.org`_ or refer to " +"the :ref:`Installing Python ` section of the " +"Hitchhiker's Guide to Python." +msgstr "" +"ທ່ານຄວນຈະເຫັນຂໍ້ຄວາມສະແດງຜົນປະມານວ່າ ``Python 3.6.3``. ຖ້າທ່ານຍັງບໍ່ມີ Python, " +"ກະລຸນາຕິດຕັ້ງເວີຊັນ 3.x ລ່າສຸດຈາກ `python.org`_ ຫຼື ອ້າງອີງຈາກພາກສ່ວນ :ref:`Installing " +"Python ` ໃນ Hitchhiker's Guide to Python." + +#: ../source/tutorials/installing-packages.rst:53 +msgid "If you're a newcomer and you get an error like this:" +msgstr "ຖ້າທ່ານເປັນມືໃໝ່ ແລະ ພົບຂໍ້ຜິດພາດແບບນີ້:" + +#: ../source/tutorials/installing-packages.rst:62 +msgid "" +"It's because this command and other suggested commands in this tutorial are " +"intended to be run in a *shell* (also called a *terminal* or *console*). See " +"the Python for Beginners `getting started tutorial`_ for an introduction to " +"using your operating system's shell and interacting with Python." +msgstr "" +"ນັ້ນເປັນເພາະວ່າຄຳສັ່ງນີ້ ແລະ ຄຳສັ່ງອື່ນໆ ທີ່ແນະນຳໃນບົດຮຽນນີ້ ແມ່ນມີໄວ້ເພື່ອລັນໃນ *shell* (ຫຼື ເອີ້ນວ່າ " +"*terminal* ຫຼື *console*). ເບິ່ງ `ບົດຮຽນເລີ່ມຕົ້ນ (getting started tutorial)`_ " +"ສຳລັບມືໃໝ່ ເພື່ອຮຽນຮູ້ການໃຊ້ shell ຂອງລະບົບປະຕິບັດການ ແລະ ການໂຕ້ຕອບກັບ Python." + +#: ../source/tutorials/installing-packages.rst:68 +msgid "" +"If you're using an enhanced shell like IPython or the Jupyter notebook, you " +"can run system commands like those in this tutorial by prefacing them with a " +"``!`` character:" +msgstr "" +"ຖ້າທ່ານກຳລັງໃຊ້ shell ທີ່ໄດ້ຮັບການປັບປຸງມາແລ້ວ ເຊັ່ນ IPython ຫຼື Jupyter notebook, " +"ທ່ານສາມາດລັນຄຳສັ່ງລະບົບຄືກັບໃນບົດຮຽນນີ້ໄດ້ ໂດຍການຕື່ມເຄື່ອງໝາຍ ``!`` ໄວ້ທາງໜ້າ:" + +#: ../source/tutorials/installing-packages.rst:78 +msgid "" +"It's recommended to write ``{sys.executable}`` rather than plain ``python`` " +"in order to ensure that commands are run in the Python installation matching " +"the currently running notebook (which may not be the same Python " +"installation that the ``python`` command refers to)." +msgstr "" +"ແນະນຳໃຫ້ຂຽນ ``{sys.executable}`` ແທນທີ່ຈະເປັນ ``python`` ທຳມະດາ ເພື່ອໃຫ້ແນ່ໃຈວ່າ " +"ຄຳສັ່ງຖືກລັນໃນ Python ໂຕທີ່ກົງກັບ notebook ທີ່ກຳລັງໃຊ້ງານຢູ່ (ເຊິ່ງອາດຈະບໍ່ແມ່ນ Python ໂຕດຽວກັບ " +"ທີ່ຄຳສັ່ງ ``python`` ອ້າງເຖິງ)." + +#: ../source/tutorials/installing-packages.rst:83 +msgid "" +"Due to the way most Linux distributions are handling the Python 3 migration, " +"Linux users using the system Python without creating a virtual environment " +"first should replace the ``python`` command in this tutorial with " +"``python3`` and the ``python -m pip`` command with ``python3 -m pip --" +"user``. Do *not* run any of the commands in this tutorial with ``sudo``: if " +"you get a permissions error, come back to the section on creating virtual " +"environments, set one up, and then continue with the tutorial as written." +msgstr "" +"ເນື່ອງຈາກວິທີທີ່ Linux distribution ສ່ວນໃຫຍ່ຈັດການກັບການປ່ຽນມາໃຊ້ Python 3, ຜູ້ໃຊ້ Linux " +"ທີ່ໃຊ້ Python ຂອງລະບົບໂດຍບໍ່ໄດ້ສ້າງສະພາບແວດລ້ອມສະເໝືອນ (virtual environment) ກ່ອນ " +"ຄວນປ່ຽນຄຳສັ່ງ ``python`` ໃນບົດຮຽນນີ້ເປັນ ``python3`` ແລະ ປ່ຽນ ``python -m pip`` ເປັນ " +"``python3 -m pip --user``. **ຫ້າມ** ລັນຄຳສັ່ງໃດໆ ໃນບົດຮຽນນີ້ດ້ວຍ ``sudo``: " +"ຖ້າທ່ານພົບຂໍ້ຜິດພາດກ່ຽວກັບສິດການໃຊ້ງານ (permissions error), " +"ໃຫ້ກັບໄປເບິ່ງພາກສ່ວນການສ້າງສະພາບແວດລ້ອມສະເໝືອນ, ຕັ້ງຄ່າມັນໃຫ້ຮຽບຮ້ອຍ, ແລ້ວຈຶ່ງເຮັດຕາມບົດຮຽນຕໍ່." + +#: ../source/tutorials/installing-packages.rst:95 +msgid "Ensure you can run pip from the command line" +msgstr "ກວດສອບໃຫ້ແນ່ໃຈວ່າທ່ານສາມາດລັນ pip ຈາກບັນທັດຄຳສັ່ງໄດ້" + +#: ../source/tutorials/installing-packages.rst:97 +msgid "" +"Additionally, you'll need to make sure you have :ref:`pip` available. You " +"can check this by running:" +msgstr "" +"ນອກຈາກນັ້ນ, ທ່ານຕ້ອງໝັ້ນໃຈວ່າທ່ານມີ :ref:`pip` ພ້ອມໃຊ້ງານ. ທ່ານສາມາດກວດສອບໄດ້ໂດຍການລັນ:" + +#: ../source/tutorials/installing-packages.rst:112 +msgid "" +"If you installed Python from source, with an installer from `python.org`_, " +"or via `Homebrew`_ you should already have pip. If you're on Linux and " +"installed using your OS package manager, you may have to install pip " +"separately, see :doc:`/guides/installing-using-linux-tools`." +msgstr "" +"ຖ້າທ່ານຕິດຕັ້ງ Python ຈາກຊອດໂຄ້ດ, ຕິດຕັ້ງດ້ວຍໂຕຕິດຕັ້ງຈາກ `python.org`_, ຫຼື ຜ່ານ " +"`Homebrew`_, ທ່ານຄວນຈະມີ pip ຢູ່ແລ້ວ. ຖ້າທ່ານໃຊ້ Linux ແລະ " +"ຕິດຕັ້ງຜ່ານໂຕຈັດການແພັກເກດຂອງລະບົບ (OS package manager), ທ່ານອາດຈະຕ້ອງຕິດຕັ້ງ pip " +"ແຍກຕ່າງຫາກ, ເບິ່ງ :doc:`/guides/installing-using-linux-tools`." + +#: ../source/tutorials/installing-packages.rst:119 +msgid "" +"If ``pip`` isn't already installed, then first try to bootstrap it from the " +"standard library:" +msgstr "" +"ຖ້າ ``pip`` ຍັງບໍ່ໄດ້ຕິດຕັ້ງ, ໃຫ້ລອງຕິດຕັ້ງເບື້ອງຕົ້ນ (bootstrap) ຈາກໄລບຣາຣີມາດຕະຖານ " +"(standard library):" + +#: ../source/tutorials/installing-packages.rst:134 +msgid "If that still doesn't allow you to run ``python -m pip``:" +msgstr "ຖ້າຫາກຍັງບໍ່ສາມາດລັນ ``python -m pip`` ໄດ້:" + +#: ../source/tutorials/installing-packages.rst:136 +msgid "" +"Securely Download `get-pip.py `_ [1]_" +msgstr "" +"ດາວໂຫຼດ `get-pip.py `_ ຢ່າງປອດໄພ [1]_" + +#: ../source/tutorials/installing-packages.rst:139 +msgid "" +"Run ``python get-pip.py``. [2]_ This will install or upgrade pip. " +"Additionally, it may install :ref:`setuptools` and :ref:`wheel` if they're " +"not installed already." +msgstr "" +"ລັນ ``python get-pip.py``. [2]_ ສິ່ງນີ້ຈະຕິດຕັ້ງ ຫຼື ອັບເກຣດ pip. ນອກຈາກນັ້ນ, " +"ມັນອາດຈະຕິດຕັ້ງ :ref:`setuptools` ແລະ :ref:`wheel` ຖ້າຍັງບໍ່ມີ." + +#: ../source/tutorials/installing-packages.rst:145 +msgid "" +"Be cautious if you're using a Python install that's managed by your " +"operating system or another package manager. get-pip.py does not coordinate " +"with those tools, and may leave your system in an inconsistent state. You " +"can use ``python get-pip.py --prefix=/usr/local/`` to install in ``/usr/" +"local`` which is designed for locally-installed software." +msgstr "" +"ຄວນລະມັດລະວັງຖ້າທ່ານໃຊ້ Python ທີ່ຖືກຈັດການໂດຍລະບົບປະຕິບັດການ ຫຼື ໂຕຈັດການແພັກເກດອື່ນ. get-" +"pip.py ບໍ່ໄດ້ເຮັດວຽກປະສານກັບເຄື່ອງມືເຫຼົ່ານັ້ນ ແລະ ອາດເຮັດໃຫ້ລະບົບຂອງທ່ານບໍ່ມີຄວາມສະຖຽນ. " +"ທ່ານສາມາດໃຊ້ ``python get-pip.py --prefix=/usr/local/`` ເພື່ອຕິດຕັ້ງໃນ ``/usr/" +"local`` ເຊິ່ງອອກແບບມາສຳລັບຊອບແວທີ່ຕິດຕັ້ງພາຍໃນເຄື່ອງເອງ." + +#: ../source/tutorials/installing-packages.rst:154 +msgid "Ensure pip is up to date" +msgstr "ກວດສອບໃຫ້ແນ່ໃຈວ່າ pip ເປັນເວີຊັນລ່າສຸດ" + +#: ../source/tutorials/installing-packages.rst:156 +msgid "" +"Make sure you have the latest features and fixes, and support for the latest " +"Python packaging specifications." +msgstr "" +"ເພື່ອໃຫ້ແນ່ໃຈວ່າທ່ານມີຟີເຈີໃໝ່ ແລະ ການແກ້ໄຂບັກລ່າສຸດ ລວມທັງການຮອງຮັບຂໍ້ກຳນົດຂອງ Python " +"packaging ລ່າສຸດ." + +#: ../source/tutorials/installing-packages.rst:172 +msgid "Optionally, create a virtual environment" +msgstr "ສ້າງສະພາບແວດລ້ອມສະເໝືອນ (ທາງເລືອກ)" + +#: ../source/tutorials/installing-packages.rst:174 +msgid "" +"See :ref:`section below ` for " +"details, but here's the basic :doc:`venv ` [3]_ command " +"to use on a typical Linux system:" +msgstr "" +"ເບິ່ງ :ref:`ພາກສ່ວນລຸ່ມນີ້ ` ສຳລັບລາຍລະອຽດ, " +"ແຕ່ ນີ້ແມ່ນຄຳສັ່ງພື້ນຖານຂອງ :doc:`venv ` [3]_ ສຳລັບລະບົບ Linux " +"ທົ່ວໄປ:" + +#: ../source/tutorials/installing-packages.rst:191 +msgid "" +"This will create a new virtual environment in the ``tutorial_env`` " +"subdirectory, and configure the current shell to use it as the default " +"``python`` environment." +msgstr "" +"ສິ່ງນີ້ຈະສ້າງສະພາບແວດລ້ອມສະເໝືອນໃໝ່ໃນໂຟນເດີຍ່ອຍ ``tutorial_env``, ແລະ ຕັ້ງຄ່າ shell " +"ປັດຈຸບັນໃຫ້ໃຊ້ສະພາບແວດລ້ອມນັ້ນເປັນ ``python`` ຫຼັກ." + +#: ../source/tutorials/installing-packages.rst:198 +msgid "Creating Virtual Environments" +msgstr "ການສ້າງສະພາບແວດລ້ອມສະເໝືອນ (Virtual Environments)" + +#: ../source/tutorials/installing-packages.rst:200 +msgid "" +"Python \"Virtual Environments\" allow Python :term:`packages ` to be installed in an isolated location for a particular " +"application, rather than being installed globally. If you are looking to " +"safely install global command line tools, see :doc:`/guides/installing-stand-" +"alone-command-line-tools`." +msgstr "" +"\"ສະພາບແວດລ້ອມສະເໝືອນ (Virtual Environments)\" ຂອງ Python " +"ຊ່ວຍໃຫ້ສາມາດຕິດຕັ້ງ :term:`ແພັກເກດ (packages) ` " +"ແຍກໄວ້ໃນບ່ອນສະເພາະສຳລັບແຕ່ລະແອັບພລິເຄຊັນ, ແທນທີ່ຈະຕິດຕັ້ງລວມກັນໃນລະບົບ. " +"ຖ້າທ່ານຕ້ອງການຕິດຕັ້ງເຄື່ອງມືບັນທັດຄຳສັ່ງແບບທົ່ວລະບົບຢ່າງປອດໄພ, ໃຫ້ເບິ່ງ :doc:`/guides/" +"installing-stand-alone-command-line-tools`." + +#: ../source/tutorials/installing-packages.rst:206 +msgid "" +"Imagine you have an application that needs version 1 of LibFoo, but another " +"application requires version 2. How can you use both these applications? If " +"you install everything into /usr/lib/python3.6/site-packages (or whatever " +"your platform’s standard location is), it’s easy to end up in a situation " +"where you unintentionally upgrade an application that shouldn’t be upgraded." +msgstr "" +"ລອງນຶກພາບວ່າທ່ານມີແອັບຯໜຶ່ງທີ່ຕ້ອງການ LibFoo ເວີຊັນ 1, ແຕ່ອີກແອັບຯໜຶ່ງຕ້ອງການເວີຊັນ 2. " +"ທ່ານຈະໃຊ້ທັງສອງແອັບຯນີ້ໄດ້ແນວໃດ? ຖ້າທ່ານຕິດຕັ້ງທຸກຢ່າງລົງໃນ /usr/lib/python3.6/site-" +"packages (ຫຼື ບ່ອນເກັບມາດຕະຖານຂອງລະບົບ), " +"ມັນເປັນໄປໄດ້ສູງທີ່ທ່ານຈະເຜີອັບເກຣດແອັບຯທີ່ບໍ່ຄວນອັບເກຣດໂດຍບໍ່ຕັ້ງໃຈ." + +#: ../source/tutorials/installing-packages.rst:212 +msgid "" +"Or more generally, what if you want to install an application and leave it " +"be? If an application works, any change in its libraries or the versions of " +"those libraries can break the application." +msgstr "" +"ຫຼື ເວົ້າລວມໆ ກໍຄື, ຖ້າທ່ານຕ້ອງການຕິດຕັ້ງແອັບຯໃດໜຶ່ງແລ້ວໃຫ້ມັນເຮັດວຽກໄດ້ຕະຫຼອດໄປ? " +"ຖ້າແອັບຯໃດໜຶ່ງເຮັດວຽກໄດ້ດີຢູ່ແລ້ວ, ການປ່ຽນແປງໃດໆ ໃນໄລບຣາຣີ ຫຼື ເວີຊັນຂອງໄລບຣາຣີເຫຼົ່ານັ້ນ " +"ກໍອາດຈະເຮັດໃຫ້ແອັບຯນັ້ນໃຊ້ງານບໍ່ໄດ້." + +#: ../source/tutorials/installing-packages.rst:216 +msgid "" +"Also, what if you can’t install :term:`packages ` into " +"the global site-packages directory? For instance, on a shared host." +msgstr "" +"ນອກຈາກນັ້ນ, ຖ້າທ່ານບໍ່ສາມາດຕິດຕັ້ງ :term:`ແພັກເກດ ` ລົງໃນໄດເຣັກທໍຣີ " +"site-packages ຂອງລະບົບໄດ້? ເຊັ່ນ: ໃນ shared host." + +#: ../source/tutorials/installing-packages.rst:219 +msgid "" +"In all these cases, virtual environments can help you. They have their own " +"installation directories and they don’t share libraries with other virtual " +"environments." +msgstr "" +"ໃນທຸກກໍລະນີທີ່ກ່າວມາ, ສະພາບແວດລ້ອມສະເໝືອນສາມາດຊ່ວຍທ່ານໄດ້. " +"ພວກມັນມີໄດເຣັກທໍຣີການຕິດຕັ້ງເປັນຂອງຕົນເອງ ແລະ ບໍ່ໄດ້ໃຊ້ໄລບຣາຣີຮ່ວມກັບສະພາບແວດລ້ອມສະເໝືອນອື່ນໆ." + +#: ../source/tutorials/installing-packages.rst:223 +msgid "" +"Currently, there are two common tools for creating Python virtual " +"environments:" +msgstr "ໃນປັດຈຸບັນ, ມີເຄື່ອງມືຍອດນິຍົມ 2 ຢ່າງໃນການສ້າງສະພາບແວດລ້ອມສະເໝືອນຂອງ Python:" + +#: ../source/tutorials/installing-packages.rst:225 +msgid "" +":doc:`venv ` is available by default in Python 3.3 and " +"later, and installs :ref:`pip` into created virtual environments in Python " +"3.4 and later (Python versions prior to 3.12 also " +"installed :ref:`setuptools`)." +msgstr "" +":doc:`venv ` ມີໃຫ້ໃຊ້ຕັ້ງແຕ່ຕອນຕົ້ນໃນ Python 3.3 ຂຶ້ນໄປ, ແລະ " +"ຈະຕິດຕັ້ງ :ref:`pip` ໃຫ້ອັດຕະໂນມັດໃນ Python 3.4 ຂຶ້ນໄປ (ເວີຊັນກ່ອນ 3.12 " +"ຍັງຕິດຕັ້ງ :ref:`setuptools` ໃຫ້ອີກດ້ວຍ)." + +#: ../source/tutorials/installing-packages.rst:228 +msgid "" +":ref:`virtualenv` needs to be installed separately, but supports Python 2.7+ " +"and Python 3.3+, and :ref:`pip`, :ref:`setuptools` and :ref:`wheel` are " +"installed into created virtual environments by default. Note that " +"``setuptools`` is no longer included by default starting with Python 3.12 " +"(and ``virtualenv`` follows this behavior)." +msgstr "" +":ref:`virtualenv` ຕ້ອງໄດ້ຕິດຕັ້ງແຍກຕ່າງຫາກ, ແຕ່ຮອງຮັບ Python 2.7+ ແລະ 3.3+, " +"ໂດຍຈະຕິດຕັ້ງ :ref:`pip`, :ref:`setuptools` ແລະ :ref:`wheel` ໃຫ້ອັດຕະໂນມັດ. ໝາຍເຫດ: " +"``setuptools`` ຈະບໍ່ຖືກລວມເຂົ້າຕັ້ງແຕ່ Python 3.12 ເປັນຕົ້ນໄປ (ເຊິ່ງ ``virtualenv`` " +"ກໍເຮັດຕາມນັ້ນ)." + +#: ../source/tutorials/installing-packages.rst:233 +msgid "The basic usage is like so:" +msgstr "ການໃຊ້ງານພື້ນຖານແມ່ນເຮັດແບບນີ້:" + +#: ../source/tutorials/installing-packages.rst:235 +msgid "Using :doc:`venv `:" +msgstr "ການໃຊ້ :doc:`venv `:" + +#: ../source/tutorials/installing-packages.rst:251 +msgid "Using :ref:`virtualenv`:" +msgstr "ການໃຊ້ :ref:`virtualenv`:" + +#: ../source/tutorials/installing-packages.rst:267 +msgid "" +"For more information, see the :doc:`venv ` docs or " +"the :doc:`virtualenv ` docs." +msgstr "" +"ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ເບິ່ງເອກະສານຂອງ :doc:`venv ` " +"ຫຼື :doc:`virtualenv `." + +#: ../source/tutorials/installing-packages.rst:270 +msgid "" +"The use of :command:`source` under Unix shells ensures that the virtual " +"environment's variables are set within the current shell, and not in a " +"subprocess (which then disappears, having no useful effect)." +msgstr "" +"ການໃຊ້ຄຳສັ່ງ :command:`source` ໃນ Unix shell ຊ່ວຍໃຫ້ແນ່ໃຈວ່າຕົວປ່ຽນຕ່າງໆ " +"ຂອງສະພາບແວດລ້ອມສະເໝືອນ ຖືກກຳນົດໄວ້ໃນ shell ປັດຈຸບັນ, ບໍ່ແມ່ນໃນ subprocess " +"(ເຊິ່ງຈະຫາຍໄປຫຼັງຈາກລັນຈົບ ແລະ ບໍ່ມີຜົນຫຍັງ)." + +#: ../source/tutorials/installing-packages.rst:275 +msgid "" +"In both of the above cases, Windows users should *not* use " +"the :command:`source` command, but should rather run the :command:`activate` " +"script directly from the command shell like so:" +msgstr "" +"ສຳລັບທັງສອງກໍລະນີຂ້າງເທິງ, ຜູ້ໃຊ້ Windows **ບໍ່ຄວນ** ໃຊ້ຄຳສັ່ງ :command:`source`, " +"ແຕ່ໃຫ້ລັນສະຄຣິບ :command:`activate` ໂດຍກົງຈາກ command shell ແບບນີ້:" + +#: ../source/tutorials/installing-packages.rst:285 +msgid "" +"Managing multiple virtual environments directly can become tedious, so " +"the :ref:`dependency management tutorial ` introduces " +"a higher level tool, :ref:`Pipenv`, that automatically manages a separate " +"virtual environment for each project and application that you work on." +msgstr "" +"ການຈັດການຫຼາຍສະພາບແວດລ້ອມສະເໝືອນດ້ວຍຕົນເອງອາດຈະຫຍຸ້ງຍາກ, " +"ດັ່ງນັ້ນໃນ :ref:`ບົດຮຽນການຈັດການສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ (dependency management tutorial) " +"` ຈຶ່ງໄດ້ແນະນຳເຄື່ອງມືທີ່ສູງຂຶ້ນຢ່າງ :ref:`Pipenv`, " +"ເຊິ່ງຈະຈັດການສະພາບແວດລ້ອມສະເໝືອນແຍກໃຫ້ແຕ່ລະໂຄງການໂດຍອັດຕະໂນມັດ." + +#: ../source/tutorials/installing-packages.rst:292 +msgid "Use pip for Installing" +msgstr "ໃຊ້ pip ໃນການຕິດຕັ້ງ" + +#: ../source/tutorials/installing-packages.rst:294 +msgid "" +":ref:`pip` is the recommended installer. Below, we'll cover the most common " +"usage scenarios. For more detail, see the :doc:`pip docs `, which " +"includes a complete :doc:`Reference Guide `." +msgstr "" +":ref:`pip` ແມ່ນໂຕຕິດຕັ້ງທີ່ໄດ້ຮັບການແນະນຳ. ຢູ່ລຸ່ມນີ້, ພວກເຮົາຈະເວົ້າເຖິງກໍລະນີການໃຊ້ງານທົ່ວໄປ. " +"ສຳລັບລາຍລະອຽດເພີ່ມເຕີມ, ເບິ່ງ :doc:`ເອກະສານຂອງ pip `." + +#: ../source/tutorials/installing-packages.rst:300 +msgid "Installing from PyPI" +msgstr "ການຕິດຕັ້ງຈາກ PyPI" + +#: ../source/tutorials/installing-packages.rst:302 +msgid "" +"The most common usage of :ref:`pip` is to install from the :term:`Python " +"Package Index ` using a :term:`requirement " +"specifier `. Generally speaking, a requirement " +"specifier is composed of a project name followed by an " +"optional :term:`version specifier `. A full description " +"of the supported specifiers can be found in the :ref:`Version specifier " +"specification `. Below are some examples." +msgstr "" +"ການໃຊ້ງານ :ref:`pip` ທີ່ພົບເລື້ອຍທີ່ສຸດແມ່ນການຕິດຕັ້ງຈາກ :term:`Python Package Index " +"(PyPI)` ໂດຍໃຊ້ :term:`ໂຕລະບຸຄວາມຕ້ອງການ (requirement specifier) `. ໂດຍທົ່ວໄປແລ້ວ, ມັນຈະປະກອບດ້ວຍຊື່ໂຄງການ ຕາມດ້ວຍ :term:`ໂຕລະບຸເວີຊັນ " +"(version specifier) ` (ຖ້າມີ). " +"ລາຍລະອຽດທັງໝົດສາມາດເບິ່ງໄດ້ທີ່ :ref:`Version specifier specification `. ຕົວຢ່າງມີດັ່ງລຸ່ມນີ້." + +#: ../source/tutorials/installing-packages.rst:310 +msgid "To install the latest version of \"SomeProject\":" +msgstr "ເພື່ອຕິດຕັ້ງ \"SomeProject\" ເວີຊັນລ່າສຸດ:" + +#: ../source/tutorials/installing-packages.rst:324 +msgid "To install a specific version:" +msgstr "ເພື່ອຕິດຕັ້ງເວີຊັນທີ່ລະບຸ:" + +#: ../source/tutorials/installing-packages.rst:338 +msgid "To install greater than or equal to one version and less than another:" +msgstr "ເພື່ອຕິດຕັ້ງເວີຊັນທີ່ຫຼາຍກວ່າ ຫຼື ເທົ່າກັບ ເວີຊັນໜຶ່ງ ແລະ ໜ້ອຍກວ່າ ອີກເວີຊັນໜຶ່ງ:" + +#: ../source/tutorials/installing-packages.rst:353 +msgid "" +"To install a version that's :ref:`compatible ` with a certain version: [4]_" +msgstr "" +"ເພື່ອຕິດຕັ້ງເວີຊັນທີ່ :ref:`ເຂົ້າກັນໄດ້ (compatible) ` ກັບເວີຊັນທີ່ລະບຸ: [4]_" + +#: ../source/tutorials/installing-packages.rst:368 +msgid "" +"In this case, this means to install any version \"==1.4.*\" version that's " +"also \">=1.4.2\"." +msgstr "" +"ໃນກໍລະນີນີ້, ໝາຍເຖິງການຕິດຕັ້ງເວີຊັນໃດກໍໄດ້ທີ່ເປັນ \"==1.4.*\" ແລະ ຕ້ອງເປັນ \">=1.4.2\" ນຳ." + +#: ../source/tutorials/installing-packages.rst:373 +msgid "Source Distributions vs Wheels" +msgstr "Source Distributions ປຽບທຽບກັບ Wheels" + +#: ../source/tutorials/installing-packages.rst:375 +msgid "" +":ref:`pip` can install from either :term:`Source Distributions (sdist) " +"` or :term:`Wheels `, but if both " +"are present on PyPI, pip will prefer a compatible :term:`wheel `. You " +"can override pip`s default behavior by e.g. using its :ref:`--no-binary " +"` option." +msgstr "" +":ref:`pip` ສາມາດຕິດຕັ້ງໄດ້ທັງຈາກ :term:`Source Distributions (sdist)` " +"ຫຼື :term:`Wheels`. ແຕ່ຖ້າມີທັງສອງຢ່າງໃນ PyPI, pip ຈະເລືອກ :term:`wheel` " +"ທີ່ເຂົ້າກັນໄດ້ກ່ອນ. ທ່ານສາມາດປ່ຽນພຶດຕິກຳນີ້ໄດ້ໂດຍການໃຊ້ຕົວເລືອກ ເຊັ່ນ :ref:`--no-binary " +"`." + +#: ../source/tutorials/installing-packages.rst:381 +msgid "" +":term:`Wheels ` are a pre-built :term:`distribution ` format that provides faster installation compared to :term:`Source " +"Distributions (sdist) `, especially when " +"a project contains compiled extensions." +msgstr "" +":term:`Wheels` ແມ່ນຮູບແບບ :term:`ການແຈກຢາຍ` ທີ່ຖືກບິວ (build) ໄວ້ລ່ວງໜ້າແລ້ວ " +"ເຊິ່ງຊ່ວຍໃຫ້ຕິດຕັ້ງໄດ້ໄວກວ່າ :term:`Source Distributions (sdist)`, " +"ໂດຍສະເພາະເມື່ອໂຄງການມີສ່ວນເສີມທີ່ຕ້ອງຄອມໄພລ໌ (compiled extensions)." + +#: ../source/tutorials/installing-packages.rst:386 +msgid "" +"If :ref:`pip` does not find a wheel to install, it will locally build a " +"wheel and cache it for future installs, instead of rebuilding the source " +"distribution in the future." +msgstr "" +"ຖ້າ :ref:`pip` ບໍ່ພົບ wheel ທີ່ຈະຕິດຕັ້ງ, ມັນຈະເຮັດການບິວ wheel ຢູ່ພາຍໃນເຄື່ອງ ແລະ ເກັບໄວ້ໃນ " +"cache ເພື່ອໃຊ້ໃນການຕິດຕັ້ງຄັ້ງຕໍ່ໄປ, ໂດຍບໍ່ຕ້ອງບິວໃໝ່ຈາກ source distribution ອີກ." + +#: ../source/tutorials/installing-packages.rst:394 +msgid "Upgrade an already installed ``SomeProject`` to the latest from PyPI." +msgstr "ອັບເກຣດ ``SomeProject`` ທີ່ຕິດຕັ້ງໄວ້ແລ້ວ ໃຫ້ເປັນເວີຊັນລ່າສຸດຈາກ PyPI." + +#: ../source/tutorials/installing-packages.rst:411 +msgid "Installing to the User Site" +msgstr "ການຕິດຕັ້ງໄວ້ໃນພື້ນທີ່ຂອງຜູ້ໃຊ້ (User Site)" + +#: ../source/tutorials/installing-packages.rst:413 +msgid "" +"To install :term:`packages ` that are isolated to the " +"current user, use the ``--user`` flag:" +msgstr "" +"ເພື່ອຕິດຕັ້ງ :term:`ແພັກເກດ ` ແຍກໄວ້ສະເພາະສຳລັບຜູ້ໃຊ້ປັດຈຸບັນ, ໃຫ້ໃຊ້ " +"flag ``--user``:" + +#: ../source/tutorials/installing-packages.rst:428 +msgid "" +"For more information see the `User Installs `_ section from the pip docs." +msgstr "" +"ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ເບິ່ງພາກສ່ວນ `User Installs `_ ໃນເອກະສານຂອງ pip." + +#: ../source/tutorials/installing-packages.rst:432 +msgid "" +"Note that the ``--user`` flag has no effect when inside a virtual " +"environment - all installation commands will affect the virtual environment." +msgstr "" +"ໝາຍເຫດ: flag ``--user`` ຈະບໍ່ມີຜົນຫຍັງເມື່ອຢູ່ໃນສະພາບແວດລ້ອມສະເໝືອນ (virtual " +"environment) - ທຸກໆ ຄຳສັ່ງຕິດຕັ້ງຈະມີຜົນຕໍ່ສະພາບແວດລ້ອມສະເໝືອນນັ້ນເທົ່ານັ້ນ." + +#: ../source/tutorials/installing-packages.rst:435 +msgid "" +"If ``SomeProject`` defines any command-line scripts or console entry points, " +"``--user`` will cause them to be installed inside the `user base`_'s binary " +"directory, which may or may not already be present in your " +"shell's :envvar:`PATH`. (Starting in version 10, pip displays a warning " +"when installing any scripts to a directory outside :envvar:`PATH`.) If the " +"scripts are not available in your shell after installation, you'll need to " +"add the directory to your :envvar:`PATH`:" +msgstr "" +"ຖ້າ ``SomeProject`` ກໍານົດສະຄຣິບຄໍາສັ່ງ (command-line scripts) ຫຼື console entry " +"points ໃດໜຶ່ງ, ``--user`` ຈະເຮັດໃຫ້ພວກມັນຖືກຕິດຕັ້ງໄວ້ໃນໄດເຣັກທໍຣີໄບນາຣີຂອງ `user base`_, " +"ເຊິ່ງອາດຈະມີ ຫຼື ບໍ່ມີຢູ່ໃນ :envvar:`PATH` ຂອງເຊວ (shell) ຂອງທ່ານແລ້ວ. (ເລີ່ມຈາກເວີຊັນ 10, " +"pip ຈະສະແດງຄໍາເຕືອນເມື່ອຕິດຕັ້ງສະຄຣິບໃດໆລົງໃນໄດເຣັກທໍຣີທີ່ຢູ່ນອກ :envvar:`PATH`.) " +"ຖ້າສະຄຣິບບໍ່ພ້ອມໃຊ້ງານໃນເຊວຂອງທ່ານຫຼັງຈາກການຕິດຕັ້ງ, " +"ທ່ານຈະຕ້ອງເພີ່ມໄດເຣັກທໍຣີນັ້ນເຂົ້າໃນ :envvar:`PATH` ຂອງທ່ານ:" + +#: ../source/tutorials/installing-packages.rst:443 +msgid "" +"On Linux and macOS you can find the user base binary directory by running " +"``python -m site --user-base`` and adding ``bin`` to the end. For example, " +"this will typically print ``~/.local`` (with ``~`` expanded to the absolute " +"path to your home directory) so you'll need to add ``~/.local/bin`` to your " +"``PATH``. You can set your ``PATH`` permanently by `modifying ~/.profile`_." +msgstr "" +"ໃນ Linux ແລະ macOS, ທ່ານສາມາດຫາໄດເຣັກທໍຣີບີນາຣີຂອງ user base ໄດ້ໂດຍການລັນ ``python " +"-m site --user-base`` ແລ້ວຕື່ມ ``bin`` ໃສ່ທາງທ້າຍ. ຕົວຢ່າງ: ປົກກະຕິມັນຈະສະແດງຜົນເປັນ " +"``~/.local``, ດັ່ງນັ້ນທ່ານຕ້ອງເພີ່ມ ``~/.local/bin`` ເຂົ້າໃນ ``PATH``. ທ່ານສາມາດຕັ້ງຄ່າ " +"``PATH`` ແບບຖາວອນໄດ້ໂດຍ `ແກ້ໄຂໄຟລ໌ ~/.profile`_." + +#: ../source/tutorials/installing-packages.rst:449 +msgid "" +"On Windows you can find the user base binary directory by running ``py -m " +"site --user-site`` and replacing ``site-packages`` with ``Scripts``. For " +"example, this could return ``C:" +"\\Users\\Username\\AppData\\Roaming\\Python36\\site-packages`` so you would " +"need to set your ``PATH`` to include ``C:" +"\\Users\\Username\\AppData\\Roaming\\Python36\\Scripts``. You can set your " +"user ``PATH`` permanently in the `Control Panel`_. You may need to log out " +"for the ``PATH`` changes to take effect." +msgstr "" +"ໃນ Windows, ທ່ານສາມາດຫາໄດເຣັກທໍຣີບີນາຣີຂອງ user base ໄດ້ໂດຍການລັນ ``py -m site --" +"user-site`` ແລ້ວປ່ຽນ ``site-packages`` ເປັນ ``Scripts``. ຕົວຢ່າງ: ຖ້າມັນສະແດງຜົນເປັນ " +"``C:\\Users\\Username\\AppData\\Roaming\\Python36\\site-packages``, " +"ທ່ານຕ້ອງເພີ່ມ ``C:\\Users\\Username\\AppData\\Roaming\\Python36\\Scripts`` ເຂົ້າໃນ " +"``PATH``. ທ່ານສາມາດຕັ້ງຄ່າ ``PATH`` ແບບຖາວອນໄດ້ໃນ `Control Panel`_." + +#: ../source/tutorials/installing-packages.rst:465 +msgid "" +"Install a list of requirements specified in a :ref:`Requirements File " +"`." +msgstr "" +"ຕິດຕັ້ງລາຍຊື່ແພັກເກດທີ່ລະບຸໄວ້ໃນ :ref:`ໄຟລ໌ Requirements `." + +#: ../source/tutorials/installing-packages.rst:481 +msgid "Installing from VCS" +msgstr "ການຕິດຕັ້ງຈາກ VCS" + +#: ../source/tutorials/installing-packages.rst:483 +msgid "" +"Install a project from VCS in \"editable\" mode. For a full breakdown of " +"the syntax, see pip's section on :ref:`VCS Support `." +msgstr "" +"ຕິດຕັ້ງໂຄງການຈາກ VCS ໃນຮູບແບບ \"ແກ້ໄຂໄດ້ (editable)\". ສຳລັບລາຍລະອຽດຂອງໄວຍາກອນ, " +"ເບິ່ງພາກສ່ວນ :ref:`VCS Support ` ຂອງ pip." + +#: ../source/tutorials/installing-packages.rst:505 +msgid "Installing from other Indexes" +msgstr "ການຕິດຕັ້ງຈາກດັດຊະນີອື່ນໆ" + +#: ../source/tutorials/installing-packages.rst:507 +msgid "Install from an alternate index" +msgstr "ຕິດຕັ້ງຈາກດັດຊະນີສຳຮອງ" + +#: ../source/tutorials/installing-packages.rst:521 +msgid "" +"Search an additional index during install, in addition to :term:`PyPI " +"`" +msgstr "" +"ຄົ້ນຫາໃນດັດຊະນີເພີ່ມເຕີມໃນລະຫວ່າງການຕິດຕັ້ງ ນອກເໜືອຈາກ :term:`PyPI `" + +#: ../source/tutorials/installing-packages.rst:537 +msgid "Installing from a local src tree" +msgstr "ການຕິດຕັ້ງຈາກ src tree ພາຍໃນເຄື່ອງ" + +#: ../source/tutorials/installing-packages.rst:540 +msgid "" +"Installing from local src in :doc:`Development Mode `, i.e. in such a way that the project appears to be " +"installed, but yet is still editable from the src tree." +msgstr "" +"ການຕິດຕັ້ງຈາກ src ພາຍໃນເຄື່ອງໃນ :doc:`ຮູບແບບການພັດທະນາ (Development Mode) " +"`, " +"ເຊິ່ງເປັນການຕິດຕັ້ງທີ່ເຮັດໃຫ້ເບິ່ງຄືວ່າແພັກເກດຖືກຕິດຕັ້ງແລ້ວ ແຕ່ຍັງສາມາດແກ້ໄຂໂຄ້ດຈາກ src tree ໄດ້." + +#: ../source/tutorials/installing-packages.rst:557 +msgid "You can also install normally from src" +msgstr "ທ່ານຍັງສາມາດຕິດຕັ້ງແບບປົກກະຕິຈາກ src ໄດ້" + +#: ../source/tutorials/installing-packages.rst:572 +msgid "Installing from local archives" +msgstr "ການຕິດຕັ້ງຈາກໄຟລ໌ບີບອັດພາຍໃນເຄື່ອງ" + +#: ../source/tutorials/installing-packages.rst:574 +msgid "Install a particular source archive file." +msgstr "ຕິດຕັ້ງຈາກໄຟລ໌ບີບອັດຊອດໂຄ້ດ (source archive) ທີ່ລະບຸ." + +#: ../source/tutorials/installing-packages.rst:588 +msgid "" +"Install from a local directory containing archives (and don't " +"check :term:`PyPI `)" +msgstr "" +"ຕິດຕັ້ງຈາກໄດເຣັກທໍຣີພາຍໃນເຄື່ອງທີ່ມີໄຟລ໌ບີບອັດ (ໂດຍບໍ່ຕ້ອງກວດສອບ :term:`PyPI `)" + +#: ../source/tutorials/installing-packages.rst:608 +msgid "Installing from other sources" +msgstr "ການຕິດຕັ້ງຈາກແຫຼ່ງອື່ນໆ" + +#: ../source/tutorials/installing-packages.rst:610 +msgid "" +"To install from other data sources (for example Amazon S3 storage) you can " +"create a helper application that presents the data in a format compliant " +"with the :ref:`simple repository API `:, and use the " +"``--extra-index-url`` flag to direct pip to use that index." +msgstr "" +"ເພື່ອຕິດຕັ້ງຈາກແຫຼ່ງຂໍ້ມູນອື່ນໆ (ຕົວຢ່າງ: Amazon S3 storage), ທ່ານສາມາດສ້າງແອັບຯຊ່ວຍ " +"ທີ່ສະແດງຂໍ້ມູນໃນຮູບແບບທີ່ກົງກັບ :ref:`simple repository API `, " +"ແລ້ວໃຊ້ flag ``--extra-index-url`` ເພື່ອບອກໃຫ້ pip ໃຊ້ດັດຊະນີນັ້ນ." + +#: ../source/tutorials/installing-packages.rst:622 +msgid "Installing Prereleases" +msgstr "ການຕິດຕັ້ງເວີຊັນທົດລອງ (Prereleases)" + +#: ../source/tutorials/installing-packages.rst:624 +msgid "" +"Find pre-release and development versions, in addition to stable versions. " +"By default, pip only finds stable versions." +msgstr "" +"ຄົ້ນຫາເວີຊັນທົດລອງ (pre-release) ແລະ ເວີຊັນພັດທະນາ (development) ເພີ່ມເຕີມຈາກເວີຊັນປົກກະຕິ " +"(stable). ໂດຍປົກກະຕິແລ້ວ pip ຈະຫາສະເພາະເວີຊັນປົກກະຕິເທົ່ານັ້ນ." + +#: ../source/tutorials/installing-packages.rst:640 +msgid "Installing \"Extras\"" +msgstr "ການຕິດຕັ້ງ \"ສ່ວນເສີມ (Extras)\"" + +#: ../source/tutorials/installing-packages.rst:642 +msgid "" +"Extras are optional \"variants\" of a package, which may include additional " +"dependencies, and thereby enable additional functionality from the package. " +"If you wish to install an extra for a package which you know publishes one, " +"you can include it in the pip installation command:" +msgstr "" +"Extras ແມ່ນ \"ຮູບແບບຍ່ອຍ\" ທີ່ເປັນທາງເລືອກຂອງແພັກເກດ ເຊິ່ງອາດຈະມີສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ເພີ່ມເຕີມ " +"ເພື່ອເປີດໃຊ້ງານຟັງຊັນເສີມຂອງແພັກເກດນັ້ນ. ຖ້າທ່ານຕ້ອງການຕິດຕັ້ງສ່ວນເສີມ, " +"ທ່ານສາມາດລະບຸມັນໃນຄຳສັ່ງຕິດຕັ້ງ pip ໄດ້:" + +#: ../source/tutorials/installing-packages.rst:665 +msgid "" +"\"Secure\" in this context means using a modern browser or a tool " +"like :command:`curl` that verifies SSL certificates when downloading from " +"https URLs." +msgstr "" +"\"ຢ່າງປອດໄພ (Secure)\" ໃນສະພາບການນີ້ ໝາຍເຖິງການໃຊ້ບຣາວເຊີທີ່ທັນສະໄໝ ຫຼື " +"ເຄື່ອງມືເຊັ່ນ :command:`curl` ທີ່ມີການກວດສອບ SSL certificate ເມື່ອດາວໂຫຼດຈາກ URL ທີ່ເປັນ " +"https." + +#: ../source/tutorials/installing-packages.rst:674 +msgid "" +"Beginning with Python 3.4, ``venv`` (a stdlib alternative " +"to :ref:`virtualenv`) will create virtualenv environments with ``pip`` pre-" +"installed, thereby making it an equal alternative to :ref:`virtualenv`." +msgstr "" +"ເລີ່ມຕັ້ງແຕ່ Python 3.4 ເປັນຕົ້ນໄປ, ``venv`` " +"(ທາງເລືອກໃນໄລບຣາຣີມາດຕະຖານແທນ :ref:`virtualenv`) ຈະສ້າງສະພາບແວດລ້ອມສະເໝືອນທີ່ມີ " +"``pip`` ຕິດຕັ້ງມາໃຫ້ພ້ອມ, ເຮັດໃຫ້ມັນເປັນທາງເລືອກທີ່ດີເທົ່າກັບ :ref:`virtualenv`." + +#: ../source/tutorials/installing-packages.rst:679 +msgid "" +"The compatible release specifier was accepted in :pep:`440` and support was " +"released in :ref:`setuptools` v8.0 and :ref:`pip` v6.0" +msgstr "" +"ໂຕລະບຸເວີຊັນທີ່ເຂົ້າກັນໄດ້ (compatible release specifier) ໄດ້ຮັບການຍອມຮັບໃນ :pep:`440` " +"ແລະ ເລີ່ມຮອງຮັບໃນ :ref:`setuptools` v8.0 ແລະ :ref:`pip` v6.0" + +#: ../source/tutorials/managing-dependencies.rst:4 +msgid "Managing Application Dependencies" +msgstr "ການຈັດການສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ (Dependencies) ຂອງແອັບພລິເຄຊັນ" + +#: ../source/tutorials/managing-dependencies.rst:6 +msgid "" +"The :ref:`package installation tutorial ` covered the " +"basics of getting set up to install and update Python packages." +msgstr "" +":ref:`ບົດຮຽນການຕິດຕັ້ງແພັກເກດ ` ໄດ້ເວົ້າເຖິງພື້ນຖານການຕັ້ງຄ່າ ເພື່ອຕິດຕັ້ງ " +"ແລະ ອັບເດດແພັກເກດ Python ໄປແລ້ວ." + +#: ../source/tutorials/managing-dependencies.rst:9 +msgid "" +"However, running these commands interactively can get tedious even for your " +"own personal projects, and things get even more difficult when trying to set " +"up development environments automatically for projects with multiple " +"contributors." +msgstr "" +"ແນວໃດກໍຕາມ, ການລັນຄຳສັ່ງເຫຼົ່ານີ້ດ້ວຍຕົນເອງອາດຈະເປັນໜ້າເບື່ອ " +"ເຖິງວ່າຈະເປັນໂຄງການສ່ວນຕົວຂອງທ່ານເອງກໍຕາມ, ແລະ " +"ມັນຈະຍິ່ງຍາກຂຶ້ນເມື່ອຕ້ອງຕັ້ງຄ່າສະພາບແວດລ້ອມການພັດທະນາແບບອັດຕະໂນມັດ " +"ສຳລັບໂຄງການທີ່ມີຜູ້ຮ່ວມພັດທະນາຫຼາຍຄົນ." + +#: ../source/tutorials/managing-dependencies.rst:13 +msgid "" +"This tutorial walks you through the use of :ref:`Pipenv` to manage " +"dependencies for an application. It will show you how to install and use the " +"necessary tools and make strong recommendations on best practices." +msgstr "" +"ບົດຮຽນນີ້ຈະນຳພາທ່ານໄປຮຽນຮູ້ການໃຊ້ :ref:`Pipenv` ເພື່ອຈັດການສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ສຳລັບແອັບພລິເຄຊັນ. " +"ມັນຈະສະແດງວິທີການຕິດຕັ້ງ, ການໃຊ້ເຄື່ອງມືທີ່ຈຳເປັນ ແລະ ຄຳແນະນຳກ່ຽວກັບວິທີການທີ່ດີທີ່ສຸດ (best " +"practices)." + +#: ../source/tutorials/managing-dependencies.rst:17 +msgid "" +"Keep in mind that Python is used for a great many different purposes, and " +"precisely how you want to manage your dependencies may change based on how " +"you decide to publish your software. The guidance presented here is most " +"directly applicable to the development and deployment of network services " +"(including web applications), but is also very well suited to managing " +"development and testing environments for any kind of project." +msgstr "" +"ຄວນຈື່ໄວ້ວ່າ Python ຖືກນຳໃຊ້ໃນຫຼາຍຈຸດປະສົງ, ແລະ ວິທີການຈັດການສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ " +"ອາດຈະປ່ຽນແປງໄປຕາມວິທີທີ່ທ່ານເລືອກໃນການເຜີຍແຜ່ຊອບແວ. ຄຳແນະນຳຢູ່ບ່ອນນີ້ແມ່ນເໝາະສົມທີ່ສຸດ " +"ສຳລັບການພັດທະນາ ແລະ ຕິດຕັ້ງບໍລິການເຄືອຂ່າຍ (ລວມທັງເວັບແອັບພລິເຄຊັນ), ແຕ່ກໍຍັງເໝາະສຳລັບການຈັດການ " +"ສະພາບແວດລ້ອມການພັດທະນາ ແລະ ການທົດສອບສຳລັບໂຄງການທຸກປະເພດ." + +#: ../source/tutorials/managing-dependencies.rst:24 +msgid "" +"For alternatives, see `Other Tools for Application Dependency Management`_." +msgstr "ສຳລັບທາງເລືອກອື່ນ, ເບິ່ງ `ເຄື່ອງມືອື່ນໆ ສຳລັບການຈັດການສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ຂອງແອັບພລິເຄຊັນ`_." + +#: ../source/tutorials/managing-dependencies.rst:27 +msgid "Installing Pipenv" +msgstr "ການຕິດຕັ້ງ Pipenv" + +#: ../source/tutorials/managing-dependencies.rst:29 +msgid "" +":ref:`Pipenv` is a dependency manager for Python projects. If you're " +"familiar with Node.js' `npm`_ or Ruby's `bundler`_, it is similar in spirit " +"to those tools. While :ref:`pip` alone is often sufficient for personal use, " +"Pipenv is recommended for collaborative projects as it's a higher-level tool " +"that simplifies dependency management for common use cases." +msgstr "" +":ref:`Pipenv` ແມ່ນໂຕຈັດການສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ສຳລັບໂຄງການ Python. ຖ້າທ່ານຄຸ້ນເຄີຍກັບ `npm`_ " +"ຂອງ Node.js ຫຼື `bundler`_ ຂອງ Ruby, ມັນຈະມີຫຼັກການຄ້າຍຄືກັນ. ເຖິງວ່າການໃຊ້ :ref:`pip` " +"ຢ່າງດຽວຈະພຽງພໍສຳລັບການໃຊ້ສ່ວນຕົວ, ແຕ່ Pipenv ແມ່ນໄດ້ຮັບການແນະນຳສຳລັບໂຄງການທີ່ເຮັດວຽກຮ່ວມກັນ " +"ເພາະມັນເປັນເຄື່ອງມືລະດັບສູງທີ່ຊ່ວຍໃຫ້ການຈັດການງ່າຍຂຶ້ນ." + +#: ../source/tutorials/managing-dependencies.rst:35 +msgid "Use ``pip`` to install Pipenv:" +msgstr "ໃຊ້ ``pip`` ເພື່ອຕິດຕັ້ງ Pipenv:" + +#: ../source/tutorials/managing-dependencies.rst:51 +msgid "" +"This does a `user installation`_ to prevent breaking any system-wide " +"packages. If ``pipenv`` isn't available in your shell after installation, " +"you'll need to add the :py:data:`user base `'s binary " +"directory to your ``PATH``. See :ref:`Installing to the User Site` for more " +"information." +msgstr "" +"ສິ່ງນີ້ແມ່ນການຕິດຕັ້ງແບບ `user installation`_ ເພື່ອປ້ອງກັນບໍ່ໃຫ້ແພັກເກດຂອງລະບົບເສຍຫາຍ. ຖ້າ " +"``pipenv`` ໃຊ້ງານບໍ່ໄດ້ຫຼັງການຕິດຕັ້ງ, ທ່ານຕ້ອງເພີ່ມໄດເຣັກທໍຣີບີນາຣີຂອງ :py:data:`user base " +"` ເຂົ້າໃນ ``PATH``. ເບິ່ງ :ref:`Installing to the User " +"Site` ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ." + +#: ../source/tutorials/managing-dependencies.rst:62 +msgid "Installing packages for your project" +msgstr "ການຕິດຕັ້ງແພັກເກດສຳລັບໂຄງການຂອງທ່ານ" + +#: ../source/tutorials/managing-dependencies.rst:64 +msgid "" +"Pipenv manages dependencies on a per-project basis. To install packages, " +"change into your project's directory (or just an empty directory for this " +"tutorial) and run:" +msgstr "" +"Pipenv ຈັດການສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ແຍກຕາມແຕ່ລະໂຄງການ. ເພື່ອຕິດຕັ້ງແພັກເກດ, " +"ໃຫ້ເຂົ້າໄປໃນໄດເຣັກທໍຣີຂອງໂຄງການ (ຫຼື ໄດເຣັກທໍຣີຫວ່າງເປົ່າສຳລັບບົດຮຽນນີ້) ແລ້ວລັນ:" + +#: ../source/tutorials/managing-dependencies.rst:73 +msgid "" +"Pipenv will install the `Requests`_ library and create a ``Pipfile`` for you " +"in your project's directory. The :ref:`Pipfile` is used to track which " +"dependencies your project needs in case you need to re-install them, such as " +"when you share your project with others. You should get output similar to " +"this (although the exact paths shown will vary):" +msgstr "" +"Pipenv ຈະຕິດຕັ້ງໄລບຣາຣີ `Requests`_ ແລະ ສ້າງໄຟລ໌ ``Pipfile`` " +"ໃຫ້ໃນໄດເຣັກທໍຣີໂຄງການຂອງທ່ານ. :ref:`Pipfile` " +"ໃຊ້ເພື່ອຕິດຕາມວ່າໂຄງການຂອງທ່ານຕ້ອງການແພັກເກດໃດແດ່ ໃນກໍລະນີທີ່ຕ້ອງຕິດຕັ້ງໃໝ່ ເຊັ່ນ " +"ເມື່ອທ່ານແບ່ງປັນໂຄງການໃຫ້ຄົນອື່ນ. ທ່ານຄວນຈະເຫັນຂໍ້ຄວາມສະແດງຜົນປະມານນີ້:" + +#: ../source/tutorials/managing-dependencies.rst:109 +msgid "Using installed packages" +msgstr "ການໃຊ້ແພັກເກດທີ່ຕິດຕັ້ງແລ້ວ" + +#: ../source/tutorials/managing-dependencies.rst:111 +msgid "" +"Now that Requests is installed you can create a simple :file:`main.py` file " +"to use it:" +msgstr "" +"ເມື່ອຕິດຕັ້ງ Requests ຮຽບຮ້ອຍແລ້ວ, ທ່ານສາມາດສ້າງໄຟລ໌ :file:`main.py` ແບບງ່າຍໆ " +"ເພື່ອລອງໃຊ້ງານ:" + +#: ../source/tutorials/managing-dependencies.rst:122 +msgid "Then you can run this script using ``pipenv run``:" +msgstr "ຈາກນັ້ນທ່ານສາມາດລັນສະຄຣິບນີ້ໄດ້ໂດຍໃຊ້ ``pipenv run``:" + +#: ../source/tutorials/managing-dependencies.rst:128 +msgid "You should get output similar to this:" +msgstr "ທ່ານຄວນຈະເຫັນຂໍ້ຄວາມສະແດງຜົນປະມານນີ້:" + +#: ../source/tutorials/managing-dependencies.rst:134 +msgid "" +"Using ``pipenv run`` ensures that your installed packages are available to " +"your script. It's also possible to spawn a new shell that ensures all " +"commands have access to your installed packages with ``pipenv shell``." +msgstr "" +"ການໃຊ້ ``pipenv run`` ຊ່ວຍໃຫ້ໝັ້ນໃຈວ່າແພັກເກດທີ່ຕິດຕັ້ງແລ້ວພ້ອມໃຊ້ງານສຳລັບສະຄຣິບຂອງທ່ານ. " +"ນອກຈາກນັ້ນ, ທ່ານຍັງສາມາດເປີດ shell ໃໝ່ທີ່ທຸກຄຳສັ່ງສາມາດເຂົ້າເຖິງແພັກເກດທີ່ຕິດຕັ້ງແລ້ວໄດ້ດ້ວຍ " +"``pipenv shell``." + +#: ../source/tutorials/managing-dependencies.rst:140 +#: ../source/tutorials/packaging-projects.rst:484 +msgid "Next steps" +msgstr "ຂັ້ນຕອນຕໍ່ໄປ" + +#: ../source/tutorials/managing-dependencies.rst:142 +msgid "" +"Congratulations, you now know how to effectively manage dependencies and " +"development environments on a collaborative Python project! ✨ 🍰 ✨" +msgstr "" +"ຂໍສະແດງຄວາມຍິນດີ, ຕອນນີ້ທ່ານຮູ້ວິທີການຈັດການສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ ແລະ ສະພາບແວດລ້ອມການພັດທະນາ " +"ໃນໂຄງການ Python ທີ່ເຮັດວຽກຮ່ວມກັນຢ່າງມີປະສິດທິພາບແລ້ວ! ✨ 🍰 ✨" + +#: ../source/tutorials/managing-dependencies.rst:145 +msgid "" +"If you're interested in creating and distributing your own Python packages, " +"see the :ref:`tutorial on packaging and distributing packages `." +msgstr "" +"ຖ້າທ່ານສົນໃຈໃນການສ້າງ ແລະ ແຈກຢາຍແພັກເກດ Python ຂອງທ່ານເອງ, " +"ໃຫ້ເບິ່ງ :ref:`ບົດຮຽນການເຮັດແພັກເກດ ແລະ ການແຈກຢາຍແພັກເກດ `." + +#: ../source/tutorials/managing-dependencies.rst:148 +msgid "" +"Note that when your application includes definitions of Python source " +"packages, they (and their dependencies) can be added to your ``pipenv`` " +"environment with ``pipenv install -e `` " +"(e.g. ``pipenv install -e .`` or ``pipenv install -e src``)." +msgstr "" +"ໝາຍເຫດ: ເມື່ອແອັບພລິເຄຊັນຂອງທ່ານມີການກຳນົດຊອດໂຄ້ດແພັກເກດ Python, ພວກມັນ (ແລະ " +"ສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້) ສາມາດເພີ່ມເຂົ້າໃນສະພາບແວດລ້ອມ ``pipenv`` ໄດ້ດ້ວຍ ``pipenv install -e " +"``." + +#: ../source/tutorials/managing-dependencies.rst:157 +msgid "Other Tools for Application Dependency Management" +msgstr "ເຄື່ອງມືອື່ນໆ ສຳລັບການຈັດການສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ຂອງແອັບພລິເຄຊັນ" + +#: ../source/tutorials/managing-dependencies.rst:159 +msgid "" +"If you find this particular approach to managing application dependencies " +"isn't working well for you or your use case, you may want to explore these " +"other tools and techniques, listed in alphabetical order, to see if one of " +"them is a better fit:" +msgstr "" +"ຖ້າທ່ານຮູ້ສຶກວ່າວິທີການນີ້ບໍ່ເໝາະສົມກັບການໃຊ້ງານຂອງທ່ານ, ທ່ານອາດຈະລອງສຶກສາເຄື່ອງມື ແລະ ເຕັກນິກອື່ນໆ " +"ເຫຼົ່ານີ້ (ລຽງຕາມລຳດັບຕົວອັກສອນ) ເພື່ອເບິ່ງວ່າໂຕໃດເໝາະສົມກວ່າ:" + +#: ../source/tutorials/managing-dependencies.rst:163 +msgid "" +"`hatch `_ for opinionated coverage of even " +"more steps in the project management workflow, such as incrementing versions " +"and creating new skeleton projects from project templates." +msgstr "" +"`hatch `_ ສຳລັບການຈັດການຂັ້ນຕອນຕ່າງໆ " +"ໃນຂະບວນການເຮັດວຽກຂອງໂຄງການທີ່ຄົບຖ້ວນກວ່າ ເຊັ່ນ ການເພີ່ມເວີຊັນ ແລະ " +"ການສ້າງໂຄງຮ່າງໂຄງການໃໝ່ຈາກແມ່ແບບ (templates)." + +#: ../source/tutorials/managing-dependencies.rst:166 +msgid "" +"`micropipenv `_ for a " +"lightweight wrapper around pip that supports ``requirements.txt``, Pipenv " +"and Poetry lock files, or converting them to pip-tools compatible output. " +"Designed for containerized Python applications, but not limited to them." +msgstr "" +"`micropipenv `_ " +"ແມ່ນໂຕເສີມຂະໜາດເບົາສຳລັບ pip ທີ່ຮອງຮັບ ``requirements.txt``, ໄຟລ໌ lock ຂອງ Pipenv " +"ແລະ Poetry. ອອກແບບມາສຳລັບແອັບພລິເຄຊັນ Python ທີ່ໃຊ້ຄອນເທນເນີ (containerized) " +"ແຕ່ກໍສາມາດໃຊ້ທົ່ວໄປໄດ້." + +#: ../source/tutorials/managing-dependencies.rst:170 +msgid "" +"`PDM `_ for a modern Python package " +"management relying on standards such as :pep:`517` and :pep:`621`." +msgstr "" +"`PDM `_ ສຳລັບການຈັດການແພັກເກດ Python " +"ທີ່ທັນສະໄໝ ໂດຍອີງຕາມມາດຕະຖານເຊັ່ນ :pep:`517` ແລະ :pep:`621`." + +#: ../source/tutorials/managing-dependencies.rst:172 +msgid "" +"`pip-tools `_ for creating a lock " +"file of all dependencies from a list of packages directly used in a project, " +"and ensuring that only those dependencies are installed." +msgstr "" +"`pip-tools `_ ສຳລັບການສ້າງໄຟລ໌ lock " +"ຂອງທຸກສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ ຈາກລາຍຊື່ແພັກເກດທີ່ໃຊ້ໃນໂຄງການໂດຍກົງ ແລະ " +"ເພື່ອໃຫ້ແນ່ໃຈວ່າຈະມີການຕິດຕັ້ງສະເພາະສິ່ງທີ່ຈຳເປັນເຫຼົ່ານັ້ນເທົ່ານັ້ນ." + +#: ../source/tutorials/managing-dependencies.rst:175 +msgid "" +"`Poetry `__ for a tool comparable " +"in scope to Pipenv that focuses more directly on use cases where the project " +"being managed is structured as a distributable Python package with a valid " +"``pyproject.toml`` file. By contrast, Pipenv explicitly avoids making the " +"assumption that the application being worked on will support distribution as " +"a ``pip``-installable Python package." +msgstr "" +"`Poetry `__ ແມ່ນເຄື່ອງມືທີ່ມີຂອບເຂດໃກ້ຄຽງກັບ " +"Pipenv ແຕ່ເນັ້ນໃສ່ໂຄງການທີ່ຖືກຈັດໂຄງສ້າງເປັນແພັກເກດ Python ທີ່ສາມາດແຈກຢາຍໄດ້ ແລະ ມີໄຟລ໌ " +"``pyproject.toml``." + +#: ../source/tutorials/managing-dependencies.rst:180 +msgid "" +"`uv `__ for a single tool that covers the entire " +"project management workflow, including dependency management, packaging, and " +"publishing." +msgstr "" +"`uv `__ ແມ່ນເຄື່ອງມືດຽວທີ່ກວມເອົາທຸກຂັ້ນຕອນການຈັດການໂຄງການ " +"ລວມທັງການຈັດການສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້, ການເຮັດແພັກເກດ ແລະ ການເຜີຍແຜ່." + +#: ../source/tutorials/packaging-projects.rst:2 +msgid "Packaging Python Projects" +msgstr "ການເຮັດແພັກເກດໂຄງການ Python" + +#: ../source/tutorials/packaging-projects.rst:4 +msgid "" +"This tutorial walks you through how to package a simple Python project. It " +"will show you how to add the necessary files and structure to create the " +"package, how to build the package, and how to upload it to the Python " +"Package Index (PyPI)." +msgstr "" +"ບົດຮຽນນີ້ຈະນຳພາທ່ານໄປຮຽນຮູ້ວິທີການເຮັດແພັກເກດໂຄງການ Python ແບບງ່າຍໆ. " +"ມັນຈະສະແດງວິທີການເພີ່ມໄຟລ໌ທີ່ຈຳເປັນ, ການຈັດໂຄງສ້າງເພື່ອສ້າງແພັກເກດ, ວິທີການບິວແພັກເກດ ແລະ " +"ວິທີການອັບໂຫຼດໄປຍັງ Python Package Index (PyPI)." + +#: ../source/tutorials/packaging-projects.rst:10 +msgid "" +"If you have trouble running the commands in this tutorial, please copy the " +"command and its output, then `open an issue`_ on the `packaging-problems`_ " +"repository on GitHub. We'll do our best to help you!" +msgstr "" +"ຖ້າທ່ານພົບຄວາມຫຍຸ້ງຍາກໃນການລັນຄຳສັ່ງໃນບົດຮຽນນີ້, ກະລຸນາກັອບປີ້ຄຳສັ່ງ ແລະ ຂໍ້ຄວາມສະແດງຜົນ ແລ້ວ " +"`ສ້າງ issue ໃໝ່`_ ໃນຄັງເກັບ `packaging-problems`_ ໃນ GitHub. " +"ພວກເຮົາຈະພະຍາຍາມຊ່ວຍທ່ານຢ່າງເຕັມທີ່!" + +#: ../source/tutorials/packaging-projects.rst:18 +msgid "" +"Some of the commands require a newer version of :ref:`pip`, so start by " +"making sure you have the latest version installed:" +msgstr "ບາງຄຳສັ່ງຕ້ອງການ pip ເວີຊັນໃໝ່, ດັ່ງນັ້ນໃຫ້ເລີ່ມດ້ວຍການກວດສອບວ່າທ່ານໄດ້ຕິດຕັ້ງເວີຊັນລ່າສຸດແລ້ວ:" + +#: ../source/tutorials/packaging-projects.rst:35 +msgid "A simple project" +msgstr "ໂຄງການແບບງ່າຍໆ" + +#: ../source/tutorials/packaging-projects.rst:37 +msgid "" +"This tutorial uses a simple project named " +"``example_package_YOUR_USERNAME_HERE``. If your username is ``me``, then the " +"package would be ``example_package_me``; this ensures that you have a unique " +"package name that doesn't conflict with packages uploaded by other people " +"following this tutorial. We recommend following this tutorial as-is using " +"this project, before packaging your own project." +msgstr "" +"ບົດຮຽນນີ້ໃຊ້ໂຄງການງ່າຍໆ ທີ່ມີຊື່ວ່າ ``example_package_YOUR_USERNAME_HERE``. " +"ຖ້າຊື່ຜູ້ໃຊ້ຂອງທ່ານແມ່ນ ``me``, ຊື່ແພັກເກດກໍຈະແມ່ນ ``example_package_me``; " +"ສິ່ງນີ້ຈະຊ່ວຍໃຫ້ຊື່ແພັກເກດຂອງທ່ານບໍ່ຊໍ້າກັບຂອງຄົນອື່ນ. ແນະນຳໃຫ້ເຮັດຕາມບົດຮຽນນີ້ໂດຍໃຊ້ໂຄງການນີ້ກ່ອນ " +"ແລ້ວຈຶ່ງຄ່ອຍລອງເຮັດແພັກເກດໂຄງການຂອງທ່ານເອງ." + +#: ../source/tutorials/packaging-projects.rst:44 +msgid "Create the following file structure locally:" +msgstr "ສ້າງໂຄງສ້າງໄຟລ໌ຕໍ່ໄປນີ້ໃນເຄື່ອງຂອງທ່ານ:" + +#: ../source/tutorials/packaging-projects.rst:54 +msgid "" +"The directory containing the Python files should match the project name. " +"This simplifies the configuration and is more obvious to users who install " +"the package." +msgstr "" +"ໄດເຣັກທໍຣີທີ່ມີໄຟລ໌ Python ຄວນຈະມີຊື່ກົງກັບຊື່ໂຄງການ. ສິ່ງນີ້ຊ່ວຍໃຫ້ການຕັ້ງຄ່າງ່າຍຂຶ້ນ ແລະ " +"ເຮັດໃຫ້ຜູ້ໃຊ້ທີ່ຕິດຕັ້ງແພັກເກດເຂົ້າໃຈໄດ້ງ່າຍ." + +#: ../source/tutorials/packaging-projects.rst:57 +msgid "" +"Creating the file :file:`__init__.py` is recommended because the existence " +"of an :file:`__init__.py` file allows users to import the directory as a " +"regular package, even if (as is the case in this " +"tutorial) :file:`__init__.py` is empty. [#namespace-packages]_" +msgstr "" +"ການສ້າງໄຟລ໌ :file:`__init__.py` ແມ່ນໄດ້ຮັບການແນະນຳ ເພາະມັນຊ່ວຍໃຫ້ຜູ້ໃຊ້ສາມາດ import " +"ໄດເຣັກທໍຣີ ໃນຖານະແພັກເກດປົກກະຕິໄດ້, ເຖິງແມ່ນວ່າ (ຄືໃນບົດຮຽນນີ້) ໄຟລ໌ :file:`__init__.py` " +"ຈະຫວ່າງເປົ່າກໍຕາມ." + +#: ../source/tutorials/packaging-projects.rst:62 +msgid "" +":file:`example.py` is an example of a module within the package that could " +"contain the logic (functions, classes, constants, etc.) of your package. " +"Open that file and enter the following content:" +msgstr "" +":file:`example.py` ແມ່ນຕົວຢ່າງຂອງໂມດູນພາຍໃນແພັກເກດ ທີ່ອາດຈະມີສ່ວນຂອງການເຮັດວຽກ (ຟັງຊັນ, " +"ຄລາດ, ຄ່າຄົງທີ່ ແລະ ອື່ນໆ). ໃຫ້ເປີດໄຟລ໌ນັ້ນແລ້ວໃສ່ເນື້ອຫາຕໍ່ໄປນີ້:" + +#: ../source/tutorials/packaging-projects.rst:71 +msgid "" +"If you are unfamiliar with Python's :term:`modules ` " +"and :term:`import packages `, take a few minutes to read " +"over the `Python documentation for packages and modules`_." +msgstr "" +"ຖ້າທ່ານຍັງບໍ່ຄຸ້ນເຄີຍກັບ :term:`ໂມດູນ (modules) ` ແລະ :term:`ແພັກເກດ (import " +"packages) ` ຂອງ Python, ກະລຸນາສະລະເວລາອ່ານ `ເອກະສານຂອງ Python " +"ກ່ຽວກັບແພັກເກດ ແລະ ໂມດູນ`_." + +#: ../source/tutorials/packaging-projects.rst:75 +msgid "" +"Once you create this structure, you'll want to run all of the commands in " +"this tutorial within the ``packaging_tutorial`` directory." +msgstr "" +"ເມື່ອທ່ານສ້າງໂຄງສ້າງນີ້ແລ້ວ, ໃຫ້ລັນທຸກຄຳສັ່ງໃນບົດຮຽນນີ້ພາຍໃນໄດເຣັກທໍຣີ ``packaging_tutorial``." + +#: ../source/tutorials/packaging-projects.rst:83 +msgid "Creating the package files" +msgstr "ການສ້າງໄຟລ໌ຂອງແພັກເກດ" + +#: ../source/tutorials/packaging-projects.rst:85 +msgid "" +"You will now add files that are used to prepare the project for " +"distribution. When you're done, the project structure will look like this:" +msgstr "" +"ຕອນນີ້ທ່ານຈະເພີ່ມໄຟລ໌ຕ່າງໆ ທີ່ໃຊ້ໃນການກຽມໂຄງການເພື່ອການແຈກຢາຍ. ເມື່ອສຳເລັດແລ້ວ, " +"ໂຄງສ້າງໂຄງການຈະເປັນແບບນີ້:" + +#: ../source/tutorials/packaging-projects.rst:103 +msgid "Creating a test directory" +msgstr "ການສ້າງໄດເຣັກທໍຣີສຳລັບທົດສອບ" + +#: ../source/tutorials/packaging-projects.rst:105 +msgid ":file:`tests/` is a placeholder for test files. Leave it empty for now." +msgstr ":file:`tests/` ແມ່ນບ່ອນສຳລັບເກັບໄຟລ໌ທົດສອບ. ໃຫ້ປະມັນຫວ່າງໄວ້ກ່ອນໃນຕອນນີ້." + +#: ../source/tutorials/packaging-projects.rst:111 +msgid "Choosing a build backend" +msgstr "ການເລືອກ build backend" + +#: ../source/tutorials/packaging-projects.rst:113 +msgid "" +"Tools like :ref:`pip` and :ref:`build` do not actually convert your sources " +"into a :term:`distribution package ` (like a wheel); " +"that job is performed by a :term:`build backend `. The build " +"backend determines how your project will specify its configuration, " +"including metadata (information about the project, for example, the name and " +"tags that are displayed on PyPI) and input files. Build backends have " +"different levels of functionality, such as whether they support " +"building :term:`extension modules `, and you should choose " +"one that suits your needs and preferences." +msgstr "" +"ເຄື່ອງມືເຊັ່ນ :ref:`pip` ແລະ :ref:`build` " +"ບໍ່ໄດ້ເປັນໂຕປ່ຽນຊອດໂຄ້ດຂອງທ່ານໃຫ້ເປັນ :term:`ແພັກເກດການແຈກຢາຍ (distribution package) " +"` (ເຊັ່ນ wheel) ໂດຍກົງ; ໜ້າທີ່ນັ້ນແມ່ນຂອງ :term:`build backend " +"`. build backend ຈະເປັນໂຕກຳນົດວ່າ ໂຄງການຂອງທ່ານຈະລະບຸການຕັ້ງຄ່າແນວໃດ, " +"ລວມທັງເມຕາເດຕາ ແລະ ໄຟລ໌ຕ່າງໆ. build backend ແຕ່ລະໂຕມີລະດັບການເຮັດວຽກທີ່ຕ່າງກັນ, " +"ທ່ານຄວນເລືອກໂຕທີ່ເໝາະກັບຄວາມຕ້ອງການຂອງທ່ານ." + +#: ../source/tutorials/packaging-projects.rst:122 +msgid "" +"You can choose from a number of backends; this tutorial uses :ref:`Hatchling " +"` by default, but it will work identically " +"with :ref:`setuptools`, :ref:`Flit `, :ref:`PDM `, and others " +"that support the ``[project]`` table for :ref:`metadata `." +msgstr "" +"ທ່ານສາມາດເລືອກໃຊ້ backend ໄດ້ຫຼາຍໂຕ; ບົດຮຽນນີ້ໃຊ້ :ref:`Hatchling ` " +"ເປັນຄ່າເລີ່ມຕົ້ນ, ແຕ່ມັນກໍເຮັດວຽກໄດ້ຄືກັນກັບ :ref:`setuptools`, :ref:`Flit " +"`, :ref:`PDM ` ແລະ ໂຕອື່ນໆ ທີ່ຮອງຮັບຕາຕະລາງ ``[project]`` " +"ສຳລັບ :ref:`ເມຕາເດຕາ `." + +#: ../source/tutorials/packaging-projects.rst:129 +msgid "" +"Some build backends are part of larger tools that provide a command-line " +"interface with additional features like project initialization and version " +"management, as well as building, uploading, and installing packages. This " +"tutorial uses single-purpose tools that work independently." +msgstr "" +"ບາງ build backends ແມ່ນສ່ວນໜຶ່ງຂອງເຄື່ອງມືທີ່ໃຫຍ່ກວ່າ ເຊິ່ງສະໜອງອິນເຕີເຟດແບບບັນທັດຄຳສັ່ງ " +"(command-line interface) ພ້ອມກັບຄຸນສົມບັດເພີ່ມເຕີມ ເຊັ່ນ: ການເລີ່ມຕົ້ນໂປຣເຈັກ ແລະ " +"ການຈັດການເວີຊັນ, ລວມໄປເຖິງການສ້າງ, ການອັບໂຫຼດ, ແລະ ການຕິດຕັ້ງແພັກເກັດ. " +"ຄູ່ມືການສອນນີ້ໃຊ້ເຄື່ອງມືທີ່ມີຈຸດປະສົງດຽວ ເຊິ່ງເຮັດວຽກຢ່າງເປັນເອກະລາດ." + +#: ../source/tutorials/packaging-projects.rst:134 +msgid "" +"The :file:`pyproject.toml` tells :term:`build frontend ` " +"tools like :ref:`pip` and :ref:`build` which backend to use for your " +"project. Below are some examples for common build backends, but check your " +"backend's own documentation for more details." +msgstr "" +"ໄຟລ໌ :file:`pyproject.toml` ຈະບອກເຄື່ອງມື :term:`build frontend ` ເຊັ່ນ :ref:`pip` ແລະ :ref:`build` ວ່າຈະໃຊ້ backend ໃດສຳລັບໂຄງການຂອງທ່ານ." + +#: ../source/tutorials/packaging-projects.rst:141 +msgid "" +"The ``requires`` key is a list of packages that are needed to build your " +"package. The :term:`frontend ` should install them " +"automatically when building your package. Frontends usually run builds in " +"isolated environments, so omitting dependencies here may cause build-time " +"errors. This should always include your backend's package, and might have " +"other build-time dependencies. The minimum version specified in the above " +"code block is the one that introduced support for :ref:`the new license " +"metadata `." +msgstr "" +"ຄີ ``requires`` ແມ່ນລາຍຊື່ແພັກເກດທີ່ຈຳເປັນໃນການບິວແພັກເກດຂອງທ່ານ. :term:`frontend " +"` ຄວນຈະຕິດຕັ້ງພວກມັນໃຫ້ອັດຕະໂນມັດໃນເວລາບິວ. ປົກກະຕິແລ້ວ frontend " +"ຈະລັນການບິວໃນສະພາບແວດລ້ອມທີ່ແຍກຕ່າງຫາກ, ດັ່ງນັ້ນຖ້າຂາດສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ຢູ່ບ່ອນນີ້ " +"ກໍອາດຈະເຮັດໃຫ້ເກີດຂໍ້ຜິດພາດໃນເວລາບິວໄດ້." + +#: ../source/tutorials/packaging-projects.rst:150 +msgid "" +"The ``build-backend`` key is the name of the Python object that frontends " +"will use to perform the build." +msgstr "" +"ຄີ ``build-backend`` ແມ່ນຊື່ຂອງ Python object ທີ່ frontend ຈະໃຊ້ເພື່ອປະຕິບັດການບິວ." + +#: ../source/tutorials/packaging-projects.rst:153 +msgid "" +"Both of these values will be provided by the documentation for your build " +"backend, or generated by its command line interface. There should be no need " +"for you to customize these settings." +msgstr "" +"ຄ່າທັງສອງນີ້ຈະມີໃຫ້ໃນເອກະສານຂອງ build backend ຂອງທ່ານ ຫຼື ຖືກສ້າງຂຶ້ນໂດຍບັນທັດຄຳສັ່ງຂອງມັນ. " +"ທ່ານບໍ່ຈຳເປັນຕ້ອງປັບແຕ່ງຄ່າເຫຼົ່ານີ້ດ້ວຍຕົນເອງ." + +#: ../source/tutorials/packaging-projects.rst:157 +msgid "" +"Additional configuration of the build tool will either be in a ``tool`` " +"section of the ``pyproject.toml``, or in a special file defined by the build " +"tool. For example, when using ``setuptools`` as your build backend, " +"additional configuration may be added to a ``setup.py`` or ``setup.cfg`` " +"file, and specifying ``setuptools.build_meta`` in your build allows the " +"tools to locate and use these automatically." +msgstr "" +"ການຕັ້ງຄ່າເພີ່ມເຕີມຂອງເຄື່ອງມືບິວ ຈະຢູ່ໃນພາກສ່ວນ ``tool`` ຂອງ ``pyproject.toml`` ຫຼື " +"ໃນໄຟລ໌ພິເສດທີ່ກຳນົດໂດຍເຄື່ອງມືນັ້ນໆ." + +#: ../source/tutorials/packaging-projects.rst:167 +msgid "Configuring metadata" +msgstr "ການຕັ້ງຄ່າເມຕາເດຕາ" + +#: ../source/tutorials/packaging-projects.rst:169 +msgid "" +"Open :file:`pyproject.toml` and enter the following content. Change the " +"``name`` to include your username; this ensures that you have a unique " +"package name that doesn't conflict with packages uploaded by other people " +"following this tutorial." +msgstr "" +"ເປີດໄຟລ໌ :file:`pyproject.toml` ແລ້ວໃສ່ເນື້ອຫາຕໍ່ໄປນີ້. ປ່ຽນ ``name`` ໃຫ້ມີຊື່ຜູ້ໃຊ້ຂອງທ່ານນຳ " +"ເພື່ອໃຫ້ແນ່ໃຈວ່າຊື່ແພັກເກດຈະບໍ່ຊໍ້າກັບຂອງຄົນອື່ນ." + +#: ../source/tutorials/packaging-projects.rst:196 +msgid "" +"``name`` is the *distribution name* of your package. This can be any name as " +"long as it only contains letters, numbers, ``.``, ``_`` , and ``-``. It also " +"must not already be taken on PyPI. **Be sure to update this with your " +"username** for this tutorial, as this ensures you won't try to upload a " +"package with the same name as one which already exists." +msgstr "" +"``name`` ແມ່ນ *ຊື່ການແຈກຢາຍ* ຂອງແພັກເກດຂອງທ່ານ. ມັນສາມາດເປັນຊື່ອັນໃດກໍໄດ້ທີ່ປະກອບດ້ວຍ " +"ຕົວອັກສອນ, ຕົວເລກ, ``.``, ``_`` , ແລະ ``-``. ມັນຕ້ອງບໍ່ແມ່ນຊື່ທີ່ມີຄົນໃຊ້ແລ້ວໃນ PyPI." + +#: ../source/tutorials/packaging-projects.rst:201 +msgid "" +"``version`` is the package version. (Some build backends allow it to be " +"specified another way, such as from a file or Git tag.)" +msgstr "" +"``version`` ແມ່ນເວີຊັນຂອງແພັກເກດ. (build backend ບາງໂຕອາດຈະໃຫ້ລະບຸດ້ວຍວິທີອື່ນ ເຊັ່ນ " +"ຈາກໄຟລ໌ ຫຼື Git tag)." + +#: ../source/tutorials/packaging-projects.rst:203 +msgid "" +"``authors`` is used to identify the author of the package; you specify a " +"name and an email for each author. You can also list ``maintainers`` in the " +"same format." +msgstr "" +"``authors`` ໃຊ້ເພື່ອລະບຸຜູ້ຂຽນແພັກເກດ; ທ່ານສາມາດລະບຸຊື່ ແລະ ອີເມວສຳລັບຜູ້ຂຽນແຕ່ລະຄົນໄດ້. " +"ທ່ານຍັງສາມາດລະບຸ ``maintainers`` (ຜູ້ເບິ່ງແຍງ) ໃນຮູບແບບດຽວກັນໄດ້ອີກດ້ວຍ." + +#: ../source/tutorials/packaging-projects.rst:206 +msgid "``description`` is a short, one-sentence summary of the package." +msgstr "``description`` ແມ່ນຄຳອະທິບາຍຫຍໍ້ໆ ກ່ຽວກັບແພັກເກດພາຍໃນປະໂຫຍກດຽວ." + +#: ../source/tutorials/packaging-projects.rst:207 +msgid "" +"``readme`` is a path to a file containing a detailed description of the " +"package. This is shown on the package detail page on PyPI. In this case, the " +"description is loaded from :file:`README.md` (which is a common pattern). " +"There also is a more advanced table form described in " +"the :ref:`pyproject.toml guide `." +msgstr "" +"``readme`` ແມ່ນບ່ອນເກັບໄຟລ໌ທີ່ມີຄຳອະທິບາຍລະອຽດຂອງແພັກເກດ. ສິ່ງນີ້ຈະຖືກສະແດງໃນໜ້າ PyPI. " +"ໃນກໍລະນີນີ້, ຄຳອະທິບາຍແມ່ນມາຈາກໄຟລ໌ :file:`README.md`." + +#: ../source/tutorials/packaging-projects.rst:212 +msgid "" +"``requires-python`` gives the versions of Python supported by your project. " +"An installer like :ref:`pip` will look back through older versions of " +"packages until it finds one that has a matching Python version." +msgstr "" +"``requires-python`` ລະບຸເວີຊັນຂອງ Python ທີ່ໂຄງການຂອງທ່ານຮອງຮັບ. " +"ໂຕຕິດຕັ້ງເຊັ່ນ :ref:`pip` ຈະກວດສອບເວີຊັນທີ່ເຂົ້າກັນໄດ້ກ່ອນທຳການຕິດຕັ້ງ." + +#: ../source/tutorials/packaging-projects.rst:215 +msgid "" +"``classifiers`` gives the index and :ref:`pip` some additional metadata " +"about your package. In this case, the package is only compatible with Python " +"3 and is OS-independent. You should always include at least which version(s) " +"of Python your package works on and which operating systems your package " +"will work on. For a complete list of classifiers, see https://pypi.org/" +"classifiers/." +msgstr "" +"``classifiers`` ໃຫ້ຂໍ້ມູນເມຕາເດຕາເພີ່ມເຕີມແກ່ດັດຊະນີ ແລະ :ref:`pip`. ເຊັ່ນ " +"ລະບຸວ່າແພັກເກດນີ້ໃຊ້ໄດ້ກັບ Python 3 ແລະ ໃຊ້ໄດ້ກັບທຸກລະບົບປະຕິບັດການ." + +#: ../source/tutorials/packaging-projects.rst:222 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your :term:`Distribution Archive` files." +msgstr "" +"``license`` ແມ່ນ :term:`SPDX license expression ` ຂອງ " +"ໄຟລ໌ :term:`ແຟ້ມຈັດເກັບການແຈກຢາຍ (Distribution Archive)` ຂອງທ່ານ." + +#: ../source/tutorials/packaging-projects.rst:224 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located." +msgstr "" +"``license-files`` ແມ່ນລາຍຊື່ທີ່ຢູ່ຂອງໄຟລ໌ໃບອະນຸຍາດ (license files) ໂດຍອ້າງອີງຈາກ " +"ໄດເຣັກທໍຣີທີ່ໄຟລ໌ :file:`pyproject.toml` ຕັ້ງຢູ່." + +#: ../source/tutorials/packaging-projects.rst:226 +msgid "" +"``urls`` lets you list any number of extra links to show on PyPI. Generally " +"this could be to the source, documentation, issue trackers, etc." +msgstr "" +"``urls`` ຊ່ວຍໃຫ້ທ່ານສາມາດໃສ່ລິ້ງເພີ່ມເຕີມເພື່ອສະແດງໃນ PyPI ໄດ້. " +"ໂດຍທົ່ວໄປແລ້ວຈະເປັນລິ້ງໄປຫາຊອດໂຄ້ດ, ເອກະສານອ້າງອີງ, ລະບົບຕິດຕາມບັນຫາ ແລະ ອື່ນໆ." + +#: ../source/tutorials/packaging-projects.rst:229 +msgid "" +"See the :ref:`pyproject.toml guide ` for details on " +"these and other fields that can be defined in the ``[project]`` table. Other " +"common fields are ``keywords`` to improve discoverability and the " +"``dependencies`` that are required to install your package." +msgstr "" +"ເບິ່ງ :ref:`pyproject.toml guide ` " +"ສຳລັບລາຍລະອຽດຂອງຟິວເຫຼົ່ານີ້ ແລະ ຟິວອື່ນໆ ໃນຕາຕະລາງ ``[project]``." + +#: ../source/tutorials/packaging-projects.rst:236 +msgid "Creating README.md" +msgstr "ການສ້າງ README.md" + +#: ../source/tutorials/packaging-projects.rst:238 +msgid "" +"Open :file:`README.md` and enter the following content. You can customize " +"this if you'd like." +msgstr "ເປີດໄຟລ໌ :file:`README.md` ແລ້ວໃສ່ເນື້ອຫາຕໍ່ໄປນີ້. ທ່ານສາມາດປັບແຕ່ງໄດ້ຕາມໃຈ." + +#: ../source/tutorials/packaging-projects.rst:251 +msgid "Creating a LICENSE" +msgstr "ການສ້າງ LICENSE" + +#: ../source/tutorials/packaging-projects.rst:253 +msgid "" +"It's important for every :term:`Distribution Archive` uploaded to the Python " +"Package Index to include a license. This tells users who install " +"your :term:`Distribution Archive` the terms under which they can use it. For " +"help picking a license, see https://choosealicense.com/. Once you have " +"chosen a license, open :file:`LICENSE` and enter the license text. For " +"example, if you had chosen the MIT license:" +msgstr "" +"ມັນສຳຄັນຫຼາຍທີ່ທຸກໆ :term:`ແຟ້ມຈັດເກັບການແຈກຢາຍ` ທີ່ອັບໂຫຼດຂຶ້ນ PyPI ຈະຕ້ອງມີໃບອະນຸຍາດ " +"(license). ສິ່ງນີ້ຈະບອກຜູ້ໃຊ້ກ່ຽວກັບເງື່ອນໄຂການນຳໃຊ້. ທ່ານສາມາດເລືອກໃບອະນຸຍາດໄດ້ທີ່ https://" +"choosealicense.com/." + +#: ../source/tutorials/packaging-projects.rst:282 +msgid "" +"Most build backends automatically include license files in packages. See " +"your backend's documentation for more details. If you include the path to " +"license in the ``license-files`` key of :file:`pyproject.toml`, and your " +"build backend supports :pep:`639`, the file will be automatically included " +"in the package." +msgstr "" +"ສ່ວນໃຫຍ່ຂອງລະບົບເບື້ອງຫຼັງການບິວດ໌ຈະລວມເອົາໄຟລ໌ໃບອະນຸຍາດເຂົ້າໃນແພັກເກດໂດຍອັດຕະໂນມັດ. " +"ເບິ່ງເອກະສານຂອງລະບົບເບື້ອງຫຼັງຂອງທ່ານສຳລັບລາຍລະອຽດເພີ່ມເຕີມ. " +"ຖ້າທ່ານລວມເອົາເສັ້ນທາງໄປຫາໃບອະນຸຍາດໃນຄີ ``license-files`` " +"ຂອງ :file:`pyproject.toml`, ແລະ ລະບົບເບື້ອງຫຼັງການບິວດ໌ຂອງທ່ານຮອງຮັບ :pep:`639`, " +"ໄຟລ໌ດັ່ງກ່າວຈະຖືກລວມເຂົ້າໃນແພັກເກດໂດຍອັດຕະໂນມັດ." + +#: ../source/tutorials/packaging-projects.rst:290 +msgid "Including other files" +msgstr "ການລວມໄຟລ໌ອື່ນໆ" + +#: ../source/tutorials/packaging-projects.rst:292 +msgid "" +"The files listed above will be included automatically in your :term:`source " +"distribution `. If you want to include " +"additional files, see the documentation for your build backend." +msgstr "" +"ໄຟລ໌ທີ່ລະບຸໄວ້ຂ້າງເທິງຈະຖືກລວມເຂົ້າໃນ :term:`source distribution (sdist)` ໂດຍອັດຕະໂນມັດ." + +#: ../source/tutorials/packaging-projects.rst:299 +msgid "Generating distribution archives" +msgstr "ການສ້າງແຟ້ມຈັດເກັບການແຈກຢາຍ" + +#: ../source/tutorials/packaging-projects.rst:301 +msgid "" +"The next step is to generate :term:`distribution packages ` for the package. These are archives that are uploaded to the " +"Python Package Index and can be installed by :ref:`pip`." +msgstr "" +"ຂັ້ນຕອນຕໍ່ໄປແມ່ນການສ້າງ :term:`ແພັກເກດການແຈກຢາຍ `. " +"ສິ່ງເຫຼົ່ານີ້ແມ່ນໄຟລ໌ບີບອັດທີ່ຈະຖືກອັບໂຫຼດຂຶ້ນ PyPI ແລະ ສາມາດຕິດຕັ້ງໄດ້ໂດຍ :ref:`pip`." + +#: ../source/tutorials/packaging-projects.rst:305 +msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" +msgstr "ກວດສອບໃຫ້ແນ່ໃຈວ່າທ່ານໄດ້ຕິດຕັ້ງ :ref:`build` ຂອງ PyPA ເວີຊັນລ່າສຸດແລ້ວ:" + +#: ../source/tutorials/packaging-projects.rst:319 +msgid "" +"If you have trouble installing these, see the :doc:`installing-packages` " +"tutorial." +msgstr "ຖ້າທ່ານພົບຄວາມຫຍຸ້ງຍາກໃນການຕິດຕັ້ງ, ໃຫ້ເບິ່ງບົດຮຽນ :doc:`installing-packages`." + +#: ../source/tutorials/packaging-projects.rst:322 +msgid "" +"Now run this command from the same directory where :file:`pyproject.toml` is " +"located:" +msgstr "ບາດນີ້ໃຫ້ລັນຄຳສັ່ງນີ້ຈາກໄດເຣັກທໍຣີດຽວກັນກັບທີ່ໄຟລ໌ :file:`pyproject.toml` ຕັ້ງຢູ່:" + +#: ../source/tutorials/packaging-projects.rst:336 +msgid "" +"This command should output a lot of text and once completed should generate " +"two files in the :file:`dist` directory:" +msgstr "" +"ຄຳສັ່ງນີ້ຈະສະແດງຂໍ້ຄວາມຈຳນວນຫຼາຍ ແລະ ເມື່ອສຳເລັດແລ້ວ ມັນຈະສ້າງໄຟລ໌ 2 " +"ໄຟລ໌ໃນໄດເຣັກທໍຣີ :file:`dist`:" + +#: ../source/tutorials/packaging-projects.rst:346 +msgid "" +"The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution `. Newer :ref:`pip` versions preferentially install built " +"distributions, but will fall back to source distributions if needed. You " +"should always upload a source distribution and provide built distributions " +"for the platforms your project is compatible with. In this case, our example " +"package is compatible with Python on any platform so only one built " +"distribution is needed." +msgstr "" +"ໄຟລ໌ ``tar.gz`` ແມ່ນ :term:`source distribution (sdist)` ສ່ວນໄຟລ໌ ``.whl`` " +"ແມ່ນ :term:`built distribution`. pip ເວີຊັນໃໝ່ຈະເລືອກຕິດຕັ້ງ built distribution ກ່ອນ." + +#: ../source/tutorials/packaging-projects.rst:355 +msgid "Uploading the distribution archives" +msgstr "ການອັບໂຫຼດແຟ້ມຈັດເກັບການແຈກຢາຍ" + +#: ../source/tutorials/packaging-projects.rst:357 +msgid "Finally, it's time to upload your package to the Python Package Index!" +msgstr "ສຸດທ້າຍ, ກໍເຖິງເວລາທີ່ຈະອັບໂຫຼດແພັກເກດຂອງທ່ານຂຶ້ນ Python Package Index ແລ້ວ!" + +#: ../source/tutorials/packaging-projects.rst:359 +msgid "" +"The first thing you'll need to do is register an account on TestPyPI, which " +"is a separate instance of the package index intended for testing and " +"experimentation. It's great for things like this tutorial where we don't " +"necessarily want to upload to the real index. To register an account, go to " +"https://test.pypi.org/account/register/ and complete the steps on that page. " +"You will also need to verify your email address before you're able to upload " +"any packages. For more details, see :doc:`/guides/using-testpypi`." +msgstr "" +"ສິ່ງທຳອິດທີ່ຕ້ອງເຮັດແມ່ນລົງທະບຽນບັນຊີໃນ TestPyPI ເຊິ່ງເປັນບ່ອນທົດສອບແຍກຕ່າງຫາກ. " +"ມັນດີຫຼາຍສຳລັບການທົດລອງ ເພາະພວກເຮົາບໍ່ຕ້ອງການອັບໂຫຼດຂຶ້ນດັດຊະນີແທ້." + +#: ../source/tutorials/packaging-projects.rst:367 +msgid "" +"To securely upload your project, you'll need a PyPI `API token`_. Create one " +"at https://test.pypi.org/manage/account/#api-tokens, setting the \"Scope\" " +"to \"Entire account\". **Don't close the page until you have copied and " +"saved the token — you won't see that token again.**" +msgstr "" +"ເພື່ອອັບໂຫຼດຢ່າງປອດໄພ, ທ່ານຕ້ອງມີ PyPI `API token`_. ສ້າງມັນໄດ້ທີ່ https://test.pypi.org/" +"manage/account/#api-tokens." + +#: ../source/tutorials/packaging-projects.rst:374 +msgid "" +"Now that you are registered, you can use :ref:`twine` to upload the " +"distribution packages. You'll need to install Twine:" +msgstr "" +"ເມື່ອລົງທະບຽນແລ້ວ, ທ່ານສາມາດໃຊ້ :ref:`twine` ເພື່ອອັບໂຫຼດແພັກເກດໄດ້. ທ່ານຕ້ອງຕິດຕັ້ງ Twine " +"ກ່ອນ:" + +#: ../source/tutorials/packaging-projects.rst:389 +msgid "" +"Once installed, run Twine to upload all of the archives under :file:`dist`:" +msgstr "ເມື່ອຕິດຕັ້ງແລ້ວ, ໃຫ້ລັນ Twine ເພື່ອອັບໂຫຼດທຸກໄຟລ໌ໃນ :file:`dist`:" + +#: ../source/tutorials/packaging-projects.rst:403 +msgid "" +"You will be prompted for an API token. Use the token value, including the " +"``pypi-`` prefix. Note that the input will be hidden, so be sure to paste " +"correctly." +msgstr "" +"ລະບົບຈະຖາມຫາ API token. ໃຫ້ໃຊ້ຄ່າ token ທີ່ໄດ້ມາ (ລວມທັງຄຳນຳໜ້າ ``pypi-``). ໝາຍເຫດ: " +"ຂໍ້ຄວາມທີ່ປ້ອນຈະຖືກເຊື່ອງໄວ້, ດັ່ງນັ້ນໃຫ້ກວດສອບວ່າວາງຂໍ້ມູນຖືກຕ້ອງ." + +#: ../source/tutorials/packaging-projects.rst:406 +msgid "After the command completes, you should see output similar to this:" +msgstr "ຫຼັງຈາກຄຳສັ່ງເຮັດວຽກສຳເລັດ, ທ່ານຄວນເຫັນຂໍ້ຄວາມປະມານນີ້:" + +#: ../source/tutorials/packaging-projects.rst:417 +msgid "" +"Once uploaded, your package should be viewable on TestPyPI; for example: " +"``https://test.pypi.org/project/example_package_YOUR_USERNAME_HERE``." +msgstr "ເມື່ອອັບໂຫຼດແລ້ວ, ທ່ານສາມາດເບິ່ງແພັກເກດຂອງທ່ານໃນ TestPyPI ໄດ້." + +#: ../source/tutorials/packaging-projects.rst:422 +msgid "Installing your newly uploaded package" +msgstr "ການຕິດຕັ້ງແພັກເກດທີ່ທ່ານຫາກໍອັບໂຫຼດໃໝ່" + +#: ../source/tutorials/packaging-projects.rst:424 +msgid "" +"You can use :ref:`pip` to install your package and verify that it works. " +"Create a :ref:`virtual environment ` and install your package from TestPyPI:" +msgstr "" +"ທ່ານສາມາດໃຊ້ :ref:`pip` ເພື່ອຕິດຕັ້ງແພັກເກດ ແລະ ກວດສອບວ່າມັນໃຊ້ງານໄດ້ບໍ່. " +"ໃຫ້ສ້າງ :ref:`ສະພາບແວດລ້ອມສະເໝືອນ ` " +"ແລ້ວຕິດຕັ້ງແພັກເກດຈາກ TestPyPI:" + +#: ../source/tutorials/packaging-projects.rst:440 +msgid "Make sure to specify your username in the package name!" +msgstr "ຢ່າລືມລະບຸຊື່ຜູ້ໃຊ້ຂອງທ່ານໃນຊື່ແພັກເກດນຳ!" + +#: ../source/tutorials/packaging-projects.rst:442 +msgid "" +"pip should install the package from TestPyPI and the output should look " +"something like this:" +msgstr "pip ຈະຕິດຕັ້ງແພັກເກດຈາກ TestPyPI ແລະ ຂໍ້ຄວາມສະແດງຜົນຄວນເປັນປະມານນີ້:" + +#: ../source/tutorials/packaging-projects.rst:452 +msgid "" +"This example uses ``--index-url`` flag to specify TestPyPI instead of live " +"PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " +"the same packages as the live PyPI, it's possible that attempting to install " +"dependencies may fail or install something unexpected. While our example " +"package doesn't have any dependencies, it's a good practice to avoid " +"installing dependencies when using TestPyPI." +msgstr "" +"ຕົວຢ່າງນີ້ໃຊ້ flag ``--index-url`` ເພື່ອລະບຸ TestPyPI ແທນ PyPI ໂຕຈິງ. ນອກຈາກນັ້ນ, " +"ຍັງມີການໃຊ້ ``--no-deps`` ເພື່ອປ້ອງກັນການຕິດຕັ້ງສິ່ງທີ່ຈຳເປັນຕ້ອງໃຊ້ທີ່ອາດຈະບໍ່ມີໃນ TestPyPI." + +#: ../source/tutorials/packaging-projects.rst:459 +msgid "" +"You can test that it was installed correctly by importing the package. Make " +"sure you're still in your virtual environment, then run Python:" +msgstr "" +"ທ່ານສາມາດທົດສອບວ່າແພັກເກດຖືກຕິດຕັ້ງຖືກຕ້ອງຫຼືບໍ່ ໂດຍການ import ແພັກເກດ. " +"ກວດສອບວ່າທ່ານຍັງຢູ່ໃນສະພາບແວດລ້ອມສະເໝືອນ, ແລ້ວລັນ Python:" + +#: ../source/tutorials/packaging-projects.rst:474 +msgid "and import the package:" +msgstr "ແລ້ວ import ແພັກເກດ:" + +#: ../source/tutorials/packaging-projects.rst:486 +msgid "" +"**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " +"✨" +msgstr "" +"**ຂໍສະແດງຄວາມຍິນດີ, ທ່ານໄດ້ເຮັດແພັກເກດ ແລະ ແຈກຢາຍໂຄງການ Python ຮຽບຮ້ອຍແລ້ວ!** ✨ 🍰 ✨" + +#: ../source/tutorials/packaging-projects.rst:489 +msgid "" +"Keep in mind that this tutorial showed you how to upload your package to " +"Test PyPI, which isn't a permanent storage. The Test system occasionally " +"deletes packages and accounts. It is best to use TestPyPI for testing and " +"experiments like this tutorial." +msgstr "" +"ຄວນຈື່ໄວ້ວ່າບົດຮຽນນີ້ແມ່ນການອັບໂຫຼດຂຶ້ນ Test PyPI ເຊິ່ງບໍ່ແມ່ນບ່ອນເກັບຂໍ້ມູນຖາວອນ. " +"ລະບົບທົດສອບຈະມີການລຶບແພັກເກດ ແລະ ບັນຊີເປັນໄລຍະ." + +#: ../source/tutorials/packaging-projects.rst:494 +msgid "" +"When you are ready to upload a real package to the Python Package Index you " +"can do much the same as you did in this tutorial, but with these important " +"differences:" +msgstr "" +"ເມື່ອທ່ານພ້ອມທີ່ຈະອັບໂຫຼດແພັກເກດແທ້ຂຶ້ນ PyPI, ທ່ານສາມາດເຮັດຕາມຂັ້ນຕອນດຽວກັນນີ້ " +"ແຕ່ມີຂໍ້ແຕກຕ່າງທີ່ສຳຄັນດັ່ງນີ້:" + +#: ../source/tutorials/packaging-projects.rst:498 +msgid "" +"Choose a memorable and unique name for your package. You don't have to " +"append your username as you did in the tutorial, but you can't use an " +"existing name." +msgstr "" +"ເລືອກຊື່ທີ່ຈໍານ່າຍ ແລະ ບໍ່ຊໍ້າກັບໃຜ. ທ່ານບໍ່ຈຳເປັນຕ້ອງໃສ່ຊື່ຜູ້ໃຊ້ທາງທ້າຍຄືໃນບົດຮຽນ, " +"ແຕ່ຕ້ອງບໍ່ແມ່ນຊື່ທີ່ມີຄົນໃຊ້ແລ້ວ." + +#: ../source/tutorials/packaging-projects.rst:500 +msgid "" +"Register an account on https://pypi.org - note that these are two separate " +"servers and the login details from the test server are not shared with the " +"main server." +msgstr "" +"ລົງທະບຽນບັນຊີໃນ https://pypi.org - ໝາຍເຫດ: ມັນເປັນຄົນລະເຊີເວີກັນ ແລະ " +"ຂໍ້ມູນການເຂົ້າລະບົບກໍບໍ່ໄດ້ໃຊ້ຮ່ວມກັນ." + +#: ../source/tutorials/packaging-projects.rst:503 +msgid "" +"Use ``twine upload dist/*`` to upload your package and enter your " +"credentials for the account you registered on the real PyPI. Now that " +"you're uploading the package in production, you don't need to specify ``--" +"repository``; the package will upload to https://pypi.org/ by default." +msgstr "" +"ໃຊ້ ``twine upload dist/*`` ເພື່ອອັບໂຫຼດແພັກເກດຂອງທ່ານ. ຕອນນີ້ທ່ານບໍ່ຈຳເປັນຕ້ອງລະບຸ ``--" +"repository`` ແລ້ວ ເພາະມັນຈະອັບໂຫຼດຂຶ້ນ pypi.org ເປັນຄ່າເລີ່ມຕົ້ນ." + +#: ../source/tutorials/packaging-projects.rst:507 +msgid "" +"Install your package from the real PyPI using ``python3 -m pip install [your-" +"package]``." +msgstr "" +"ຕິດຕັ້ງແພັກເກດຂອງທ່ານຈາກ PyPI ແທ້ໂດຍໃຊ້ ``python3 -m pip install [ຊື່ແພັກເກດຂອງທ່ານ]``." + +#: ../source/tutorials/packaging-projects.rst:509 +msgid "" +"At this point if you want to read more on packaging Python libraries here " +"are some things you can do:" +msgstr "" +"ມາຮອດຈຸດນີ້, ຖ້າທ່ານຕ້ອງການອ່ານເພີ່ມເຕີມກ່ຽວກັບການເຮັດແພັກເກັດຄັງສະໝຸດ Python, " +"ນີ້ແມ່ນບາງສິ່ງທີ່ທ່ານສາມາດເຮັດໄດ້:" + +#: ../source/tutorials/packaging-projects.rst:512 +msgid "" +"Read about advanced configuration for your chosen build backend: `Hatchling " +"`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." +msgstr "" +"ອ່ານກ່ຽວກັບການຕັ້ງຄ່າຂັ້ນສູງສຳລັບ build backend ທີ່ທ່ານເລືອກ: `Hatchling`, `setuptools`, " +"`Flit`, `PDM`." + +#: ../source/tutorials/packaging-projects.rst:516 +msgid "" +"Look at the :doc:`guides ` on this site for more advanced " +"practical information, or the :doc:`discussions ` for " +"explanations and background on specific topics." +msgstr "" +"ເບິ່ງ :doc:`ຄຳແນະນຳ (guides) ` ໃນເວັບໄຊນີ້ສຳລັບຂໍ້ມູນການໃຊ້ງານຂັ້ນສູງ." + +#: ../source/tutorials/packaging-projects.rst:519 +msgid "" +"Consider packaging tools that provide a single command-line interface for " +"project management and packaging, such " +"as :ref:`hatch`, :ref:`flit`, :ref:`pdm`, and :ref:`poetry`." +msgstr "" +"ລອງພິຈາລະນາໃຊ້ເຄື່ອງມືເຮັດແພັກເກດທີ່ມີບັນທັດຄຳສັ່ງດຽວສຳລັບການຈັດການໂຄງການ " +"ເຊັ່ນ :ref:`hatch`, :ref:`flit`, :ref:`pdm`, ແລະ :ref:`poetry`." + +#: ../source/tutorials/packaging-projects.rst:527 +msgid "Notes" +msgstr "ໝາຍເຫດ" + +#: ../source/tutorials/packaging-projects.rst:529 +msgid "" +"Technically, you can also create Python packages without an ``__init__.py`` " +"file, but those are called :doc:`namespace packages ` and considered an **advanced topic** (not covered in " +"this tutorial). If you are only getting started with Python packaging, it is " +"recommended to stick with *regular packages* and ``__init__.py`` (even if " +"the file is empty)." +msgstr "" +"ຕາມຫຼັກການແລ້ວ, ທ່ານສາມາດສ້າງແພັກເກດ Python ໂດຍບໍ່ມີໄຟລ໌ ``__init__.py`` ໄດ້, " +"ແຕ່ພວກມັນຈະຖືກເອີ້ນວ່າ :doc:`namespace packages ` ເຊິ່ງເປັນ **ຫົວຂໍ້ຂັ້ນສູງ**. ຖ້າທ່ານຫາກໍເລີ່ມຕົ້ນ, ແນະນຳໃຫ້ໃຊ້ *ແພັກເກດປົກກະຕິ* ແລະ " +"ມີໄຟລ໌ ``__init__.py`` ຈະດີກວ່າ." diff --git a/locales/lzh/LC_MESSAGES/messages.po b/locales/lzh/LC_MESSAGES/messages.po index fb6fe1af9..4460831a5 100644 --- a/locales/lzh/LC_MESSAGES/messages.po +++ b/locales/lzh/LC_MESSAGES/messages.po @@ -3,21 +3,22 @@ # This file is distributed under the same license as the Python Packaging User Guide package. # 王玎珰 <1330274738@qq.com>, 2023. # maker , 2024. +# Haozhe Xu , 2026. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" -"PO-Revision-Date: 2024-01-31 06:01+0000\n" -"Last-Translator: maker \n" -"Language-Team: Chinese (Literary) \n" +"Language-Team: Literary Chinese \n" "Language: lzh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.4-dev\n" +"X-Generator: Weblate 2026.9.dev0\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -27,15 +28,15 @@ msgstr "助此引" msgid "" "The |PyPUG| welcomes contributors! There are lots of ways to help out, " "including:" -msgstr "" +msgstr "|PyPUG| 迎贡献者也!为是以助也:" #: ../source/contribute.rst:10 msgid "Reading the guide and giving feedback" -msgstr "" +msgstr "阅此引而反馈者也" #: ../source/contribute.rst:11 msgid "Reviewing new contributions" -msgstr "" +msgstr "顾新贡献者" #: ../source/contribute.rst:12 msgid "Revising existing content" @@ -43,11 +44,11 @@ msgstr "" #: ../source/contribute.rst:13 msgid "Writing new content" -msgstr "" +msgstr "书新文" #: ../source/contribute.rst:14 msgid "Translating the guide" -msgstr "" +msgstr "译此引" #: ../source/contribute.rst:16 msgid "" @@ -61,11 +62,11 @@ msgstr "" msgid "" "By contributing to the |PyPUG|, you're expected to follow the PSF's `Code of " "Conduct`__." -msgstr "" +msgstr "汝可助 |PyPUG| ,而随 PSF 之 `Code of Conduct`__ 。" #: ../source/contribute.rst:32 msgid "Documentation types" -msgstr "" +msgstr "档之类" #: ../source/contribute.rst:34 msgid "" @@ -90,7 +91,7 @@ msgstr "" #: ../source/contribute.rst:51 ../source/guides/index.rst:2 #: ../source/index.rst:69 msgid "Guides" -msgstr "" +msgstr "引" #: ../source/contribute.rst:53 msgid "" @@ -104,7 +105,7 @@ msgstr "" #: ../source/contribute.rst:60 ../source/discussions/index.rst:2 msgid "Discussions" -msgstr "" +msgstr "论" #: ../source/contribute.rst:62 msgid "" @@ -112,10 +113,12 @@ msgid "" "specific topic without a specific goal in mind. :doc:`example discussion-" "style document `." msgstr "" +"论者,释与信息也。是可免细思而探新题也。:doc:`引档之例 `。" #: ../source/contribute.rst:67 msgid "Specifications" -msgstr "" +msgstr "指定" #: ../source/contribute.rst:69 msgid "" @@ -127,28 +130,30 @@ msgstr "" #: ../source/contribute.rst:75 msgid "Translations" -msgstr "" +msgstr "译文" #: ../source/contribute.rst:77 msgid "" "We use `Weblate`_ to manage translations of this project. Please visit the " "`packaging.python.org`_ project on Weblate to contribute." msgstr "" +"吾以 `Weblate`_ 辖此项之译文也。汝可访 `packaging.python.org`_ 于Weblate以" +"助。" #: ../source/contribute.rst:80 msgid "" "If you are experiencing issues while you are working on translations, please " "open an issue on `GitHub`_." -msgstr "" +msgstr "若汝译之而感不佳,可开一issue于 `GitHub`_ 。" #: ../source/contribute.rst:85 msgid "" "Any translations of this project should follow `reStructuredText syntax`_." -msgstr "" +msgstr "此项之译均须循 `reStructedText syntax`_ 之法。" #: ../source/contribute.rst:93 msgid "Adding a language" -msgstr "" +msgstr "增一语言" #: ../source/contribute.rst:95 msgid "" @@ -2488,7 +2493,7 @@ msgid "" msgstr "" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4324,7 +4329,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4491,8 +4496,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8566,13 +8571,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8580,23 +8592,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8607,21 +8619,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8629,7 +8641,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8637,37 +8649,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8675,7 +8687,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8684,7 +8696,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13509,7 +13521,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16406,19 +16418,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16430,29 +16442,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16461,26 +16473,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16488,13 +16500,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16507,30 +16519,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26045,35 +26064,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26081,22 +26112,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/mk/LC_MESSAGES/messages.po b/locales/mk/LC_MESSAGES/messages.po index dbb8d0e6c..96504616a 100644 --- a/locales/mk/LC_MESSAGES/messages.po +++ b/locales/mk/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2023-10-21 04:04+0000\n" "Last-Translator: \"Kristijan \\\"Fremen\\\" Velkovski\" \n" "Language-Team: Macedonian `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4330,7 +4330,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4497,8 +4497,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8572,13 +8572,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8586,23 +8593,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8613,21 +8620,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8635,7 +8642,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8643,37 +8650,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8681,7 +8688,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8690,7 +8697,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13517,7 +13524,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16410,19 +16417,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16434,29 +16441,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16465,26 +16472,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16492,13 +16499,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16511,30 +16518,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26049,35 +26063,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26085,22 +26111,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/mr/LC_MESSAGES/messages.po b/locales/mr/LC_MESSAGES/messages.po index 30d8fa1e4..49b68d35c 100644 --- a/locales/mr/LC_MESSAGES/messages.po +++ b/locales/mr/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2025-01-25 14:18+0000\n" "Last-Translator: Prachi Joshi \n" "Language-Team: Marathi `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4321,7 +4321,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4488,8 +4488,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8563,13 +8563,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8577,23 +8584,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8604,21 +8611,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8626,7 +8633,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8634,37 +8641,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8672,7 +8679,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8681,7 +8688,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13506,7 +13513,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16399,19 +16406,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16423,29 +16430,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16454,26 +16461,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16481,13 +16488,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16500,30 +16507,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26038,35 +26052,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26074,22 +26100,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/mrh/LC_MESSAGES/messages.po b/locales/mrh/LC_MESSAGES/messages.po index 3c5a3e098..00da64de3 100644 --- a/locales/mrh/LC_MESSAGES/messages.po +++ b/locales/mrh/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2026-05-05 16:17+0000\n" "Last-Translator: Laitei \n" "Language-Team: Mara `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4321,7 +4321,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4488,8 +4488,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8563,13 +8563,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8577,23 +8584,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8604,21 +8611,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8626,7 +8633,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8634,37 +8641,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8672,7 +8679,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8681,7 +8688,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13506,7 +13513,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16399,19 +16406,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16423,29 +16430,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16454,26 +16461,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16481,13 +16488,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16500,30 +16507,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26038,35 +26052,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26074,22 +26100,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/my/LC_MESSAGES/messages.po b/locales/my/LC_MESSAGES/messages.po index b6a8be281..10ed1c1df 100644 --- a/locales/my/LC_MESSAGES/messages.po +++ b/locales/my/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -2483,7 +2483,7 @@ msgid "" msgstr "" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4319,7 +4319,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4486,8 +4486,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8561,13 +8561,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8575,23 +8582,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8602,21 +8609,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8624,7 +8631,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8632,37 +8639,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8670,7 +8677,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8679,7 +8686,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13504,7 +13511,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16397,19 +16404,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16421,29 +16428,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16452,26 +16459,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16479,13 +16486,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16498,30 +16505,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26036,35 +26050,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26072,22 +26098,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/pl/LC_MESSAGES/messages.po b/locales/pl/LC_MESSAGES/messages.po index de7dd6428..d5fa9953f 100644 --- a/locales/pl/LC_MESSAGES/messages.po +++ b/locales/pl/LC_MESSAGES/messages.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" -"PO-Revision-Date: 2026-02-11 07:09+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" +"PO-Revision-Date: 2026-08-23 23:51+0000\n" "Last-Translator: Maciej Olko \n" "Language-Team: Polish \n" @@ -19,7 +19,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.16-dev\n" +"X-Generator: Weblate 2026.9.dev0\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -2507,7 +2507,7 @@ msgid "" msgstr "" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4343,7 +4343,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4510,8 +4510,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8585,13 +8585,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8599,23 +8606,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8626,21 +8633,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8648,7 +8655,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8656,37 +8663,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8694,7 +8701,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8703,7 +8710,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -10290,7 +10297,7 @@ msgstr "" #: ../source/index.rst:3 ../source/key_projects.rst:247 msgid "Python Packaging User Guide" -msgstr "" +msgstr "Podręcznik użytkownika pakietów Pythona" #: ../source/index.rst:25 msgid "" @@ -10298,6 +10305,9 @@ msgid "" "references to help you distribute and install Python packages with modern " "tools." msgstr "" +"Witamy w *Podręczniku użytkownika pakietów Pythona* – zbiorze samouczków i " +"materiałów referencyjnych, które pomogą Ci w dystrybucji i instalacji " +"pakietów w języku Python przy użyciu nowoczesnych narzędzi." #: ../source/index.rst:29 msgid "" @@ -10305,10 +10315,13 @@ msgid "" "Authority `. We happily accept :doc:`contributions and feedback " "`. 😊" msgstr "" +"Niniejszy przewodnik jest utrzymywany na `GitHub`_ przez :doc:`Python " +"Packaging Authority `. Z radością przyjmujemy :doc:`wkład i " +"opinie `. 😊" #: ../source/index.rst:36 msgid "Overview and Flow" -msgstr "" +msgstr "Przegląd i przebieg" #: ../source/index.rst:40 msgid "" @@ -10316,6 +10329,10 @@ msgid "" "continuous improvement are key to success. The overview and flow sections " "provide a starting point for understanding the Python packaging ecosystem." msgstr "" +"Zgłębianie wiedzy na temat pakietów w języku Python to długa droga. Kluczem " +"do sukcesu są cierpliwość i ciągłe doskonalenie się. Sekcje poświęcone " +"przeglądowi i przebiegowi procesu stanowią punkt wyjścia do zrozumienia " +"ekosystemu pakietów w języku Python." #: ../source/index.rst:44 msgid "" @@ -13554,7 +13571,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16447,19 +16464,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16471,29 +16488,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16502,26 +16519,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16529,13 +16546,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16548,30 +16565,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26086,35 +26110,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26122,22 +26158,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/pt/LC_MESSAGES/messages.po b/locales/pt/LC_MESSAGES/messages.po index e42b26768..c4a2f0136 100644 --- a/locales/pt/LC_MESSAGES/messages.po +++ b/locales/pt/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2026-06-14 08:02+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -5410,7 +5410,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "Referências" @@ -5643,10 +5643,15 @@ msgstr "" "entrada ` ." #: ../source/guides/creating-and-discovering-plugins.rst:167 +#, fuzzy +#| msgid "" +#| "Since this specification is part of the :doc:`standard library " +#| "`, most packaging tools other than " +#| "setuptools provide support for defining entry points." msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" "Visto que esta especificação é parte da :doc:`biblioteca padrão " "`, a maioria das ferramentas de " @@ -10788,7 +10793,14 @@ msgstr "" "TestPyPI respectivamente e um trabalho adicional para construir os pacotes " "de distribuição." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" @@ -10796,7 +10808,7 @@ msgstr "" "Primeiro, definiremos o trabalho para construir os pacotes dist do seu " "projeto e armazená-los para uso posterior:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -10804,7 +10816,7 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." @@ -10812,7 +10824,7 @@ msgstr "" "Isto descarregará o seu repositório no executor de CI e, em seguida, " "instalará e ativará o lançamento mais recente disponível do Python 3." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" @@ -10820,11 +10832,11 @@ msgstr "" "E agora podemos construir os dists a partir da fonte e armazená-los. Neste " "exemplo, usaremos o pacote ``build``. Então, adicione isto à lista de etapas:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "Definir um ambiente de tarefa do fluxo de trabalho" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -10835,7 +10847,7 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." @@ -10843,15 +10855,15 @@ msgstr "" "Isto também garantirá que o fluxo de trabalho de publicação do PyPI só seja " "acionado se o commit atual estiver marcado." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "Publicar a distribuição para PyPI" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "Finalmente, adicione as seguintes etapas ao final:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -10863,7 +10875,7 @@ msgstr "" "`download-artifact`_, ele envia o conteúdo da pasta ``dist /`` para PyPI " "incondicionalmente." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -10871,11 +10883,11 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "Fluxo de trabalho separado para publicação no TestPyPI" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" @@ -10883,7 +10895,7 @@ msgstr "" "Agora, repita estas etapas e crie outro trabalho para publicação no índice " "do pacote TestPyPI na secção ``jobs``:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " @@ -10894,21 +10906,21 @@ msgstr "" "branch principal e é frequentemente usado para indicar um pipeline de " "publicação de lançamento íntegro." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "O fluxo de trabalho de CI/CD completo" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" "Este parágrafo mostra todo o fluxo de trabalho após seguir o guia acima." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "Isso é tudo, pessoal!" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -10921,7 +10933,7 @@ msgstr "" "construções de teste para os seus utilizadores alfa, bem como garantir que a " "sua versão pipeline permaneça saudável!" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -10936,7 +10948,7 @@ msgstr "" "um servidor compatível com PyPI como :ref:`pypiserver` no CI para fins de " "teste." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -16956,7 +16968,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -20143,19 +20155,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -20167,29 +20179,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "Gramática completa" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -20198,26 +20210,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -20225,13 +20237,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -20244,13 +20256,20 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" @@ -20258,12 +20277,12 @@ msgstr "" "pip, o instalador recomendado para pacotes Python (http://" "pip.readthedocs.org/en/stable/)" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" "A biblioteca de PEG do parsley. (https://pypi.python.org/pypi/parsley/)" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -20273,7 +20292,7 @@ msgstr "" "variável do marcador de ambiente ``python_version`` (https://github.com/" "python/peps/issues/560)" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -30309,35 +30328,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -30345,22 +30376,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/pt_BR/LC_MESSAGES/messages.po b/locales/pt_BR/LC_MESSAGES/messages.po index b97a0082b..bfe560c7f 100644 --- a/locales/pt_BR/LC_MESSAGES/messages.po +++ b/locales/pt_BR/LC_MESSAGES/messages.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2025-08-07 00:01+0000\n" "Last-Translator: Rafael Fontenelle \n" "Language-Team: Portuguese (Brazil) `_" +msgid "`setuptools_scm `_" msgstr "`Flexx `_" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -5694,7 +5694,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "Referências" @@ -5930,10 +5930,15 @@ msgstr "" "entrada ` ." #: ../source/guides/creating-and-discovering-plugins.rst:167 +#, fuzzy +#| msgid "" +#| "Since this specification is part of the :doc:`standard library " +#| "`, most packaging tools other than " +#| "setuptools provide support for defining entry points." msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" "Visto que esta especificação é parte da :doc:`biblioteca padrão " "`, a maioria das ferramentas de " @@ -11389,7 +11394,14 @@ msgstr "" "TestPyPI respectivamente, e um trabalho adicional para construir os pacotes " "de distribuição." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" @@ -11397,7 +11409,7 @@ msgstr "" "Primeiro, definiremos o trabalho para construir os pacotes dist do seu " "projeto e armazená-los para uso posterior:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -11405,7 +11417,7 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." @@ -11413,7 +11425,7 @@ msgstr "" "Isso fará o download do seu repositório no executor de CI e, em seguida, " "instalará e ativará o lançamento mais recente disponível do Python 3." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" @@ -11421,11 +11433,11 @@ msgstr "" "E agora podemos construir os dists a partir da fonte e armazená-los. Neste " "exemplo, usaremos o pacote ``build``. Então, adicione isso à lista de etapas:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "Definindo um ambiente de tarefa do fluxo de trabalho" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 #, fuzzy #| msgid "" #| "Now, let's add initial setup for our job that will publish to PyPI. It's " @@ -11453,7 +11465,7 @@ msgstr "" "``pypi-publish`` precisam para implementar publicação confiável sem segredo " "para PyPI." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." @@ -11461,15 +11473,15 @@ msgstr "" "Isso também garantirá que o fluxo de trabalho de publicação do PyPI só seja " "acionado se o commit atual estiver marcado." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "Publicando a distribuição para PyPI" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "Finalmente, adicione as seguintes etapas ao final:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -11481,7 +11493,7 @@ msgstr "" "`download-artifact`_, ele envia o conteúdo da pasta ``dist /`` para PyPI " "incondicionalmente." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -11489,11 +11501,11 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "Fluxo de trabalho separado para publicação no TestPyPI" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" @@ -11501,7 +11513,7 @@ msgstr "" "Agora, repita essas etapas e crie outro trabalho para publicação no índice " "do pacote TestPyPI na seção ``jobs``:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " @@ -11512,21 +11524,21 @@ msgstr "" "branch principal e é frequentemente usado para indicar um pipeline de " "publicação de lançamento íntegro." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "O fluxo de trabalho de CI/CD completo" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" "Este parágrafo mostra todo o fluxo de trabalho após seguir o guia acima." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "Isso é tudo, pessoal!" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -11539,7 +11551,7 @@ msgstr "" "construções de teste para seus usuários alfa, bem como garantir que sua " "versão pipeline permaneça saudável!" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -11554,7 +11566,7 @@ msgstr "" "um servidor compatível com PyPI como :ref:`pypiserver` no CI para fins de " "teste." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -17983,7 +17995,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -21487,19 +21499,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -21511,7 +21523,7 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 #, fuzzy msgid "" "The ``implementation_version`` marker variable is derived " @@ -21520,25 +21532,25 @@ msgstr "" "A variável do marcador ``implementation_version`` é derivada de " "``sys.implementation.version``::" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "Gramática completa" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "A gramática completa do persley ::" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 #, fuzzy msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" "Um programa de teste -- se a gramática estiver em uma string ``grammar``::" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 #, fuzzy msgid "" "July 2019: The definition of ``python_version`` was `changed \n" "Language-Team: Romanian `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4324,7 +4324,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4491,8 +4491,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8568,13 +8568,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8582,23 +8589,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8609,21 +8616,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8631,7 +8638,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8639,37 +8646,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8677,7 +8684,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8686,7 +8693,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13511,7 +13518,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16404,19 +16411,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16428,29 +16435,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16459,26 +16466,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16486,13 +16493,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16505,30 +16512,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26043,35 +26057,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26079,22 +26105,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/ru/LC_MESSAGES/messages.po b/locales/ru/LC_MESSAGES/messages.po index 51d5cb090..a3c779196 100644 --- a/locales/ru/LC_MESSAGES/messages.po +++ b/locales/ru/LC_MESSAGES/messages.po @@ -11,13 +11,14 @@ # Nikita , 2024. # gfbdrgn , 2025. # da070116 , 2025. +# OIS , 2026. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" -"PO-Revision-Date: 2025-06-07 08:01+0000\n" -"Last-Translator: da070116 \n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" +"PO-Revision-Date: 2026-09-28 04:51+0000\n" +"Last-Translator: OIS \n" "Language-Team: Russian \n" "Language: ru\n" @@ -26,7 +27,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.12-dev\n" +"X-Generator: Weblate 2026.10.dev0\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -1103,10 +1104,8 @@ msgstr "" "Gentoo Linux, например)." #: ../source/discussions/downstream-packaging.rst:51 -#, fuzzy -#| msgid "Python source distributions" msgid "Provide complete source distributions" -msgstr "Дистрибутивы с исходным кодом Python" +msgstr "Предоставляйте полный исходный код" #: ../source/discussions/downstream-packaging.rst:54 #: ../source/discussions/downstream-packaging.rst:150 @@ -1127,11 +1126,11 @@ msgstr "" #: ../source/discussions/downstream-packaging.rst:62 msgid "Being able to audit the source code of all packages." -msgstr "" +msgstr "Возможность аудита исходного кода всех пакетов." #: ../source/discussions/downstream-packaging.rst:64 msgid "Being able to run the test suite and build documentation." -msgstr "" +msgstr "Возможность выполнения набора тестов и построения документации." #: ../source/discussions/downstream-packaging.rst:66 msgid "" @@ -1197,7 +1196,7 @@ msgstr "" #: ../source/discussions/downstream-packaging.rst:337 #: ../source/discussions/downstream-packaging.rst:441 msgid "How?" -msgstr "" +msgstr "Как?" #: ../source/discussions/downstream-packaging.rst:101 msgid "" @@ -1262,7 +1261,7 @@ msgstr "" #: ../source/discussions/downstream-packaging.rst:147 msgid "Do not use the Internet during the build process" -msgstr "" +msgstr "Не используйте интернет в ходе сборки" #: ../source/discussions/downstream-packaging.rst:152 msgid "" @@ -1350,10 +1349,8 @@ msgid "" msgstr "" #: ../source/discussions/downstream-packaging.rst:210 -#, fuzzy -#| msgid "Declaring build system dependencies" msgid "Support building against system dependencies" -msgstr "Объявление зависимостей системы сборки" +msgstr "Поддерживайте сборку с зависимостями из системы" #: ../source/discussions/downstream-packaging.rst:215 msgid "" @@ -1421,6 +1418,8 @@ msgid "" "Static linking and vendoring obscures the use of external dependencies, " "making source auditing harder." msgstr "" +"Статическая сборка и вендоринг затрудняют определение внешних зависимостей, " +"из-за чего аудит исходного кода становится сложнее." #: ../source/discussions/downstream-packaging.rst:256 msgid "" @@ -1484,7 +1483,7 @@ msgstr "" #: ../source/discussions/downstream-packaging.rst:300 msgid "Support downstream testing" -msgstr "" +msgstr "Поддерживайте тестирование даунстримом" #: ../source/discussions/downstream-packaging.rst:305 msgid "" @@ -1644,10 +1643,8 @@ msgid "" msgstr "" #: ../source/discussions/downstream-packaging.rst:409 -#, fuzzy -#| msgid "Final releases" msgid "Aim for stable releases" -msgstr "Финальные релизы" +msgstr "Стремитесь предоставлять стабильные релизы" #: ../source/discussions/downstream-packaging.rst:414 msgid "" @@ -3076,7 +3073,9 @@ msgstr "" "pyproject_config.html#dynamic-metadata>`_" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" +#, fuzzy +#| msgid "`setuptools_scm `_" +msgid "`setuptools_scm `_" msgstr "`setuptools_scm `_" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -5560,7 +5559,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "Ссылка" @@ -5792,10 +5791,15 @@ msgstr "" "` ." #: ../source/guides/creating-and-discovering-plugins.rst:167 +#, fuzzy +#| msgid "" +#| "Since this specification is part of the :doc:`standard library " +#| "`, most packaging tools other than " +#| "setuptools provide support for defining entry points." msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" "Поскольку эта спецификация является частью :doc:`стандартной библиотеки " "`, большинство инструментов упаковки, " @@ -11510,7 +11514,14 @@ msgstr "" "Нам нужно будет определить два задания для публикации в PyPI и TestPyPI " "соответственно, а также дополнительное задание для сборки дистрибутива." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" @@ -11518,7 +11529,7 @@ msgstr "" "Сначала мы определим задание для сборки дист-пакетов вашего проекта и " "хранения их для последующего использования:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -11526,7 +11537,7 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." @@ -11534,7 +11545,7 @@ msgstr "" "Это позволит загрузить ваш репозиторий в CI runner, а затем установить и " "активировать самый новый доступный релиз Python 3." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" @@ -11543,11 +11554,11 @@ msgstr "" "примере мы будем использовать пакет ``build``. Так что добавьте его в список " "шагов:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "Определение рабочей среды рабочего процесса" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 #, fuzzy #| msgid "" #| "Now, let's add initial setup for our job that will publish to PyPI. It's " @@ -11576,7 +11587,7 @@ msgstr "" "необходим действию ``pypi-publish`` для реализации секретной доверенной " "публикации в PyPI." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." @@ -11584,15 +11595,15 @@ msgstr "" "Это также гарантирует, что рабочий процесс публикации PyPI будет запущен " "только в том случае, если текущий коммит помечен." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "Публикация дистрибутива в PyPI" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "Наконец, добавьте следующие шаги в конце:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -11603,7 +11614,7 @@ msgstr "" "загрузки сохраненного дистрибутива действием `download-artifact`_, оно " "безусловно загружает содержимое папки ``dist/`` в PyPI." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -11611,11 +11622,11 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "Отдельный рабочий процесс для публикации в TestPyPI" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" @@ -11623,7 +11634,7 @@ msgstr "" "Теперь повторите эти шаги и создайте еще одно задание для публикации в " "индекс пакета TestPyPI в разделе ``jobs``:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " @@ -11634,22 +11645,22 @@ msgstr "" "основной ветке и часто используется для обозначения здорового конвейера " "публикации pipрелизов." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "Весь рабочий процесс CI/CD" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" "В этом пункте показан весь рабочий процесс после выполнения вышеописанного " "руководства." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "Вот и все, друзья!" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -11662,7 +11673,7 @@ msgstr "" "сборок вашим альфа-пользователям, а также для того, чтобы убедиться, что ваш " "конвейер релизовpip остаётся здоровым!" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -11676,7 +11687,7 @@ msgstr "" "увеличен, но лучшим решением может быть использование PyPI-совместимого " "сервера, например :ref:`pypiserver`, в CI для тестирования." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -18182,7 +18193,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -21822,19 +21833,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -21846,7 +21857,7 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" @@ -21854,23 +21865,23 @@ msgstr "" "Маркерная переменная ``имплементация_версия`` получена из :py: " "данные:`sys.имплементация.версия `:" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "Полная грамматика" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "Полная грамматика петрушки::" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "Тестовая программа - если грамматика находится в строке ``grammar``:" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "Ноябрь 2015 г: Эта спецификация была одобрена через :pep:`508`." -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -21884,13 +21895,13 @@ msgstr "" "потенциальные будущие версии Python с двузначными мажорными и минорными " "версиями (например, 3.10). [#future_versions]_" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " @@ -21900,13 +21911,13 @@ msgstr "" "запятые в конце, что соответствует поведению реализации Python, которая " "используется с конца 2022 года." -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -21914,13 +21925,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -21933,13 +21944,20 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" @@ -21947,11 +21965,11 @@ msgstr "" "pip, рекомендуемая программа установки пакетов Python (http://" "pip.readthedocs.org/en/stable/)" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "Библиотека PEG Петрушка. (https://pypi.python.org/pypi/parsley/)" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -21961,7 +21979,7 @@ msgstr "" "переменной среды ``python_version`` (https://github.com/python/peps/issues/" "560)" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -34842,37 +34860,49 @@ msgstr "Информация о финансировании" msgid "``sponsor``, ``donate``, ``donation``" msgstr "``спонсор``, ``пожертвовать``, ``пожертвование``" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 #, fuzzy msgid "Example behavior" msgstr "Пример" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 #, fuzzy msgid "Core metadata representation" msgstr "Спецификации основных метаданных" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -34880,22 +34910,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/sai/LC_MESSAGES/messages.po b/locales/sai/LC_MESSAGES/messages.po index 4844f501d..85388e03e 100644 --- a/locales/sai/LC_MESSAGES/messages.po +++ b/locales/sai/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -2482,7 +2482,7 @@ msgid "" msgstr "" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4318,7 +4318,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4485,8 +4485,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8560,13 +8560,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8574,23 +8581,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8601,21 +8608,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8623,7 +8630,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8631,37 +8638,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8669,7 +8676,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8678,7 +8685,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13503,7 +13510,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16396,19 +16403,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16420,29 +16427,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16451,26 +16458,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16478,13 +16485,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16497,30 +16504,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26035,35 +26049,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26071,22 +26097,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/si/LC_MESSAGES/messages.po b/locales/si/LC_MESSAGES/messages.po index f1798fff2..6cc37a1f9 100644 --- a/locales/si/LC_MESSAGES/messages.po +++ b/locales/si/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2022-06-11 08:19+0000\n" "Last-Translator: Kushan Gunasekera \n" "Language-Team: Sinhala `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4322,7 +4322,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4489,8 +4489,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8564,13 +8564,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8578,23 +8585,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8605,21 +8612,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8627,7 +8634,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8635,37 +8642,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8673,7 +8680,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8682,7 +8689,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13507,7 +13514,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16400,19 +16407,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16424,29 +16431,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16455,26 +16462,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16482,13 +16489,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16501,30 +16508,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26039,35 +26053,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26075,22 +26101,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/sk/LC_MESSAGES/messages.po b/locales/sk/LC_MESSAGES/messages.po index b767f8e70..a75b0139d 100644 --- a/locales/sk/LC_MESSAGES/messages.po +++ b/locales/sk/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2024-11-02 00:54+0000\n" "Last-Translator: Milan Šalka \n" "Language-Team: Slovak `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4448,7 +4448,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4615,8 +4615,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8720,13 +8720,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8734,23 +8741,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8761,21 +8768,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8783,7 +8790,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8791,37 +8798,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8829,7 +8836,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8838,7 +8845,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13671,7 +13678,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16572,19 +16579,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16596,29 +16603,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16627,26 +16634,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16654,13 +16661,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16673,30 +16680,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26249,35 +26263,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26285,22 +26311,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/ta/LC_MESSAGES/messages.po b/locales/ta/LC_MESSAGES/messages.po index 92682ba40..0d9a034b2 100644 --- a/locales/ta/LC_MESSAGES/messages.po +++ b/locales/ta/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2025-07-19 06:36+0000\n" "Last-Translator: தமிழ்நேரம் \n" "Language-Team: Tamil ` _" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" +#, fuzzy +#| msgid "`setuptools_scm `_" +msgid "`setuptools_scm `_" msgstr "`setuptools_scm ` _" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -5390,7 +5392,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "குறிப்புகள்" @@ -5612,10 +5614,15 @@ msgstr "" "DOC: `நுழைவு புள்ளிகள் `." #: ../source/guides/creating-and-discovering-plugins.rst:167 +#, fuzzy +#| msgid "" +#| "Since this specification is part of the :doc:`standard library " +#| "`, most packaging tools other than " +#| "setuptools provide support for defining entry points." msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" "இந்த விவரக்குறிப்பு: டாக்: `நிலையான நூலகம் <பைதான்: நூலகம்/இறக்குமதி " "லிப்.மெட்டாடேட்டா>` `, செட்டுப்டூல்கள் தவிர பிற பெரும்பாலான பேக்கேசிங் கருவிகள் நுழைவு " @@ -11110,7 +11117,14 @@ msgstr "" "முறையே PYPI மற்றும் TestPypi க்கு வெளியிட இரண்டு வேலைகள் மற்றும் விநியோக தொகுப்புகளை " "உருவாக்க கூடுதல் வேலை ஆகியவற்றை வரையறுக்க வேண்டும்." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" @@ -11118,7 +11132,7 @@ msgstr "" "முதலில், உங்கள் திட்டத்தின் தொலைதூர தொகுப்புகளை உருவாக்குவதற்கும் அவற்றை பின்னர் பயன்படுத்த " "சேமிப்பதற்கும் வேலையை வரையறுப்போம்:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -11126,7 +11140,7 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." @@ -11134,7 +11148,7 @@ msgstr "" "இது உங்கள் களஞ்சியத்தை தொஒ ரன்னரில் பதிவிறக்கம் செய்து பின்னர் கிடைக்கக்கூடிய புதிய பைதான் " "3 வெளியீட்டை நிறுவி செயல்படுத்தும்." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" @@ -11143,11 +11157,11 @@ msgstr "" "எடுத்துக்காட்டில், `` பில்ட்`` தொகுப்பைப் பயன்படுத்துவோம். எனவே இதை படிகள் பட்டியலில் " "சேர்க்கவும்:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "பணிப்பாய்வு வேலை சூழலை வரையறுத்தல்" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 #, fuzzy #| msgid "" #| "Now, let's add initial setup for our job that will publish to PyPI. It's " @@ -11174,7 +11188,7 @@ msgstr "" "பைபி-பப்ளிச்`` நடவடிக்கைகள் பைபிக்கு ரகசியமற்ற நம்பகமான வெளியீட்டை செயல்படுத்த வேண்டும் " "என்று ஓபன்ஐடி இணைப்பு கிள்ளாக்கைப் பெற அனுமதிக்கிறது." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." @@ -11182,15 +11196,15 @@ msgstr "" "தற்போதைய கமிட் குறிக்கப்பட்டால் மட்டுமே PYPI பப்ளிசிங் பணிப்பாய்வு தூண்டப்படுவதை இது " "உறுதி செய்யும்." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "PYPI க்கு விநியோகத்தை வெளியிடுகிறது" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "இறுதியாக, முடிவில் பின்வரும் படிகளைச் சேர்க்கவும்:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -11202,7 +11216,7 @@ msgstr "" "பிறகு, இது `` மாவட்ட/`கோப்புறையின் உள்ளடக்கங்களை பதிவேற்றுகிறது நிபந்தனையின்றி " "பைபிக்குள்." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -11210,11 +11224,11 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "டெச்ட்பிபிக்கு வெளியிடுவதற்கு பணிப்பாய்வு தனி" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" @@ -11222,7 +11236,7 @@ msgstr "" "இப்போது, இந்த படிகளை மீண்டும் செய்து, `` வேலைகள்`` பிரிவின் கீழ் டெச்ட்பை தொகுப்பு " "குறியீட்டுக்கு வெளியிட மற்றொரு வேலையை உருவாக்கவும்:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " @@ -11233,21 +11247,21 @@ msgstr "" "வடிவமைக்கப்பட்டுள்ளது மற்றும் ஆரோக்கியமான வெளியீட்டு வெளியீட்டு குழாய்த்திட்டத்தைக் குறிக்க " "பெரும்பாலும் பயன்படுத்தப்படுகிறது." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "முழு சிஐ/சிடி பணிப்பாய்வு" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" "இந்த பத்தி மேலே உள்ள வழிகாட்டியைப் பின்பற்றிய பிறகு முழு பணிப்பாய்வுகளையும் காட்டுகிறது." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "அவ்வளவுதான், எல்லோரும்!" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -11259,7 +11273,7 @@ msgstr "" "சோதனை கட்டமைப்பை வழங்குவதற்கும், உங்கள் வெளியீட்டு குழாய் ஆரோக்கியமாக இருப்பதை " "உறுதிசெய்வதற்கும் பயனுள்ளதாக இருக்கும் டெச்ட்பிபிக்கு எந்தவொரு உந்துதலையும் வெளியிடும்!" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -11273,7 +11287,7 @@ msgstr "" "ஒரு சிறந்த தீர்வு ஒரு பைபி-இணக்கமான சேவையகத்தைப் பயன்படுத்தலாம்: குறிப்பு நோக்கங்களுக்காக " "தொஒ இல் `பைபிசெவர்`." -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -17630,7 +17644,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -21205,19 +21219,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -21229,7 +21243,7 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" @@ -21237,23 +21251,23 @@ msgstr "" "`` செயல்படுத்தல்_்வெர்சன்`` மார்க்கர் மாறி இதிலிருந்து பெறப்பட்டது: py: தரவு: " "`sys.implementation.version `:" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "முழுமையான இலக்கணம்" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "முழுமையான வோக்கோசு இலக்கணம் ::" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "ஒரு சோதனை நிரல் - இலக்கணம் ஒரு சரத்தில் இருந்தால் `` இலக்கணம்``:" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "நவம்பர் 2015: இந்த விவரக்குறிப்பு அங்கீகரிக்கப்பட்டது: PEP: `508`." -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -21265,13 +21279,13 @@ msgstr "" "`_` `தளத்திலிருந்து. ) [: 2]) ``, 2 இலக்க பெரிய மற்றும் சிறிய பதிப்புகளுடன் " "பைத்தானின் எதிர்கால பதிப்புகளுக்கு இடமளிக்க (எ.கா. 3.10). [#future_versions] _" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " @@ -21280,13 +21294,13 @@ msgstr "" "சூன் 2024: 2022 ஆம் ஆண்டின் பிற்பகுதியிலிருந்து பயன்பாட்டில் உள்ள பைதான் அமலாக்கத்தின் " "நடத்தையுடன் பொருந்தக்கூடிய, `` பதிப்பு_மனி`` இன் வரையறை மாற்றப்பட்டது." -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -21294,13 +21308,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -21313,13 +21327,20 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" @@ -21327,11 +21348,11 @@ msgstr "" "PIP, பைதான் தொகுப்புகளுக்கான பரிந்துரைக்கப்பட்ட நிறுவி (http://pip.readthedocs.org/" "en/stable/)" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "வோக்கோசு பெக் நூலகம். (https://pypi.python.org/pypi/parsly/)" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -21340,7 +21361,7 @@ msgstr "" "சுற்றுச்சூழல் மார்க்கர் மாறியின் வரையறையுடன் எதிர்கால பைதான் பதிப்புகள் சிக்கலாக இருக்கலாம் " "`` பைதான்_்வெர்சன்`` (https://github.com/python/peps/issues/560)" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -33645,7 +33666,19 @@ msgstr "பொருள் செய்தி" msgid "``sponsor``, ``donate``, ``donation``" msgstr "`` ச்பான்சர்``, `` நன்கொடை``, `` நன்கொடை``" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." @@ -33654,11 +33687,11 @@ msgstr "" "மாற்றியமைக்கப்பட்ட லேபிள்களை வழங்க தேர்வு செய்யலாம் அல்லது அவற்றை மேலும் நிபுணத்துவம் " "பெறலாம்." -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "எடுத்துக்காட்டு நடத்தை" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" @@ -33666,19 +33699,19 @@ msgstr "" "`` Pyproject.toml`` இலிருந்து கோர் மெட்டாடேட்டாவிலிருந்து சாத்தியமான குறியீட்டு " "விளக்கக்காட்சிக்கு திட்ட முகவரி மெட்டாடேட்டாவின் ஓட்டத்தை பின்வருவது காட்டுகிறது:" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "நிலையான உள்ளமைவில் எடுத்துக்காட்டு திட்ட முகவரி கள்" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "கோர் மேனிலை தரவு பிரதிநிதித்துவம்" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "சாத்தியமான வழங்குதல்" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -33690,25 +33723,25 @@ msgstr "" "இயல்பாக்கப்பட்ட வடிவத்தின் அடிப்படையில் பொருத்தமான மனித-படிக்கக்கூடிய சமமானவற்றை " "இயல்பாக்குகிறது மற்றும் அடையாளம் காட்டுகிறது:" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" "`` முகப்பு பக்கம்`` `` முகப்புப்பக்கத்தை`` ஆகிறது, இது `` முகப்புப்பக்கத்தை`` என " "வழங்கப்படுகிறது" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "`` ஆவணங்கள்`` `` ஆவணங்கள்` ஏற்படுகிறது, இது `` ஆவணங்கள்`` என வழங்கப்படுகிறது" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" "`` களஞ்சியம்`` `` களஞ்சியத்தை` `ஆகிறது, இது` `மூலக் குறியீடு`` என வழங்கப்படுகிறது" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/th/LC_MESSAGES/messages.po b/locales/th/LC_MESSAGES/messages.po index 3dd6a3e0a..a3ec3b989 100644 --- a/locales/th/LC_MESSAGES/messages.po +++ b/locales/th/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -2482,7 +2482,7 @@ msgid "" msgstr "" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4318,7 +4318,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4485,8 +4485,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8560,13 +8560,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8574,23 +8581,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8601,21 +8608,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8623,7 +8630,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8631,37 +8638,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8669,7 +8676,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8678,7 +8685,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13503,7 +13510,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16396,19 +16403,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16420,29 +16427,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16451,26 +16458,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16478,13 +16485,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16497,30 +16504,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26035,35 +26049,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26071,22 +26097,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/tr/LC_MESSAGES/messages.po b/locales/tr/LC_MESSAGES/messages.po index f3057435b..9ed54293e 100644 --- a/locales/tr/LC_MESSAGES/messages.po +++ b/locales/tr/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2025-09-29 04:02+0000\n" "Last-Translator: Rüzgar Hünerel \n" "Language-Team: Turkish `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4345,7 +4345,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4512,8 +4512,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8587,13 +8587,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8601,23 +8608,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8628,21 +8635,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8650,7 +8657,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8658,37 +8665,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8696,7 +8703,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8705,7 +8712,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13530,7 +13537,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16423,19 +16430,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16447,29 +16454,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16478,26 +16485,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16505,13 +16512,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16524,30 +16531,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26062,35 +26076,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26098,22 +26124,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/uk/LC_MESSAGES/messages.po b/locales/uk/LC_MESSAGES/messages.po index 28f1f873d..5efcfa310 100644 --- a/locales/uk/LC_MESSAGES/messages.po +++ b/locales/uk/LC_MESSAGES/messages.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2024-03-01 20:00+0000\n" "Last-Translator: Sviatoslav Sydorenko \n" "Language-Team: Ukrainian `_" -msgid "`setuptools_scm `_" +msgid "`setuptools_scm `_" msgstr "`Flexx `_" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4732,7 +4732,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4899,8 +4899,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -9070,13 +9070,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -9084,23 +9091,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -9111,21 +9118,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -9133,7 +9140,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -9141,37 +9148,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "Це все, добродії!" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -9179,7 +9186,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -9188,7 +9195,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -14074,7 +14081,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -17032,19 +17039,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -17056,29 +17063,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -17087,26 +17094,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -17114,13 +17121,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -17133,30 +17140,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26839,36 +26853,48 @@ msgstr "Додаткові інструменти" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 #, fuzzy msgid "Example behavior" msgstr "Приклади" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26876,22 +26902,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/vi/LC_MESSAGES/messages.po b/locales/vi/LC_MESSAGES/messages.po index 63aeb0f2e..4221d4af3 100644 --- a/locales/vi/LC_MESSAGES/messages.po +++ b/locales/vi/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2025-09-23 05:02+0000\n" "Last-Translator: Lenny Tran \n" "Language-Team: Vietnamese `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4465,7 +4465,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "" @@ -4632,8 +4632,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8707,13 +8707,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8721,23 +8728,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8748,21 +8755,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8770,7 +8777,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8778,37 +8785,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8816,7 +8823,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8825,7 +8832,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13722,7 +13729,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16615,19 +16622,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16639,29 +16646,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16670,26 +16677,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16697,13 +16704,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16716,30 +16723,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26264,35 +26278,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26300,22 +26326,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" diff --git a/locales/zh_Hans/LC_MESSAGES/messages.po b/locales/zh_Hans/LC_MESSAGES/messages.po index 68ee244d3..f3e2c566d 100644 --- a/locales/zh_Hans/LC_MESSAGES/messages.po +++ b/locales/zh_Hans/LC_MESSAGES/messages.po @@ -38,14 +38,20 @@ # rand777 , 2025. # monios , 2025. # reducedradius <137701630+flytothehighest@users.noreply.github.com>, 2026. +# Haozhe Xu , 2026. +# B10112 , 2026. +# Hosted Weblate user 162400 , 2026. +# JaxonMa , 2026. +# Hosted Weblate user 54392 , 2026. +# Michael , 2026. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" -"PO-Revision-Date: 2026-06-28 07:02+0000\n" -"Last-Translator: reducedradius " -"<137701630+flytothehighest@users.noreply.github.com>\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" +"PO-Revision-Date: 2026-10-01 02:38+0000\n" +"Last-Translator: Hosted Weblate user 54392 " +"\n" "Language-Team: Chinese (Simplified Han script) \n" "Language: zh_Hans\n" @@ -53,7 +59,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2026.7.dev0\n" +"X-Generator: Weblate 2026.10.dev0\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -92,7 +98,7 @@ msgid "" "`pull requests`__. If you're planning to write or edit the guide, please " "read the :ref:`style guide `." msgstr "" -"大部分关于 |PyPUG| 的工作发生于`项目的 GitHub 存储库`__ 。要开始,请查看 " +"大部分关于 |PyPUG| 的工作发生于 `项目的 GitHub 存储库`__。要开始,请查看 " "`open issues`__ 和 `pull requests`__ 的列表。如果你打算编写或编辑指南,请阅" "读 :ref:`style guide `。" @@ -145,10 +151,10 @@ msgid "" "accomplishing the task. :doc:`example guide-style document `." msgstr "" -"指南的重点是完成一项具体的任务,并可以假定有一定程度的前提知识。这类似于教" -"程,但有一个狭窄和明确的重点,并可以根据需要提供大量的注意事项和附加信息。他" -"们还可以讨论完成任务的多种方法。 :doc:`example guide-style document `。" +"指南的重点是完成一项具体的任务,并可以假定有一定程度的前提知识。这类似于教程" +",但有一个狭窄和明确的重点,并可以根据需要提供大量的注意事项和附加信息。他们" +"还可以讨论完成任务的多种方法。 :doc:`指南式文档示例 `。" #: ../source/contribute.rst:60 ../source/discussions/index.rst:2 msgid "Discussions" @@ -160,9 +166,8 @@ msgid "" "specific topic without a specific goal in mind. :doc:`example discussion-" "style document `." msgstr "" -"讨论 (Discussions) 的重点是理解和信息。这些探索一个特定的主题,没有具体的目" -"标。 :doc:`example discussion-style document `。" +"讨论 (Discussions) 的重点是理解和信息。这些探索一个特定的主题,没有具体的目标" +"。 :doc:`讨论式文档示例 `。" #: ../source/contribute.rst:67 msgid "Specifications" @@ -175,9 +180,8 @@ msgid "" "tools. :doc:`example specification-style document `." msgstr "" -"规范 (Specifications) 是参考文档,侧重于全面记录包装工具之间互操作性的一致接" -"口。 :doc:`example specification-style document `。" +"规范 (Specifications) 是参考文档,侧重于全面记录打包工具之间互操作性的一致接" +"口。 :doc:`规范式文档示例 `。" #: ../source/contribute.rst:75 msgid "Translations" @@ -195,7 +199,7 @@ msgstr "" msgid "" "If you are experiencing issues while you are working on translations, please " "open an issue on `GitHub`_." -msgstr "如果你在翻译工作中遇到问题,请在`Github`_ 上开一个 issue 。" +msgstr "如果你在翻译工作中遇到问题,请在 `GitHub`_ 上开一个 issue。" #: ../source/contribute.rst:85 msgid "" @@ -312,7 +316,7 @@ msgid "" "readthedocs.org/projects/python-packaging-user-guide/. It's served from a " "custom domain and fronted by Fast.ly." msgstr "" -"该指南是通过ReadTheDocs部署的,配置位于 https://readthedocs.org/projects/" +"该指南是通过 ReadTheDocs 部署的,配置位于 https://readthedocs.org/projects/" "python-packaging-user-guide/ 。它由一个自定义域名提供服务,并由 Fast.ly 提供" "支持。" @@ -380,7 +384,7 @@ msgid "" "learn about packaging just as much as you do." msgstr "" "不要忘记,Python 社区是很大,而且很受欢迎的。读者可能与你的年龄、性别、教育、" -"文化等不尽相同,但他们和你一样值得学习包装知识。" +"文化等不尽相同,但他们和你一样值得学习打包知识。" #: ../source/contribute.rst:207 msgid "" @@ -635,7 +639,7 @@ msgstr "支持多种硬件平台" #: ../source/discussions/deploying-python-applications.rst:37 msgid "OS packaging & installers" -msgstr "操作系统包装和安装程序" +msgstr "操作系统打包和安装程序" #: ../source/discussions/deploying-python-applications.rst:49 #: ../source/discussions/deploying-python-applications.rst:86 @@ -655,8 +659,8 @@ msgid "" "tool downloads the specified Python-interpreter for Windows and packages it " "with all the dependencies in a single Windows-executable installer." msgstr "" -"`Pynsist `__ 是一个基于NSIS的单一安装程序," -"并将 Python 程序与 Python 解释器捆绑在一起的工具。在大多数情况下,打包 " +"`Pynsist `__ 是一个基于 NSIS 的单一安装程序" +",并将 Python 程序与 Python 解释器捆绑在一起的工具。在大多数情况下,打包 " "(packaging) 只需要用户选择 Python 解释器的版本并声明程序的依赖性 " "(dependencies) 。该工具会下载用于 Windows 的 Python 解释器,并将其与所有依赖" "项打包成一个可在 Windows 执行的安装程序。" @@ -669,7 +673,7 @@ msgid "" "computer." msgstr "" "安装的程序可以从安装程序添加到开始菜单的快捷方式启动。它使用一个安装在其应用" -"程序目录中的Python解释器,与计算机上的任何其他 Python 安装无关。" +"程序目录中的 Python 解释器,与计算机上的任何其他 Python 安装无关。" #: ../source/discussions/deploying-python-applications.rst:71 msgid "" @@ -679,7 +683,7 @@ msgid "" "the MIT-licence." msgstr "" "Pynsist 的一大优势是可以在 Linux 上构建 Windows 软件包。在 :any:`文档 " -"`中,有几个不同类型程序(控制台、GUI)的例子。该工具是在 MIT " +"` 中,有几个不同类型程序(控制台、GUI)的例子。该工具是在 MIT " "许可证下发布的。" #: ../source/discussions/deploying-python-applications.rst:77 @@ -749,11 +753,11 @@ msgid "" "distributions, meaning that a single pex file can be portable across Linux " "and macOS. pex is released under the Apache License 2.0." msgstr "" -"`pex `__是一个用于生成.pex(PythonEXecutable)" -"文件的库,它是可执行的Python环境,符合virtualenvs精神。pex是对:pep:`441`中概" -"述的思想的扩展,使部署Python应用程序像cp一样简单。pex文件甚至可以包括多个特定" -"平台的Python分布,这意味着一个pex文件可以跨Linux和macOS移植。pex是根据Apache " -"2.0许可证发布的。" +"`pex `__ 是一个用于生成 .pex(Python " +"EXecutable)文件的库,它是可执行的 Python 环境,符合 virtualenvs 精神。pex 是" +"对 :pep:`441` 中概述的思想的扩展,使部署 Python 应用程序像 cp 一样简单。pex " +"文件甚至可以包括多个特定平台的 Python 分布,这意味着一个 pex 文件可以跨 " +"Linux 和 macOS 移植。pex 是根据 Apache 2.0 许可证发布的。" #: ../source/discussions/deploying-python-applications.rst:129 msgid "Configuration management" @@ -790,12 +794,12 @@ msgid "" "be used to refer to a specific file that contains a certain version of a " "project." msgstr "" -"分发包(distribution package)是可安装的一段软件。通常情况下,它与 \"项目" -"\"(project)同义。当你输入 ``pip install pkg`` ,或在 ``pyproject.toml`` 文" -"件中写入 ``dependencies = [\"pkg\"]`` 时, ``pkg`` 就是一个分发包的名称。当你" -"在PyPI_(目前最广为人知的 Python 库和工具的集中安装源)上搜索或浏览时,所看到" -"的列表就是分发包的列表。另外,\"分发包\" 这个术语也可以用来指代包含项目特定版" -"本的某个文件。" +"分发包(distribution package)是可安装的一段软件。通常情况下,它与 \"项目\"(" +"project)同义。当你输入 ``pip install pkg``,或在 ``pyproject.toml`` 文件中写" +"入 ``dependencies = [\"pkg\"]`` 时,``pkg`` 就是一个分发包的名称。当你在 " +"PyPI_ 上搜索或浏览时(PyPI 是目前最广为人知的 Python 库和工具的集中安装源)," +"所看到的列表就是分发包的列表。另外,\"分发包\" 这个术语也可以用来指代包含项目" +"特定版本的某个文件。" #: ../source/discussions/distribution-package-vs-import-package.rst:24 msgid "" @@ -804,9 +808,9 @@ msgid "" "by the system package manager of the `Linux distribution `_, which " "is a different meaning." msgstr "" -"请注意,在 Linux 领域中,“分发软件包”通常缩写为 “distro package” 或简单称为 " -"“package”,指的是由 ` Linux 发行版 `_ 的系统包管理器提供的内容,这" -"与 Python 中的含义不同。" +"请注意,在 Linux 领域中,“分发软件包”通常缩写为 “distro package” 或简单称为 “" +"package”,指的是由 `Linux 发行版 `_ 的系统包管理器提供的内容,这与 " +"Python 中的含义不同。" #: ../source/discussions/distribution-package-vs-import-package.rst:31 msgid "What's an import package?" @@ -844,8 +848,8 @@ msgid "" "(or non-package module), with a matching name. For example, ``pip install " "numpy`` lets you ``import numpy``." msgstr "" -"大多数情况下,分发包会提供一个具有匹配名称的导入包(或非包模块)。例如," -"``pip install numpy``允许你``import numpy``。" +"大多数情况下,分发包会提供一个具有匹配名称的导入包(或非包模块)。例如" +",``pip install numpy`` 允许你 ``import numpy``。" #: ../source/discussions/distribution-package-vs-import-package.rst:53 msgid "" @@ -909,9 +913,9 @@ msgid "" "documentation) [#non-identifier-mod-name]_. In particular, they use " "underscores ``_`` as word separator and they are case-sensitive." msgstr "" -"导入包的名称应为有效的 Python 标识符(具体规则可以在 Python 文档中找" -"到::ref:``)[#non-identifier-mod-name]_ 。特别地,它们" -"使用下划线 ``_`` 作为单词分隔符,并且区分大小写。" +"导入包的名称应为有效的 Python 标识符(:ref:`具体规则 ` 可" +"以在 Python 文档中找到) [#non-identifier-mod-name]_。特别地,它们使用下划线 " +"``_`` 作为单词分隔符,并且区分大小写。" #: ../source/discussions/distribution-package-vs-import-package.rst:88 msgid "" @@ -923,11 +927,11 @@ msgid "" "``pip install awesome-package`` (the precise rules are given in " "the :ref:`name normalization specification `)." msgstr "" -"另一方面,分发包可以使用连字符 ``-`` 或下划线 ``_`` 。它们还可以包含点号 " -"``.`` ,这有时用于打包 :ref:`命名空间包` 的子" -"包。对于大多数用途,它们对大小写和 ``-`` 与 ``_`` 的区别不敏感,例如, ``pip " +"另一方面,分发包可以使用连字符 ``-`` 或下划线 ``_``。它们还可以包含点号 " +"``.``,这有时用于打包 :ref:`命名空间包 ` 的子包" +"。对于大多数用途,它们对大小写和 ``-`` 与 ``_`` 的区别不敏感,例如,``pip " "install Awesome_Package`` 和 ``pip install awesome-package`` 是相同的(具体规" -"则可以在 ```` 名称规范中找到)。" +"则见 :ref:`名称规范化规范 `)。" #: ../source/discussions/distribution-package-vs-import-package.rst:101 msgid "" @@ -964,7 +968,7 @@ msgid "" "compatibility with specific versions of non-Python software." msgstr "" "虽然 PyPI 和 Python 打包工具(例如::ref:`pip`)是分发 Python 包的主要方式," -"但它们也常常被包含在其他打包生态系统中。这些重新打包的工作统称为*下游*打包" +"但它们也常常被包含在其他打包生态系统中。这些重新打包的工作统称为 *下游* 打包" "(你自己的工作则称为 *上游* 打包),包括 Linux 发行版、Conda、Homebrew 和 " "MacPorts 等项目。它们通常旨在为无法仅通过 Python 打包工具处理的用例提供更好的" "支持,例如与特定操作系统的原生集成,或与特定版本的非 Python 软件确保兼容性。" @@ -1018,7 +1022,7 @@ msgid "" "such as Gentoo Linux, for example)." msgstr "" "请注意,下游构建不仅包括二进制文件的重新分发,还包括在用户系统上进行的源码构" -"建(例如在以源码优先的发行版中,像Gentoo Linux)。" +"建(例如在以源码优先的发行版中,像 Gentoo Linux)。" #: ../source/discussions/downstream-packaging.rst:51 msgid "Provide complete source distributions" @@ -1040,9 +1044,9 @@ msgid "" "the distribution. This is also true of pure Python packages that provide " "universal wheels. The reasons for using source distributions may include:" msgstr "" -"绝大多数下游打包者倾向于从源代码构建软件包,而不是使用上游提供的二进制软件" -"包。在某些情况下,使用源代码实际上是软件包被包含在发行版中的必要条件。这同样" -"适用于提供通用轮的纯 Python 软件包。使用源码分发的原因可能包括:" +"绝大多数下游打包者倾向于从源代码构建软件包,而不是使用上游提供的二进制软件包" +"。在某些情况下,使用源代码实际上是软件包被包含在发行版中的必要条件。这同样适" +"用于提供通用轮的纯 Python 软件包。使用源分发的原因可能包括:" #: ../source/discussions/downstream-packaging.rst:62 msgid "Being able to audit the source code of all packages." @@ -1085,8 +1089,8 @@ msgid "" "supported than e.g. using a Git clone. This can help users with poor " "Internet connectivity." msgstr "" -"获取单个文件通常比Git克隆等方式更高效、更可靠、更被支持。这有助于网络连接不佳" -"的用户。" +"获取单个文件通常比 Git 克隆等方式更高效、更可靠、更被支持。这有助于网络连接不" +"佳的用户。" #: ../source/discussions/downstream-packaging.rst:83 msgid "" @@ -1095,9 +1099,9 @@ msgid "" "time. For example, automatically generated Git archives do not guarantee " "this, as the compressed data may change if gzip is upgraded on the server." msgstr "" -"下游经常使用哈希来验证后续构建中源文件的真实性,而这需要文件长期保持二进制相" -"同。举个例子,自动生成的 Git 存档就不保证这一点,因为如果服务器上的 gzip 升级" -"了,那么压缩的数据可能会改变。" +"下游项目经常使用哈希值,在后续构建过程中校验源码文件的真实性,这就要求源码文" +"件随时间推移必须保持按比特完全一致。例如,自动生成的 Git 归档文件无法保证这一" +"点:如果服务端的 gzip 版本升级,压缩得到的数据就可能发生变化。" #: ../source/discussions/downstream-packaging.rst:88 msgid "" @@ -1118,8 +1122,8 @@ msgid "" "in the resulting builds." msgstr "" "明确发布存档文件可以确保在创建源归档时解决对版本控制系统元数据的任何依赖。例" -"如,自动生成的Git存档会省略所有提交标签信息,可能会导致生成的构建中版本详细信" -"息不正确。" +"如,自动生成的 Git 存档会省略所有提交标签信息,可能会导致生成的构建中版本详细" +"信息不正确。" #: ../source/discussions/downstream-packaging.rst:99 #: ../source/discussions/downstream-packaging.rst:179 @@ -1151,10 +1155,10 @@ msgid "" "files) should also be included, to help downstreams determine the needed " "dependencies, and check for changes in them." msgstr "" -"这一点仅适用于属于软件包本身的文件。下游打包过程与Python软件包管理器非常类" -"似,将提供您的软件包及其构建脚本所需的必要的Python依赖项、系统工具和外部库。" -"然而,还应包括列出这些依赖项的文件(例如,``requirements*.txt`` 文件),帮助" -"下游确定所需的依赖项,并检查其中是否有变化。" +"这一点仅适用于属于软件包本身的文件。下游打包过程与 Python 软件包管理器非常类" +"似,将提供你的软件包及其构建脚本所需的必要的 Python 依赖项、系统工具和外部库" +"。然而,还应包括列出这些依赖项的文件(例如,``requirements*.txt`` 文件),帮" +"助下游确定所需的依赖项,并检查其中是否有变化。" #: ../source/discussions/downstream-packaging.rst:115 msgid "" @@ -1168,11 +1172,11 @@ msgid "" "Alternatively, large files, such as test data, can be split into separate " "archives." msgstr "" -"一些项目对使用PyPI源分发的Python软件包管理器有关。他们不想用这些工具不使用的" -"文件来增加它们的大小,或者他们根本不想发布源分发,因为它们允许从源代码构建特" -"定项目的问题或完全无功能的后退。在这些情况下,一个好的折衷方案可能是发布一个" -"单独的源代码归档,以便在其他地方下游使用,例如将其附加到GitHub版本中。或者," -"大型文件,如测试数据,可以拆分成单独的档案。" +"一些项目对使用 PyPI 源分发的 Python 软件包管理器有关。他们不想用这些工具不使" +"用的文件来增加它们的大小,或者他们根本不想发布源分发,因为它们允许从源代码构" +"建特定项目的问题或完全无功能的后退。在这些情况下,一个好的折衷方案可能是发布" +"一个单独的源代码归档,以便在其他地方下游使用,例如将其附加到 GitHub 版本中。" +"或者,大型文件,如测试数据,可以拆分成单独的档案。" #: ../source/discussions/downstream-packaging.rst:124 msgid "" @@ -1184,10 +1188,10 @@ msgid "" "was taken by the cryptography_ project, with the large test vectors being " "split to cryptography-vectors_ package." msgstr "" -"另一方面,一些项目(例如NumPy_)决定在其已安装的软件包中包含测试。这具有允许" +"另一方面,一些项目(例如 NumPy_)决定在其已安装的软件包中包含测试。这具有允许" "用户在安装后运行测试的额外优势,例如在升级依赖项后检查回归。另一种方法是将测" -"试或测试数据分割成一个单独的 Python 软件包。加密_项目采取了这种方法,将大型测" -"试向量拆分为加密矢量_包。" +"试或测试数据分割成一个单独的 Python 软件包。cryptography_ 项目采取了这种方法" +",将大型测试向量拆分为 cryptography-vectors_ 包。" #: ../source/discussions/downstream-packaging.rst:132 msgid "" @@ -1208,7 +1212,7 @@ msgid "" "actually included. Understandably, this requires more effort, so it's fine " "not do that — downstream packagers will report any missing files promptly." msgstr "" -"理想情况下,您还可以使用源分发来运行测试、构建文档等,或者添加特定测试以确保" +"理想情况下,你还可以使用源分发来运行测试、构建文档等,或者添加特定测试以确保" "包含所有必要的文件。可以理解的是,这需要付诸更多努力,所以不这样也没啥——下游" "的打包工具会立即报告任何可能的缺失文件。" @@ -1231,7 +1235,7 @@ msgid "" "properly authenticate downloads, using the Internet is discouraged for a " "number of reasons:" msgstr "" -"即便不存在此类情况,且假设您已严格确保下载验证,出于多方面考虑,仍不建议在构" +"即便不存在此类情况,且假设你已严格确保下载验证,出于多方面考虑,仍不建议在构" "建过程中接入互联网:" #: ../source/discussions/downstream-packaging.rst:160 @@ -1280,9 +1284,9 @@ msgid "" "all of these files or allow provisioning them externally, and the Internet " "must not be used if the files are already present." msgstr "" -"若软件包在实施使用互联网的任何自定义 *backend* 构建操作(例如自动下载供应商依" -"赖或获取Git子模块),其源码分发包必须包含所有这些文件,或允许通过外部方式提供" -"这些文件。当这些文件已存在时不准使用互联网。" +"若软件包在实施任何使用互联网的自定义 *构建后端* 操作(例如自动下载内置依赖或" +"获取 Git 子模块),其源分发应当包含所有这些文件,或允许通过外部方式提供这些文" +"件。当这些文件已存在时不得使用互联网。" #: ../source/discussions/downstream-packaging.rst:187 msgid "" @@ -1292,9 +1296,9 @@ msgid "" "Downstreams use frontends that use local provisioning for Python " "dependencies." msgstr "" -"注意,本条要求不适用于在软件包元数据中指定,由*前端*在构建和安装过程中自动获" -"取 的 Python依赖项(如 :ref:`build` 或 :ref:`pip`)。下游环节使用的前端是通过" -"本地方式提供 Python 依赖项的。" +"注意,本条要求不适用于在软件包元数据中指定,由 *前端* 在构建和安装过程中自动" +"获取的 Python 依赖项(如 :ref:`build` 或 :ref:`pip`)。下游环节使用的前端是通" +"过本地方式提供 Python 依赖项的。" #: ../source/discussions/downstream-packaging.rst:192 msgid "" @@ -1324,8 +1328,8 @@ msgid "" "absolutely must *verify their authenticity* (usually against a hash), to " "protect against the file being substituted by a malicious party." msgstr "" -"同时请记住,若获取远程资源,您必须 *verify their authenticity*(通常核对哈希" -"值),以防文件被恶意方替换的风险。" +"同时请记住,若获取远程资源,你必须 *验证其真实性*,通常通过核对哈希值,以防文" +"件被恶意方替换。" #: ../source/discussions/downstream-packaging.rst:210 msgid "Support building against system dependencies" @@ -1337,8 +1341,8 @@ msgid "" "in C or C++. Trying to use the system versions of these dependencies in " "upstream packaging may cause a number of problems for end users:" msgstr "" -"某些Python项目包含非Python依赖项(例如使用C或C++编写的库)。在上游软件包构建" -"过程中尝试使用系统版本的这些依赖项,可能会给最终用户带来诸多问题:" +"某些 Python 项目包含非 Python 依赖项(例如使用 C 或 C++编写的库)。在上游软件" +"包构建过程中尝试使用系统版本的这些依赖项,可能会给最终用户带来诸多问题:" #: ../source/discussions/downstream-packaging.rst:219 msgid "" @@ -1347,9 +1351,9 @@ msgid "" "incompatible version is installed, the Python package may fail with errors " "that are not clear to inexperienced users, or even misbehave at runtime." msgstr "" -"发布的wheel包要求用户系统必须存在二进制兼容版本的依赖库。若该库缺失或安装了不" -"兼容的版本,Python软件包可能会因报错信息对入门用户不够清晰而运行失败,甚至可" -"能在运行时出现异常行为。" +"发布的 wheel 包要求用户系统必须存在二进制兼容版本的依赖库。若该库缺失或安装了" +"不兼容的版本,Python 软件包可能会因报错信息对入门用户不够清晰而运行失败,甚至" +"可能在运行时出现异常行为。" #: ../source/discussions/downstream-packaging.rst:224 msgid "" @@ -1357,8 +1361,8 @@ msgid "" "the dependency to be present, along with its development headers and other " "auxiliary files that some systems package separately from the library itself." msgstr "" -"从源码分发版进行构建时,不仅要求存在源码兼容版本的依赖项,还需要其开发头文件" -"及其他辅助文件——这些组件在某些操作系统中会与主程序库本身分开打包。" +"从源分发进行构建时,不仅要求存在源码兼容版本的依赖项,还需要其开发头文件及其" +"他辅助文件——这些组件在某些操作系统中会与主程序库本身分开打包。" #: ../source/discussions/downstream-packaging.rst:229 msgid "" @@ -1366,8 +1370,8 @@ msgid "" "be very hard. For example, the used Linux distribution may not provide the " "required version, or some other package may require an incompatible version." msgstr "" -"即便对于资深用户而言,安装兼容版本的依赖项也可能极为困难。例如,其所用的Linux" -"发行版可能未提供所需版本,亦或是其他软件包要求使用不兼容的版本。" +"即便对于资深用户而言,安装兼容版本的依赖项也可能极为困难。例如,其所用的 " +"Linux 发行版可能未提供所需版本,亦或是其他软件包要求使用不兼容的版本。" #: ../source/discussions/downstream-packaging.rst:234 msgid "" @@ -1376,9 +1380,9 @@ msgid "" "library to a newer version that breaks binary compatibility with the Python " "package, and requires user intervention to fix." msgstr "" -"Python软件包与其系统依赖项之间的链接关系并未被包管理系统记录。后续的系统更新" -"可能会将程序库升级至与Python软件包二进制不兼容的新版本,从而需要用户手动干预" -"修复。" +"Python 软件包与其系统依赖项之间的链接关系并未被包管理系统记录。后续的系统更新" +"可能会将程序库升级至与 Python 软件包二进制不兼容的新版本,从而需要用户手动干" +"预修复。" #: ../source/discussions/downstream-packaging.rst:239 msgid "" @@ -1388,9 +1392,9 @@ msgid "" "dependencies are also repackaged on PyPI, and can be declared as project " "dependencies like any other Python package." msgstr "" -"基于上述原因,您可以合理选择以下方案:静态链接依赖项,或在安装包中提供本地副" -"本。您也可以在源码分发版中内置依赖项。某些情况下,这些依赖项还会被重新打包至" -"PyPI,此时即可像声明普通Python包依赖那样将其列为项目依赖项。" +"基于上述原因,你可以合理选择以下方案:静态链接依赖项,或在安装包中提供本地副" +"本。你也可以在源分发中内置依赖项。某些情况下,这些依赖项还会被重新打包至 PyPI" +",此时即可像声明普通 Python 包依赖那样将其列为项目依赖项。" #: ../source/discussions/downstream-packaging.rst:245 msgid "" @@ -1408,8 +1412,8 @@ msgid "" "support that makes it easier for users of those systems to access upstream " "projects in their preferred format." msgstr "" -"许多情况下,可靠地在各组件间共享动态依赖项是下游打包生态系统的主要 " -"*purpose*。支持这种机制能使这些系统的用户更便捷地以其偏好的格式访问上游项目。" +"许多情况下,可靠地在各组件间共享动态依赖项是下游打包生态系统的主要 *目的*。支" +"持这种机制能使这些系统的用户更便捷地以其偏好的格式访问上游项目。" #: ../source/discussions/downstream-packaging.rst:253 msgid "" @@ -1449,8 +1453,8 @@ msgid "" "catastrophic failures (like suddenly crashing and losing data)." msgstr "" "静态链接与内置依赖可能导致同一进程加载多个不同版本的相同库(例如,尝试导入两" -"个链接至同一库不同版本的Python包)。这种情况有时能正常运行,但也可能引发从库" -"加载错误、微妙的运行时缺陷,到灾难性故障(如突然崩溃并丢失数据)等一系列问" +"个链接至同一库不同版本的 Python 包)。这种情况有时能正常运行,但也可能引发从" +"库加载错误、微妙的运行时缺陷,到灾难性故障(如突然崩溃并丢失数据)等一系列问" "题。" #: ../source/discussions/downstream-packaging.rst:273 @@ -1494,9 +1498,9 @@ msgid "" "projects and downstream repackagers, not to suggest upstream projects take " "on tasks that downstream repackagers are better equipped to handle." msgstr "" -"上游项目将用系统依赖项构建的 *testing* 工作交由下游重打包者处理是合理的,这些" -"指导原则旨在促进上游项目与下游重打包者之间更高效的协作,而非建议上游项目承担" -"本应由更专业的下游重打包者完成的任务。" +"上游项目将用系统依赖项构建的 *测试* 工作交由下游重打包者处理是合理的,这些指" +"导原则旨在促进上游项目与下游重打包者之间更高效的协作,而非建议上游项目承担本" +"应由更专业的下游重打包者完成的任务。" #: ../source/discussions/downstream-packaging.rst:300 msgid "Support downstream testing" @@ -1509,8 +1513,8 @@ msgid "" "minimal smoke testing to comprehensive runs of the complete test suite. " "There can be various reasons for doing this, for example:" msgstr "" -"各类下游项目会对打包后的Python项目进行不同程度的测试。根据具体情况,测试范围" -"可能从最小化的冒烟测试到完整测试套件的全面执行。进行此类测试可能出于多种原" +"各类下游项目会对打包后的 Python 项目进行不同程度的测试。根据具体情况,测试范" +"围可能从最小化的冒烟测试到完整测试套件的全面执行。进行此类测试可能出于多种原" "因,例如:" #: ../source/discussions/downstream-packaging.rst:310 @@ -1520,19 +1524,21 @@ msgstr "验证下游包没有引入任何漏洞。" #: ../source/discussions/downstream-packaging.rst:312 msgid "" "Testing on additional platforms that are not covered by upstream testing." -msgstr "" +msgstr "在未被上游测试所覆盖的第三方平台上进行的测试。" #: ../source/discussions/downstream-packaging.rst:314 msgid "" "Finding subtle bugs that can only be reproduced with particular hardware, " "system package versions, and so on." -msgstr "" +msgstr "找出那些只在特定硬件、系统包版本等环境下才能重现的隐蔽漏洞。" #: ../source/discussions/downstream-packaging.rst:317 msgid "" "Testing the released package against newer (or older) dependency versions " "than the ones present during upstream release testing." msgstr "" +"对已发布的软件包进行测试时,使用比上游发布测试时所采用的依赖版本更新(或更" +"旧)的版本。" #: ../source/discussions/downstream-packaging.rst:320 msgid "" @@ -1541,12 +1547,16 @@ msgid "" "different installed packages, including packages that are not dependencies " "of your package, but nevertheless can cause issues." msgstr "" +"在尽可能接近生产环境的环境中测试该软件包。这可以检测出由不同已安装包之间复杂" +"交互所导致的问题,包括那些并非你软件包依赖项、但仍然可能引发问题的包。" #: ../source/discussions/downstream-packaging.rst:325 msgid "" "Testing the released package against newer Python versions (including newer " "point releases), or less tested Python implementations such as PyPy." msgstr "" +"针对较新版本的 Python(包括新的次要/补丁版本),或测试覆盖较少的 Python 实现" +"(如 PyPy),对已发布的软件包进行测试。" #: ../source/discussions/downstream-packaging.rst:328 msgid "" @@ -1558,6 +1568,10 @@ msgid "" "downstream packagers are doing their best to double-check their results, and " "help upstream maintainers triage and fix the bugs that they reported." msgstr "" +"诚然,下游测试有时可能会产生误报,或者报告一些上游项目无意支持的场景。然而," +"更多时候它确实能提前预警问题,或发现那些否则会给上游项目用户带来麻烦的隐蔽缺" +"陷。尽管错误确实难免,但绝大多数下游打包者都在尽力反复核验自己的结果,并帮助" +"上游维护者对报告的问题进行诊断和修复。" #: ../source/discussions/downstream-packaging.rst:339 msgid "" @@ -1568,12 +1582,15 @@ msgid "" "use for everyone, not just downstream packagers. Some specific suggestions " "are:" msgstr "" +"上游项目可以做许多事情来帮助下游重新打包者高效、有效地测试他们的软件包,其中" +"就包括上文提到的一些建议。这些改进通常能让测试套件对所有人来说都更可靠、更易" +"用,而不仅仅是对下游打包者。以下是一些具体建议:" #: ../source/discussions/downstream-packaging.rst:345 msgid "" "Include the test files and fixtures in the source distribution, or make it " "possible to easily download them separately." -msgstr "" +msgstr "在源分发中包含测试文件及测试夹具,或者使其能够单独轻松下载。" #: ../source/discussions/downstream-packaging.rst:348 msgid "" @@ -1582,6 +1599,9 @@ msgid "" "modifications performed during testing and temporary test files may end up " "being part of the installed package!" msgstr "" +"测试期间不要向包目录中写入任何内容。下游测试环境有时会在已安装的包之上直接运" +"行测试,而测试过程中所做的修改以及临时测试文件最终可能会被误纳入已安装的包" +"中!" #: ../source/discussions/downstream-packaging.rst:353 msgid "" @@ -1591,6 +1611,10 @@ msgid "" "Use pytest-socket_ to verify that your tests work offline. This often makes " "your own test workflows faster and more reliable as well." msgstr "" +"使测试套件能够在离线状态下工作。使用诸如 responses_ 或 vcrpy_ 之类的包来模拟" +"网络交互。如果无法做到,则应提供便捷的方式禁用需要互联网访问的测试,例如通过 " +"pytest_ 标记。可使用 pytest-socket_ 来验证你的测试确实在离线状态下运行。这样" +"做通常也能让你的测试工作流更快、更可靠。" #: ../source/discussions/downstream-packaging.rst:359 msgid "" @@ -1599,6 +1623,8 @@ msgid "" "system services such as databases — in an extreme case, you could crash a " "production service!" msgstr "" +"让测试无需专门配置即可运行,或将必要配置作为测试固件的一部分来执行。切勿假设" +"你可以连接到数据库等系统服务——在极端情况下,这可能导致生产服务崩溃!" #: ../source/discussions/downstream-packaging.rst:364 msgid "" @@ -1606,6 +1632,8 @@ msgid "" "well. Either skip them if the needed packages are not installed, or add " "markers to make deselecting easy." msgstr "" +"如果你的软件包有可选依赖,那么这些依赖对应的测试也应当是可选的。如果所需的包" +"未安装,则跳过这些测试;或者添加标记,以便于轻松取消选择它们。" #: ../source/discussions/downstream-packaging.rst:368 msgid "" @@ -1613,6 +1641,8 @@ msgid "" "include e.g. significant space usage, significant memory usage, long " "runtime, incompatibility with parallel testing." msgstr "" +"更一般地说,为有特殊要求的测试添加标记。例如,这类测试可能会占用大量磁盘空" +"间、消耗大量内存、运行耗时较长,或是与并行测试不兼容。" #: ../source/discussions/downstream-packaging.rst:372 msgid "" @@ -1621,6 +1651,9 @@ msgid "" "dependency versions. Assert for warnings using ``pytest.warns()`` rather " "than ``pytest.raises()``!" msgstr "" +"不要假定测试套件会使用 ``-Werror`` 运行。下游项目往往需要禁用该选项,因为它会" +"产生误报,例如依赖库版本更新就可能导致该问题。请使用 ``pytest.warns()`` 对警" +"告进行断言,而不要使用 ``pytest.raises()`` !" #: ../source/discussions/downstream-packaging.rst:377 msgid "" @@ -1630,6 +1663,9 @@ msgid "" "its advantages, but you want to have static test cases for completeness as " "well." msgstr "" +"请力求让你的测试套件可靠且可复现。避免不稳定测试。不要依赖特定平台细节,不要" +"依赖浮点计算的精确结果、操作执行时序等内容。模糊测试固然有其优势,但为保证完" +"备性,你同样应当编写静态测试用例。" #: ../source/discussions/downstream-packaging.rst:383 msgid "" @@ -1641,6 +1677,10 @@ msgid "" "upgraded or the system is under load, without actually affecting the package " "itself." msgstr "" +"请按照用途拆分测试,并让无关或存在问题的测试类别可以方便地跳过。下游测试的主" +"要目的是确保软件包本身能够正常工作,因此下游项目通常并不关心代码覆盖率检查、" +"代码格式化、类型检查或是运行基准测试这类任务。当依赖升级或者系统处于高负载" +"时,这类测试可能会失败,但并不会真正影响软件包本身的功能。" #: ../source/discussions/downstream-packaging.rst:390 msgid "" @@ -1649,6 +1689,8 @@ msgid "" "them all takes a lot of time. Using pytest-xdist_ can help them avoid " "bottlenecks." msgstr "" +"如果你的测试套件运行耗时较长,请支持并行测试。下游项目通常要维护大量软件包," +"全部测试会消耗大量时间。使用 pytest‑xdist_ 可以帮助他们消除测试瓶颈。" #: ../source/discussions/downstream-packaging.rst:395 msgid "" @@ -1661,6 +1703,12 @@ msgid "" "``pytest``: ``pytest`` is able to find and execute almost all test cases " "that are compatible with the standard library's ``unittest`` test discovery." msgstr "" +"在理想情况下,请支持通过 ``pytest`` 运行你的测试套件。pytest_ 拥有大量对下游" +"项目十分实用的命令行参数,例如可以便捷地剔除指定测试、重跑不稳定测试(借助 " +"pytest-rerunfailures_)、设置超时防止测试挂起(借助 pytest-timeout_),或是并" +"行执行测试(借助 pytest-xdist_)。请注意:测试套件无需用 ``pytest`` *编写*," +"也能够用 ``pytest`` *执行*;``pytest`` 几乎能够发现并运行所有兼容标准库 " +"``unittest`` 测试发现机制的测试用例。" #: ../source/discussions/downstream-packaging.rst:409 msgid "Aim for stable releases" @@ -1673,6 +1721,9 @@ msgid "" "upgrades to users with higher stability needs. These users often prefer to " "trade having the newest features available for lower risk of issues." msgstr "" +"许多下游项目除主软件包源之外还提供稳定发布渠道。设置这些渠道的目的,是为对稳" +"定性要求较高的用户提供更保守的版本升级。这类用户往往宁愿放弃最新功能,换取更" +"低的故障风险。" #: ../source/discussions/downstream-packaging.rst:419 msgid "" @@ -1683,6 +1734,10 @@ msgid "" "available in testing for a month, and being tested against the versions of " "its dependencies that are marked stable at the time." msgstr "" +"尽管具体策略各有差异,但将软件包新版本纳入稳定发布渠道的一项重要标准是:该版" +"本已经在测试渠道中发布一段时间,且不存在已知的严重功能退化问题。例如,在 " +"Gentoo Linux 中,软件包通常需要在测试渠道中发布满一个月,并且针对当时标记为稳" +"定版本的依赖项完成测试后,才会被标记为稳定。" #: ../source/discussions/downstream-packaging.rst:426 msgid "" @@ -1692,24 +1747,29 @@ msgid "" "a need to resolve it. In this case, they need to consider various options, " "such as:" msgstr "" +"但也存在需要更快速处理的情形。例如,如果稳定渠道当前提供的版本中发现安全漏洞" +"或重大缺陷,下游项目就需要着手解决该问题。此时他们需要权衡多种可选方案,例" +"如:" #: ../source/discussions/downstream-packaging.rst:431 msgid "putting a new version in the stable channel early," -msgstr "" +msgstr "提前将新版本纳入稳定渠道," #: ../source/discussions/downstream-packaging.rst:433 msgid "adding patches to the version currently published," -msgstr "" +msgstr "为当前已发布的版本应用补丁," #: ../source/discussions/downstream-packaging.rst:435 msgid "or even downgrading the stable channel to an earlier release." -msgstr "" +msgstr "甚至将稳定渠道降级至更早的发行版本。" #: ../source/discussions/downstream-packaging.rst:437 msgid "" "Each of these options involves certain risks and a certain amount of work, " "and packagers needs to weigh them to determine the course of action." msgstr "" +"上述每一种方案都伴随着相应的风险与工作量,打包维护者需要权衡利弊来确定处理方" +"案。" #: ../source/discussions/downstream-packaging.rst:443 msgid "" @@ -1717,6 +1777,8 @@ msgid "" "stable release channels. These actions often are beneficial to the package's " "users as well. Some specific suggestions are:" msgstr "" +"上游项目可以采取一些措施,让自身工作流适配稳定发布渠道。这些做法通常也会对软" +"件包的用户带来益处。部分具体建议如下:" #: ../source/discussions/downstream-packaging.rst:447 msgid "" @@ -1724,6 +1786,8 @@ msgid "" "released rarely often bring significant changes with every release, and a " "higher risk of accidental regressions." msgstr "" +"根据代码变更的幅度调整版本发布频率。低频发布的软件包往往每次更新都会引入大量" +"改动,出现意外功能退化的风险也会更高。" #: ../source/discussions/downstream-packaging.rst:451 msgid "" @@ -1731,12 +1795,16 @@ msgid "" "there are known bug fixes merged already, consider making a new release " "before merging feature branches." msgstr "" +"如果可能,请避免将错误修复与新功能混在一起提交。特别地,如果已有已知的错误修" +"复被合并,请考虑在合并功能分支之前先发布一个新版本。" #: ../source/discussions/downstream-packaging.rst:455 msgid "" "Consider making prereleases after major changes, to provide more testing " "opportunities for users and downstreams willing to opt-in." msgstr "" +"考虑在重大变更之后发布预发布版本,为愿意选择加入的用户和下游提供更多测试机会" +"。" #: ../source/discussions/downstream-packaging.rst:458 msgid "" @@ -1745,6 +1813,8 @@ msgid "" "are released separately. For example, Django_ currently maintains three " "release branches in addition to main." msgstr "" +"如果你的项目开发节奏非常密集,可以考虑拆分出一个或多个包含更保守提交子集、且" +"单独发布的分支。例如,Django_ 目前除 main 之外还维护着三个发布分支。" #: ../source/discussions/downstream-packaging.rst:463 msgid "" @@ -1752,12 +1822,16 @@ msgid "" "making additional patch releases with minimal changes to the previous " "version, especially when a security vulnerability is discovered." msgstr "" +"即使你不想永久维护额外的分支,也可以考虑为上一版本发布仅包含最小改动的额外补" +"丁版本,尤其是在发现安全漏洞时。" #: ../source/discussions/downstream-packaging.rst:467 msgid "" "Split your changes into focused commits that address one problem at a time, " "to make it easier to cherry-pick changes to earlier releases when necessary." msgstr "" +"把你的改动拆分成目标明确、每次只解决一个问题的提交,以便在必要时更轻松地把改" +"动 cherry-pick 到较早的发布版本。" #: ../source/discussions/index.rst:4 msgid "" @@ -1897,8 +1971,8 @@ msgid "" "For more on \"Abstract\" vs \"Concrete\" requirements, see https://" "caremad.io/posts/2013/07/setup-vs-requirement/." msgstr "" -"抽象 (Abstract) \"与 \"具体 (Concrete)\"要求的更多信息,请参阅 https://" -"caremad.io/posts/2013/07/setup-vs-requirement/ 。" +"“抽象 (Abstract)”与“具体 (Concrete)”要求的更多信息,请参阅 https://" +"caremad.io/posts/2013/07/setup-vs-requirement/。" #: ../source/discussions/package-formats.rst:5 msgid "Package Formats" @@ -1921,12 +1995,12 @@ msgid "" "purposes. When publishing a package on PyPI (or elsewhere), you should " "always upload both an sdist and one or more wheel." msgstr "" -"在像 PyPI_ 这样的包索引中,你会找到两种格式的文件:**源代码分发包**(简称 " -"**sdists**)和 **二进制分发包**,通常称为 **wheels**。例如,`PyPI 的 pip " -"23.3.1 页面 `_ 允许你下载两个文件,``pip-23.3.1.tar.gz`` 和 " -"``pip-23.3.1-py3-none-any.whl``。前者是一个 sdist,后者是一个 wheel。如下面所" -"解释的,这两者有不同的用途。当在 PyPI(或其他地方)发布包时,你应该始终上传一" -"个 sdist 和一个或多个 wheel 文件。" +"在像 PyPI_ 这样的包索引中,你会找到两种格式的文件:**源分发**,简称 " +"**sdists**;以及 **二进制分发包**,通常称为 **wheels**。例如,`PyPI 的 pip " +"23.3.1 页面 `_ 允许你下载两个文件,``pip-23.3.1.tar.gz`` 和 ``pip-" +"23.3.1-py3-none-any.whl``。前者是一个 sdist,后者是一个 wheel。如下面所解释的" +",这两者有不同的用途。当在 PyPI(或其他地方)发布包时,你应该始终上传一个 " +"sdist 和一个或多个 wheel 文件。" #: ../source/discussions/package-formats.rst:21 msgid "What is a source distribution?" @@ -1942,11 +2016,11 @@ msgid "" "INFO`` file follows the format specified in :ref:`core-metadata` and is not " "intended to be written by hand [#core-metadata-format]_." msgstr "" -"从概念上讲,源代码分发包是原始形式的源代码归档。具体来说,sdist 是一个 " -"``.tar.gz`` 压缩包,包含源代码以及一个额外的特殊文件 ``PKG-INFO`` ,该文件存" -"储项目的元数据。这个文件的存在帮助打包工具提高效率,因为它不需要自己计算元数" -"据。 ``PKG-INFO`` 文件遵循 :ref:`core-metadata` 中规定的格式,并不打算手动编" -"写 [#core-metadata-format]_ 。" +"从概念上讲,源分发是原始形式的源代码归档。具体来说,sdist 是一个 ``.tar.gz`` " +"压缩包,包含源代码以及一个额外的特殊文件 ``PKG-INFO`` ,该文件存储项目的元数" +"据。这个文件的存在帮助打包工具提高效率,因为它不需要自己计算元数据。 ``PKG-" +"INFO`` 文件遵循 :ref:`core-metadata` 中规定的格式,并不打算手动编写 [#core-" +"metadata-format]_ 。" #: ../source/discussions/package-formats.rst:31 msgid "" @@ -1971,10 +2045,10 @@ msgid "" "them over, e.g., pulling from a Git repository." msgstr "" "Sdists 在打包生态系统中有多个用途。当标准的 Python 包安装工具 :ref:`pip` 无法" -"找到要安装的 wheel 时,它会回退到下载源代码分发包,从中编译一个 wheel 并安装" -"这个 wheel。此外,sdists 经常作为下游打包者(如 Linux 发行版、Conda、macOS 上" -"的 Homebrew 和 MacPorts 等)的包源,因为各种原因,他们可能会更倾向于使用源代" -"码分发包,而不是例如从 Git 仓库中拉取代码。" +"找到要安装的 wheel 时,它会回退到下载源分发,从中编译一个 wheel 并安装这个 " +"wheel。此外,sdists 经常作为下游打包者(如 Linux 发行版、Conda、macOS 上的 " +"Homebrew 和 MacPorts 等)的包源,因为各种原因,他们可能会更倾向于使用源分发," +"而不是例如从 Git 仓库中拉取代码。" #: ../source/discussions/package-formats.rst:44 msgid "" @@ -1989,7 +2063,7 @@ msgid "" "If you want technical details on the sdist format, read the :ref:`sdist " "specification `." msgstr "" -"如果您需要有关 sdist 格式的技术细节,请阅读::ref:`sdist specification " +"如果你需要有关 sdist 格式的技术细节,请阅读::ref:`sdist specification " "`。" #: ../source/discussions/package-formats.rst:55 @@ -2086,11 +2160,11 @@ msgid "" msgstr "" "乍一看,你可能会想,\"纯粹的基础\" Python 项目是否真的需要 wheels。请记住,由" "于 sdists 的灵活性,像 pip 这样的安装工具不能直接从 sdists 安装——它们需要首先" -"通过调用 sdist 指定的 :term:`build backend` 来构建一个 wheel(构建后端在构建 " -"wheel 时可能会执行各种转换,例如编译 C 扩展)。因此,即使是纯 Python 项目,你" -"也应该始终将 *sdist* 和 *wheel* 都上传到 PyPI 或其他包索引。这会使你的用户安" -"装速度更快,因为 wheel 可以直接安装。通过只包含必须安装的文件,wheels 也使得" -"下载文件更小。" +"通过调用 sdist 指定的 :term:`构建后端 ` 来构建一个 wheel(构建" +"后端在构建 wheel 时可能会执行各种转换,例如编译 C 扩展)。因此,即使是纯 " +"Python 项目,你也应该始终将 *sdist* 和 *wheel* 都上传到 PyPI 或其他包索引。这" +"会使你的用户安装速度更快,因为 wheel 可以直接安装。通过只包含必须安装的文件," +"wheels 也使得下载文件更小。" #: ../source/discussions/package-formats.rst:102 msgid "" @@ -2189,16 +2263,16 @@ msgid "" "The egg format was introduced by :ref:`setuptools` in 2004, whereas the " "wheel format was introduced by :pep:`427` in 2012." msgstr "" -":term:`Egg` 格式是由 :ref:`setuptools` 在2004年引入的,而 :term:`Wheel` 格式" -"是由 :pep:`427` 在2012年引入。" +"``egg`` 格式是由 :ref:`setuptools` 在 2004 年引入的,而 ``wheel`` 格式是由 " +":pep:`427` 在 2012 年引入。" #: ../source/discussions/package-formats.rst:149 msgid "" "Wheel has an :doc:`official standard specification `. Egg did not." msgstr "" -"Wheel 有一个 :doc:`official standard specification `,而 Egg 没有。" +"Wheel 有一个 :doc:`官方标准规范 " +"`,而 Egg 没有。" #: ../source/discussions/package-formats.rst:152 msgid "" @@ -2237,9 +2311,8 @@ msgid "" "single wheel archive can indicate its compatibility with a number of Python " "language versions and implementations, ABIs, and system architectures." msgstr "" -"Wheel 有一个 :ref:`richer file naming convention `。一" -"个单一的 wheel 档案可以表明它与许多 Python 语言版本和实现、ABI 以及系统架构的" -"兼容性。" +"Wheel 有一个 :ref:`更丰富的文件命名惯例 `。一个单一的 " +"wheel 档案可以表明它与许多 Python 语言版本和实现、ABI 以及系统架构的兼容性。" #: ../source/discussions/package-formats.rst:168 msgid "" @@ -2277,9 +2350,8 @@ msgid "" "format, although :ref:`this is not officially supported at this time `." msgstr "" -"在某些情况下,wheels 可以作为可导入的运行时格式使用,尽管 :ref:`this is not " -"officially supported at this time `。" +"在某些情况下,wheels 可以作为可导入的运行时格式使用,尽管 :ref:`目前尚未得到" +"官方支持 `。" #: ../source/discussions/pip-vs-easy-install.rst:6 msgid "pip vs easy_install" @@ -2293,10 +2365,10 @@ msgid "" "Package Index (PyPI)>` using requirement specifiers, and automatically " "installing dependencies." msgstr "" -":ref:`easy_install `,现`已弃用`_,作为 :ref:`setuptools` 的一" +":ref:`easy_install `,现 `已弃用`_,作为 :ref:`setuptools` 的一" "部分于 2004 年发布。当时值得注意的是,使用需求说明符从 :term:`PyPI ` 安装 :term:`packages `,并自动安" -"装依赖项。" +"Package Index (PyPI)>` 安装 :term:`分发包 `,并自动安装" +"依赖项。" #: ../source/discussions/pip-vs-easy-install.rst:14 msgid "" @@ -2413,7 +2485,7 @@ msgstr "有 [1]_" #: ../source/discussions/pip-vs-easy-install.rst:54 msgid ":ref:`Multi-version Installs`" -msgstr ":ref:`多版本安装`" +msgstr ":ref:`多版本安装 `" #: ../source/discussions/pip-vs-easy-install.rst:57 msgid "Exclude scripts during install" @@ -2456,11 +2528,11 @@ msgid "" "its :file:`noxfile.py` configuration file, or *pytest* " "and :file:`conftest.py`)." msgstr "" -"Setuptools 完全可以作为打包 Python 项目的 :term:`构建后端` 使用。" -"而 :file:`setup.py` 是一个有效的 :ref:`setuptools` 配置文件,它恰好是用 " -"Python 编写的,而不是使用 *TOML* (例如,其他工具如 *nox* 及" -"其 :file:`noxfile.py` 配置文件,或 *pytest* 及其 :file:`conftest.py` 文件也采" -"用类似做法)。" +"Setuptools 完全可以作为打包 Python 项目的 :term:`构建后端 ` 使" +"用。而 :file:`setup.py` 是一个有效的 :ref:`setuptools` 配置文件,它恰好是用 " +"Python 编写的,而不是使用像 *TOML* 这样的格式(其他工具如 *nox* 及其 " +":file:`noxfile.py` 配置文件,或 *pytest* 及其 :file:`conftest.py` 文件也采用" +"类似做法)。" #: ../source/discussions/setup-py-deprecated.rst:18 msgid "" @@ -2533,9 +2605,9 @@ msgid "" "what ``python -m build`` does. If necessary the ``--sdist`` and ``--wheel`` " "options can be used to generate only one or the other." msgstr "" -"这需要 :ref:`build` 依赖项。建议始终构建并发布项目的源代码分发包和 wheel,这" -"正是 ``python -m build`` 所做的。如果需要,可以使用 ``--sdist`` 和 ``--" -"wheel`` 选项仅生成其中之一。" +"这需要 :ref:`build` 依赖项。建议始终构建并发布项目的源分发和 wheel,这正是 " +"``python -m build`` 所做的。如果需要,可以使用 ``--sdist`` 和 ``--wheel`` 选" +"项仅生成其中之一。" #: ../source/discussions/setup-py-deprecated.rst:52 msgid "" @@ -2932,14 +3004,14 @@ msgid "" "attribute in a particular module, such as :file:`__init__.py`. The build " "system can then extract it from the runtime location at build time." msgstr "" -"版本字符串可以被硬编码到源代码中——可以是在一个特殊用途的文件中,例" -"如 :file:`_version.txt`(该文件必须作为项目源代码分发包的一部分进行发布),或" -"者作为特定模块中的一个属性,例如 :file:`__init__.py` 。构建系统随后可以在构建" -"时从运行时位置提取它。" +"版本字符串可以被硬编码到源代码中——可以是在一个特殊用途的文件中,例如 " +":file:`_version.txt` 文件(该文件必须作为项目源分发的一部分进行发布),或者作" +"为特定模块中的一个属性,例如 :file:`__init__.py` 。构建系统随后可以在构建时从" +"运行时位置提取它。" #: ../source/discussions/single-source-version.rst:38 msgid "Consult your build system's documentation for their recommended method." -msgstr "请查阅您的构建系统文档以了解其推荐的方法。" +msgstr "请查阅你的构建系统文档以了解其推荐的方法。" #: ../source/discussions/single-source-version.rst:40 msgid "" @@ -2987,10 +3059,8 @@ msgstr "" "pyproject_config.html#dynamic-metadata>`_" #: ../source/discussions/single-source-version.rst:62 -msgid "`setuptools_scm `_" -msgstr "" -"`setuptools_scm 提取 Python 包版本 `_" +msgid "`setuptools_scm `_" +msgstr "`setuptools_scm `_" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 msgid "src layout vs flat layout" @@ -3026,7 +3096,7 @@ msgstr "以下详解 src 布局和平坦布局之间重要的行为差异:" msgid "" "The src layout requires installation of the project to be able to run its " "code, and the flat layout does not." -msgstr "src布局需要安装项目才能运行其代码,而平面布局则不需要。" +msgstr "src 布局需要安装项目才能运行其代码,而平面布局则不需要。" #: ../source/discussions/src-layout-vs-flat-layout.rst:51 msgid "" @@ -3035,15 +3105,15 @@ msgid "" "` is used for development and a " "regular installation is used for testing)." msgstr "" -"这意味着 `src` 布局在项目的开发工作流程中涉及一个额外的步骤(通常,在开发中使" -"用 :doc:`editable installation ` ,在" -"测试中使用常规安装)。" +"这意味着 src 布局在项目的开发工作流程中涉及一个额外的步骤(通常情况下, " +":doc:`可编辑安装 ` 用于开发,常规安装" +"用于测试)。" #: ../source/discussions/src-layout-vs-flat-layout.rst:56 msgid "" "The src layout helps prevent accidental usage of the in-development copy of " "the code." -msgstr "src布局可以帮助避免意外地使用开发中的代码副本。" +msgstr "src 布局可以帮助避免意外地使用开发中的代码副本。" #: ../source/discussions/src-layout-vs-flat-layout.rst:59 msgid "" @@ -3055,7 +3125,7 @@ msgid "" "packaging tooling, which could result in files not being included in a " "distribution." msgstr "" -"Python解释器将当前工作目录设为第一导入路径。这意味着如果在当前工作目录中存在" +"Python 解释器将当前工作目录设为第一导入路径。这意味着如果在当前工作目录中存在" "与安装的包同名的包时将会使用当前目录的包。这可能会导致项目打包工具被错误地配" "置,进而导致文件不被包含在发行版本。" @@ -3065,8 +3135,8 @@ msgid "" "separate from the root directory of the project, ensuring that the installed " "copy is used." msgstr "" -"src布局有助于避免这种情况,它将导入包保存在与项目根目录不同的目录中,确保使用" -"已安装的副本。" +"src 布局有助于避免这种情况,它将导入包保存在与项目根目录不同的目录中,确保使" +"用已安装的副本。" #: ../source/discussions/src-layout-vs-flat-layout.rst:70 msgid "" @@ -3074,8 +3144,8 @@ msgid "" "` is only able to import files that " "were meant to be importable." msgstr "" -"`src` 布局有助于确保 :doc:`editable installation ` 仅能导入那些本应可导入的文件。" +"src 布局有助于确保 :doc:`可编辑安装 ` " +"仅能导入那些本应可导入的文件。" #: ../source/discussions/src-layout-vs-flat-layout.rst:74 msgid "" @@ -3099,7 +3169,7 @@ msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:86 msgid "Running a command-line interface from source with src-layout" -msgstr "从源代码使用 `src` 布局中运行命令行界面" +msgstr "使用 src 布局从源代码运行命令行界面" #: ../source/discussions/src-layout-vs-flat-layout.rst:88 msgid "" @@ -3111,16 +3181,16 @@ msgid "" "the package folder to Python's :py:data:`sys.path` when called via " "its :file:`__main__.py` file:" msgstr "" -"由于前述的 `src` 布局的特点,命令行界面不能直接从 :term:`source tree " -"` 运行,而需要将包安装为 :doc:`Development Mode " -"` 以便进行测试。由于在某些情况下这可能" -"不太实际,一个解决方法是在通过其 :file:`__main__.py` 文件调用时,将包文件夹添" -"加到 Python 的 :py:data:`sys.path` 中:" +"由于前述 src 布局的特点,命令行界面不能直接从 :term:`源码树 ` 运行,而需要以 :doc:`开发模式 " +"` 安装包以便进行测试。由于某些情况下这可能不现实,一个变通方法是在通过其 " +":file:`__main__.py` 文件调用时,将包文件夹添加到 Python 的 " +":py:data:`sys.path` 前面:" #: ../source/discussions/versioning.rst:6 #: ../source/specifications/simple-repository-api.rst:358 msgid "Versioning" -msgstr "版本" +msgstr "版本控制" #: ../source/discussions/versioning.rst:8 msgid "This discussion covers all aspects of versioning Python packages." @@ -3139,10 +3209,10 @@ msgid "" "the :ref:`specification of version specifiers `. Here " "are some examples of version numbers [#version-examples]_:" msgstr "" -"不同的 Python 项目可能根据各自的需求使用不同的版本控制方案,但为了与" -"像 :ref:`pip` 这样的工具兼容,所有这些项目都需要遵循一个灵活的版本标识符格" -"式,权威参考是 :ref:`specification of version specifiers ` 。以下是一些版本号的示例 [#version-examples]_ :" +"不同的 Python 项目可能根据各自的需求使用不同的版本控制方案,但为了与像 " +":ref:`pip` 这样的工具兼容,所有这些项目都需要遵循一个灵活的版本标识符格式,权" +"威参考是 :ref:`版本说明符规范 ` 。以下是一些版本号的示例 " +"[#version-examples]_ :" #: ../source/discussions/versioning.rst:21 msgid "A simple version (final release): ``1.2.0``" @@ -3330,20 +3400,19 @@ msgid "" "equivalent to ``name >= X.Y.Z, == X.Y.*``, i.e., it requires at least X.Y.Z " "and allows a later release with same X and Y but higher Z." msgstr "" -"对于那些确实使用严格语义版本控制的项目,这种方法允许用户使" -"用 :ref:`compatible release version specifiers ` ,并使用 ``~=`` 运算符。例如, ``name ~= X.Y`` 大致等价" -"于 ``name >= X.Y, == X.*`` ,即它要求至少是 X.Y 版本,并允许任何 X 不变且 Y " -"较大的后续版本。同样, ``name ~= X.Y.Z`` 大致等价于 ``name >= X.Y.Z, == " -"X.Y.*`` ,即要求至少是 X.Y.Z 版本,并允许任何 X 和 Y 相同但 Z 较大的后续版" -"本。" +"对于那些确实使用严格语义版本控制的项目,这种方法允许用户使用 :ref:`兼容发布版" +"本说明符 ` ,并使用 ``~=`` 运算符。例" +"如, ``name ~= X.Y`` 大致等价于 ``name >= X.Y, == X.*`` ,即它要求至少是 X.Y " +"版本,并允许任何 X 不变且 Y 较大的后续版本。同样, ``name ~= X.Y.Z`` 大致等价" +"于 ``name >= X.Y.Z, == X.Y.*`` ,即要求至少是 X.Y.Z 版本,并允许任何 X 和 Y " +"相同但 Z 较大的后续版本。" #: ../source/discussions/versioning.rst:113 msgid "" "Python projects adopting semantic versioning should abide by clauses 1-8 of " "the `Semantic Versioning 2.0.0 specification `_." msgstr "" -"采用语义版本控制的 Python 项目应遵守 `语义版本控制 2.0.0 规范 ` 的" +"采用语义版本控制的 Python 项目应遵守 `语义版本控制 2.0.0 规范 `_ 的" "第 1-8 条。" #: ../source/discussions/versioning.rst:116 @@ -3381,8 +3450,8 @@ msgid "" "`_ (CalVer), is that it is straightforward to tell how old the base " "feature set of a particular release is given just the version number." msgstr "" -"基于日期的版本控制,或称为`calendar versioning `_ (CalVer) ,的一个" -"主要优势是,通过版本号就可以直接判断特定版本的基础功能集已经有多旧。" +"基于日期的版本控制,或称 `calendar versioning `_ (CalVer),的一个主" +"要优势是,通过版本号就可以直接判断特定版本的基础功能集已经有多旧。" #: ../source/discussions/versioning.rst:135 msgid "" @@ -3440,9 +3509,9 @@ msgid "" "redistributor." msgstr "" "公共版本标识符旨在支持通过 :term:`PyPI ` 进行分" -"发。Python 打包工具还支持 :ref:`local version identifier ` 的概念,可以用来标识不打算公开发布的本地开发构建,或由重新分发" -"者维护的已修改版本。" +"发。Python 打包工具还支持 :ref:`本地版本标识符 ` " +"的概念,可以用来标识不打算公开发布的本地开发构建,或由重新分发者维护的已修改" +"版本。" #: ../source/discussions/versioning.rst:166 msgid "" @@ -3490,8 +3559,8 @@ msgid "" "to ensure that version query invocations (such as ``pip -V``) run as quickly " "as possible." msgstr "" -"对于希望确保版本查询调用(例如``pip -V``)尽快运行的 CLI 应用程序来说,此技术" -"特别有价值。" +"对于希望确保版本查询调用(例如 ``pip -V``)尽快运行的 CLI 应用程序来说,此技" +"术特别有价值。" #: ../source/discussions/versioning.rst:199 msgid "" @@ -3513,6 +3582,10 @@ msgid "" "querying code should be designed to handle the case where the attribute is " "missing [#fallback-to-dist-version]_." msgstr "" +"由于导入包和模块并不 *必须* 以这种方式发布运行时版本信息(参见 :pep:`PEP 396 " +"<396>` 中已撤销的提案),``__version__`` 属性应当只在已知提供该属性的接口中查" +"询(例如项目查询自身版本,或查询其某个直接依赖项的版本),否则查询代码就应当" +"设计成能处理该属性缺失的情况 [#fallback-to-dist-version]_。" #: ../source/discussions/versioning.rst:211 msgid "" @@ -3522,12 +3595,17 @@ msgid "" "For example, the standard library's :mod:`ssl` module offers multiple ways " "to access the underlying OpenSSL library version::" msgstr "" +"有些项目可能需要为外部 API 发布版本信息,而这些版本并不是模块本身的版本。这类" +"项目应当定义项目专属的方式,以便在运行时获取相关信息。例如,标准库的 " +":mod:`ssl` 模块提供了多种访问底层 OpenSSL 库版本的方法::" #: ../source/discussions/versioning.rst:226 msgid "" "Some more examples of unusual version numbers are given in a `blog post " "`_ by Seth Larson." msgstr "" +"Seth Larson 的一篇 `博客文章 `_ 中给出了更多不同寻常的" +"版本号示例。" #: ../source/discussions/versioning.rst:229 msgid "" @@ -3536,6 +3614,10 @@ msgid "" "stufft_>`_, `by Bernát Gábor `_, `by Brett Cannon " "`_. For a humoristic take, read about ZeroVer_." msgstr "" +"关于这一问题的一些个人观点,请参阅这些博文:`Hynek Schlawak 的文章 `_、`Donald Stufft 的文章 " +"`_、`Bernát Gábor 的文章 `_、`Brett Cannon 的文章 " +"`_。至于幽默的解读,可以读一读 ZeroVer_。" #: ../source/discussions/versioning.rst:235 msgid "" @@ -3550,6 +3632,12 @@ msgid "" "package installation would fail to have version information reported in that " "case." msgstr "" +"通过标准库的 :func:`importlib.metadata.packages_distributions` 函数,可以获得" +"一份完整列表,把可导入的顶层名称映射到提供相应导入包和模块的分发包。这意味着" +",即使代码试图为所有可导入的顶层名称推断要报告的版本,在没有定义 " +"``__version__`` 属性的情况下,它也有办法回退为报告分发包的版本信息。只有标准" +"库模块,以及通过 Python 包安装以外的方式添加的模块,在这种情况下才无法报告版" +"本信息。" #: ../source/flow.rst:3 msgid "The Packaging Flow" @@ -3572,18 +3660,22 @@ msgid "" "process of preparing a simple package for release, it does not fully " "enumerate what steps and files are required, and for what purpose." msgstr "" +"虽然 :doc:`教程 ` 逐步演示了准备发布一个简单软" +"件包的整个过程,但它并没有完整列举需要哪些步骤和文件,以及它们各自的用途。" #: ../source/flow.rst:16 msgid "" "Publishing a package requires a flow from the author's source code to an end " "user's Python environment. The steps to achieve this are:" msgstr "" +"发布软件包需要经历一个从作者源代码到最终用户 Python 环境的流程。实现这一流程" +"的步骤如下:" #: ../source/flow.rst:19 msgid "" "Have a source tree containing the package. This is typically a checkout from " "a version control system (VCS)." -msgstr "" +msgstr "拥有一个包含该软件包的源码树。这通常是从版本控制系统(VCS)中检出的一份代码。" #: ../source/flow.rst:22 msgid "" @@ -3592,6 +3684,9 @@ msgid "" "will be a :file:`pyproject.toml` file, maintained manually in the source " "tree." msgstr "" +"准备一个配置文件,描述软件包的元数据(名称、版本等)以及如何创建构建产物。对" +"大多数软件包而言,这就是一个在源码树中手动维护的 :file:`pyproject.toml` 文件" +"。" #: ../source/flow.rst:27 msgid "" @@ -3602,22 +3697,26 @@ msgid "" "are made by a build tool using the configuration file from the previous " "step. Often there is just one generic wheel for a pure Python package." msgstr "" +"创建要发送到包分发服务(通常是 PyPI)的构建产物;这些产物通常是一个 :term:`源" +"分发(“sdist”) ` 和一个或多个 :term:`构" +"建分发(“wheels”) `。这些产物由构建工具使用上一步中的配" +"置文件来创建。对于纯 Python 软件包,通常只需要一个通用的 wheel。" #: ../source/flow.rst:35 msgid "Upload the build artifacts to the package distribution service." -msgstr "" +msgstr "将构建产物上传到包分发服务。" #: ../source/flow.rst:37 msgid "" "At that point, the package is present on the package distribution service. " "To use the package, end users must:" -msgstr "" +msgstr "至此,软件包已经存在于包分发服务上。要使用该软件包,最终用户必须:" #: ../source/flow.rst:40 msgid "" "Download one of the package's build artifacts from the package distribution " "service." -msgstr "" +msgstr "从包分发服务下载该软件包的某个构建产物。" #: ../source/flow.rst:43 msgid "" @@ -3625,6 +3724,8 @@ msgid "" "directory. This step may involve a build/compile step which, if needed, must " "be described by the package metadata." msgstr "" +"将它安装到自己的 Python 环境中,通常是安装到该环境的 ``site-packages`` 目录。" +"这一步可能涉及构建/编译步骤;如果需要,软件包元数据必须对此加以描述。" #: ../source/flow.rst:47 msgid "" @@ -3638,7 +3739,7 @@ msgstr "下面将更详细地描述上述步骤。" #: ../source/flow.rst:53 msgid "The source tree" -msgstr "" +msgstr "源码树" #: ../source/flow.rst:55 msgid "" @@ -3646,6 +3747,8 @@ msgid "" "VCS. The particular version of the code used to create the build artifacts " "will typically be a checkout based on a tag associated with the version." msgstr "" +"源码树包含软件包的源代码,通常是从 VCS 检出的一份代码。用于创建构建产物的那个" +"特定版本的代码,通常是基于与该版本相关联的标签检出的。" #: ../source/flow.rst:60 msgid "The configuration file" @@ -3657,6 +3760,8 @@ msgid "" "artifacts. The standard practice is to use a :file:`pyproject.toml` file in " "the `TOML format`_." msgstr "" +"配置文件取决于创建构建产物所用的工具。标准做法是使用以 `TOML format`_ 编写的 " +":file:`pyproject.toml` 文件。" #: ../source/flow.rst:68 msgid "" @@ -3668,14 +3773,13 @@ msgid "" "in the ``[build-system]`` table." msgstr "" ":file:`pyproject.toml` 文件至少需要一个指定构建工具的 ``[build-system]`` 表。" -"有许多可用的构建工具,包括但不限" -"于 :ref:`flit`、 :ref:`hatch`、 :ref:`pdm`、 :ref:`poetry`、 :ref:`setuptools`、" -"` trampolim`_ 和 `whey`_ 。每个工具的文档都会显示需要在 ``[build-system]`` 表" -"中放置的内容。" +"有许多可用的构建工具,包括但不限于 " +":ref:`flit`、:ref:`hatch`、:ref:`pdm`、:ref:`poetry`、:ref:`setuptools`、`trampolim`_ " +"和 `whey`_。每个工具的文档都会显示需要在 ``[build-system]`` 表中放置的内容。" #: ../source/flow.rst:77 msgid "For example, here is a table for using :ref:`hatch`:" -msgstr "" +msgstr "例如,下面是一个使用 :ref:`hatch` 的表:" #: ../source/flow.rst:85 msgid "" @@ -3686,36 +3790,46 @@ msgid "" "like :ref:`pip` also acts as a frontend when it runs your build tool's " "backend to install from a source distribution." msgstr "" +"在 :file:`pyproject.toml` 文件中写有这样的表之后,诸如 :ref:`build` 这样的" +"“:term:`前端 `”工具就可以运行你所选构建工具的“:term:`后端 " +"`”来创建构建产物。你的构建工具也可能自带前端。像 :ref:`pip` 这" +"样的安装工具在运行构建工具的后端以从源分发安装时,同样会充当前端。" #: ../source/flow.rst:94 msgid "" "The particular build tool you choose dictates what additional information is " "required in the :file:`pyproject.toml` file. For example, you might specify:" msgstr "" +"你所选的具体构建工具决定了 :file:`pyproject.toml` 文件中还需要哪些附加信息。" +"例如,你可以指定:" #: ../source/flow.rst:97 msgid "" "a ``[project]`` table containing project :doc:`Core Metadata ` (name, version, author and so forth)," msgstr "" +"一个 ``[project]`` 表,包含项目的 :doc:`核心元数据 `,即名称、版本、作者等," #: ../source/flow.rst:101 msgid "a ``[tool]`` table containing tool-specific configuration options." -msgstr "" +msgstr "一个 ``[tool]`` 表,包含特定于工具的配置选项。" #: ../source/flow.rst:103 msgid "" "Refer to the :ref:`pyproject.toml guide ` for a " "complete guide to ``pyproject.toml`` configuration." msgstr "" +"关于 ``pyproject.toml`` 配置的完整指南,请参阅 :ref:`pyproject.toml 指南 " +"`。" #: ../source/flow.rst:108 msgid "Build artifacts" -msgstr "" +msgstr "构建产物" #: ../source/flow.rst:111 msgid "The source distribution (sdist)" -msgstr "源代码分发(sdist)" +msgstr "源分发(sdist)" #: ../source/flow.rst:113 msgid "" @@ -3725,6 +3839,10 @@ msgid "" "wanting to develop your sources, and for end user systems where some local " "compilation step is required (such as a C extension)." msgstr "" +"源分发包含了足以在最终用户的 Python 环境中从源码安装该软件包的内容。因此,它" +"需要包含软件包的源代码,还可以包含测试和文档。这些内容对想要开发你的源代码的" +"最终用户,以及对需要执行某些本地编译步骤(例如 C 扩展)的最终用户系统,都很有" +"用。" #: ../source/flow.rst:119 ../source/flow.rst:143 msgid "" @@ -3735,7 +3853,7 @@ msgstr ":ref:`build` 包知道如何调用你的构建工具来创建其中一 #: ../source/flow.rst:126 msgid "" "Or, your build tool may provide its own interface for creating an sdist." -msgstr "或者,你的构建工具可能提供自己的接口来创建sdist。" +msgstr "或者,你的构建工具可能提供自己的接口来创建 sdist。" #: ../source/flow.rst:130 msgid "The built distributions (wheels)" @@ -3748,6 +3866,9 @@ msgid "" "wheel file can simply be unpacked into the ``site-packages`` directory. This " "makes the install faster and more convenient for end users." msgstr "" +"构建分发只包含最终用户的 Python 环境所需的文件。安装过程中不需要任何编译步骤" +",wheel 文件只需解包到 ``site-packages`` 目录即可。这让安装对最终用户来说更快" +"速、更方便。" #: ../source/flow.rst:137 msgid "" @@ -3757,10 +3878,13 @@ msgid "" "supports. If a suitable wheel file is not available, tools like :ref:`pip` " "will fall back to installing the source distribution." msgstr "" +"纯 Python 软件包通常只需要一个“通用”wheel。带有已编译二进制扩展的软件包,需要" +"为其支持的每种 Python 解释器、操作系统和 CPU 架构的组合各提供一个 wheel。如果" +"没有合适的 wheel 文件,:ref:`pip` 之类的工具就会回退到安装源分发。" #: ../source/flow.rst:150 msgid "Or, your build tool may provide its own interface for creating a wheel." -msgstr "" +msgstr "或者,你的构建工具可能提供自己的接口来创建 wheel。" #: ../source/flow.rst:154 msgid "" @@ -3768,6 +3892,8 @@ msgid "" "from the source in the current directory; the above examples are " "deliberately specific." msgstr "" +":ref:`build` 的默认行为是根据当前目录中的源码同时生成 sdist 和 wheel;上面的" +"示例特意做了明确的指定。" #: ../source/flow.rst:159 msgid "Upload to the package distribution service" @@ -3777,11 +3903,11 @@ msgstr "上传到包分发服务" msgid "" "The :ref:`twine` tool can upload build artifacts to PyPI for distribution, " "using a command like:" -msgstr "" +msgstr ":ref:`twine` 工具可以将构建产物上传到 PyPI 进行分发,所用命令类似于:" #: ../source/flow.rst:168 msgid "Or, your build tool may provide its own interface for uploading." -msgstr "" +msgstr "或者,你的构建工具可能提供自己的上传接口。" #: ../source/flow.rst:171 msgid "Download and install" @@ -3793,12 +3919,14 @@ msgid "" "package into their Python environment. Typically this is done " "with :ref:`pip`, using a command like:" msgstr "" +"软件包发布之后,最终用户就可以把它下载并安装到自己的 Python 环境中。这一步通" +"常使用 :ref:`pip` 完成,所用命令类似于:" #: ../source/flow.rst:181 msgid "" "End users may also use other tools like :ref:`pipenv`, :ref:`poetry`, " "or :ref:`pdm`." -msgstr "" +msgstr "最终用户也可以使用其他工具,例如 :ref:`pipenv`、:ref:`poetry` 或 :ref:`pdm`。" #: ../source/glossary.rst:3 msgid "Glossary" @@ -3816,7 +3944,7 @@ msgstr "包含已编译扩展的特定种类的 :term:`Built Distribution`。" #: ../source/glossary.rst:14 msgid "Build Backend" -msgstr "" +msgstr "构建后端" #: ../source/glossary.rst:17 msgid "" @@ -3826,6 +3954,10 @@ msgid "" "delegated to the backend by a :term:`frontend `. All " "backends offer a standardized interface." msgstr "" +"一种接收 :term:`源码树 ` 并据其构建 :term:`源分发 " +"` 或 :term:`编译发行版 ` 的库。构建工作由 :term:`前端 ` 委托给后端完成" +"。所有后端都提供标准化的接口。" #: ../source/glossary.rst:24 msgid "" @@ -3833,10 +3965,13 @@ msgid "" "hatchling `, :ref:`maturin`, :ref:`meson-python`, :ref:`scikit-build-" "core`, and :ref:`setuptools`." msgstr "" +"构建后端的例子有 :ref:`flit 的 flit-core `、:ref:`hatch 的 hatchling " +"`、:ref:`maturin`、:ref:`meson-python`、:ref:`scikit-build-core` 和 " +":ref:`setuptools`。" #: ../source/glossary.rst:32 msgid "Build Frontend" -msgstr "" +msgstr "构建前端" #: ../source/glossary.rst:35 msgid "" @@ -3846,10 +3981,13 @@ msgid "" "building is delegated to each source tree's :term:`build backend `." msgstr "" +"用户可能运行的一种工具,它接收任意的源码树或 :term:`源分发 `,并据此构建源分发或 :term:`wheel 包 `。" +"实际的构建工作会委托给每个源码树各自的 :term:`构建后端 `。" #: ../source/glossary.rst:42 msgid "Examples of build frontends are :ref:`pip` and :ref:`build`." -msgstr "" +msgstr "构建前端的例子有 :ref:`pip` 和 :ref:`build`。" #: ../source/glossary.rst:44 msgid "Built Distribution" @@ -3866,15 +4004,15 @@ msgid "" "(:term:`Wheel` intentionally does not include compiled Python files). " "See :ref:`package-formats` for more information." msgstr "" -"一种 :term:`分发 ` 格式,包含只需移动到目标系统上正确位" -"置的文件和元数据,即可安装。:term:`Wheel` 是这样一种格式,而 :term:`源分发 " -"`不是,因为它需要一个构建步骤才能安装。 " +"一种 :term:`分发包 ` 格式,包含只需移动到目标系统上正确" +"位置的文件和元数据,即可安装。:term:`Wheel` 是这样一种格式,而 :term:`源分发 " +"` 不是,因为它需要一个构建步骤才能安装。" "这种格式并不意味着必须预编译 Python 文件(:term:`Wheel` 有意不包括编译好的 " "Python 文件)。更多信息见 :ref:`package-formats`。" #: ../source/glossary.rst:56 msgid "Built Metadata" -msgstr "" +msgstr "编译元数据" #: ../source/glossary.rst:59 msgid "" @@ -3883,10 +4021,14 @@ msgid "" "Archive` (``PKG-INFO`` in a :term:`Sdist ` and ``METADATA`` in a :term:`Wheel`)." msgstr "" +":term:`Core Metadata` 在被包含进已安装的 :term:`Project` 或 " +":term:`Distribution Archive` 时所采取的具体形式(前者为 ``METADATA`` 文件;后" +"者在 :term:`源分发 ` 中为 ``PKG-INFO``," +"在 :term:`Wheel` 中为 ``METADATA``)。" #: ../source/glossary.rst:66 msgid "Core Metadata" -msgstr "" +msgstr "核心元数据" #: ../source/glossary.rst:69 msgid "" @@ -3894,10 +4036,13 @@ msgid "" "Field`\\s it defines that describe key static attributes of " "a :term:`Distribution Package` or :term:`Installed Project`." msgstr "" +"该 :ref:`规范 ` 及其定义的一组 :term:`Core Metadata Field`\\s" +",用于描述 :term:`Distribution Package` 或 :term:`Installed Project` 的关键静" +"态属性。" #: ../source/glossary.rst:74 msgid "Core Metadata Field" -msgstr "" +msgstr "核心元数据字段" #: ../source/glossary.rst:77 msgid "" @@ -3906,6 +4051,9 @@ msgid "" "the :term:`Built Metadata`. Notably, distinct from a :term:`Pyproject " "Metadata Key`." msgstr "" +"在 :term:`Core Metadata` 规范中定义并存储在 :term:`Built Metadata` 中的单个键" +"值对(对于可多次使用的字段,则为同名键值对组成的序列)。值得注意的是,它不同" +"于 :term:`Pyproject Metadata Key`。" #: ../source/glossary.rst:83 msgid "Distribution Archive" @@ -3915,11 +4063,11 @@ msgstr "发行版存档" msgid "" "The physical distribution artifact (i.e. a file on disk) for " "a :term:`Distribution Package`." -msgstr "" +msgstr "对应于 :term:`Distribution Package` 的物理分发产物(即磁盘上的一个文件)。" #: ../source/glossary.rst:89 msgid "Distribution Package" -msgstr "发行版" +msgstr "分发包" #: ../source/glossary.rst:92 msgid "" @@ -3944,8 +4092,8 @@ msgid "" "breakdown of the differences." msgstr "" "分发包更常被简称为“包”或“分发”,但本指南可能会使用“分发包”而非简称,因为需要" -"防止和术语 :term:`Import Package`(通常也被叫做“包‘)或另一种分发类型(如 " -"Linux 发行版或 Python 语言发行版)混淆,这两者常用单个术语“distribution”表" +"避免与通常也被叫做“包”的 :term:`导入包 ` 或另一种分发类型(" +"如 Linux 发行版或 Python 语言发行版)混淆,这两者常用单个术语“distribution”表" "示。有关含义差别的详细解释,见 :ref:`distribution-package-vs-import-" "package`。" @@ -3986,7 +4134,7 @@ msgstr "导入包" msgid "" "A Python module which can contain other modules or recursively, other " "packages." -msgstr "一个Python模块,可以包含其他模块或递归地包含其他包。" +msgstr "一个 Python 模块,可以包含其他模块或递归地包含其他包。" #: ../source/glossary.rst:127 msgid "" @@ -4010,6 +4158,8 @@ msgid "" "or :term:`Virtual Environment`, as described in the " "specification :ref:`recording-installed-packages`." msgstr "" +"已安装并可供 Python 解释器或 :term:`Virtual Environment` 使用的 " +":term:`Project`,如 :ref:`recording-installed-packages` 规范所述。" #: ../source/glossary.rst:140 msgid "Known Good Set (KGS)" @@ -4036,6 +4186,8 @@ msgid "" "A PyPI Trove classifier (as :ref:`described ` in " "the :term:`Core Metadata` specification) which begins with ``License ::``." msgstr "" +"一种以 ``License ::`` 开头的 PyPI Trove 分类器(如 :term:`Core Metadata` 规范" +"中 :ref:`所述 `)。" #: ../source/glossary.rst:157 ../source/specifications/license-expression.rst:3 msgid "License Expression" @@ -4043,7 +4195,7 @@ msgstr "许可证表达式" #: ../source/glossary.rst:158 msgid "SPDX Expression" -msgstr "" +msgstr "SPDX 表达式" #: ../source/glossary.rst:161 msgid "" @@ -4052,6 +4204,10 @@ msgid "" "Archive`'s license(s) and how they inter-relate. Examples: ``GPL-3.0-or-" "later``, ``MIT AND (Apache-2.0 OR BSD-2-Clause)``" msgstr "" +"一个符合有效 SPDX 许可证表达式语法的字符串,其中包含一个或多个 SPDX " +":term:`License Identifier`\\(s),用于描述 :term:`Distribution Archive` 的一个" +"或多个许可证及其相互关系。示例: ``GPL-3.0-or-later``、``MIT AND (Apache-2.0 " +"OR BSD-2-Clause)``" #: ../source/glossary.rst:169 msgid "License Identifier" @@ -4059,7 +4215,7 @@ msgstr "许可证标识符" #: ../source/glossary.rst:170 msgid "SPDX Identifier" -msgstr "SPDX标识符" +msgstr "SPDX 标识符" #: ../source/glossary.rst:173 msgid "" @@ -4068,6 +4224,9 @@ msgid "" "``LicenseRef-[idstring]`` strings conforming to the SPDX specification. " "Examples: ``MIT``, ``GPL-3.0-only``, ``LicenseRef-My-Custom-License``" msgstr "" +"一种有效的 SPDX 短格式许可证标识符,最初在 :pep:`639` 中规定。它包括所有有效" +"的 SPDX 标识符,以及符合 SPDX 规范的自定义 ``LicenseRef-[idstring]`` 字符串。" +"示例: ``MIT``、``GPL-3.0-only``、``LicenseRef-My-Custom-License``" #: ../source/glossary.rst:183 msgid "Module" @@ -4165,7 +4324,7 @@ msgstr "项目的根目录" msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." -msgstr "" +msgstr ":term:`Project` 的 :term:`源码树 ` 所在的文件系统目录。" #: ../source/glossary.rst:232 msgid "Project Source Tree" @@ -4177,6 +4336,9 @@ msgid "" "raw source code before being packaged into a :term:`Source Distribution " "` or :term:`Built Distribution`." msgstr "" +":term:`Project` 在开发阶段使用的磁盘格式,其中包含该项目在被打包成 :term:`源" +"分发 ` 或 :term:`Built Distribution` 之前" +"的原始源代码。" #: ../source/glossary.rst:241 msgid "Project Source Metadata" @@ -4191,6 +4353,11 @@ msgid "" "in a tool-specific format (under the ``[tool]`` table in ``pyproject.toml``, " "or in a tool's own configuration file)." msgstr "" +"由软件包作者在 :term:`Project` 的 :term:`源码树 ` 中定义" +"的元数据,之后由项目的 :term:`构建后端 ` 将其转换为 " +":term:`Built Metadata` 中的 :term:`Core Metadata field`\\s。它可以写作 " +":term:`Pyproject Metadata`,也可以采用工具专用的格式(写在 " +"``pyproject.toml`` 的 ``[tool]`` 表中,或写在工具自己的配置文件里)。" #: ../source/glossary.rst:254 msgid "Pure Module" @@ -4216,6 +4383,10 @@ msgid "" "a :term:`pyproject.toml` file. Notably, *not* a tool-specific source " "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" +"由 :ref:`declaring-project-metadata` 规范定义、最初在 :pep:`621` 中引入的 " +":term:`Project Source Metadata` 格式,以 :term:`Pyproject Metadata Key`\\s 的" +"形式存储在 :term:`pyproject.toml` 文件的 ``[project]`` 表之下。值得注意的是," +"它 *不是* ``pyproject.toml`` 中 ``[tool]`` 表下的工具专用源元数据格式。" #: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" @@ -4227,19 +4398,21 @@ msgid "" "of the :term:`Pyproject Metadata`. Notably, distinct from a :term:`Core " "Metadata Field`." msgstr "" +"``pyproject.toml`` 中 ``[project]`` 表内的顶层 TOML 键,是 :term:`Pyproject " +"Metadata` 的一部分。值得注意的是,它不同于 :term:`Core Metadata Field`。" #: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" -msgstr "" +msgstr "Pyproject 元数据子键" #: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." -msgstr "" +msgstr "位于取值为表格的 :term:`Pyproject Metadata Key` 之下的二级 TOML 键。" #: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" -msgstr "Python 包装管理局 (PyPA)" +msgstr "Python 打包管理局(PyPA)" #: ../source/glossary.rst:287 msgid "" @@ -4251,7 +4424,7 @@ msgid "" "discuss.python.org/c/packaging>`__." msgstr "" "PyPA 是一个工作组,维护 Python 打包的许多重要项目。他们维护 :doc:`pypa.io " -"` 站点,在`GitHub `_ 上托管项目,并在 " +"` 站点,在 `GitHub `_ 上托管项目,并在 " "`distutils-sig 邮件列表 `_ 和 `Python Discourse 论坛 `__ 上讨论问题。" @@ -4290,7 +4463,7 @@ msgstr "pyproject.toml" #: ../source/glossary.rst:311 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." -msgstr "" +msgstr "与工具无关的 :term:`Project` 规范文件。其定义见 :pep:`518`。" #: ../source/glossary.rst:313 msgid "Release" @@ -4300,7 +4473,7 @@ msgstr "发行版 (Release)" msgid "" "A snapshot of a :term:`Project` at a particular point in time, denoted by a " "version identifier." -msgstr "" +msgstr ":term:`Project` 在特定时间点的一个快照,由版本标识符表示。" #: ../source/glossary.rst:319 msgid "" @@ -4309,6 +4482,9 @@ msgid "" "released, it could be available in both a source distribution format and a " "Windows installer distribution format." msgstr "" +"进行一次发布可能需要发布多个 :term:`分发包 `。例如,如" +"果某个项目的 1.0 版本已发布,那么它可能同时以源分发格式和 Windows 安装程序分" +"发格式提供。" #: ../source/glossary.rst:324 msgid "Requirement" @@ -4322,6 +4498,10 @@ msgid "" "considered a \"requirement\". For more information, see the :ref:`pip:pip " "install` reference." msgstr "" +"关于待安装 :term:`软件包 ` 的一种规范说明。 :ref:`pip` " +"是 :term:`PYPA ` 推荐的安装器,它允许各种" +"形式的说明,这些说明都可以视为“要求” (requirement)。更多信息请参阅 " +":ref:`pip:pip install` 参考文档。" #: ../source/glossary.rst:333 msgid "Requirement Specifier" @@ -4334,6 +4514,9 @@ msgid "" "For example, \"foo>=1.3\" is a requirement specifier, where \"foo\" is the " "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" +":ref:`pip` 用于从 :term:`Package Index` 安装软件包的一种格式。有关该格式的 " +"EBNF 图,请参阅 :ref:`dependency-specifiers`。例如,\"foo>=1.3\" 就是一个需求" +"说明符,其中 \"foo\" 是项目名称,\">=1.3\" 部分则是 :term:`Version Specifier`" #: ../source/glossary.rst:341 msgid "Requirements File" @@ -4355,7 +4538,7 @@ msgstr "根许可证目录" #: ../source/glossary.rst:349 msgid "License Directory" -msgstr "" +msgstr "许可证目录" #: ../source/glossary.rst:352 msgid "" @@ -4368,6 +4551,13 @@ msgid "" "root directory that paths recorded in the ``License-File`` :term:`Core " "Metadata Field` are relative to." msgstr "" +"在 :term:`Project Source Tree`、:term:`Distribution Archive` 或 " +":term:`Installed Project` 中存放许可证文件的目录。对于 :term:`Project Source " +"Tree` 或 :term:`Source Distribution (or \"sdist\")`,该目录即 :term:`Project " +"Root Directory`。对于 :term:`Built Distribution` 或 :term:`Installed " +"Project`,该目录分别为 wheel 归档文件或项目文件夹中的 :file:`.dist-info/" +"licenses/` 目录。此外,``License-File`` :term:`Core Metadata Field` 中记录的" +"路径都相对于该目录。" #: ../source/glossary.rst:365 #: ../source/guides/distributing-packages-using-setuptools.rst:59 @@ -4397,10 +4587,12 @@ msgid "" "creation of a :term:`Source Distribution ` or :term:`Built Distribution`." msgstr "" +"包含 :term:`Release` 原始源代码的归档文件,在创建 :term:`源分发 ` 或 :term:`Built Distribution` 之前生成。" #: ../source/glossary.rst:379 msgid "Source Distribution (or \"sdist\")" -msgstr "源代码分发(或“sdist”)" +msgstr "源分发(或“sdist”)" #: ../source/glossary.rst:382 msgid "" @@ -4410,6 +4602,10 @@ msgid "" "generating a :term:`Built Distribution`. See :ref:`package-formats` for more " "information." msgstr "" +"一种 :term:`发行版存档 ` 格式(通常使用 ``python -m " +"build --sdist`` 生成),提供元数据和必要的源文件,供 :ref:`pip` 之类的工具安" +"装,或用于生成 :term:`Built Distribution`。更多信息请参阅 :ref:`package-" +"formats`。" #: ../source/glossary.rst:388 msgid "System Package" @@ -4433,6 +4629,10 @@ msgid "" "that Python packaging currently supports. Support for this specification " "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" +":term:`Requirement Specifier` 的版本组成部分。例如,\"foo>=1.3\" 中的 \">" +"=1.3\" 部分。请阅读 :ref:`版本说明符规范 `,了解 Python " +"打包目前支持的全部说明符。对该规范的支持已在 :ref:`setuptools` v8.0 和 " +":ref:`pip` v6.0 中实现。" #: ../source/glossary.rst:402 msgid "Virtual Environment" @@ -4450,7 +4650,7 @@ msgstr "" #: ../source/glossary.rst:410 msgid "Wheel Format" -msgstr "" +msgstr "Wheel 格式" #: ../source/glossary.rst:411 msgid "Wheel" @@ -4463,6 +4663,9 @@ msgid "" "specification. See :ref:`package-formats` for more information. Not to be " "confused with its reference implementation, the :term:`Wheel Project`." msgstr "" +"标准的 :term:`Built Distribution` 格式,最初在 :pep:`427` 中引入,并由 " +":ref:`binary-distribution-format` 规范定义。更多信息请参阅 :ref:`package-" +"formats`。不要将其与它的参考实现 :term:`Wheel Project` 混淆。" #: ../source/glossary.rst:421 msgid "Wheel Project" @@ -4472,7 +4675,7 @@ msgstr "Wheel 项目" msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; " "see :ref:`wheel`." -msgstr "" +msgstr ":term:`Wheel Format` 的 PyPA 参考实现;参见 :ref:`wheel`。" #: ../source/glossary.rst:426 msgid "Working Set" @@ -4485,6 +4688,9 @@ msgid "" "At most, one :term:`Distribution ` for a project is " "possible in a working set." msgstr "" +"可供导入的一组 :term:`分发包 `。这些分发包都位于 " +"`sys.path` 变量上。在一个工作集中,一个项目至多只能有一个对应的 " +":term:`Distribution `。" #: ../source/guides/analyzing-pypi-package-downloads.rst:5 msgid "Analyzing PyPI package downloads" @@ -4497,7 +4703,7 @@ msgid "" "example, you can use it to discover the distribution of Python versions used " "to download a package." msgstr "" -"本节介绍了如何使用公共的 PyPI 下载统计数据集来了解PyPI上托管的软件包 " +"本节介绍了如何使用公共的 PyPI 下载统计数据集来了解 PyPI 上托管的软件包 " "(packages) 的下载情况。例如,你可以用它来发现用于下载软件包的 Python 版本的分" "布。" @@ -4517,6 +4723,9 @@ msgid "" "which are heavily cached, would require invalidating the cache more often, " "and reduce the overall effectiveness of the cache." msgstr "" +"**难以与内容分发网络(CDN)高效协作:** 下载统计数据在不断变化。若把它们包含" +"在会被重度缓存的项目页面中,就需要更频繁地使缓存失效,从而降低缓存的整体效果" +"。" #: ../source/guides/analyzing-pypi-package-downloads.rst:23 msgid "" @@ -4592,12 +4801,11 @@ msgid "" "`__" msgstr "" -"要使用 `Google BigQuery`_ 查询 `公开 PyPI 下载统计数据集 `_ ,你需要一个 Google 账户,并在 Google Cloud " -"Platform 项目上启用 BigQuery API 。无需信用卡,你可以 `使用无需信用卡的 " -"BigQuery 免费套餐 `__ 每月运行高达 " -"1TB 的查询" +"要使用 `Google BigQuery`_ 查询 `公开 PyPI 下载统计数据集`_,你需要一个 " +"Google 账户,并在 Google Cloud Platform 项目上启用 BigQuery API。无需信用卡," +"你可以 `使用无需信用卡的 BigQuery 免费套餐 `__ 每月运行高达 1TB 的查询" #: ../source/guides/analyzing-pypi-package-downloads.rst:57 msgid "Navigate to the `BigQuery web UI`_." @@ -4612,7 +4820,7 @@ msgid "" "Enable the `BigQuery API `__." msgstr "" -"启用`BigQuery API `__。" #: ../source/guides/analyzing-pypi-package-downloads.rst:62 @@ -4621,8 +4829,8 @@ msgid "" "out the `BigQuery quickstart guide `__." msgstr "" -"关于如何开始使用 BigQuery 的更多详细说明,请查看`BigQuery 快速入门指南 " -"`__ 。" +"关于如何开始使用 BigQuery 的更多详细说明,请查看 `BigQuery 快速入门指南 " +"`__。" #: ../source/guides/analyzing-pypi-package-downloads.rst:68 msgid "Data schema" @@ -4636,6 +4844,10 @@ msgid "" "schema `__ include:" msgstr "" +"Linehaul 会为每次下载在 ``bigquery-public-data.pypi.file_downloads`` 表中写入" +"一条记录。该表包含所下载文件以及下载方式的相关信息。来自 `表架构 `__ 的一些有用列包括:" #: ../source/guides/analyzing-pypi-package-downloads.rst:77 msgid "Column" @@ -4831,7 +5043,7 @@ msgstr "2017-08-01" #: ../source/guides/analyzing-pypi-package-downloads.rst:183 msgid "Python versions over time" -msgstr "" +msgstr "一段时间内的 Python 版本" #: ../source/guides/analyzing-pypi-package-downloads.rst:185 msgid "" @@ -4895,7 +5107,7 @@ msgstr "1894153540" #: ../source/guides/analyzing-pypi-package-downloads.rst:221 msgid "Getting absolute links to artifacts" -msgstr "" +msgstr "获取构件的绝对链接" #: ../source/guides/analyzing-pypi-package-downloads.rst:223 msgid "" @@ -4904,12 +5116,15 @@ msgid "" "release has been deleted from PyPI. The metadata table includes the ``path`` " "column, which includes the hash and artifact filename." msgstr "" +"有时,根据哈希值获取从 PyPI 下载构件的绝对链接会很有用,例如当某个特定项目或" +"发布版本已从 PyPI 删除时。元数据表中包含 ``path`` 列,其中含有哈希值和构件文" +"件名。" #: ../source/guides/analyzing-pypi-package-downloads.rst:229 msgid "" "The URL generated here is not guaranteed to be stable, but currently aligns " "with the URL where PyPI artifacts are hosted." -msgstr "" +msgstr "这里生成的 URL 并不保证始终稳定,但目前与托管 PyPI 构件的 URL 一致。" #: ../source/guides/analyzing-pypi-package-downloads.rst:242 msgid "url" @@ -4921,6 +5136,9 @@ msgid "" "45/79be82bdeafcecb9dca474cad4003e32ef8e4a0dec6abbd4145ccb02abe1/" "sampleproject-1.2.0.tar.gz" msgstr "" +"https://files.pythonhosted.org/packages/eb/45/" +"79be82bdeafcecb9dca474cad4003e32ef8e4a0dec6abbd4145ccb02abe1/sampleproject-" +"1.2.0.tar.gz" #: ../source/guides/analyzing-pypi-package-downloads.rst:246 msgid "" @@ -4928,6 +5146,9 @@ msgid "" "178e8bbb585ec5b13af42dae48b1d7425d6575b3ff9b02e5ec475e38e1d6/" "sampleproject_nomura-1.2.0-py2.py3-none-any.whl" msgstr "" +"https://files.pythonhosted.org/packages/56/0a/" +"178e8bbb585ec5b13af42dae48b1d7425d6575b3ff9b02e5ec475e38e1d6/" +"sampleproject_nomura-1.2.0-py2.py3-none-any.whl" #: ../source/guides/analyzing-pypi-package-downloads.rst:248 msgid "" @@ -4935,6 +5156,9 @@ msgid "" "63/88/3200eeaf22571f18d2c41e288862502e33365ccbdc12b892db23f51f8e70/" "sampleproject_nomura-1.2.0.tar.gz" msgstr "" +"https://files.pythonhosted.org/packages/63/88/" +"3200eeaf22571f18d2c41e288862502e33365ccbdc12b892db23f51f8e70/" +"sampleproject_nomura-1.2.0.tar.gz" #: ../source/guides/analyzing-pypi-package-downloads.rst:250 msgid "" @@ -4942,6 +5166,9 @@ msgid "" "e9/2743311822e71c0756394b6c5ab15cb64ca66c78c6c6a5cd872c9ed33154/" "sampleproject_doubleyoung18-1.3.0-py2.py3-none-any.whl" msgstr "" +"https://files.pythonhosted.org/packages/21/e9/" +"2743311822e71c0756394b6c5ab15cb64ca66c78c6c6a5cd872c9ed33154/" +"sampleproject_doubleyoung18-1.3.0-py2.py3-none-any.whl" #: ../source/guides/analyzing-pypi-package-downloads.rst:252 msgid "" @@ -4949,6 +5176,9 @@ msgid "" "2f3fe94e1c02816fe23c7ceee5292fb186912929e1972eee7fb729fa27af/" "sampleproject-1.3.1.tar.gz" msgstr "" +"https://files.pythonhosted.org/packages/6f/5b/" +"2f3fe94e1c02816fe23c7ceee5292fb186912929e1972eee7fb729fa27af/sampleproject-" +"1.3.1.tar.gz" #: ../source/guides/analyzing-pypi-package-downloads.rst:257 msgid "Caveats" @@ -4962,6 +5192,9 @@ msgid "" "accurate (e.g. the percentage of Python 2 vs. Python 3 downloads) but total " "numbers are lower than actual by an order of magnitude." msgstr "" +"除上述背景中列出的注意事项之外,Linehaul 还曾存在一个 bug,导致其在 2018 年 " +"7 月 26 日之前大幅少报了下载统计数据。该日期之前的下载数据在比例上是准确的(" +"例如 Python 2 与 Python 3 下载量的百分比),但总数字比实际低一个数量级。" #: ../source/guides/analyzing-pypi-package-downloads.rst:267 msgid "Additional tools" @@ -5020,7 +5253,7 @@ msgstr "`pandas-gbq`_ 项目允许通过 `Pandas`_ 来访问查询结果。" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 msgid "``ClickPy``" -msgstr "" +msgstr "``ClickPy``" #: ../source/guides/analyzing-pypi-package-downloads.rst:339 msgid "" @@ -5028,9 +5261,11 @@ msgid "" "statistics, with free direct SQL access to the underlying open-source " "`ClickHouse`_ database, updated daily." msgstr "" +"`ClickPy`_ 项目提供了一个用于可视化下载统计数据的公共应用程序,并对底层的开" +"源 `ClickHouse`_ 数据库提供免费的直接 SQL 访问,数据每日更新。" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "参考" @@ -5061,6 +5296,9 @@ msgid "" "packages can be separately distributed, your application or library may want " "to automatically **discover** all of the plugins available." msgstr "" +"在创建 Python 应用程序或库时,你常常会希望通过 **插件** 来提供自定义功能或额" +"外特性。由于 Python 软件包可以单独分发,你的应用程序或库可能需要自动 **发" +"现** 所有可用的插件。" #: ../source/guides/creating-and-discovering-plugins.rst:10 msgid "There are three major approaches to doing automatic plugin discovery:" @@ -5072,15 +5310,15 @@ msgstr "`使用命名惯例`_." #: ../source/guides/creating-and-discovering-plugins.rst:13 msgid "`Using namespace packages`_." -msgstr "" +msgstr "`使用命名空间包`_." #: ../source/guides/creating-and-discovering-plugins.rst:14 msgid "`Using package metadata`_." -msgstr "" +msgstr "`使用包元数据`_." #: ../source/guides/creating-and-discovering-plugins.rst:18 msgid "Using naming convention" -msgstr "" +msgstr "使用命名惯例" #: ../source/guides/creating-and-discovering-plugins.rst:20 msgid "" @@ -5090,12 +5328,18 @@ msgid "" "uses the naming convention ``flask_{plugin_name}``. If you wanted to " "automatically discover all of the Flask plugins installed:" msgstr "" +"如果你应用程序的所有插件都遵循相同的命名惯例,就可以使用 " +":func:`pkgutil.iter_modules` 来发现所有符合该命名惯例的顶层模块。例如" +",`Flask`_ 使用 ``flask_{plugin_name}`` 这样的命名惯例。如果你想自动发现已安" +"装的所有 Flask 插件:" #: ../source/guides/creating-and-discovering-plugins.rst:38 msgid "" "If you had both the `Flask-SQLAlchemy`_ and `Flask-Talisman`_ plugins " "installed then ``discovered_plugins`` would be:" msgstr "" +"如果你同时安装了 `Flask-SQLAlchemy`_ 和 `Flask-Talisman`_ 这两个插件,那么 " +"``discovered_plugins`` 将会是:" #: ../source/guides/creating-and-discovering-plugins.rst:48 msgid "" @@ -5103,10 +5347,12 @@ msgid "" "Package Index's :ref:`simple repository API ` for all " "packages that conform to your naming convention." msgstr "" +"对插件使用命名惯例,还允许你查询 Python 包索引的 :ref:`简单仓库 API ` 来获取所有符合你命名惯例的软件包。" #: ../source/guides/creating-and-discovering-plugins.rst:58 msgid "Using namespace packages" -msgstr "" +msgstr "使用命名空间包" #: ../source/guides/creating-and-discovering-plugins.rst:60 msgid "" @@ -5118,6 +5364,11 @@ msgid "" "Once installed, you can use :func:`pkgutil.iter_modules` to discover all " "modules and packages installed under that namespace:" msgstr "" +":doc:`命名空间包 ` 可用于为插件的放置位置提供一" +"种惯例,同时也提供了一种执行发现的方法。例如,如果你把子包 ``myapp.plugins`` " +"设为命名空间包,其他 :term:`分发包 ` 就可以向该命名空间" +"提供模块和包。安装之后,你可以使用 :func:`pkgutil.iter_modules` 来发现安装在" +"该命名空间下的所有模块和包:" #: ../source/guides/creating-and-discovering-plugins.rst:88 msgid "" @@ -5127,6 +5378,10 @@ msgid "" "``myapp.plugins.a`` and ``myapp.plugins.b`` then ``discovered_plugins`` in " "this case would be:" msgstr "" +"向 :func:`~pkgutil.iter_modules` 指定 ``myapp.plugins.__path__`` 会使它只查找" +"直接位于该命名空间之下的模块。例如,如果你安装的分发包提供了模块 " +"``myapp.plugins.a`` 和 ``myapp.plugins.b``,那么此时的 " +"``discovered_plugins`` 将会是:" #: ../source/guides/creating-and-discovering-plugins.rst:100 msgid "" @@ -5145,6 +5400,14 @@ msgid "" "to :func:`setup`'s ``packages`` argument instead of " "using :func:`setuptools.find_packages`." msgstr "" +"本示例使用子包(即 ``myapp.plugins``)作为命名空间包,不过也可以为此使用顶层" +"包(如 ``myapp_plugins``)。选择哪个命名空间属于个人偏好,但不建议把你项目的" +"主顶层包(本例中为 ``myapp``)用作插件的命名空间包,因为一个糟糕的插件可能导" +"致整个命名空间失效,进而使你的项目无法导入。为了让“命名空间子包”方案生效,插" +"件包必须省略顶层包目录(本例中为 ``myapp``)中的 :file:`__init__.py`,并在命" +"名空间子包目录(即 ``myapp/plugins``)中加入命名空间包风格的 " +":file:`__init__.py`。这也意味着,插件需要把包列表显式传递给 :func:`setup` 的 " +"``packages`` 参数,而不能使用 :func:`setuptools.find_packages`。" #: ../source/guides/creating-and-discovering-plugins.rst:114 msgid "" @@ -5153,10 +5416,13 @@ msgid "" "namespace-packages` documentation and clearly document which approach is " "preferred for plugins to your project." msgstr "" +"命名空间包是一项复杂的特性,创建它们有多种不同的方法。强烈建议阅读 " +":doc:`packaging-namespace-packages` 文档,并明确说明对于你项目的插件应首选哪" +"种方式。" #: ../source/guides/creating-and-discovering-plugins.rst:122 msgid "Using package metadata" -msgstr "" +msgstr "使用包元数据" #: ../source/guides/creating-and-discovering-plugins.rst:124 msgid "" @@ -5174,7 +5440,7 @@ msgid "" "For example if you have a package named ``myapp-plugin-a`` and it includes " "the following in its ``pyproject.toml``:" msgstr "" -"例如,如果您有一个名为 ``myapp-plugin-a`` 的包,并且它的 ``pyproject.toml`` " +"例如,如果你有一个名为 ``myapp-plugin-a`` 的包,并且它的 ``pyproject.toml`` " "中包含以下内容:" #: ../source/guides/creating-and-discovering-plugins.rst:136 @@ -5183,6 +5449,9 @@ msgid "" "using :func:`importlib.metadata.entry_points` (or the backport_ " "``importlib_metadata >= 3.6`` for Python 3.6-3.9):" msgstr "" +"然后,你可以使用 :func:`importlib.metadata.entry_points` 来发现并加载所有已注" +"册的入口点(对于 Python 3.6-3.9,则使用 backport_ ``importlib_metadata >= " +"3.6``):" #: ../source/guides/creating-and-discovering-plugins.rst:151 msgid "" @@ -5196,8 +5465,7 @@ msgstr "" msgid "" "Now the module of your choice can be imported by executing " "``discovered_plugins['a'].load()``." -msgstr "" -"现在可以通过执行 ``discovered_plugins['a'].load()`` 来导入您选择的模块。" +msgstr "现在可以通过执行 ``discovered_plugins['a'].load()`` 来导入你选择的模块。" #: ../source/guides/creating-and-discovering-plugins.rst:163 msgid "" @@ -5211,12 +5479,11 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" "由于此规范是 :doc:`standard library ` 的一" -"部分,因此除了 setuptools 之外,大多数打包工具都提供了定义 entry points 的支" -"持。" +"部分,因此包括 setuptools 在内的打包工具都提供了定义 entry points 的支持。" #: ../source/guides/creating-command-line-tools.rst:5 msgid "Creating and packaging command-line tools" @@ -5230,10 +5497,10 @@ msgid "" "exposing the executable scripts of packages (and available manual pages) for " "use on the command-line." msgstr "" -"本指南将引导您创建和打包一个独立的命令行应用程序,该应用程序可以通" -"过 :ref:`pipx` 安装,pipx 是一个创建和管理 :term:`Python Virtual " -"Environments ` 的工具,并暴露包的可执行脚本(以及可用的" -"手册页)以供命令行使用。" +"本指南将引导你创建和打包一个独立的命令行应用程序,该应用程序可以通过 " +":ref:`pipx` 安装,pipx 是一个创建和管理 :term:`Python 虚拟环境 ` 的工具,并暴露软件包的可执行脚本(以及可用的手册页)以供命令行" +"使用。" #: ../source/guides/creating-command-line-tools.rst:12 msgid "Creating the package" @@ -5265,12 +5532,16 @@ msgid "" "and in the end be alike this file tree, with the top-level folder and " "package name ``greetings``:" msgstr "" +"本项目将遵循 :ref:`src 布局 `,最终形成与此类似的" +"文件树,其中顶层文件夹和包名均为 ``greetings``:" #: ../source/guides/creating-command-line-tools.rst:33 msgid "" "The actual code responsible for the tool's functionality will be stored in " "the file :file:`greet.py`, named after the main module:" msgstr "" +"负责实现该工具功能的实际代码将存放在 :file:`greet.py` 文件中,该文件以主模块" +"命名:" #: ../source/guides/creating-command-line-tools.rst:62 msgid "" @@ -5278,6 +5549,8 @@ msgid "" "greeting to output is constructed. Now, construct the command-line interface " "to provision it with the same, which is done in :file:`cli.py`:" msgstr "" +"上面的函数接收若干个关键字参数,这些参数决定了要输出的问候语如何构造。现在," +"构建命令行接口并为其提供这些相同的参数,这一步是在 :file:`cli.py` 中完成的:" #: ../source/guides/creating-command-line-tools.rst:80 msgid "" @@ -5291,12 +5564,20 @@ msgid "" "advanced users are encouraged to make use of click_ (on which ``typer`` is " "based)." msgstr "" +"命令行接口使用 typer_ 构建,这是一个易于使用、基于 Python 类型提示的 CLI 解析" +"器。它提供了开箱即用的自动补全和样式美观的命令行帮助。另一种选择是 " +":py:mod:`argparse`,它是 Python 标准库中自带的命令行解析器。对大多数需求而言" +"它已经够用,但需要大量代码(通常在 ``cli.py`` 中)才能正常工作。另外," +"docopt_ 让仅凭文档字符串创建 CLI 接口成为可能;我们鼓励高级用户使用 click_ " +"(``typer`` 正是基于它构建的)。" #: ../source/guides/creating-command-line-tools.rst:86 msgid "" "Now, add an empty :file:`__init__.py` file, to define the project as a " "regular :term:`import package `." msgstr "" +"现在,添加一个空的 :file:`__init__.py` 文件,以将本项目定义为一个常规的 " +":term:`导入包 `。" #: ../source/guides/creating-command-line-tools.rst:88 msgid "" @@ -5305,6 +5586,9 @@ msgid "" "immediately with flat layout, but requires installation of the package with " "src layout), so initialize the command-line interface here:" msgstr "" +"文件 :file:`__main__.py` 标记了应用程序通过 :mod:`runpy` 运行时的主入口点(" +"即 ``python -m greetings``,该命令在平坦布局下立即可用,但在 src 布局下需要先" +"安装该包),因此请在此处初始化命令行接口:" #: ../source/guides/creating-command-line-tools.rst:100 msgid "" @@ -5313,6 +5597,9 @@ msgid "" "greetings``, a certain hack could be placed in this file; read more " "at :ref:`running-cli-from-source-src-layout`." msgstr "" +"为了能够直接从 :term:`源代码树 ` 调用命令行接口(即以 " +"``python src/greetings`` 的方式运行),可以在该文件中加入一些变通处理;详情请" +"参阅 :ref:`running-cli-from-source-src-layout`。" #: ../source/guides/creating-command-line-tools.rst:106 msgid "``pyproject.toml``" @@ -5326,6 +5613,10 @@ msgid "" "described in :ref:`writing-pyproject-toml`, adding a dependency on ``typer`` " "(this tutorial uses version *0.12.3*)." msgstr "" +"项目的 :term:`元数据 ` 放在 :term:`pyproject.toml` 中" +"。:term:`pyproject 元数据键 ` 和 ``[build-system]`` " +"表可按照 :ref:`writing-pyproject-toml` 中的说明填写,并添加对 ``typer`` 的依" +"赖项(本教程使用版本 *0.12.3*)。" #: ../source/guides/creating-command-line-tools.rst:111 msgid "" @@ -5334,6 +5625,9 @@ msgid "" "(see :ref:`console_scripts`) needs to be added as a :term:`subkey `:" msgstr "" +"为了让本项目被识别为命令行工具,还需要额外添加一个 ``console_scripts`` " +":ref:`入口点 ` 作为 :term:`子键 `," +"参见 :ref:`console_scripts`:" #: ../source/guides/creating-command-line-tools.rst:118 msgid "" @@ -5341,6 +5635,8 @@ msgid "" "a :term:`distribution package `, which makes it " "installable." msgstr "" +"现在,项目的源代码树已经可以转换为 :term:`分发包 `,使" +"其变得可安装。" #: ../source/guides/creating-command-line-tools.rst:123 msgid "Installing the package with ``pipx``" @@ -5351,12 +5647,16 @@ msgid "" "After installing ``pipx`` as described in :ref:`installing-stand-alone-" "command-line-tools`, install your project:" msgstr "" +"按照 :ref:`installing-stand-alone-command-line-tools` 中的说明安装好 " +"``pipx`` 之后,安装你的项目:" #: ../source/guides/creating-command-line-tools.rst:132 msgid "" "This will expose the executable script we defined as an entry point and make " "the command ``greet`` available. Let's test it:" msgstr "" +"这会暴露我们定义为入口点的可执行脚本,并使 ``greet`` 命令可用。让我们测试一下" +":" #: ../source/guides/creating-command-line-tools.rst:146 msgid "" @@ -5364,12 +5664,16 @@ msgid "" "program's usage by calling it with the ``--help`` option, or configure " "completions via the ``--install-completion`` option." msgstr "" +"由于本示例使用 ``typer``,你现在还可以通过 ``--help`` 选项获取程序用法的概览" +",或通过 ``--install-completion`` 选项配置补全功能。" #: ../source/guides/creating-command-line-tools.rst:149 msgid "" "To just run the program without installing it permanently, use ``pipx run``, " "which will create a temporary (but cached) virtual environment for it:" msgstr "" +"如果只是想运行程序而不永久安装它,可以使用 ``pipx run``,它会为此创建一个临时" +"(但会被缓存)的虚拟环境:" #: ../source/guides/creating-command-line-tools.rst:156 msgid "" @@ -5377,6 +5681,8 @@ msgid "" "defined above does not match the package name, we need to state explicitly " "which executable script to run (even though there is only one in existence)." msgstr "" +"不过,这种写法有点不实用;由于我们上面定义的入口点名称与包名不一致,我们需要" +"明确指定要运行哪个可执行脚本(尽管实际只存在一个)。" #: ../source/guides/creating-command-line-tools.rst:159 msgid "" @@ -5384,6 +5690,8 @@ msgid "" "an entry point specific to ``pipx run``. The same can be defined as follows " "in :file:`pyproject.toml`:" msgstr "" +"不过,对于这个问题有一个更实用的解决方案,即一个专门用于 ``pipx run`` 的入口" +"点。它可以在 :file:`pyproject.toml` 中定义如下:" #: ../source/guides/creating-command-line-tools.rst:168 msgid "" @@ -5391,6 +5699,8 @@ msgid "" "will pick up the executable script as the default one and run it, which " "makes this command possible:" msgstr "" +"这个入口点(其名称 *必须* 与包名一致)使 ``pipx`` 能将该可执行脚本作为默认脚" +"本选取并运行,于是下面的命令得以可用:" #: ../source/guides/creating-command-line-tools.rst:176 msgid "Conclusion" @@ -5406,14 +5716,19 @@ msgid "" "to :ref:`do some research ` on how your " "package is received!" msgstr "" +"现在你已经知道如何打包一个用 Python 编写的命令行应用程序了。下一步可以考虑分" +"发你的软件包,即将其上传到一个 :term:`包索引 `,最常见的是 " +":term:`PyPI `。为此,请遵循 :ref:`Packaging " +"your project` 中的说明。完成之后,别忘了 :ref:`做一些调研 `,看看你的软件包反响如何!" #: ../source/guides/distributing-packages-using-setuptools.rst:5 msgid "Packaging and distributing projects" -msgstr "" +msgstr "打包并分发项目" #: ../source/guides/distributing-packages-using-setuptools.rst:7 msgid "Outdated" -msgstr "" +msgstr "已过时" #: ../source/guides/distributing-packages-using-setuptools.rst:8 msgid "2023-12-14" @@ -5427,6 +5742,9 @@ msgid "" "assumes that you are already familiar with the contents of the :doc:`/" "tutorials/installing-packages` page." msgstr "" +"本节介绍使用 ``setuptools`` 配置、打包和分发 Python 项目的一些额外细节,这些" +"内容未在 :doc:`/tutorials/packaging-projects` 的入门教程中涵盖。本节仍然假定" +"你已经熟悉 :doc:`/tutorials/installing-packages` 页面的内容。" #: ../source/guides/distributing-packages-using-setuptools.rst:16 msgid "" @@ -5434,6 +5752,8 @@ msgid "" "development as a whole. For example, it does not provide guidance or tool " "recommendations for version control, documentation, or testing." msgstr "" +"本节 *并不* 旨在全面涵盖 Python 项目开发的最佳实践。例如,它不为版本控制、文" +"档或测试提供指导或工具建议。" #: ../source/guides/distributing-packages-using-setuptools.rst:20 msgid "" @@ -5442,18 +5762,19 @@ msgid "" "note that some advisory content there may be outdated. In the event of " "conflicts, prefer the advice in the Python Packaging User Guide." msgstr "" +"更多参考资料请参阅 :ref:`setuptools` 文档中的 :std:doc:`构建和分发软件包 " +"`,但请注意其中一些建议性内容可能已经过时。如有冲" +"突,请以 Python Packaging User Guide 中的建议为准。" #: ../source/guides/distributing-packages-using-setuptools.rst:28 msgid "Requirements for packaging and distributing" -msgstr "" +msgstr "打包和分发的前提要求" #: ../source/guides/distributing-packages-using-setuptools.rst:29 msgid "" "First, make sure you have already fulfilled the :ref:`requirements for " "installing packages `." -msgstr "" -"首先,确保你已经满足了 :ref:`requirements for installing packages " -"`。" +msgstr "首先,确保你已经满足了 :ref:`安装软件包的要求 `。" #: ../source/guides/distributing-packages-using-setuptools.rst:32 msgid "Install \"twine\" [1]_:" @@ -5465,6 +5786,9 @@ msgid "" "Package>` to :term:`PyPI ` (see :ref:`below " "`)." msgstr "" +"你需要用它把项目的 :term:`分发包 ` 上传到 :term:`PyPI " +"`,参见 :ref:`下文 `。" #: ../source/guides/distributing-packages-using-setuptools.rst:52 msgid "Configuring your project" @@ -5482,7 +5806,7 @@ msgid "" "in the `PyPA sample project `_." msgstr "" "最重要的文件是 :file:`setup.py` ,它存在于你项目目录的根部。如果你想有一个例" -"子作为参考,请参阅 `PyPA 样本项目 `_ " +"子作为参考,请参阅 `PyPA 示例项目 `_ " "的 `setup.py `_。" @@ -5498,6 +5822,9 @@ msgid "" "of your project are defined. The most relevant arguments are explained " "in :ref:`the section below `." msgstr "" +"它是配置项目各个方面内容的文件。:file:`setup.py` 的主要特点是它包含一个全局 " +"``setup()`` 函数。项目的具体细节正是通过这个函数的关键字参数来定义的。最相关" +"的参数将在 :ref:`下文 ` 中解释。" #: ../source/guides/distributing-packages-using-setuptools.rst:74 msgid "" @@ -5505,6 +5832,8 @@ msgid "" "packaging tasks. To get a listing of available commands, run ``python3 " "setup.py --help-commands``." msgstr "" +"它是用于运行与打包任务相关的各种命令的命令行界面。要列出可用命令,请运行 " +"``python3 setup.py --help-commands``。" #: ../source/guides/distributing-packages-using-setuptools.rst:82 msgid "" @@ -5514,10 +5843,10 @@ msgid "" "setup.cfg>`_ in the `PyPA sample project `_." msgstr "" -":file:`setup.cfg` 是一个 ini 文件,包含 :file:`setup.py` 命令的默认。 例如," -"参阅 `PyPA 样本项目 `_ 中的 " +":file:`setup.cfg` 是一个 ini 文件,包含 :file:`setup.py` 命令选项的默认值。例" +"如,参阅 `PyPA 示例项目 `_ 中的 " "`setup.cfg `_ ." +"db5806e0a3204034c51b1c00dde7d5eb3fa2532e/setup.cfg>`_。" #: ../source/guides/distributing-packages-using-setuptools.rst:89 msgid "README.rst / README.md" @@ -5544,9 +5873,8 @@ msgid "" "main/README.md>`_ from the `PyPA sample project `_." msgstr "" -"有关示例,请参阅来自` PyPA 示例项目 `_ 的 `README.md `_ 。" +"有关示例,请参阅 `PyPA 示例项目 `_ 中" +"的 `README.md `_。" #: ../source/guides/distributing-packages-using-setuptools.rst:102 msgid "" @@ -5558,6 +5886,12 @@ msgid "" "found. If you are using setuptools, you don't need to list your readme file " "in :file:`MANIFEST.in`. Otherwise, include it to be explicit." msgstr "" +"使用 :ref:`setuptools` 0.6.27+ 的项目默认会在源分发中包含标准的 readme 文件" +"(:file:`README.rst`、:file:`README.txt` 或 :file:`README`)。内置的 " +":ref:`distutils` 库从 Python 3.7 开始采用这一行为。此外,:ref:`setuptools` " +"36.4.0+ 在找到 :file:`README.md` 时也会将其包含进来。如果你在使用 setuptools" +",就无需在 :file:`MANIFEST.in` 中列出你的 readme 文件。否则,为了明确起见,请" +"将其列出。" #: ../source/guides/distributing-packages-using-setuptools.rst:111 msgid "MANIFEST.in" @@ -5570,6 +5904,10 @@ msgid "" "on writing a :file:`MANIFEST.in` file, including a list of what's included " "by default, see \":ref:`Using MANIFEST.in`\"." msgstr "" +"当你需要打包一些不会自动包含在源分发中的额外文件时,就需要 " +":file:`MANIFEST.in`。有关编写 :file:`MANIFEST.in` 文件的详细信息(包括默认会" +"包含哪些内容的列表),请参见 \":ref:`使用 MANIFEST.in " +"`\"。" #: ../source/guides/distributing-packages-using-setuptools.rst:118 msgid "" @@ -5578,7 +5916,7 @@ msgid "" "its manifest file, since all the necessary files have been included " "by :ref:`setuptools` 43.0.0 and newer." msgstr "" -"然而,你可能不是必须要使用 :file:`MANIFEST.in`。举个例子,`PyPA 示例项目" +"然而,你可能不是必须要使用 :file:`MANIFEST.in`。举个例子,`PyPA 示例项目 " "`_ 已经删除了它的清单文件,因为所有必" "要的文件已经被 :ref:`setuptools` 43.0.0 和更新的版本所包含。" @@ -5617,7 +5955,7 @@ msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:139 msgid "" -msgstr "" +msgstr "<你的软件包>" #: ../source/guides/distributing-packages-using-setuptools.rst:141 msgid "" @@ -5625,6 +5963,9 @@ msgid "" "Python modules and packages under a single top-level package that has the " "same :ref:`name ` as your project, or something very close." msgstr "" +"尽管这不是必需的,但最常见的做法是把你的 Python 模块和软件包放在单个顶层软件" +"包之下,该顶层软件包的 :ref:`名称 ` 与你的项目相同,或者非常接" +"近。" #: ../source/guides/distributing-packages-using-setuptools.rst:145 msgid "" @@ -5655,6 +5996,8 @@ msgid "" "elsewhere. The full list can be found :doc:`in the setuptools documentation " "`." msgstr "" +"其中一些参数暂时在下面解释,之后相关信息会移至别处。完整列表可在 " +":doc:`setuptools 文档 ` 中找到。" #: ../source/guides/distributing-packages-using-setuptools.rst:163 msgid "" @@ -5688,6 +6031,10 @@ msgid "" "packages. Use the ``exclude`` keyword argument to omit packages that are " "not intended to be released and installed." msgstr "" +"将 ``packages`` 设为项目中所有 :term:`导入包 ` 的列表,包括它" +"们的子包、子子包等。虽然这些软件包可以手动列出,但 ``setuptools.find_packages" +"()`` 会自动找到它们。使用 ``include`` 关键字参数可以只查找给定的软件包。使用 " +"``exclude`` 关键字参数可以省略那些不打算发布和安装的软件包。" #: ../source/guides/distributing-packages-using-setuptools.rst:192 msgid "``py_modules``" @@ -5699,6 +6046,9 @@ msgid "" "a package, set ``py_modules`` to a list of the names of the modules (minus " "the ``.py`` extension) in order to make :ref:`setuptools` aware of them." msgstr "" +"如果你的项目包含任何不属于某个软件包的单文件 Python 模块,请将 " +"``py_modules`` 设为这些模块的名称(去掉 ``.py`` 扩展名)列表,以便让 " +":ref:`setuptools` 知晓它们。" #: ../source/guides/distributing-packages-using-setuptools.rst:204 #, fuzzy @@ -5711,12 +6061,16 @@ msgid "" "minimally needs to run. When the project is installed by :ref:`pip`, this is " "the specification that is used to install its dependencies." msgstr "" +"\"install_requires\" 应用于指定项目正常运行所最低限度需要的依赖项。当项目被 " +":ref:`pip` 安装时,使用的正是这一说明来安装其依赖项。" #: ../source/guides/distributing-packages-using-setuptools.rst:214 msgid "" "For more on using \"install_requires\" see :ref:`install_requires vs " "Requirements files`." msgstr "" +"有关使用 \"install_requires\" 的更多信息,请参见 :ref:`install_requires vs " +"Requirements files`。" #: ../source/guides/distributing-packages-using-setuptools.rst:221 msgid "``package_data``" @@ -5730,6 +6084,9 @@ msgid "" "be of interest to programmers using the package. These files are called " "\"package data\"." msgstr "" +"通常,还需要把一些额外文件安装到 :term:`导入包 ` 中。这些文件" +"往往是与软件包实现密切相关的数据,或者是包含文档的文本文件,使用该软件包的程" +"序员可能会对这些文档感兴趣。这些文件被称为 \"软件包数据\"(package data)。" #: ../source/guides/distributing-packages-using-setuptools.rst:235 msgid "" @@ -5737,6 +6094,8 @@ msgid "" "names that should be copied into the package. The paths are interpreted as " "relative to the directory containing the package." msgstr "" +"该值必须是一个映射,从软件包名称映射到应当复制进该软件包的相对路径名列表。这" +"些路径会被解释为相对于包含该软件包的目录。" #: ../source/guides/distributing-packages-using-setuptools.rst:239 msgid "" @@ -5744,6 +6103,8 @@ msgid "" "` from the :std:doc:`setuptools docs " "`." msgstr "" +"更多信息请参见 :std:doc:`setuptools 文档 ` 中的 " +":std:doc:`包含数据文件 `。" #: ../source/guides/distributing-packages-using-setuptools.rst:247 msgid "``data_files``" @@ -5757,6 +6118,10 @@ msgid "" "you to do that. It is mostly useful if you need to install files which are " "used by other programs, which may be unaware of Python packages." msgstr "" +"虽然配置 :ref:`Package Data` 对大多数需求来说已经足够,但在某些情况下,你可能" +"需要把数据文件放到 :term:`导入包 ` *之外*。``data_files`` 指" +"令允许你这样做。它主要适用于你需要安装供其他程序使用的文件,而这些程序可能并" +"不知道 Python 软件包的存在。" #: ../source/guides/distributing-packages-using-setuptools.rst:259 msgid "" @@ -5769,12 +6134,20 @@ msgid "" "``files`` is interpreted relative to the :file:`setup.py` script at the top " "of the project source distribution." msgstr "" +"序列中的每个 ``(directory, files)`` 对都指定了安装目录以及要安装到那里的文件" +"。``directory`` 必须是相对路径(不过这在将来可能会改变,参见 `wheel 的 Issue " +"#92 `_),它会被解释为相对于安装前缀" +"(默认安装时为 Python 的 ``sys.prefix``;用户安装时为 ``site.USER_BASE``)" +"。``files`` 中的每个文件名都会被解释为相对于项目源分发顶部的 " +":file:`setup.py` 脚本。" #: ../source/guides/distributing-packages-using-setuptools.rst:269 msgid "" "For more information see the distutils section on :ref:`Installing " "Additional Files `." msgstr "" +"更多信息请参见 distutils 中关于 :ref:`安装额外文件 ` 的章节。" #: ../source/guides/distributing-packages-using-setuptools.rst:274 msgid "" @@ -5783,6 +6156,9 @@ msgid "" "Alternatively, if you must use ``python setup.py``, then you need to pass " "the ``--old-and-unmanageable`` option." msgstr "" +"以 egg 方式安装软件包时,不支持 ``data_files``。因此,如果你的项目使用 " +":ref:`setuptools`,就必须使用 ``pip`` 来安装它。或者,如果你一定要用 " +"``python setup.py``,则需要传入 ``--old-and-unmanageable`` 选项。" #: ../source/guides/distributing-packages-using-setuptools.rst:281 #: ../source/specifications/pyproject-toml.rst:158 @@ -5797,16 +6173,21 @@ msgid "" "the recommended approach to achieve cross-platform compatibility is to " "use :ref:`console_scripts` entry points (see below)." msgstr "" +"虽然 ``setup()`` 支持 :ref:`scripts " +"` 关键字来指向预先做好的待安装脚本,但要实现跨平台兼容,推荐的做法是使用 " +":ref:`console_scripts` 入口点(见下文)。" #: ../source/guides/distributing-packages-using-setuptools.rst:291 msgid "Choosing a versioning scheme" -msgstr "" +msgstr "选择版本管理方案" #: ../source/guides/distributing-packages-using-setuptools.rst:293 msgid "" "See :ref:`versioning` for information on common version schemes and how to " "choose between them." msgstr "" +"有关常见的版本管理方案以及如何在它们之间做出选择的信息,请参见 " +":ref:`versioning`。" #: ../source/guides/distributing-packages-using-setuptools.rst:298 msgid "Working in \"development mode\"" @@ -5820,12 +6201,17 @@ msgid "" "as editable will be reflected the next time an interpreter process is " "started." msgstr "" +"在开发项目期间,你可以用 \"可编辑\"(editable)或 \"开发\"(develop)模式来安" +"装项目。以可编辑模式安装后,项目无需重新安装即可就地编辑:对以可编辑模式安装" +"的项目中 Python 源文件所做的更改,将在下次启动解释器进程时生效。" #: ../source/guides/distributing-packages-using-setuptools.rst:306 msgid "" "To install a Python package in \"editable\"/\"development\" mode Change " "directory to the root of the project directory and run:" msgstr "" +"要以 \"可编辑\"/\"开发\" 模式安装 Python 软件包,请切换到项目目录的根目录并运" +"行:" #: ../source/guides/distributing-packages-using-setuptools.rst:314 msgid "" @@ -5836,6 +6222,10 @@ msgid "" "declared with ``console_scripts``. Dependencies will be installed in the " "usual, non-editable mode." msgstr "" +"pip 的命令行标志 ``-e`` 是 ``--editable`` 的简写,而 ``.`` 指的是当前工作目录" +",因此合在一起,意思就是以可编辑模式安装当前目录(即你的项目)。这还会安装由 " +"``install_requires`` 声明的所有依赖项以及由 ``console_scripts`` 声明的所有脚" +"本。依赖项将以常规的非可编辑模式安装。" #: ../source/guides/distributing-packages-using-setuptools.rst:321 msgid "" @@ -5844,6 +6234,9 @@ msgid "" "want \"bar\" installed from VCS in editable mode, then you could construct a " "requirements file like so::" msgstr "" +"你可能还想以可编辑模式安装某些依赖项。例如,假设你的项目需要 \"foo\" 和 " +"\"bar\",但你希望 \"bar\" 以可编辑模式从 VCS 安装,那么你可以像这样构造一个 " +"requirements 文件::" #: ../source/guides/distributing-packages-using-setuptools.rst:329 msgid "" @@ -5851,6 +6244,8 @@ msgid "" "line overrides the \"bar\" dependency, such that it's fulfilled from VCS, " "not PyPI." msgstr "" +"第一行表示安装你的项目及所有依赖项。第二行覆盖了 \"bar\" 依赖项,使其改从 " +"VCS 而不是 PyPI 获取。" #: ../source/guides/distributing-packages-using-setuptools.rst:333 msgid "" @@ -5858,6 +6253,8 @@ msgid "" "mode, the requirements file should look like this, with the local paths at " "the top of the file::" msgstr "" +"不过如果你希望 \"bar\" 以可编辑模式从本地目录安装,那么 requirements 文件看上" +"去应该像这样,把本地路径放在文件顶部::" #: ../source/guides/distributing-packages-using-setuptools.rst:338 msgid "" @@ -5867,21 +6264,27 @@ msgid "" "the pip docs. For more on VCS installs, see the :ref:`VCS Support ` section of the pip docs." msgstr "" +"否则,由于 requirements 文件的安装顺序,该依赖项将从 PyPI 获取。有关 " +"requirements 文件的更多信息,请参见 pip 文档中的 :ref:`requirements 文件 " +"` 一节。有关 VCS 安装的更多信息,请参见 pip 文档中的 " +":ref:`VCS 支持 ` 一节。" #: ../source/guides/distributing-packages-using-setuptools.rst:342 msgid "" "Lastly, if you don't want to install any dependencies at all, you can run:" -msgstr "" +msgstr "最后,如果你根本不想安装任何依赖项,可以运行:" #: ../source/guides/distributing-packages-using-setuptools.rst:349 msgid "" "For more information, see the :doc:`Development Mode ` section of the :ref:`setuptools` docs." msgstr "" +"更多信息请参见 :ref:`setuptools` 文档中的 :doc:`开发模式 " +"` 一节。" #: ../source/guides/distributing-packages-using-setuptools.rst:356 msgid "Packaging your project" -msgstr "" +msgstr "打包你的项目" #: ../source/guides/distributing-packages-using-setuptools.rst:358 msgid "" @@ -5890,12 +6293,15 @@ msgid "" "a :term:`Distribution ` (aka \":term:`Package " "`\") for your project." msgstr "" +"要让你的项目能够从 :term:`PyPI ` 这样的 " +":term:`Package Index` 安装,你需要为项目创建一个 :term:`分发包 `,也称为 \":term:`软件包 `\"。" #: ../source/guides/distributing-packages-using-setuptools.rst:363 msgid "" "Before you can build wheels and sdists for your project, you'll need to " "install the ``build`` package:" -msgstr "" +msgstr "在为项目构建 wheel 包和 sdist 之前,你需要先安装 ``build`` 软件包:" #: ../source/guides/distributing-packages-using-setuptools.rst:380 msgid "Source distributions" @@ -5905,7 +6311,7 @@ msgstr "资源分布" msgid "" "Minimally, you should create a :term:`Source Distribution `:" -msgstr "" +msgstr "至少,你应当创建一个 :term:`源分发 `:" #: ../source/guides/distributing-packages-using-setuptools.rst:398 msgid "" @@ -5915,6 +6321,10 @@ msgid "" "involves a build step to build out the installation metadata " "from :file:`setup.py` and/or :file:`setup.cfg`." msgstr "" +"\"源分发\" 是未构建的(也就是说,它不是 :term:`Built Distribution`),在由 " +"pip 安装时需要一个构建步骤。即使该分发是纯 Python 的(即不含扩展),它仍然涉" +"及一个构建步骤,用于从 :file:`setup.py` 和/或 :file:`setup.cfg` 构建出安装元" +"数据。" #: ../source/guides/distributing-packages-using-setuptools.rst:406 msgid "Wheels" @@ -5927,18 +6337,25 @@ msgid "" "through the \"build\" process. Installing wheels is substantially faster for " "the end user than installing from a source distribution." msgstr "" +"你还应当为项目创建 wheel 包。wheel 是一种 :term:`已构建的软件包 `,无需经过 \"构建\" 过程即可安装。对最终用户来说,安装 wheel 包" +"比从源分发安装要快得多。" #: ../source/guides/distributing-packages-using-setuptools.rst:413 msgid "" "If your project is pure Python then you'll be creating a :ref:`\"Pure Python " "Wheel\" (see section below) `." msgstr "" +"如果你的项目是纯 Python 的,那么你要创建的就是 :ref:`\"纯 Python wheel\"(见" +"下文) `。" #: ../source/guides/distributing-packages-using-setuptools.rst:416 msgid "" "If your project contains compiled extensions, then you'll be creating what's " "called a :ref:`*Platform Wheel* (see section below) `." msgstr "" +"如果你的项目包含已编译的扩展,那么你要创建的就是所谓的 :ref:`平台 wheel (见" +"下文) `。" #: ../source/guides/distributing-packages-using-setuptools.rst:419 msgid "" @@ -5946,27 +6363,29 @@ msgid "" "you should create what's called a *Universal Wheel* by adding the following " "to your :file:`setup.cfg` file:" msgstr "" +"如果你的项目还支持 Python 2 *并且* 不包含任何 C 扩展,那么你应当创建所谓的 " +"*通用 wheel*,方法是在 :file:`setup.cfg` 文件中添加以下内容:" #: ../source/guides/distributing-packages-using-setuptools.rst:428 msgid "" "Only use this setting if your project does not have any C extensions *and* " "supports Python 2 and 3." -msgstr "" +msgstr "只有当你的项目没有任何 C 扩展 *并且* 支持 Python 2 和 3 时,才使用此设置。" #: ../source/guides/distributing-packages-using-setuptools.rst:435 msgid "Pure Python Wheels" -msgstr "" +msgstr "纯 Python wheel" #: ../source/guides/distributing-packages-using-setuptools.rst:437 msgid "" "*Pure Python Wheels* contain no compiled extensions, and therefore only " "require a single Python wheel." -msgstr "" +msgstr "*纯 Python wheel* 不包含已编译的扩展,因此只需要一个 Python wheel。" #: ../source/guides/distributing-packages-using-setuptools.rst:440 #: ../source/guides/distributing-packages-using-setuptools.rst:469 msgid "To build the wheel:" -msgstr "" +msgstr "要构建 wheel 包:" #: ../source/guides/distributing-packages-using-setuptools.rst:454 msgid "" @@ -5974,22 +6393,29 @@ msgid "" "wheel that's named such that it's usable on any Python 3 installation. For " "details on the naming of wheel files, see :pep:`425`." msgstr "" +"``wheel`` 软件包会检测到代码是纯 Python 的,并构建一个 wheel 包,其名称使它可" +"用于任何 Python 3 安装环境。有关 wheel 文件命名的详细信息,请参见 " +":pep:`425`。" #: ../source/guides/distributing-packages-using-setuptools.rst:458 msgid "" "If you run ``build`` without ``--wheel`` or ``--sdist``, it will build both " "files for you; this is useful when you don't need multiple wheels." msgstr "" +"如果你在运行 ``build`` 时不带 ``--wheel`` 或 ``--sdist``,它会为你构建这两种" +"文件;当你不需要多个 wheel 时,这很有用。" #: ../source/guides/distributing-packages-using-setuptools.rst:464 msgid "Platform Wheels" -msgstr "" +msgstr "平台 wheel" #: ../source/guides/distributing-packages-using-setuptools.rst:466 msgid "" "*Platform Wheels* are wheels that are specific to a certain platform like " "Linux, macOS, or Windows, usually due to containing compiled extensions." msgstr "" +"*平台 wheel* 是特定于某一平台(如 Linux、macOS 或 Windows)的 wheel,通常是因" +"为包含了已编译的扩展。" #: ../source/guides/distributing-packages-using-setuptools.rst:484 msgid "" @@ -5997,6 +6423,8 @@ msgid "" "build a wheel that's named such that it's only usable on the platform that " "it was built on. For details on the naming of wheel files, see :pep:`425`." msgstr "" +"``wheel`` 软件包会检测到代码不是纯 Python 的,并构建一个 wheel 包,其名称使它" +"只能用于构建它的那个平台。有关 wheel 文件命名的详细信息,请参见 :pep:`425`。" #: ../source/guides/distributing-packages-using-setuptools.rst:490 msgid "" @@ -6004,6 +6432,8 @@ msgid "" "platform wheels for Windows, macOS, and the multi-distro ``manylinux*`` ABI. " "Details of the latter are defined in :pep:`513`." msgstr "" +":term:`PyPI ` 目前支持上传面向 Windows、macOS 和" +"多发行版 ``manylinux*`` ABI 的平台 wheel。后者的细节定义在 :pep:`513` 中。" #: ../source/guides/distributing-packages-using-setuptools.rst:498 msgid "Uploading your Project to PyPI" @@ -6015,6 +6445,8 @@ msgid "" "`` was created under your project's root directory. That's where you'll find " "your distribution file(s) to upload." msgstr "" +"当你运行创建分发包的命令时,项目根目录下会创建一个新目录 ``dist/``。你要上传" +"的分发包文件就可以在那里找到。" #: ../source/guides/distributing-packages-using-setuptools.rst:504 msgid "" @@ -6023,6 +6455,9 @@ msgid "" "or the configuration in your :file:`setup.py` file, you will need to rebuild " "these files again before you can distribute the changes to PyPI." msgstr "" +"这些文件只在你运行创建分发包的命令时才会生成。这意味着,每当你更改了项目源码" +"或 :file:`setup.py` 文件中的配置,都需要重新构建这些文件,然后才能将更改分发" +"到 PyPI。" #: ../source/guides/distributing-packages-using-setuptools.rst:509 msgid "" @@ -6031,6 +6466,9 @@ msgid "" "basis. See :ref:`using-test-pypi` on how to setup your configuration in " "order to use it." msgstr "" +"在正式发布到 PyPI 主仓库之前,你可能更愿意先在 `PyPI 测试站点 `_ 上练习,该站点隔一段时间就会清理一次。有关如何设置配置才能" +"使用它,请参见 :ref:`using-test-pypi`。" #: ../source/guides/distributing-packages-using-setuptools.rst:514 msgid "" @@ -6040,6 +6478,10 @@ msgid "" "HTTP or unverified HTTPS connection on some Python versions, allowing your " "username and password to be intercepted during transmission." msgstr "" +"在其他资料中,你可能会看到使用 ``python setup.py register`` 和 ``python " +"setup.py upload`` 的说法。**强烈不建议** 使用这些注册和上传软件包的方法,因为" +"在某些 Python 版本上,它们可能使用明文 HTTP 或未经验证的 HTTPS 连接,从而使你" +"的用户名和密码在传输过程中被截获。" #: ../source/guides/distributing-packages-using-setuptools.rst:520 msgid "" @@ -6050,6 +6492,11 @@ msgid "" "long descriptions provided in :file:`setup.py` are valid. You can do this " "by running :std:doc:`twine check ` on your package files:" msgstr "" +"PyPI 所使用的 reStructuredText 解析器 **并** 不是 Sphinx!此外,为了确保所有" +"用户的安全,某些类型的 URL 和指令会被禁止或剔除(例如 ``.. raw::`` 指令)。在" +"尝试上传分发包 **之前**,你应当检查在 :file:`setup.py` 中提供的简短/详细描述" +"是否有效。你可以对软件包文件运行 :std:doc:`twine check ` 来做到这一点" +":" #: ../source/guides/distributing-packages-using-setuptools.rst:533 msgid "Create an account" @@ -6068,7 +6515,7 @@ msgstr "" msgid "" "Now you'll create a PyPI `API token`_ so you will be able to securely upload " "your project." -msgstr "现在你将创建一个PyPI `API 令牌`_ ,这样你就能安全地上传你的项目。" +msgstr "现在你将创建一个 PyPI `API 令牌`_ ,这样你就能安全地上传你的项目。" #: ../source/guides/distributing-packages-using-setuptools.rst:542 msgid "" @@ -6152,8 +6599,8 @@ msgid "" "access. :ref:`pip` is currently considering changing this by `making user " "installs the default behavior `_." msgstr "" -"根据你的平台,这可能需要 root 或管理员权限。 :ref:`pip` 目前正在考虑通过`使用" -"户安装(user installs)成为默认行为 `_ 来改变这一点。" #: ../source/guides/dropping-older-python-versions.rst:5 @@ -6166,6 +6613,8 @@ msgid "" "standard :ref:`core-metadata` 1.2 specification via the :ref:`\"Requires-" "Python\" ` attribute." msgstr "" +"得益于标准 :ref:`core-metadata` 1.2 规范中的 :ref:`\"Requires-Python\" ` 属性,放弃对旧版 Python 的支持成为可能。" #: ../source/guides/dropping-older-python-versions.rst:9 msgid "" @@ -6174,12 +6623,17 @@ msgid "" "version in the package metadata. If they do not match, it will attempt to " "install the last package distribution that supported that Python runtime." msgstr "" +"诸如 Pip 之类的 Metadata 1.2+ 安装器会遵循此规范,将当前的 Python 运行时与软" +"件包元数据中所需的版本进行匹配比较。如果两者不匹配,安装器将尝试安装最后一个" +"支持该 Python 运行时的分发包。" #: ../source/guides/dropping-older-python-versions.rst:12 msgid "" "This mechanism can be used to drop support for older Python versions, by " "amending the ``Requires-Python`` attribute in the package metadata." msgstr "" +"通过修改软件包元数据中的 ``Requires-Python`` 属性,可以利用这一机制来放弃对旧" +"版 Python 的支持。" #: ../source/guides/dropping-older-python-versions.rst:15 msgid "Requirements" @@ -6190,10 +6644,12 @@ msgid "" "This workflow requires that the user installing the package uses Pip [#]_, " "or another installer that supports the Metadata 1.2 specification." msgstr "" +"这一工作流程要求安装软件包的用户使用 Pip [#]_ 或其他支持 Metadata 1.2 规范的" +"安装器。" #: ../source/guides/dropping-older-python-versions.rst:20 msgid "Dealing with the universal wheels" -msgstr "" +msgstr "处理通用 wheel" #: ../source/guides/dropping-older-python-versions.rst:22 msgid "" @@ -6204,12 +6660,19 @@ msgid "" "this tag to just ``py3``. It is often configured within :file:`setup.cfg` " "under the ``[bdist_wheel]`` section by setting ``universal = 1``." msgstr "" +"传统上,提供与 Python 2 和 Python 3 语义兼容的 Python 代码的 " +":ref:`setuptools` 项目,会生成名称中带有 ``py2.py3`` 标签的 :term:`wheel 包 " +"`。在放弃对 Python 2 的支持时,务必不要忘记将此标签改为仅 ``py3``。这" +"通常是在 :file:`setup.cfg` 的 ``[bdist_wheel]`` 部分中通过设置 ``universal = " +"1`` 来配置的。" #: ../source/guides/dropping-older-python-versions.rst:29 msgid "" "If you use this method, either remove this option or section, or explicitly " "set ``universal`` to ``0``:" msgstr "" +"如果你使用这种方法,请删除该选项或该部分,或者将 ``universal`` 显式设置为 " +"``0``:" #: ../source/guides/dropping-older-python-versions.rst:41 msgid "" @@ -6217,6 +6680,8 @@ msgid "" "invocations, passing the ``--universal`` flag on the command line could " "override this setting." msgstr "" +"至于 :ref:`已弃用 ` 的 ``setup.py`` 直接调用,在命令行上" +"传递 ``--universal`` 标志可能会覆盖此设置。" #: ../source/guides/dropping-older-python-versions.rst:45 msgid "Defining the Python version required" @@ -6228,7 +6693,7 @@ msgstr "1. 安装 twine" #: ../source/guides/dropping-older-python-versions.rst:50 msgid "Ensure that you have twine available at its latest version. Steps:" -msgstr "" +msgstr "请确保你已安装最新版本的 twine。步骤如下:" #: ../source/guides/dropping-older-python-versions.rst:66 msgid "2. Specify the version ranges for supported Python distributions" @@ -6241,6 +6706,9 @@ msgid "" "configuration field corresponds to the :ref:`Requires-Python ` core metadata field:" msgstr "" +"在项目的 :file:`pyproject.toml` 中设置版本范围,声明支持哪些 Python 发行版。" +"其中的 :ref:`requires-python` 配置字段对应于 :ref:`Requires-Python ` 核心元数据字段:" #: ../source/guides/dropping-older-python-versions.rst:80 msgid "" @@ -6257,6 +6725,8 @@ msgid "" "If using the :ref:`setuptools` build backend, consult the `dependency-" "management`_ documentation for more options." msgstr "" +"如果使用 :ref:`setuptools` 构建后端,请查阅 `dependency-management`_ 文档了解" +"更多选项。" #: ../source/guides/dropping-older-python-versions.rst:92 msgid "" @@ -6264,6 +6734,8 @@ msgid "" "3.10\"``. Doing so can cause different errors and version conflicts. See the " "`discourse-discussion`_ for more information." msgstr "" +"避免为版本范围添加上界,例如 ``\">= 3.8, < 3.10\"``。这样做可能导致各种错误和" +"版本冲突。更多信息请参见 `discourse-discussion`_。" #: ../source/guides/dropping-older-python-versions.rst:96 msgid "3. Validating the Metadata before publishing" @@ -6274,6 +6746,8 @@ msgid "" "Within a Python source package (the zip or the tar-gz file you download) is " "a text file called PKG-INFO." msgstr "" +"在 Python 源分发(即你下载的 zip 或 tar-gz 文件)中,有一个名为 PKG-INFO 的文" +"本文件。" #: ../source/guides/dropping-older-python-versions.rst:100 msgid "" @@ -6281,6 +6755,8 @@ msgid "" "generates the source package. The file contains a set of keys and values, " "the list of keys is part of the PyPA standard metadata format." msgstr "" +"该文件由 :term:`构建后端 ` 在生成源分发时生成。文件中包含一组" +"键和值,这些键的列表是 PyPA 标准元数据格式的一部分。" #: ../source/guides/dropping-older-python-versions.rst:103 msgid "You can see the contents of the generated file like this:" @@ -6288,23 +6764,23 @@ msgstr "你可以看到生成文件的内容是这样的:" #: ../source/guides/dropping-older-python-versions.rst:109 msgid "Validate that the following is in place, before publishing the package:" -msgstr "" +msgstr "在发布软件包之前,请验证以下几点已经就绪:" #: ../source/guides/dropping-older-python-versions.rst:111 msgid "" "If you have upgraded correctly, the ``Metadata-Version`` value should be 1.2 " "or higher." -msgstr "" +msgstr "如果你已正确升级,那么 ``Metadata-Version`` 的值应为 1.2 或更高。" #: ../source/guides/dropping-older-python-versions.rst:112 msgid "" "The ``Requires-Python`` field is set and matches your specification in the " "configuration file." -msgstr "" +msgstr "``Requires-Python`` 字段已设置,并且与你在配置文件中声明的规格一致。" #: ../source/guides/dropping-older-python-versions.rst:115 msgid "4. Publishing the package" -msgstr "" +msgstr "4. 发布软件包" #: ../source/guides/dropping-older-python-versions.rst:117 msgid "Proceed as suggested in :ref:`Uploading your Project to PyPI`." @@ -6324,10 +6800,14 @@ msgid "" "depends on whether the project needs to be stable and well-covered for a " "wider range of users." msgstr "" +"原则上,对 Python 版本的元数据支持应当尽可能长久地保留,因为一旦放弃,仍然依" +"赖某个版本的用户将被迫降级。但如果支持某个特定版本成为新特性的阻碍,或者出现" +"其他问题,就应当修改元数据中的 ``Requires-Python``。当然,这也取决于项目是否" +"需要为更广泛的用户群体保持稳定并覆盖完善。" #: ../source/guides/dropping-older-python-versions.rst:128 msgid "Each version compatibility change should have its own release." -msgstr "" +msgstr "每次版本兼容性变更都应有其独立的发布。" #: ../source/guides/dropping-older-python-versions.rst:132 msgid "" @@ -6336,10 +6816,13 @@ msgid "" "visible places (like the testing environment). Tools like pyupgrade_ or " "`ruff `_ can automate some of this work." msgstr "" +"在放弃某个 Python 版本时,除了更新可见位置(如测试环境)中使用的版本外,全面" +"升级项目的代码语法也可能颇有收益。pyupgrade_ 或 `ruff `_ 等工具可以自动完成其中的一部分工作。" #: ../source/guides/dropping-older-python-versions.rst:138 msgid "Support for the Metadata 1.2 specification has been added in Pip 9.0." -msgstr "" +msgstr "Pip 9.0 已加入对 Metadata 1.2 规范的支持。" #: ../source/guides/hosting-your-own-index.rst:5 msgid "Hosting your own simple repository" @@ -6352,6 +6835,9 @@ msgid "" "the proper directory structure and use any web server that can serve static " "files and generate an autoindex." msgstr "" +"如果你想托管自己的简单存储库 [1]_,可以使用 :doc:`devpi ` 之类的" +"软件包,也可以直接创建合适的目录结构,然后使用任何能够提供静态文件服务并生成" +"自动目录索引(autoindex)的 Web 服务器。" #: ../source/guides/hosting-your-own-index.rst:13 msgid "" @@ -6359,6 +6845,8 @@ msgid "" "your user's default repositories, you should instruct them in your project's " "description to configure their installer appropriately. For example with pip:" msgstr "" +"无论采用哪种方式,由于你所托管的存储库很可能不在用户的默认存储库之列,你应当" +"在项目描述中指引用户对其安装程序进行相应的配置。以 pip 为例:" #: ../source/guides/hosting-your-own-index.rst:29 msgid "" @@ -6366,10 +6854,12 @@ msgid "" "with valid HTTPS. At this time, the security of your user's installations " "depends on all repositories using a valid HTTPS setup." msgstr "" +"此外,**强烈** 建议你使用有效的 HTTPS 来提供存储库服务。目前,用户安装过程的" +"安全性取决于所有存储库都采用了有效的 HTTPS 设置。" #: ../source/guides/hosting-your-own-index.rst:35 msgid "\"Manual\" repository" -msgstr "" +msgstr "“手动”存储库" #: ../source/guides/hosting-your-own-index.rst:37 msgid "" @@ -6380,6 +6870,10 @@ msgid "" "have the projects \"Foo\" (with the versions 1.0 and 2.0) and \"bar\" (with " "the version 0.1) You should end up with a structure that looks like::" msgstr "" +"目录布局相当简单:你需要在根目录下为每个项目创建一个目录。该目录应当使用项目" +"的 :ref:`规范化名称 `。在每个目录中放入各个可下载的文件即" +"可。如果你有 \"Foo\"(版本 1.0 和 2.0)和 \"bar\"(版本 0.1)这两个项目,最终" +"得到的目录结构如下::" #: ../source/guides/hosting-your-own-index.rst:50 msgid "" @@ -6388,11 +6882,14 @@ msgid "" "server in `Twisted`_, you would simply run ``twistd -n web --path .`` and " "then instruct users to add the URL to their installer's configuration." msgstr "" +"完成这种布局后,只需配置你的 Web 服务器,使其在启用自动目录索引的情况下提供根" +"目录的服务。以 `Twisted`_ 内置的 Web 服务器为例,你只需运行 ``twistd -n " +"web --path .``,然后让用户把这个 URL 添加到其安装程序的配置中即可。" #: ../source/guides/hosting-your-own-index.rst:57 #: ../source/guides/index-mirrors-and-caches.rst:47 msgid "Existing projects" -msgstr "" +msgstr "现有项目" #: ../source/guides/hosting-your-own-index.rst:63 msgid "Package upload" @@ -6400,13 +6897,13 @@ msgstr "上传软件包" #: ../source/guides/hosting-your-own-index.rst:64 msgid "PyPI fall-through [2]_" -msgstr "" +msgstr "PyPI 回退 [2]_" #: ../source/guides/hosting-your-own-index.rst:65 #: ../source/guides/index-mirrors-and-caches.rst:56 #: ../source/guides/supporting-windows-using-appveyor.rst:139 msgid "Additional notes" -msgstr "" +msgstr "补充说明" #: ../source/guides/hosting-your-own-index.rst:67 #: ../source/guides/index-mirrors-and-caches.rst:58 @@ -6443,7 +6940,7 @@ msgstr "✔" msgid "" "multiple indexes with inheritance, with syncing, replication, fail-over; " "mirroring" -msgstr "" +msgstr "支持继承的多个索引,支持同步、复制、故障转移;镜像" #: ../source/guides/hosting-your-own-index.rst:73 #: ../source/guides/index-mirrors-and-caches.rst:71 @@ -6465,7 +6962,7 @@ msgstr ":ref:`pypicloud`" #: ../source/guides/hosting-your-own-index.rst:91 msgid "unmaintained; also cached proxying; authentication, authorisation" -msgstr "" +msgstr "已停止维护;还支持带缓存的代理;支持身份验证和授权" #: ../source/guides/hosting-your-own-index.rst:93 msgid ":ref:`pywharf`" @@ -6473,7 +6970,7 @@ msgstr ":ref:`pywharf`" #: ../source/guides/hosting-your-own-index.rst:96 msgid "unmaintained; serve files in GitHub" -msgstr "" +msgstr "已停止维护;在 GitHub 上提供文件服务" #: ../source/guides/hosting-your-own-index.rst:98 #: ../source/guides/index-mirrors-and-caches.rst:83 @@ -6482,7 +6979,7 @@ msgstr ":ref:`pulppython`" #: ../source/guides/hosting-your-own-index.rst:101 msgid "also mirroring, proxying; plugin for Pulp" -msgstr "" +msgstr "还支持镜像和代理;Pulp 的插件" #: ../source/guides/hosting-your-own-index.rst:103 msgid ":ref:`pip2pi`" @@ -6490,7 +6987,7 @@ msgstr ":ref:`pip2pi`" #: ../source/guides/hosting-your-own-index.rst:106 msgid "also mirroring; manual synchronisation" -msgstr "" +msgstr "还支持镜像;手动同步" #: ../source/guides/hosting-your-own-index.rst:108 msgid ":ref:`dumb-pypi`" @@ -6498,11 +6995,11 @@ msgstr ":ref:`dumb-pypi`" #: ../source/guides/hosting-your-own-index.rst:111 msgid "not a server, but a static file site generator" -msgstr "" +msgstr "不是服务器,而是静态文件站点生成器" #: ../source/guides/hosting-your-own-index.rst:113 msgid ":ref:`httpserver`" -msgstr "" +msgstr ":ref:`httpserver`" #: ../source/guides/hosting-your-own-index.rst:116 msgid "standard-library" @@ -6521,20 +7018,24 @@ msgid "" "current/mod/mod_cache_disk.html>`_, you can cache requests to package " "indexes through an Apache server" msgstr "" +"使用 `mod_rewrite `_ 和 `mod_cache_disk `_,可以通过 Apache 服务器缓存发往包索引的请" +"求" #: ../source/guides/hosting-your-own-index.rst:131 msgid "" "For complete documentation of the simple repository protocol, " "see :ref:`simple repository API `." msgstr "" -"简单存储库协议的完整文档,请查看 :ref:`simple repository API `。" +"简单存储库协议的完整文档,请查看 :ref:`简单存储库 API " +"`。" #: ../source/guides/hosting-your-own-index.rst:134 msgid "" "Can be configured to fall back to PyPI (or another package index) if a " "requested package is missing." -msgstr "" +msgstr "可以配置为在请求的软件包缺失时回退到 PyPI(或其他包索引)。" #: ../source/guides/index.rst:4 msgid "" @@ -6542,6 +7043,8 @@ msgid "" "are already familiar with the basics of Python packaging. If you're looking " "for an introduction to packaging, see :doc:`/tutorials/index`." msgstr "" +"**指南** 侧重于完成特定任务,并假定你已经熟悉 Python 打包的基础知识。如果你在" +"寻找打包的入门介绍,请参阅 :doc:`/tutorials/index`。" #: ../source/guides/index-mirrors-and-caches.rst:5 msgid "Package index mirrors and caches" @@ -6557,26 +7060,31 @@ msgid "" "Index>`) can be used to speed up local package installation, allow offline " "work, handle corporate firewalls or just plain Internet flakiness." msgstr "" +"对 PyPI(以及其他 :term:`包索引 `)进行镜像或缓存,可用于加快" +"本地软件包安装速度、支持离线工作、应对公司防火墙,或者单纯解决网络不稳定的问" +"题。" #: ../source/guides/index-mirrors-and-caches.rst:15 msgid "There are multiple classes of options in this area:" -msgstr "" +msgstr "这一领域有多种类型的选项:" #: ../source/guides/index-mirrors-and-caches.rst:17 msgid "local/hosted caching of package indexes." -msgstr "" +msgstr "本地/托管的包索引缓存。" #: ../source/guides/index-mirrors-and-caches.rst:19 msgid "" "local/hosted mirroring of a package index. A mirror is a (whole or partial) " "copy of a package index, which can be used in place of the original index." -msgstr "" +msgstr "本地/托管的包索引镜像。镜像是包索引的(完整或部分)副本,可用来替代原始索引。" #: ../source/guides/index-mirrors-and-caches.rst:23 msgid "" "private package index with fall-through to public package indexes (for " "example, to mitigate dependency confusion attacks), also known as a proxy." msgstr "" +"可回退到公共包索引的私有包索引(例如,用于缓解依赖混淆攻击),也称为代理(" +"proxy)。" #: ../source/guides/index-mirrors-and-caches.rst:29 msgid "Caching with pip" @@ -6587,6 +7095,8 @@ msgid "" "pip provides a number of facilities for speeding up installation by using " "local cached copies of :term:`packages `:" msgstr "" +"pip 提供了多种功能,可以通过使用 :term:`分发包 ` 的本地" +"缓存副本来加快安装速度:" #: ../source/guides/index-mirrors-and-caches.rst:34 msgid "" @@ -6594,12 +7104,16 @@ msgid "" "downloading all the requirements for a project and then pointing pip at " "those downloaded files instead of going to PyPI." msgstr "" +":ref:`快速本地安装 `:先下载项目的全部依" +"赖项,然后让 pip 指向这些已下载的文件,而不必访问 PyPI。" #: ../source/guides/index-mirrors-and-caches.rst:37 msgid "" "A variation on the above which pre-builds the installation files for the " "requirements using :ref:`python3 -m pip wheel `:" msgstr "" +"上述方式的一个变体,使用 :ref:`python3 -m pip wheel ` 为这些依" +"赖项预先构建安装文件:" #: ../source/guides/index-mirrors-and-caches.rst:53 msgid "Cache" @@ -6607,17 +7121,17 @@ msgstr "缓存" #: ../source/guides/index-mirrors-and-caches.rst:54 msgid "Mirror" -msgstr "" +msgstr "镜像" #: ../source/guides/index-mirrors-and-caches.rst:55 msgid "Proxy" -msgstr "" +msgstr "代理" #: ../source/guides/index-mirrors-and-caches.rst:62 msgid "" "multiple indexes with inheritance; syncing, replication, fail-over; package " "upload" -msgstr "" +msgstr "支持继承的多个索引;同步、复制、故障转移;上传软件包" #: ../source/guides/index-mirrors-and-caches.rst:65 msgid ":ref:`bandersnatch`" @@ -6625,15 +7139,15 @@ msgstr ":ref:`bandersnatch`" #: ../source/guides/index-mirrors-and-caches.rst:75 msgid "custom plugin enables caching; re-routing to other package indexes" -msgstr "" +msgstr "自定义插件可实现缓存;重新路由到其他包索引" #: ../source/guides/index-mirrors-and-caches.rst:81 msgid "unmaintained; authentication, authorisation" -msgstr "" +msgstr "已停止维护;支持身份验证、授权" #: ../source/guides/index-mirrors-and-caches.rst:87 msgid "plugin for Pulp; multiple proxied indexes; package upload" -msgstr "" +msgstr "面向 Pulp 的插件;多个代理的索引;上传软件包" #: ../source/guides/index-mirrors-and-caches.rst:89 msgid ":ref:`proxpi`" @@ -6646,7 +7160,7 @@ msgstr "多个代理的索引" #: ../source/guides/index-mirrors-and-caches.rst:95 msgid ":ref:`nginx_pypi_cache`" -msgstr "" +msgstr ":ref:`nginx_pypi_cache`" #: ../source/guides/index-mirrors-and-caches.rst:101 msgid ":ref:`flaskpypiproxy`" @@ -6667,6 +7181,8 @@ msgid "" "kinds of hardware, or to interoperate with different pieces of external " "software." msgstr "" +"科学软件的依赖项往往比大多数软件更复杂,而且它通常提供多种构建选项,以便利用" +"不同类型的硬件,或与不同的外部软件互操作。" #: ../source/guides/installing-scientific-packages.rst:13 msgid "" @@ -6676,6 +7192,9 @@ msgid "" "libraries, and can take advantage of different levels of vectorized " "instructions available in modern CPUs." msgstr "" +"特别是 `NumPy `__ ,它是 `科学 Python 技术栈 `_ 中大多数软件的基础,可以配置为与不同的 FORTRAN 库互" +"操作,并能利用现代 CPU 中可用的不同级别的向量化指令。" #: ../source/guides/installing-scientific-packages.rst:19 msgid "" @@ -6686,6 +7205,11 @@ msgid "" "atlas.sourceforge.net/>`__ BLAS/LAPACK library, restricted to SSE2 " "instructions, so they may not provide optimal linear algebra performance." msgstr "" +"从 NumPy 1.10.4 版和 SciPy 1.0.0 版开始,PyPI 上提供了适用于所有主流操作系统" +"(Windows、macOS 和 Linux)的 ``wheel`` 格式预构建 32 位和 64 位二进制文件。" +"但请注意,在 Windows 上,NumPy 二进制文件链接的是 `ATLAS `__ BLAS/LAPACK 库,且仅限于 SSE2 指令,因此可能无法提" +"供最佳的线性代数性能。" #: ../source/guides/installing-scientific-packages.rst:26 msgid "" @@ -6694,6 +7218,8 @@ msgid "" "environment to install from source and don't provide pre-built wheel files " "on PyPI)." msgstr "" +"有多种替代方案可以获取科学 Python 库(或任何其他需要编译环境才能从源代码安装" +"、且未在 PyPI 上提供预构建 wheel 文件的 Python 库)。" #: ../source/guides/installing-scientific-packages.rst:32 msgid "Building from source" @@ -6707,6 +7233,9 @@ msgid "" "to spend the time wrangling compilers and linkers for both C and FORTRAN, " "building from source is always an option." msgstr "" +"正是这种复杂性,使得 NumPy(以及许多依赖它的项目)难以以 wheel 文件的形式分发" +",也同样让你难以自行从源代码构建它们。不过,对于愿意花时间折腾 C 和 FORTRAN " +"编译器与链接器的勇士来说,从源代码构建始终是一种选择。" #: ../source/guides/installing-scientific-packages.rst:42 msgid "Linux distribution packages" @@ -6718,6 +7247,8 @@ msgid "" "versions of various pieces of scientific software, including NumPy and other " "parts of the scientific Python stack." msgstr "" +"对 Linux 用户而言,系统包管理器通常提供各类科学软件的预编译版本,包括 NumPy " +"以及科学 Python 技术栈的其他组成部分。" #: ../source/guides/installing-scientific-packages.rst:48 msgid "" @@ -6726,6 +7257,8 @@ msgid "" "distributions installed into the system Python when using virtual " "environments)." msgstr "" +"如果你能接受使用可能已滞后数月的版本,那么这很可能是个不错的选择(只需确保在" +"使用虚拟环境时允许访问安装到系统 Python 中的分发包)。" #: ../source/guides/installing-scientific-packages.rst:54 msgid "Windows installers" @@ -6738,6 +7271,9 @@ msgid "" "download page. Using these installers allows users to avoid the need to set " "up a suitable environment to build extensions locally." msgstr "" +"许多目前没有(或无法)发布 wheel 文件的 Python 项目,至少会在 PyPI 上或其项目" +"下载页面上发布 Windows 安装程序。使用这些安装程序,用户便无需在本地搭建合适的" +"环境来构建扩展。" #: ../source/guides/installing-scientific-packages.rst:61 msgid "" @@ -6755,6 +7291,9 @@ msgid "" "Python when using virtual environments is a common approach to working " "around this limitation." msgstr "" +"与 Linux 系统软件包一样,这些 Windows 安装程序只会安装到系统 Python 环境中," +"不支持在虚拟环境中安装。要绕过这一限制,常见做法是在使用虚拟环境时允许访问安" +"装到系统 Python 中的分发包。" #: ../source/guides/installing-scientific-packages.rst:70 msgid "" @@ -6762,6 +7301,8 @@ msgid "" "subcommand that can convert a Windows :command:`bdist_wininst` installer to " "a wheel." msgstr "" +":term:`Wheel` 项目还提供了 :command:`wheel convert` 子命令,可以将 Windows " +"的 :command:`bdist_wininst` 安装程序转换为 wheel。" #: ../source/guides/installing-scientific-packages.rst:77 msgid "macOS installers and package managers" @@ -6773,6 +7314,8 @@ msgid "" "macOS installers that are compatible with the macOS CPython binaries " "published on python.org." msgstr "" +"与 Windows 上的情况类似,许多项目(包括 NumPy)发布的 macOS 安装程序与 " +"python.org 上发布的 macOS CPython 二进制文件兼容。" #: ../source/guides/installing-scientific-packages.rst:83 msgid "" @@ -6794,17 +7337,19 @@ msgid "" "that provide the full SciPy stack to end users in an easy to use and update " "format." msgstr "" +"SciPy 网站列出了 `若干发行版 `_ ,它们以易于使用" +"和更新的形式向最终用户提供完整的 SciPy 技术栈。" #: ../source/guides/installing-scientific-packages.rst:96 msgid "" "Some of these distributions may not be compatible with the standard ``pip`` " "and ``virtualenv`` based toolchain." -msgstr "" +msgstr "其中一些发行版可能与基于 ``pip`` 和 ``virtualenv`` 的标准工具链不兼容。" #: ../source/guides/installing-scientific-packages.rst:100 #: ../source/key_projects.rst:812 msgid "Spack" -msgstr "" +msgstr "Spack" #: ../source/guides/installing-scientific-packages.rst:101 msgid "" @@ -6833,6 +7378,10 @@ msgid "" "single package file. Spack also generates *module* files so that packages " "can be loaded and unloaded from the user's environment." msgstr "" +"Spack 提供了简洁而强大的语法,让用户能够简明地指定版本和配置选项。软件包文件" +"以纯 Python 编写,并采用模板化设计,因此只需单个软件包文件即可轻松更换编译器" +"、依赖项实现(如 MPI)、版本和构建选项。Spack 还会生成 *module* 文件,以便在" +"用户环境中加载和卸载软件包。" #: ../source/guides/installing-scientific-packages.rst:119 msgid "The conda cross-platform package manager" @@ -6852,6 +7401,13 @@ msgid "" "package, so that :command:`conda update python` is possible, in contrast to " "pip, which only manages Python packages." msgstr "" +"``conda`` 是一个开源(BSD 许可证)的软件包管理系统和环境管理系统,允许用户安" +"装多个版本的二进制软件包及其依赖项,并在它们之间轻松切换。它是一个跨平台工具" +",可在 Windows、MacOS 和 Linux 上运行。Conda 可以用来打包和分发各种软件包,并" +"不局限于 Python 软件包。它完全支持原生虚拟环境。Conda 将环境视为一等公民,即" +"使是 C 库也能轻松创建独立的环境。它用 Python 编写,但并不绑定 Python。Conda " +"将 Python 本身也作为软件包来管理,因此可以运行 :command:`conda update " +"python` ,这与只管理 Python 软件包的 pip 不同。" #: ../source/guides/installing-scientific-packages.rst:133 msgid "" @@ -6871,6 +7427,9 @@ msgid "" "miniconda/>`_, `miniforge `_, and " "`pixi `_." msgstr "" +"除了 Anaconda 提供的完整发行版之外,conda 软件包管理器本身还可通过 " +"`miniconda `_ 、 `miniforge `_ 和 `pixi `_ 获取。" #: ../source/guides/installing-scientific-packages.rst:138 msgid "" @@ -6879,6 +7438,9 @@ msgid "" "conda-forge channel, which provides a wide variety of pre-built packages, " "and some domain-specific package collections." msgstr "" +"Anaconda.org 上有多个频道提供 Conda 软件包,包括由 Anaconda 公司支持的默认频" +"道、由社区支持且提供丰富预构建软件包的 conda-forge 频道,以及一些特定领域的软" +"件包合集。" #: ../source/guides/installing-stand-alone-command-line-tools.rst:4 msgid "Installing stand alone command line tools" @@ -6890,9 +7452,9 @@ msgid "" "are `mypy `_, `flake8 `_, `black `_, and :ref:`pipenv`." msgstr "" -"许多软件包提供命令行程序。这样的软件包的例子有`mypy `_, `flake8 `_, `black `_, 和 :ref:`pipenv`。" +"许多软件包提供命令行程序。这样的软件包的例子有 `mypy `_、`flake8 `_、`black `_ 和 :ref:`pipenv`。" #: ../source/guides/installing-stand-alone-command-line-tools.rst:12 msgid "" @@ -6901,6 +7463,8 @@ msgid "" "global environment can cause version conflicts and break dependencies the " "operating system has on Python packages." msgstr "" +"通常你会希望能从系统上的任何位置访问这些应用程序,但把软件包及其依赖项安装到" +"同一个全局环境中,可能导致版本冲突,并破坏操作系统对 Python 软件包的依赖。" #: ../source/guides/installing-stand-alone-command-line-tools.rst:17 msgid "" @@ -6911,7 +7475,7 @@ msgid "" "safely run the applications from anywhere." msgstr "" ":ref:`pipx` 解决这个问题的办法是为每个软件包创建一个虚拟环境,同时也确保其应" -"用程序可以通过你 `$PATH`` 上的目录访问。这允许每个软件包在升级或卸载时不会与" +"用程序可以通过你 ``$PATH`` 上的目录访问。这允许每个软件包在升级或卸载时不会与" "其他软件包产生冲突,并允许你在任何地方安全地运行程序。" #: ../source/guides/installing-stand-alone-command-line-tools.rst:23 @@ -6927,8 +7491,8 @@ msgid "" "``ensurepath`` ensures that the application directory is on your ``$PATH``. " "You may need to restart your terminal for this update to take effect." msgstr "" -"``ensurepath`` 确保程序目录在你的 ``$PATH``上。你可能需要重新启动你的终端以使" -"这个更新生效。" +"``ensurepath`` 确保程序目录在你的 ``$PATH`` 上。你可能需要重新启动你的终端以" +"使这个更新生效。" #: ../source/guides/installing-stand-alone-command-line-tools.rst:46 msgid "" @@ -6966,7 +7530,7 @@ msgstr "" #: ../source/guides/installing-stand-alone-command-line-tools.rst:130 msgid "To see the full list of commands pipx offers, run:" -msgstr "要查看 pipx提供的全部命令列表,请运行:" +msgstr "要查看 pipx 提供的全部命令列表,请运行:" #: ../source/guides/installing-stand-alone-command-line-tools.rst:136 msgid "You can learn more about pipx at https://pipx.pypa.io/." @@ -6985,6 +7549,8 @@ msgid "" "This section covers how to install :ref:`pip`, :ref:`setuptools`, " "and :ref:`wheel` using Linux package managers." msgstr "" +"本节介绍如何使用 Linux 包管理器安装 :ref:`pip`、:ref:`setuptools` 和 " +":ref:`wheel`。" #: ../source/guides/installing-using-linux-tools.rst:13 msgid "" @@ -6992,6 +7558,8 @@ msgid "" "www.python.org>`_, then this section does not apply. See " "the :ref:`installing_requirements` section instead." msgstr "" +"如果你使用的是从 `python.org `_ 下载的 Python,那么本" +"节并不适用。请参阅 :ref:`installing_requirements` 一节。" #: ../source/guides/installing-using-linux-tools.rst:17 msgid "" @@ -7002,6 +7570,10 @@ msgid "" "there are additional repositories that can be enabled to provide newer " "versions. The repositories we know about are explained below." msgstr "" +"请注意,特定 Linux 发行版所支持的 :ref:`pip`、:ref:`setuptools` 和 " +":ref:`wheel` 的版本,往往在该发行版公开发布时就已过时,而且更新通常只出于安全" +"原因,而非为了功能更新。对于某些发行版,可以启用额外的软件仓库来提供更新的版" +"本。我们已知的软件仓库将在下文中说明。" #: ../source/guides/installing-using-linux-tools.rst:24 msgid "" @@ -7011,6 +7583,9 @@ msgid "" "original unpatched versions. When this is known, we will make note of it " "below." msgstr "" +"另请注意,发行版出于安全考虑以及使软件包符合自身标准的目的而打补丁的情况也颇" +"为常见。在某些情况下,这可能导致缺陷,或出现与原始未打补丁版本有所差异的意外" +"行为。凡是我们已知的情况,都会在下文中注明。" #: ../source/guides/installing-using-linux-tools.rst:31 msgid "Fedora" @@ -7021,6 +7596,8 @@ msgid "" "To learn more about Python in Fedora, please visit the `official Fedora " "docs`_, `Python Classroom`_ or `Fedora Loves Python`_." msgstr "" +"要进一步了解 Fedora 中的 Python,请访问 `Fedora 官方文档`_、`Python " +"Classroom`_ 或 `Fedora Loves Python`_。" #: ../source/guides/installing-using-linux-tools.rst:45 msgid "CentOS/RHEL" @@ -7031,6 +7608,8 @@ msgid "" "CentOS and RHEL don't offer :ref:`pip` or :ref:`wheel` in their core " "repositories, although :ref:`setuptools` is installed by default." msgstr "" +"CentOS 和 RHEL 的核心软件仓库中并未提供 :ref:`pip` 或 :ref:`wheel`,不过 " +":ref:`setuptools` 是默认安装的。" #: ../source/guides/installing-using-linux-tools.rst:50 msgid "To install pip and wheel for the system Python, there are two options:" @@ -7042,12 +7621,17 @@ msgid "" "`these instructions `__. On EPEL 7, you can install pip and wheel like so:" msgstr "" +"按照 `这些说明 " +"`__ 启用 `EPEL 仓库 `_。在 EPEL 7 上,你" +"可以像下面这样安装 pip 和 wheel:" #: ../source/guides/installing-using-linux-tools.rst:61 msgid "" "Since EPEL only offers extra, non-conflicting packages, EPEL does not offer " "setuptools, since it's in the core repository." msgstr "" +"由于 EPEL 只提供额外的、不与现有软件包冲突的软件包,而 setuptools 已位于核心" +"软件仓库中,因此 EPEL 不提供 setuptools。" #: ../source/guides/installing-using-linux-tools.rst:65 msgid "" @@ -7056,22 +7640,29 @@ msgid "" "Infrastructure/Fedorahosted-retirement>`__ [1]_. You can install pip and " "wheel like so:" msgstr "" +"启用 `PyPA Copr 仓库 `_," +"具体方法请遵循 `这些说明 `__ [1]_。你可以像下面这样安装 pip 和 wheel:" #: ../source/guides/installing-using-linux-tools.rst:74 msgid "To additionally upgrade setuptools, run:" -msgstr "要额外升级setuptools ,请运行:" +msgstr "要额外升级 setuptools ,请运行:" #: ../source/guides/installing-using-linux-tools.rst:81 msgid "" "To install pip, wheel, and setuptools, in a parallel, non-system environment " "(using yum) then there are two options:" msgstr "" +"如果要在并行的、非系统级的环境中(使用 yum)安装 pip、wheel 和 setuptools,有" +"两种选择:" #: ../source/guides/installing-using-linux-tools.rst:85 msgid "" "Use the \"Software Collections\" feature to enable a parallel collection " "that includes pip, setuptools, and wheel." msgstr "" +"使用 \"Software Collections\" 功能来启用一个包含 pip、setuptools 和 wheel 的" +"并行软件集合。" #: ../source/guides/installing-using-linux-tools.rst:88 msgid "" @@ -7087,7 +7678,7 @@ msgstr "对于 CentOS,请参阅此处:https://github.com/sclorg" #: ../source/guides/installing-using-linux-tools.rst:92 msgid "Be aware that collections may not contain the most recent versions." -msgstr "" +msgstr "请注意,这些软件集合可能并不包含最新的版本。" #: ../source/guides/installing-using-linux-tools.rst:94 msgid "" @@ -7096,6 +7687,9 @@ msgid "" "Pythons, along with pip, setuptools, and wheel, which are kept fairly up to " "date." msgstr "" +"启用 `IUS 仓库 `_ 并安装其中一种 `可并行安装的 " +"`_ Python,同时安装 pip、" +"setuptools 和 wheel,它们都保持着相当新的版本。" #: ../source/guides/installing-using-linux-tools.rst:100 msgid "For example, for Python 3.4 on CentOS7/RHEL7:" @@ -7119,6 +7713,9 @@ msgid "" "`_ by default, " "which is a significant behavior change that can be surprising to some users." msgstr "" +"近期的 Debian/Ubuntu 版本修改了 pip,使其默认使用 `\"用户方案\" `_,这是一个显著的行为变化," +"可能让一些用户感到意外。" #: ../source/guides/installing-using-linux-tools.rst:135 msgid "Arch Linux" @@ -7129,6 +7726,8 @@ msgid "" "Currently, there is no \"copr\" yum plugin available for CentOS/RHEL, so the " "only option is to manually place the repo files as described." msgstr "" +"目前,CentOS/RHEL 尚无 \"copr\" yum 插件可用,因此只能按所述方法手动放置仓库" +"文件。" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:2 msgid "Install packages in a virtual environment using pip and venv" @@ -7140,6 +7739,8 @@ msgid "" "the standard library's virtual environment tool :ref:`venv` and install " "packages. The guide covers how to:" msgstr "" +"本指南讨论如何使用标准库的虚拟环境工具 :ref:`venv` 创建并激活虚拟环境,以及如" +"何安装软件包。本指南将介绍以下操作:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:8 msgid "Create and activate a virtual environment" @@ -7148,7 +7749,7 @@ msgstr "创建并激活一个虚拟环境" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:9 #: ../source/guides/installing-using-pip-and-virtual-environments.rst:153 msgid "Prepare pip" -msgstr "" +msgstr "准备 pip" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:10 msgid "Install packages into a virtual environment using the ``pip`` command" @@ -7161,7 +7762,7 @@ msgstr "使用和创建一个 requirements 文件" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:14 msgid "" "This guide applies to supported versions of Python, currently 3.8 and higher." -msgstr "" +msgstr "本指南适用于受支持的 Python 版本,目前为 3.8 及更高版本。" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:18 msgid "" @@ -7170,6 +7771,9 @@ msgid "" "from the term :term:`Import Package` which refers to import modules in your " "Python source code." msgstr "" +"本指南使用 **package** 一词指代 :term:`Distribution Package`,即分发包,此类" +"包通常从外部主机安装。它与 :term:`Import Package` 一词不同,后者指 Python 源" +"代码中导入的模块。" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:25 msgid "" @@ -7178,6 +7782,9 @@ msgid "" "your operating system's package manager to install Python, please ensure " "that Python is installed before proceeding with these steps." msgstr "" +"本指南有一个前提条件:你使用的是从 获取的" +"官方 Python 版本。如果你使用操作系统的包管理器来安装 Python,请确保在继续以下" +"步骤之前已安装好 Python。" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:32 msgid "Create and Use Virtual Environments" @@ -7196,12 +7803,16 @@ msgid "" "from the virtual environment since packages can be installed confidently and " "will not interfere with another project's environment." msgstr "" +":ref:`venv` 是面向 Python 3 的工具,让你能够为不同项目分别管理独立的软件包安" +"装。它会创建一个“虚拟”的隔离 Python 安装。当你切换项目时,可以创建一个新的虚" +"拟环境,它与其他虚拟环境相互隔离。虚拟环境的好处在于:你可以放心地安装软件包" +",而不会干扰其他项目的环境。" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:45 msgid "" "It is recommended to use a virtual environment when working with third party " "packages." -msgstr "" +msgstr "建议在处理第三方软件包时使用虚拟环境。" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:48 msgid "" @@ -7223,7 +7834,7 @@ msgstr "" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:67 msgid "" "``venv`` will create a virtual Python installation in the ``.venv`` folder." -msgstr "`venv`` 将在 `.venv`` 文件夹中创建一个虚拟的 Python 安装。" +msgstr "``venv`` 将在 ``.venv`` 文件夹中创建一个虚拟的 Python 安装。" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:69 msgid "" @@ -7258,6 +7869,8 @@ msgid "" "While the virtual environment is active, the above command will output a " "filepath that includes the ``.venv`` directory, by ending with the following:" msgstr "" +"在虚拟环境处于激活状态时,上述命令会输出一个包含 ``.venv`` 目录的文件路径,并" +"以如下内容结尾:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:124 msgid "" @@ -7265,7 +7878,7 @@ msgid "" "that specific environment. This enables you to import and use packages in " "your Python application." msgstr "" -"当虚拟环境被激活时,pip 会将软件包安装到该特定环境中。这样,您就可以在 " +"当虚拟环境被激活时,pip 会将软件包安装到该特定环境中。这样,你就可以在 " "Python 应用程序中导入和使用软件包。" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:130 @@ -7283,6 +7896,8 @@ msgid "" "Closing your shell will deactivate the virtual environment. If you open a " "new shell window and want to use the virtual environment, reactivate it." msgstr "" +"关闭 shell 会停用虚拟环境。如果你打开一个新的 shell 窗口并想使用该虚拟环境," +"请重新激活它。" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:145 msgid "Reactivate a virtual environment" @@ -7294,12 +7909,14 @@ msgid "" "instructions about activating a virtual environment. There's no need to " "create a new virtual environment." msgstr "" +"如果你想重新激活一个现有的虚拟环境,请按照激活虚拟环境的相同说明操作。无需创" +"建新的虚拟环境。" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:155 msgid "" ":ref:`pip` is the reference Python package manager. It's used to install and " "update packages into a virtual environment." -msgstr "" +msgstr ":ref:`pip` 是 Python 的标准包管理器,用于在虚拟环境中安装和更新软件包。" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:161 msgid "" @@ -7307,8 +7924,8 @@ msgid "" "install an additional package such as ``python3-pip``. You can make sure " "that pip is up-to-date by running:" msgstr "" -"macOS的 Python 安装程序包括 pip。在 Linux 系统上,你或许必需安装额外的软件" -"包,如 ``python3-pip``。你可以运行下列命令确保 pip 为最新:" +"macOS 的 Python 安装程序包括 pip。在 Linux 系统上,你或许必需安装额外的软件包" +",如 ``python3-pip``。你可以运行下列命令确保 pip 为最新:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:170 msgid "" @@ -7352,7 +7969,7 @@ msgstr "" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:218 msgid "" "pip should download requests and all of its dependencies and install them:" -msgstr "pip应该下载 request 及其所有的依赖项并安装它们:" +msgstr "pip 应该下载 request 及其所有的依赖项并安装它们:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:239 msgid "Install a specific package version" @@ -7438,6 +8055,8 @@ msgid "" "If you have a local copy of a :term:`Distribution Package`'s archive (a zip, " "wheel, or tar file) you can install it directly with pip:" msgstr "" +"如果你本地有某个 :term:`Distribution Package` 分发包的归档文件(zip、wheel " +"或 tar 文件),可以直接用 pip 安装:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:378 msgid "" @@ -7445,6 +8064,8 @@ msgid "" "tell pip to look for packages there and not to use the :term:`Python Package " "Index (PyPI)` at all:" msgstr "" +"如果你有一个目录,其中包含多个软件包的归档文件,你可以让 pip 到该目录中查找软" +"件包,而完全不使用 :term:`Python Package Index (PyPI)`:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:394 msgid "" @@ -7474,6 +8095,8 @@ msgid "" "(PyPI)` and a separate index, you can use the ``--extra-index-url`` flag " "instead:" msgstr "" +"如果你想同时允许来自 :term:`Python Package Index (PyPI)` 和另一个独立索引的软" +"件包,可以改用 ``--extra-index-url`` 标志:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:434 #: ../source/tutorials/installing-packages.rst:392 @@ -7485,6 +8108,8 @@ msgid "" "pip can upgrade packages in-place using the ``--upgrade`` flag. For example, " "to install the latest version of ``requests`` and all of its dependencies:" msgstr "" +"pip 可以使用 ``--upgrade`` 标志就地升级软件包。例如,要安装最新版本的 " +"``requests`` 及其所有依赖项:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:452 msgid "Using a requirements file" @@ -7496,16 +8121,19 @@ msgid "" "dependencies in a :ref:`Requirements File `. For " "example you could create a :file:`requirements.txt` file containing:" msgstr "" +"pip 允许你把所有依赖项声明在一个 :ref:`requirements 文件 ` 中,而不必逐个安装软件包。例如,你可以创建一个 " +":file:`requirements.txt` 文件,内容如下:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:463 msgid "" "And tell pip to install all of the packages in this file using the ``-r`` " "flag:" -msgstr "" +msgstr "然后使用 ``-r`` 标志告诉 pip 安装该文件中的所有软件包:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:478 msgid "Freezing dependencies" -msgstr "" +msgstr "冻结依赖项" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:480 msgid "" @@ -7515,7 +8143,7 @@ msgstr "Pip 可以使用 ``freeze`` 命令来导出所有已安装软件包及 #: ../source/guides/installing-using-pip-and-virtual-environments.rst:495 msgid "Which will output a list of package specifiers such as:" -msgstr "" +msgstr "该命令将输出一个软件包说明符列表,例如:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:511 msgid "" @@ -7523,6 +8151,8 @@ msgid "" "Files` that can re-create the exact versions of all packages installed in an " "environment." msgstr "" +"``pip freeze`` 命令可用于创建 :ref:`pip:Requirements Files`,此类文件能够精确" +"复现环境中已安装的所有软件包的版本。" #: ../source/guides/installing-using-virtualenv.rst:2 msgid "Installing packages using virtualenv" @@ -7533,6 +8163,8 @@ msgid "" "This guide discusses how to install packages using :ref:`pip` " "and :ref:`virtualenv`, a tool to create isolated Python environments." msgstr "" +"本指南讨论如何使用 :ref:`pip` 和 :ref:`virtualenv` 安装软件包。virtualenv 是" +"一个用于创建隔离 Python 环境的工具。" #: ../source/guides/installing-using-virtualenv.rst:8 msgid "" @@ -7540,6 +8172,8 @@ msgid "" "under development. Please refer to the :ref:`virtualenv` documentation for " "details on installation and usage." msgstr "" +"这篇关于安装软件包和使用 :ref:`virtualenv` 的 \"how to\" 指南仍在编写中。有关" +"安装和用法的详细信息,请参阅 :ref:`virtualenv` 文档。" #: ../source/guides/installing-using-virtualenv.rst:13 msgid "" @@ -7547,10 +8181,12 @@ msgid "" "Package` which is different from an :term:`Import Package` that which is " "used to import modules in your Python source code." msgstr "" +"本文档使用 **package** 一词指代 :term:`Distribution Package`,它与 " +":term:`Import Package` 不同,后者用于在你的 Python 源代码中导入模块。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:6 msgid "Licensing examples and user scenarios" -msgstr "" +msgstr "许可示例与用户场景" #: ../source/guides/licensing-examples-and-user-scenarios.rst:9 msgid "" @@ -7561,6 +8197,10 @@ msgid "" "build backend supports :pep:`639` before trying to apply the newer " "guidelines." msgstr "" +":pep:`639` 规定了如何声明 :term:`Distribution Archive` 的许可证、许可证文件路" +"径以及其他法律要求信息。本文档旨在提供清晰的指导,说明如何从旧式的许可证声明" +"方式迁移到标准化方式。在尝试应用新指南之前,请确保你偏好的构建后端支持 " +":pep:`639`。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:18 msgid "Licensing Examples" @@ -7579,25 +8219,29 @@ msgid "" "automatic inclusion of license-related files matching common patterns, such " "as the :file:`LICENSE` file it uses." msgstr "" +"Setuptools 项目本身自 `版本 75.6.0 `__ 起就不再在自己的项目" +"源码元数据中使用 ``License`` 字段。此外,它也不再像以前那样显式指定 " +"``license_file``/``license_files``,因为 Setuptools 依靠自身的自动包含机制来" +"收录匹配常见模式的许可证相关文件,例如它所使用的 :file:`LICENSE` 文件。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:32 msgid "" "It includes the following license-related metadata in " "its :file:`pyproject.toml`:" -msgstr "" +msgstr "它在自己的 :file:`pyproject.toml` 中包含以下与许可证相关的元数据:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:42 msgid "The simplest migration to PEP 639 would consist of using this instead:" -msgstr "" +msgstr "最简单的 PEP 639 迁移方式是改用如下配置:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:49 msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" -msgstr "" +msgstr "或者,如果项目使用的是 :file:`setup.cfg`,则应写在它的 ``[metadata]`` 表中:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:56 msgid "" "The output Core Metadata for the :term:`Distribution Package` would then be:" -msgstr "" +msgstr "这样,为 :term:`Distribution Package` 生成的 Core Metadata 将会是:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:63 msgid "" @@ -7608,6 +8252,11 @@ msgid "" "respective archive and ``{VERSION}`` the version of the Setuptools release " "in the Core Metadata." msgstr "" +":file:`LICENSE` 文件将存储在 sdist 中的 :file:`/setuptools-{VERSION}/" +"LICENSE` 和 wheel 中的 :file:`/setuptools-{VERSION}.dist-info/licenses/" +"LICENSE`,并在安装时从那里解包到站点目录(例如 :file:`site-packages/`)中;其" +"中 :file:`/` 是相应归档文件的根目录,``{VERSION}`` 是 Core Metadata 中 " +"Setuptools 发布版本的版本号。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:74 msgid "Advanced example" @@ -7619,10 +8268,12 @@ msgid "" "that are vendored in the :file:`setuptools/_vendor/` " "and :file:`pkg_resources/_vendor/` directories; specifically:" msgstr "" +"假设 Setuptools 要纳入内置(vendored)在 :file:`setuptools/_vendor/` 和 " +":file:`pkg_resources/_vendor/` 目录中的第三方项目的许可证;具体如下:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:87 msgid "The appropriate license expressions are:" -msgstr "" +msgstr "相应的许可证表达式为:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:96 msgid "" @@ -7630,6 +8281,8 @@ msgid "" "vendored dependencies would contain these metadata, combining all the " "license expressions into one. Such an expression might be:" msgstr "" +"一个同时涵盖 Setuptools 本体及其内置依赖项的综合许可证表达式将包含这些元数据" +",即把所有许可证表达式合并为一个。这样的表达式可能是:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:104 msgid "" @@ -7642,6 +8295,12 @@ msgid "" "Packaging copyright statement and `license choice notice " "`__." msgstr "" +"此外,根据各许可证的要求,相关的许可证文件必须包含在软件包中。假设 " +":file:`LICENSE` 文件包含 MIT 许可证文本以及 Setuptools" +"、``pyparsing``、``more_itertools`` 和 ``ordered-set`` 所使用的版权信息;而 " +":file:`setuptools/_vendor/packaging/` 目录中的 :file:`LICENSE*` 文件包含 " +"Apache 2.0 与双条款 BSD 许可证文本,以及 Packaging 的版权声明和 `许可证选择声" +"明 `__。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:112 msgid "" @@ -7649,25 +8308,27 @@ msgid "" "in the project source tree (relative to the project root " "and :file:`pyproject.toml`):" msgstr "" +"具体来说,我们假设这些许可证文件位于项目源码树中的以下路径(相对于项目根目录" +"和 :file:`pyproject.toml`):" #: ../source/guides/licensing-examples-and-user-scenarios.rst:123 msgid "Putting it all together, our :file:`pyproject.toml` would be:" -msgstr "" +msgstr "把以上内容整合起来,我们的 :file:`pyproject.toml` 将是:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:134 msgid "" "Or alternatively, the license files can be specified explicitly (paths will " "be interpreted as glob patterns):" -msgstr "" +msgstr "或者,也可以显式指定许可证文件(路径将按 glob 模式解释):" #: ../source/guides/licensing-examples-and-user-scenarios.rst:148 msgid "If our project used :file:`setup.cfg`, we could define this in :" -msgstr "" +msgstr "如果我们的项目使用 :file:`setup.cfg`,则可以这样定义:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:160 msgid "" "With either approach, the output Core Metadata in the distribution would be:" -msgstr "" +msgstr "无论采用哪种方式,分发包中输出的 Core Metadata 都将是:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:171 msgid "" @@ -7675,12 +8336,16 @@ msgid "" "``{VERSION}`` the version of the Setuptools release specified in the Core " "Metadata, the license files would be located at the paths:" msgstr "" +"在生成的 sdist 中,以 :file:`/` 为归档文件的根目录、``{VERSION}`` 为 Core " +"Metadata 中指定的 Setuptools 发布版本号,许可证文件将位于以下路径:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:182 msgid "" "In the built wheel, with :file:`/` being the root of the archive and " "``{VERSION}`` as the previous, the license files would be stored at:" msgstr "" +"在构建出的 wheel 中,以 :file:`/` 为归档文件的根目录、``{VERSION}`` 同上,许" +"可证文件将存储在:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:192 msgid "" @@ -7688,6 +8353,8 @@ msgid "" "site dir and ``{VERSION}`` as the previous, the license files would be " "installed to:" msgstr "" +"最后,在已安装的项目中,以 :file:`site-packages/` 为站点目录、``{VERSION}`` " +"同上,许可证文件将被安装到:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:204 msgid "Expression examples" @@ -7695,11 +8362,11 @@ msgstr "表达式示例" #: ../source/guides/licensing-examples-and-user-scenarios.rst:206 msgid "Some additional examples of valid ``License-Expression`` values:" -msgstr "" +msgstr "下面再给出一些有效的 ``License-Expression`` 值的示例:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:221 msgid "User Scenarios" -msgstr "" +msgstr "用户场景" #: ../source/guides/licensing-examples-and-user-scenarios.rst:223 msgid "" @@ -7709,10 +8376,13 @@ msgid "" "practitioner in their jurisdiction if they are unsure about the specifics " "for their situation." msgstr "" +"以下内容从用户视角覆盖了常见的各类使用场景,并逐一提供指导。请注意,以下内容 " +"**不** 应被视为法律建议;如果你对自己所处情况的具体细节没有把握,请咨询你所在" +"司法管辖区内持有执业资格的法律从业者。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:231 msgid "I have a private package that won't be distributed" -msgstr "" +msgstr "我有一个不会分发的私有软件包" #: ../source/guides/licensing-examples-and-user-scenarios.rst:233 msgid "" @@ -7720,6 +8390,8 @@ msgid "" "organization or household, it *usually* isn't strictly necessary to include " "a formal license, so you wouldn't necessarily have to do anything extra here." msgstr "" +"如果你的软件包没有公开共享,也就是没有在你的公司、组织或家庭之外传播,那么 " +"*通常* 并非必须包含正式的许可证,因此你不一定需要在这里做任何额外的事。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:237 msgid "" @@ -7729,10 +8401,13 @@ msgid "" "your project directory, which will be automatically included by packaging " "tools." msgstr "" +"不过,在软件包配置中加入 ``LicenseRef-Proprietary`` 作为许可证表达式,并在项" +"目目录根部的 :file:`LICENSE.txt` 文件中写入版权声明和任何法律声明,仍然是个好" +"主意;打包工具会自动把这些文件包含进去。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:245 msgid "I just want to share my own work without legal restrictions" -msgstr "" +msgstr "我只想不受法律限制地分享自己的作品" #: ../source/guides/licensing-examples-and-user-scenarios.rst:247 msgid "" @@ -7743,6 +8418,11 @@ msgid "" "instead, as it's simple, widely used and allows anyone to do whatever they " "want with your work (other than sue you, which you probably also don't want)." msgstr "" +"虽然你并非必须包含许可证,但如果你不这样做,就没有人拥有 `下载、使用或改进你" +"作品的任何许可 `__,这很可能与你真正想要的 *恰恰相" +"反*。`MIT 许可证 `__ 则是一个绝佳的替代选择,因为它简单、" +"使用广泛,并且允许任何人对你的作品为所欲为(起诉你除外,而这大概也是你不想要" +"的)。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:254 msgid "" @@ -7752,10 +8432,14 @@ msgid "" "``[project]`` in your :file:`pyproject.toml` if your packaging tool supports " "it, or in its config file/section. You're done!" msgstr "" +"要采用它,只需把 `许可证文本 `__ 粘贴到仓库根目录下名为 " +":file:`LICENSE.txt` 的文件中,并在版权行中加上年份和你的姓名。然后,如果你的" +"打包工具支持,只需在 :file:`pyproject.toml` 的 ``[project]`` 之下添加 " +"``license = \"MIT\"``,或者添加到该工具的配置文件/配置节中。大功告成!" #: ../source/guides/licensing-examples-and-user-scenarios.rst:262 msgid "I want to distribute my project under a specific license" -msgstr "" +msgstr "我想以特定许可证分发我的项目" #: ../source/guides/licensing-examples-and-user-scenarios.rst:264 msgid "" @@ -7768,16 +8452,25 @@ msgid "" "on sites like `ChooseALicense `__ or `SPDX " "`__." msgstr "" +"要使用某个特定的许可证,只需把它的文本粘贴到仓库根目录下的 " +":file:`LICENSE.txt` 文件中(如果你还没有以 :file:`LICENSE` 或 " +":file:`COPYING` 开头的此类文件),并在你的 :file:`pyproject.toml` 的 " +"``[project]`` 之下(如果你的打包工具支持)添加 ``license = \"LICENSE-ID\"``," +"或者添加到该工具的配置文件中。你可以在 `ChooseALicense " +"`__ 或 `SPDX `__ 等站点上找到 ``LICENSE-ID`` 以及可复制的许可证文" +"本。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:273 msgid "" "Many popular code hosts, project templates and packaging tools can add the " "license file for you, and may support the expression as well in the future." msgstr "" +"许多流行的代码托管平台、项目模板和打包工具都可以替你添加许可证文件,并且将来" +"可能也会支持许可证表达式。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:278 msgid "I maintain an existing package that's already licensed" -msgstr "" +msgstr "我维护着一个已有许可证的现有软件包" #: ../source/guides/licensing-examples-and-user-scenarios.rst:280 msgid "" @@ -7785,6 +8478,8 @@ msgid "" "only need to make a couple of tweaks to take advantage of the new " "functionality." msgstr "" +"如果你的项目中已经有了许可证文件和元数据,那么要利用新功能,你应该只需要做几" +"处小调整。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:284 msgid "" @@ -7796,6 +8491,12 @@ msgid "" "otherwise, check the `SPDX license list `__ for the identifier " "that matches the license used." msgstr "" +"在项目配置文件中,把你的许可证表达式填到 ``license`` 之下(即 " +":file:`pyproject.toml` 中的 ``[project]`` 表),或者填到你的打包工具的等价配" +"置项中,并务必删除任何旧式的 ``license`` 表子键或 ``License ::`` 分类器。你现" +"有的 ``license`` 值可能本身已经是有效的许可证表达式(例如 ``MIT``、``Apache-" +"2.0 OR BSD-2-Clause`` 等);否则,请查阅 `SPDX 许可证列表 `__,寻" +"找与所用许可证匹配的标识符。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:293 msgid "" @@ -7803,6 +8504,8 @@ msgid "" "``[project]`` in :file:`pyproject.toml` or else in your tool's configuration " "file." msgstr "" +"请确保在 :file:`pyproject.toml` 的 ``[project]`` 之下的 ``license-files`` 中" +"列出你的许可证文件,或者在你的工具的配置文件中列出它们。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:297 msgid "" @@ -7814,10 +8517,15 @@ msgid "" "converting legacy licensing metadata; check your tool's documentation for " "more information." msgstr "" +"请参阅 :ref:`licensing-example-basic`,这是一个简单但完整的真实示例,展示了这" +"套机制在实践中的运作方式。另请参阅 :pep:`639` 作者提供的关于如何把许可证分类" +"器转换为许可证表达式的尽力而为的指导:`把许可证分类器映射到 SPDX 标识符 " +"`__。打包工具可能支持自动转换旧式的许可证元数据;" +"更多信息请查阅你的工具的文档。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:307 msgid "My package includes other code under different licenses" -msgstr "" +msgstr "我的软件包中包含采用不同许可证的其他代码" #: ../source/guides/licensing-examples-and-user-scenarios.rst:309 msgid "" @@ -7826,6 +8534,9 @@ msgid "" "software, you can construct a license expression to describe the licenses " "involved and the relationship between them." msgstr "" +"如果你的项目中包含他人编写、采用不同许可证的代码,例如内置依赖项或从其他开源" +"软件复制的文件,你可以构建一个许可证表达式来描述所涉及的许可证以及它们之间的" +"关系。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:315 msgid "" @@ -7836,6 +8547,10 @@ msgid "" "You can use parenthesis (``()``) for grouping to form expressions that cover " "even the most complex situations." msgstr "" +"简而言之,``License-1 AND License-2`` 表示 *两个* 许可证同时适用(例如,你引" +"入了一个采用另一种许可证的文件),而 ``License-1 OR License-2`` 表示可使用 " +"*任一* 许可证,由用户自行选择(例如,你想让用户在多个许可证之间做出选择)。你" +"可以使用圆括号(``()``)进行分组,构成足以应对最复杂情形的表达式。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:322 msgid "" @@ -7844,6 +8559,9 @@ msgid "" "packaging tool, and make sure to remove any legacy ``license`` table subkeys " "or ``License ::`` classifiers." msgstr "" +"在项目配置文件中,把你的许可证表达式填到 ``license`` 之下(即 " +":file:`pyproject.toml` 的 ``[project]`` 表),或者填到你的打包工具的等价配置" +"项中,并务必删除任何旧式的 ``license`` 表子键或 ``License ::`` 分类器。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:328 msgid "" @@ -7853,6 +8571,10 @@ msgid "" "in :file:`pyproject.toml` (if your tool supports it), or else in your tool's " "configuration file." msgstr "" +"另外,请务必把所有许可证的完整文本以文件的形式添加到项目仓库中的某个位置。在 " +":file:`pyproject.toml` 的 ``[project]`` 之下的 ``license-files`` 中列出各个文" +"件的相对路径或 glob 模式(如果你的工具支持),或者在你的工具的配置文件中列出" +"。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:334 msgid "" @@ -7866,6 +8588,14 @@ msgid "" "``[\"LICENSE.txt\", \"_vendor/LICENSE-APACHE.txt\", \"_vendor/LICENSE-" "BSD.txt\"]`` as literal file paths." msgstr "" +"举个例子:假如你的项目采用 MIT 许可证,但引入了一个采用 Apache 2.0 或双条款 " +"BSD 许可证的内置依赖项(比如 ``packaging``),那么你的许可证表达式将是 ``MIT " +"AND (Apache-2.0 OR BSD-2-Clause)``。你的仓库根目录下可能有一个 " +":file:`LICENSE.txt`,而 :file:`_vendor/` 子目录下有 :file:`LICENSE-" +"APACHE.txt` 和 :file:`LICENSE-BSD.txt`;要把它们全部包含进来,你可以把 " +"``[\"LICENSE.txt\", \"_vendor/packaging/LICENSE*\"]`` 指定为 glob 模式,或者" +"把 ``[\"LICENSE.txt\", \"_vendor/LICENSE-APACHE.txt\", \"_vendor/LICENSE-" +"BSD.txt\"]`` 指定为字面文件路径。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:345 msgid "" @@ -7874,10 +8604,13 @@ msgid "" "details, and consult a `tutorial `__ for more help and " "examples using SPDX identifiers and expressions." msgstr "" +"请参阅完整推演的 :ref:`licensing-example-advanced`,了解如何把这套做法端到端" +"地应用到一个真实的复杂项目,其中包含许多技术细节;并请参阅这份 `教程 " +"`__,获取更多使用 SPDX 标识符和表达式的帮助与示例。" #: ../source/guides/making-a-pypi-friendly-readme.rst:2 msgid "Making a PyPI-friendly README" -msgstr "" +msgstr "制作对 PyPI 友好的 README" #: ../source/guides/making-a-pypi-friendly-readme.rst:4 msgid "" @@ -7886,6 +8619,9 @@ msgid "" "in a PyPI-friendly format and include your README in your package so it " "appears on PyPI." msgstr "" +"README 文件可以帮助用户了解你的项目,还可以用来设置项目在 PyPI 上的描述。本指" +"南会帮助你以对 PyPI 友好的格式创建 README,并将其包含到软件包中,使其显示在 " +"PyPI 上。" #: ../source/guides/making-a-pypi-friendly-readme.rst:9 msgid "Creating a README file" @@ -7905,10 +8641,12 @@ msgid "" "supported by PyPI. Formats supported by `PyPI's README renderer `_ are:" msgstr "" +"为了让 README 在 PyPI 上正常显示,请选择 PyPI 支持的标记语言。`PyPI 的 " +"README 渲染器 `_ 支持的格式有:" #: ../source/guides/making-a-pypi-friendly-readme.rst:16 msgid "plain text" -msgstr "" +msgstr "纯文本" #: ../source/guides/making-a-pypi-friendly-readme.rst:17 msgid "" @@ -7923,8 +8661,8 @@ msgid "" "Markdown (`GitHub Flavored Markdown `_ by " "default, or `CommonMark `_)" msgstr "" -"Markdown(默认情况下 `GitHub 风格 Markdown `_ ,或`CommonMark `_ )" +"Markdown(默认情况下为 `GitHub 风格 Markdown " +"`_,或 `CommonMark `_)" #: ../source/guides/making-a-pypi-friendly-readme.rst:21 msgid "" @@ -7944,20 +8682,25 @@ msgid "" "project's ``Description`` and ``Description-Content-Type`` metadata, " "typically in your project's :file:`setup.py` file." msgstr "" +"要将 README 的内容用作软件包描述,请设置项目的 ``Description`` 和 " +"``Description-Content-Type`` 元数据,通常是在项目的 :file:`setup.py` 文件中设" +"置。" #: ../source/guides/making-a-pypi-friendly-readme.rst:33 msgid ":ref:`description-optional`" -msgstr "" +msgstr ":ref:`description-optional`" #: ../source/guides/making-a-pypi-friendly-readme.rst:34 msgid ":ref:`description-content-type-optional`" -msgstr "" +msgstr ":ref:`description-content-type-optional`" #: ../source/guides/making-a-pypi-friendly-readme.rst:36 msgid "" "For example, to set these values in a package's :file:`setup.py` file, use " "``setup()``'s ``long_description`` and ``long_description_content_type``." msgstr "" +"例如,要在软件包的 :file:`setup.py` 文件中设置这些值,可以使用 ``setup()`` " +"的 ``long_description`` 和 ``long_description_content_type``。" #: ../source/guides/making-a-pypi-friendly-readme.rst:39 msgid "" @@ -7966,6 +8709,10 @@ msgid "" "``Content-Type``-style value for your README file's markup, such as ``text/" "plain``, ``text/x-rst`` (for reStructuredText), or ``text/markdown``." msgstr "" +"将 ``long_description`` 的值设为 README 文件本身的内容(而不是路径)。将 " +"``long_description_content_type`` 设为一个可接受的 ``Content-Type`` 风格的值" +",以匹配 README 文件的标记格式,例如 ``text/plain``、``text/x-rst`` (用于 " +"reStructuredText)或 ``text/markdown``。" #: ../source/guides/making-a-pypi-friendly-readme.rst:45 msgid "" @@ -7976,7 +8723,7 @@ msgstr "" #: ../source/guides/making-a-pypi-friendly-readme.rst:60 msgid "The minimum required versions of the respective tools are:" -msgstr "" +msgstr "各工具所需的最低版本为:" #: ../source/guides/making-a-pypi-friendly-readme.rst:62 msgid "``setuptools >= 38.6.0``" @@ -7994,7 +8741,7 @@ msgstr "" msgid "" "It's recommended that you use ``twine`` to upload the project's distribution " "packages:" -msgstr "" +msgstr "建议你使用 ``twine`` 来上传项目的分发包:" #: ../source/guides/making-a-pypi-friendly-readme.rst:72 msgid "" @@ -8002,10 +8749,12 @@ msgid "" "of :file:`README.md` as ``long_description`` and identifies the markup as " "GitHub-flavored Markdown:" msgstr "" +"例如,请看下面这个 :file:`setup.py` 文件,它会把 :file:`README.md` 的内容读取" +"为 ``long_description``,并把标记格式标识为 GitHub 风格 Markdown:" #: ../source/guides/making-a-pypi-friendly-readme.rst:94 msgid "Validating reStructuredText markup" -msgstr "" +msgstr "校验 reStructuredText 标记" #: ../source/guides/making-a-pypi-friendly-readme.rst:96 msgid "" @@ -8013,6 +8762,8 @@ msgid "" "prevent it from rendering, causing PyPI to instead just show the README's " "raw source." msgstr "" +"如果你的 README 使用 reStructuredText 编写,那么任何无效的标记都会使其无法渲" +"染,导致 PyPI 只显示 README 的原始源文本。" #: ../source/guides/making-a-pypi-friendly-readme.rst:99 msgid "" @@ -8022,11 +8773,16 @@ msgid "" "reference-label```\"), are not allowed here and will result in error " "messages like \"``Error: Unknown interpreted text role \"py:func\".``\"." msgstr "" +"请注意,文档字符串中所用的 Sphinx 扩展(例如 :doc:`指令 ` 和 :doc:`角色 `,比如 \"``:py:func:`getattr```\" 或 \"``:ref:`my-reference-" +"label```\")在这里是不允许的,并且会产生类似 \"``Error: Unknown interpreted " +"text role \"py:func\".``\" 的错误消息。" #: ../source/guides/making-a-pypi-friendly-readme.rst:104 msgid "" "You can check your README for markup errors before uploading as follows:" -msgstr "" +msgstr "你可以在上传之前按以下步骤检查 README 中的标记错误:" #: ../source/guides/making-a-pypi-friendly-readme.rst:106 msgid "" @@ -8041,10 +8797,12 @@ msgid "" "Build the sdist and wheel for your project as described " "under :ref:`Packaging Your Project`." msgstr "" +"请按照 :ref:`Packaging Your Project` 中的说明,为你的项目构建 sdist 和 wheel " +"包。" #: ../source/guides/making-a-pypi-friendly-readme.rst:124 msgid "Run ``twine check`` on the sdist and wheel:" -msgstr "" +msgstr "对 sdist 和 wheel 包运行 ``twine check``:" #: ../source/guides/making-a-pypi-friendly-readme.rst:130 msgid "" @@ -8052,6 +8810,8 @@ msgid "" "renders fine, the command will output ``Checking distribution FILENAME: " "Passed``." msgstr "" +"此命令会报告 README 在渲染方面的任何问题。如果你的标记渲染正常,该命令会输出 " +"``Checking distribution FILENAME: Passed``。" #: ../source/guides/migrating-to-pypi-org.rst:6 msgid "Migrating to PyPI.org" @@ -8062,7 +8822,7 @@ msgstr "迁移到 PyPI.org" #: ../source/guides/supporting-multiple-python-versions.rst:9 #: ../source/guides/supporting-windows-using-appveyor.rst:7 msgid "Obsolete" -msgstr "" +msgstr "已过时" #: ../source/guides/migrating-to-pypi-org.rst:10 msgid "" @@ -8076,7 +8836,7 @@ msgstr "" #: ../source/guides/migrating-to-pypi-org.rst:16 msgid "Publishing releases" -msgstr "" +msgstr "发布版本" #: ../source/guides/migrating-to-pypi-org.rst:18 msgid "``pypi.org`` is the default upload platform as of September 2016." @@ -8087,18 +8847,20 @@ msgid "" "Uploads through ``pypi.python.org`` were *switched off* on **July 3, 2017**. " "As of April 13th, 2018, ``pypi.org`` is the URL for PyPI." msgstr "" +"通过 ``pypi.python.org`` 进行的上传已于 **2017 年 7 月 3 日** *关闭*。自 " +"2018 年 4 月 13 日起,``pypi.org`` 就是 PyPI 的 URL。" #: ../source/guides/migrating-to-pypi-org.rst:23 msgid "" "The recommended way to migrate to PyPI.org for uploading is to ensure that " "you are using a new enough version of your upload tool." -msgstr "" +msgstr "迁移到 PyPI.org 进行上传的推荐做法是,确保你所使用的上传工具版本足够新。" #: ../source/guides/migrating-to-pypi-org.rst:26 msgid "" "The default upload settings switched to ``pypi.org`` in the following " "versions:" -msgstr "" +msgstr "在以下版本中,默认上传设置已切换为 ``pypi.org``:" #: ../source/guides/migrating-to-pypi-org.rst:28 msgid "``twine`` 1.8.0" @@ -8110,19 +8872,19 @@ msgstr "``setuptools`` 27.0.0" #: ../source/guides/migrating-to-pypi-org.rst:30 msgid "Python 2.7.13 (``distutils`` update)" -msgstr "" +msgstr "Python 2.7.13(``distutils`` 更新)" #: ../source/guides/migrating-to-pypi-org.rst:31 msgid "Python 3.4.6 (``distutils`` update)" -msgstr "" +msgstr "Python 3.4.6(``distutils`` 更新)" #: ../source/guides/migrating-to-pypi-org.rst:32 msgid "Python 3.5.3 (``distutils`` update)" -msgstr "" +msgstr "Python 3.5.3(``distutils`` 更新)" #: ../source/guides/migrating-to-pypi-org.rst:33 msgid "Python 3.6.0 (``distutils`` update)" -msgstr "" +msgstr "Python 3.6.0(``distutils`` 更新)" #: ../source/guides/migrating-to-pypi-org.rst:35 msgid "" @@ -8132,12 +8894,15 @@ msgid "" "configured in a file located at :file:`$HOME/.pypirc`. If you see a file " "like:" msgstr "" +"除了确保你所使用的工具版本足够新、其默认设置已随之切换之外,你还必须确保没有" +"对工具进行配置来覆盖默认的上传 URL。这类配置通常位于 :file:`$HOME/.pypirc` 文" +"件中。如果你看到类似下面这样的文件:" #: ../source/guides/migrating-to-pypi-org.rst:52 msgid "" "Then simply delete the line starting with ``repository`` and you will use " "your upload tool's default URL." -msgstr "" +msgstr "那么只需删除以 ``repository`` 开头的那一行,你就会使用上传工具的默认 URL。" #: ../source/guides/migrating-to-pypi-org.rst:55 msgid "" @@ -8146,16 +8911,21 @@ msgid "" "edit :file:`$HOME/.pypirc` and include the ``repository:`` line, but use the " "value ``https://upload.pypi.org/legacy/`` instead:" msgstr "" +"如果由于某些原因,你无法将所用工具升级到默认使用 PyPI.org 的版本,那么你可以" +"编辑 :file:`$HOME/.pypirc`,加入 ``repository:`` 一行,但将其值设置为 " +"``https://upload.pypi.org/legacy/``:" #: ../source/guides/migrating-to-pypi-org.rst:71 msgid "" "(``legacy`` in this URL refers to the fact that this is the new server " "implementation's emulation of the legacy server implementation's upload API.)" msgstr "" +"(该 URL 中的 ``legacy`` 一词是指,这是新服务器实现对旧服务器实现的上传 API " +"的模拟。)" #: ../source/guides/migrating-to-pypi-org.rst:77 msgid "Registering package names & metadata" -msgstr "" +msgstr "注册软件包名称与元数据" #: ../source/guides/migrating-to-pypi-org.rst:79 msgid "" @@ -8163,18 +8933,20 @@ msgid "" "command prior to the first upload is no longer required, and is not " "currently supported by the legacy upload API emulation on PyPI.org." msgstr "" +"首次上传之前,使用 ``setup.py register`` 命令显式预注册软件包名称已不再需要," +"而且 PyPI.org 上的旧版上传 API 模拟目前也不支持这一操作。" #: ../source/guides/migrating-to-pypi-org.rst:83 msgid "" "As a result, attempting explicit registration after switching to using " "PyPI.org for uploads will give the following error message::" -msgstr "" +msgstr "因此,在切换为使用 PyPI.org 进行上传之后再尝试显式注册,将得到如下错误消息::" #: ../source/guides/migrating-to-pypi-org.rst:88 msgid "" "The solution is to skip the registration step, and proceed directly to " "uploading artifacts." -msgstr "" +msgstr "解决办法是跳过注册步骤,直接上传构建产物。" #: ../source/guides/migrating-to-pypi-org.rst:93 #: ../source/guides/using-testpypi.rst:5 @@ -8205,7 +8977,7 @@ msgid "" "user registrations at ``pypi.org`` are open." msgstr "" "为了帮助减轻针对 PyPI 的垃圾邮件攻击,通过 ``pypi.python.org`` 的新用户注册已" -"于 *2018年2月20日* *关闭* 。在``pypi.org``的新用户注册是开放的。" +"于 **2018年2月20日** *关闭*。在 ``pypi.org`` 上的新用户注册是开放的。" #: ../source/guides/migrating-to-pypi-org.rst:125 msgid "Browsing packages" @@ -8243,7 +9015,7 @@ msgstr "" #: ../source/guides/modernize-setup-py-project.rst:6 msgid "How to modernize a ``setup.py`` based project?" -msgstr "" +msgstr "如何将基于 ``setup.py`` 的项目现代化?" #: ../source/guides/modernize-setup-py-project.rst:10 msgid "Should ``pyproject.toml`` be added?" @@ -8256,11 +9028,14 @@ msgid "" "actually strongly recommended is the ``[build-system]`` table " "in :file:`pyproject.toml`." msgstr "" +"强烈建议添加 :term:`pyproject.toml` 文件。:file:`pyproject.toml` 文件本身的存" +"在并不会带来多少改变。[#]_ 实际上,真正强烈建议的是 :file:`pyproject.toml` 中" +"的 ``[build-system]`` 表。" #: ../source/guides/modernize-setup-py-project.rst:16 msgid "" "Note that it has influence on the build isolation feature of pip, see below." -msgstr "" +msgstr "注意,它会影响 pip 的构建隔离特性,参见下文。" #: ../source/guides/modernize-setup-py-project.rst:23 msgid "" @@ -8270,6 +9045,9 @@ msgid "" "deprecated and **MUST NOT** be run anymore, and their recommended " "replacement commands should be used instead:" msgstr "" +"不,:file:`setup.py` 可以存在于基于 :ref:`setuptools` 的现代项目中" +"。:term:`setup.py` 文件是 setuptools 的一种有效配置文件,只是恰好是用 Python " +"编写的。不过,以下命令已被弃用,**不得** 再运行,应改用推荐的替代命令:" #: ../source/guides/modernize-setup-py-project.rst:36 msgid "``python -m build``" @@ -8281,11 +9059,11 @@ msgstr "``python -m build``" #: ../source/guides/modernize-setup-py-project.rst:129 #: ../source/guides/modernize-setup-py-project.rst:221 msgid "For more details:" -msgstr "" +msgstr "了解更多详情:" #: ../source/guides/modernize-setup-py-project.rst:44 msgid ":ref:`setup-py-deprecated`" -msgstr "" +msgstr ":ref:`setup-py-deprecated`" #: ../source/guides/modernize-setup-py-project.rst:48 msgid "Where to start?" @@ -8296,6 +9074,8 @@ msgid "" "The :term:`project` must contain a :file:`pyproject.toml` file at the root " "of its source tree that contains a ``[build-system]`` table like so:" msgstr "" +":term:`project` 必须在其源码树根部包含一个 :file:`pyproject.toml` 文件,其中" +"含有如下所示的 ``[build-system]`` 表:" #: ../source/guides/modernize-setup-py-project.rst:60 msgid "" @@ -8303,12 +9083,16 @@ msgid "" "Frontend>` know that :ref:`setuptools` is the :term:`build backend ` for this project." msgstr "" +"这是让 :term:`构建前端 ` 知道 :ref:`setuptools` 是本项目的 " +":term:`构建后端 ` 的标准化方法。" #: ../source/guides/modernize-setup-py-project.rst:63 msgid "" "Note that the presence of a :file:`pyproject.toml` file (even if empty) " "triggers :ref:`pip` to change its default behavior to use *build isolation*." msgstr "" +"注意,只要存在 :file:`pyproject.toml` 文件(即使为空),就会触发 :ref:`pip` " +"改变其默认行为,转而使用 *构建隔离* 机制。" #: ../source/guides/modernize-setup-py-project.rst:68 msgid ":ref:`distributing-packages`" @@ -8317,17 +9101,17 @@ msgstr ":ref:`distributing-packages`" #: ../source/guides/modernize-setup-py-project.rst:69 #: ../source/guides/modernize-setup-py-project.rst:113 msgid ":ref:`pyproject-build-system-table`" -msgstr "" +msgstr ":ref:`pyproject-build-system-table`" #: ../source/guides/modernize-setup-py-project.rst:70 #: ../source/guides/modernize-setup-py-project.rst:131 #: ../source/guides/modernize-setup-py-project.rst:247 msgid ":doc:`pip:reference/build-system`" -msgstr "" +msgstr ":doc:`pip:reference/build-system`" #: ../source/guides/modernize-setup-py-project.rst:74 msgid "How to handle additional build-time dependencies?" -msgstr "" +msgstr "如何处理额外的构建时依赖项?" #: ../source/guides/modernize-setup-py-project.rst:76 msgid "" @@ -8337,22 +9121,26 @@ msgid "" "frontend knows to install them when building the :term:`distributions " "`." msgstr "" +"除了 setuptools 本身之外,如果 :file:`setup.py` 还依赖其他第三方库(Python 标" +"准库之外的库),就必须把这些库列在 ``[build-system]`` 表的 ``requires`` 列表" +"中,以便构建前端在构建 :term:`分发包 ` 时知道要安装它们" +"。" #: ../source/guides/modernize-setup-py-project.rst:82 #: ../source/guides/modernize-setup-py-project.rst:139 #: ../source/guides/modernize-setup-py-project.rst:174 msgid "For example, a :file:`setup.py` file such as this:" -msgstr "" +msgstr "例如,如下所示的 :file:`setup.py` 文件:" #: ../source/guides/modernize-setup-py-project.rst:99 msgid "" "requires a :file:`pyproject.toml` file like this (:file:`setup.py` stays " "unchanged):" -msgstr "" +msgstr "需要像这样的 :file:`pyproject.toml` 文件(:file:`setup.py` 保持不变):" #: ../source/guides/modernize-setup-py-project.rst:117 msgid "What is the build isolation feature?" -msgstr "" +msgstr "什么是构建隔离特性?" #: ../source/guides/modernize-setup-py-project.rst:119 msgid "" @@ -8360,12 +9148,14 @@ msgid "" "install only the build dependencies (and their dependencies) that are listed " "under ``build-system.requires`` and trigger the build in that environment." msgstr "" +"构建前端通常会创建一个临时的虚拟环境,在其中只安装 ``build-system.requires`` " +"中列出的构建依赖项(及其依赖项),并在该环境中触发构建。" #: ../source/guides/modernize-setup-py-project.rst:124 msgid "" "For some projects this isolation is unwanted and it can be deactivated as " "follows:" -msgstr "" +msgstr "对某些项目而言,并不需要这种隔离,可以按如下方式停用:" #: ../source/guides/modernize-setup-py-project.rst:126 msgid "``python -m build --no-isolation``" @@ -8377,51 +9167,59 @@ msgstr "``python -m pip install --no-build-isolation``" #: ../source/guides/modernize-setup-py-project.rst:135 msgid "How to handle packaging metadata?" -msgstr "" +msgstr "如何处理打包元数据?" #: ../source/guides/modernize-setup-py-project.rst:137 msgid "" "All static metadata can optionally be moved to a ``[project]`` table " "in :file:`pyproject.toml`." msgstr "" +"所有静态元数据都可以选择性地移到 :file:`pyproject.toml` 中的 ``[project]`` 表" +"中。" #: ../source/guides/modernize-setup-py-project.rst:151 msgid "can be entirely replaced by a :file:`pyproject.toml` file like this:" -msgstr "" +msgstr "可以完全被下面这样的 :file:`pyproject.toml` 文件取代:" #: ../source/guides/modernize-setup-py-project.rst:164 msgid "" "Read :ref:`pyproject-project-table` for the full specification of the " "content allowed in the ``[project]`` table." msgstr "" +"请阅读 :ref:`pyproject-project-table`,以了解 ``[project]`` 表中所允许内容的" +"完整规范。" #: ../source/guides/modernize-setup-py-project.rst:169 msgid "How to handle dynamic metadata?" -msgstr "" +msgstr "如何处理动态元数据?" #: ../source/guides/modernize-setup-py-project.rst:171 msgid "" "If some packaging metadata fields are not static they need to be listed as " "``dynamic`` in this ``[project]`` table." msgstr "" +"如果某些打包元数据字段不是静态的,就需要在这个 ``[project]`` 表中将它们列为 " +"``dynamic``。" #: ../source/guides/modernize-setup-py-project.rst:191 msgid "can be modernized as follows:" -msgstr "" +msgstr "可以按如下方式进行现代化:" #: ../source/guides/modernize-setup-py-project.rst:223 msgid ":ref:`declaring-project-metadata-dynamic`" -msgstr "" +msgstr ":ref:`declaring-project-metadata-dynamic`" #: ../source/guides/modernize-setup-py-project.rst:227 msgid "What if something that can not be changed expects a ``setup.py`` file?" -msgstr "" +msgstr "如果某个无法更改的东西需要 ``setup.py`` 文件,该怎么办?" #: ../source/guides/modernize-setup-py-project.rst:229 msgid "" "For example, a process exists that can not be changed easily and it needs to " "execute a command such as ``python setup.py --name``." msgstr "" +"例如,存在一个不易更改的流程,而它需要执行诸如 ``python setup.py --name`` 之" +"类的命令。" #: ../source/guides/modernize-setup-py-project.rst:232 msgid "" @@ -8429,6 +9227,8 @@ msgid "" "tree even after all its content has been moved to :file:`pyproject.toml`. " "This file can be as minimalistic as this:" msgstr "" +"即使所有内容都已移到 :file:`pyproject.toml`,在项目源码树中保留一个 " +":file:`setup.py` 文件也完全没问题。这个文件可以像下面这样保持最简:" #: ../source/guides/modernize-setup-py-project.rst:246 msgid ":ref:`pyproject-toml-spec`" @@ -8436,7 +9236,7 @@ msgstr ":ref:`pyproject-toml-spec`" #: ../source/guides/modernize-setup-py-project.rst:248 msgid ":doc:`setuptools:build_meta`" -msgstr "" +msgstr ":doc:`setuptools:build_meta`" #: ../source/guides/multi-version-installs.rst:6 msgid "Multi-version installs" @@ -8449,6 +9249,8 @@ msgid "" "must ``require`` the appropriate version of the project at run time (using " "``pkg_resources``)." msgstr "" +"easy_install 允许将同一项目的不同版本同时安装到一个由多个程序共享的环境中,这" +"些程序必须在运行时使用 ``pkg_resources`` 来 ``require`` 该项目的适当版本。" #: ../source/guides/multi-version-installs.rst:16 msgid "" @@ -8458,6 +9260,9 @@ msgid "" "environment shared by multiple applications, such as the system Python in a " "Linux distribution." msgstr "" +"在许多使用场景下,虚拟环境就能满足这一需求,避免了 ``require`` 指令带来的复杂" +"性。不过,在同一环境内并行安装的优势在于,它适用于由多个应用程序共享的环境," +"例如 Linux 发行版中的系统 Python。" #: ../source/guides/multi-version-installs.rst:22 msgid "" @@ -8473,6 +9278,14 @@ msgid "" "available by default, so the subsequent ``require`` call in your own code " "fails with a spurious version conflict." msgstr "" +"基于 ``pkg_resources`` 的并行安装的主要局限在于:一旦你导入了 " +"``pkg_resources``,它就会锁定 sys.path 上已经存在的所有内容的 *默认* 版本。这" +"可能引发问题,因为 ``setuptools`` 创建的命令行脚本会使用 ``pkg_resources`` 来" +"查找要执行的入口点。这意味着,举例来说,如果你的应用程序需要标准 " +"``sys.path`` 上已有内容的非默认版本,你就无法使用通过 ``nose`` 调用的 " +"``require`` 测试,也无法使用通过 ``gunicorn`` 调用的 WSGI 应用程序:主应用程" +"序的脚本包装器会锁定默认可用的版本,因此你自己代码中后续的 ``require`` 调用会" +"因虚假的版本冲突而失败。" #: ../source/guides/multi-version-installs.rst:34 msgid "" @@ -8483,10 +9296,14 @@ msgid "" "script or use ``python3 -c ''`` to invoke the application's main " "entry point directly." msgstr "" +"变通办法是在首次导入 ``pkg_resources`` 之前,将所有依赖项设置到 " +"``__main__.__requires__`` 中;但这种做法意味着受影响的工具无法再通过标准命令" +"行方式调用,而是需要编写自定义的包装脚本,或使用 ``python3 -c ''`` " +"来直接调用应用程序的主入口点。" #: ../source/guides/packaging-binary-extensions.rst:5 msgid "Packaging binary extensions" -msgstr "" +msgstr "打包二进制扩展" #: ../source/guides/packaging-binary-extensions.rst:8 msgid "2013-12-08" @@ -8500,20 +9317,23 @@ msgid "" "to create importable C extensions that allow things which aren't always easy " "to achieve in pure Python code." msgstr "" +"CPython 参考解释器的特性之一是,除了允许执行 Python 代码之外,它还对外提供了" +"一套丰富的 C API,供其他软件使用。这种 C API 最常见的用途之一就是创建可导入" +"的 C 扩展,用来实现那些在纯 Python 代码中并不总是容易做到的事情。" #: ../source/guides/packaging-binary-extensions.rst:18 msgid "An overview of binary extensions" -msgstr "" +msgstr "二进制扩展概述" #: ../source/guides/packaging-binary-extensions.rst:21 msgid "Use cases" -msgstr "" +msgstr "使用场景" #: ../source/guides/packaging-binary-extensions.rst:23 msgid "" "The typical use cases for binary extensions break down into just three " "conventional categories:" -msgstr "" +msgstr "二进制扩展的典型使用场景不外乎三个传统类别:" #: ../source/guides/packaging-binary-extensions.rst:26 msgid "" @@ -8528,6 +9348,13 @@ msgid "" "github.com/python/cpython/blob/main/Modules/_datetimemodule.c>`_) is not " "available." msgstr "" +"**加速模块**:这类模块完全自包含,创建它们的唯一目的就是比相应的纯 Python 代" +"码在 CPython 中运行得更快。理想情况下,加速模块应当始终带有纯 Python 的等价实" +"现作为回退,以便在特定系统上没有加速版本时使用。CPython 标准库大量使用了加速" +"模块。*示例*:导入 ``datetime`` 时,如果 C 实现( `_datetimemodule.c " +"`_ )" +"不可用,Python 就会回退到 `datetime.py `_ 模块。" #: ../source/guides/packaging-binary-extensions.rst:37 msgid "" @@ -8540,6 +9367,12 @@ msgid "" "module wrapper for `_functoolsmodule.c `_." msgstr "" +"**包装模块**:这类模块用于把现有的 C 接口暴露给 Python 代码。它们既可以直接暴" +"露底层 C 接口,也可以暴露一个更“Pythonic”的 API,借助 Python 语言特性让该 " +"API 更易于使用。CPython 标准库大量使用了包装模块。*示例*:`functools.py " +"`_ 是 " +"`_functoolsmodule.c `_ 的 Python 模块包装。" #: ../source/guides/packaging-binary-extensions.rst:45 msgid "" @@ -8552,6 +9385,11 @@ msgid "" "which comes from `sysmodule.c `_." msgstr "" +"**底层系统访问**:这类模块用于访问 CPython 运行时、操作系统或底层硬件中更低层" +"的特性。借助平台特定的代码,扩展模块可以做到纯 Python 代码无法做到的事情。为" +"了访问语言层面未暴露的解释器内部机制,CPython 标准库中有不少模块是用 C 编写的" +"。*示例*:``sys`` 模块来自 `sysmodule.c `_。" #: ../source/guides/packaging-binary-extensions.rst:54 msgid "" @@ -8560,6 +9398,9 @@ msgid "" "global interpreter lock around long-running operations (regardless of " "whether those operations are CPU or IO bound)." msgstr "" +"C 扩展有一个特别值得注意的特性:当无需回调解释器运行时,它们可以在长时间运行" +"的操作期间释放 CPython 的全局解释器锁(无论这些操作是 CPU 密集型还是 IO 密集" +"型)。" #: ../source/guides/packaging-binary-extensions.rst:59 msgid "" @@ -8571,6 +9412,10 @@ msgid "" "concurrent execution of vectorised operations and to tightly control the " "exact memory layout of created objects." msgstr "" +"并非所有扩展模块都能整齐地归入上述类别。例如,NumPy 附带的扩展模块就横跨全部" +"三种使用场景:出于速度原因把内层循环移入 C;包装用 C、FORTRAN 和其他语言编写" +"的外部库;并且对 CPython 和底层操作系统使用底层系统接口,以支持向量化操作的并" +"发执行,并严格控制所创建对象的确切内存布局。" #: ../source/guides/packaging-binary-extensions.rst:69 msgid "Disadvantages" @@ -8585,28 +9430,32 @@ msgid "" "any language that can bind to the CPython C API) typically require that " "custom binaries be created for different platforms." msgstr "" +"使用二进制扩展的主要缺点在于,它会让软件的后续分发变得更加困难。使用 Python " +"的优势之一是它基本上是跨平台的,而编写扩展模块所用的语言(通常是 C 或 C++,实" +"际上也可以是任何能够绑定到 CPython C API 的语言)通常要求为不同的平台创建定制" +"的二进制文件。" #: ../source/guides/packaging-binary-extensions.rst:78 msgid "This means that binary extensions:" -msgstr "" +msgstr "这意味着二进制扩展:" #: ../source/guides/packaging-binary-extensions.rst:80 msgid "" "require that end users be able to either build them from source, or else " "that someone publish pre-built binaries for common platforms" -msgstr "" +msgstr "要求最终用户能够从源码构建它们,或者有人为常见平台发布预构建的二进制文件" #: ../source/guides/packaging-binary-extensions.rst:83 msgid "" "may not be compatible with different builds of the CPython reference " "interpreter" -msgstr "" +msgstr "可能与 CPython 参考解释器的不同构建版本不兼容" #: ../source/guides/packaging-binary-extensions.rst:86 msgid "" "often will not work correctly with alternative interpreters such as PyPy, " "IronPython or Jython" -msgstr "" +msgstr "在 PyPy、IronPython 或 Jython 等替代解释器上往往无法正常工作" #: ../source/guides/packaging-binary-extensions.rst:89 msgid "" @@ -8614,6 +9463,8 @@ msgid "" "be familiar not only with Python, but also with the language used to create " "the binary extension, as well as with the details of the CPython C API." msgstr "" +"如果是手写的,就会要求维护者不仅熟悉 Python,还要熟悉创建二进制扩展所用的语言" +"以及 CPython C API 的细节,使维护更加困难" #: ../source/guides/packaging-binary-extensions.rst:94 msgid "" @@ -8622,6 +9473,8 @@ msgid "" "introducing additional complexity in the test suite to ensure both versions " "are always executed." msgstr "" +"如果提供了纯 Python 回退实现,就会要求在两处实现更改,并为测试套件引入额外的" +"复杂度以确保两个版本都会得到执行,使维护更加困难" #: ../source/guides/packaging-binary-extensions.rst:99 msgid "" @@ -8630,10 +9483,12 @@ msgid "" "zipfiles) often won't work for extension modules (as the dynamic loading " "mechanisms on most platforms can only load libraries from disk)." msgstr "" +"依赖二进制扩展的另一个缺点是,其他导入机制(比如直接从 zip 文件导入模块的能力" +")对扩展模块往往不起作用(因为大多数平台上的动态加载机制只能从磁盘加载库)。" #: ../source/guides/packaging-binary-extensions.rst:106 msgid "Alternatives to handcoded accelerator modules" -msgstr "" +msgstr "手写加速模块的替代方案" #: ../source/guides/packaging-binary-extensions.rst:108 msgid "" @@ -8642,6 +9497,8 @@ msgid "" "additional maintenance effort), a number of other alternatives should also " "be considered:" msgstr "" +"当扩展模块只是被用来让代码运行得更快时(在性能分析已经识别出提速值得付出额外" +"维护代价的代码之后),还应该考虑若干其他替代方案:" #: ../source/guides/packaging-binary-extensions.rst:113 msgid "" @@ -8652,6 +9509,10 @@ msgid "" "appropriate choice of standard library or third party module can avoid the " "need to create your own accelerator module." msgstr "" +"寻找现成的优化替代方案。CPython 标准库包含大量经过优化的数据结构和算法(尤其" +"是在内置类型以及 ``collections`` 和 ``itertools`` 模块中)。Python 包索引也提" +"供了更多的选择。有时,恰当地选用标准库或第三方模块就可以免去自行创建加速模块" +"的需要。" #: ../source/guides/packaging-binary-extensions.rst:120 msgid "" @@ -8665,6 +9526,12 @@ msgid "" "having one live reference instead of two often won't break anything, but no " "references instead of one is a major problem)." msgstr "" +"对于长时间运行的应用,JIT 编译的 `PyPy 解释器 `__ 或许" +"可以替代标准的 CPython 运行时。采用 PyPy 的主要障碍通常是对其他二进制扩展模块" +"的依赖:虽然 PyPy 确实模拟了 CPython C API,但依赖它的模块会给 PyPy 的 JIT 带" +"来问题,而且模拟层常常会暴露出扩展模块中 CPython 目前尚能容忍的潜在缺陷(多与" +"引用计数错误有关:一个对象有一个存活引用而不是两个,往往不会出问题;但没有引" +"用而不是只有一个,就是严重问题)。" #: ../source/guides/packaging-binary-extensions.rst:130 msgid "" @@ -8677,6 +9544,11 @@ msgid "" "benefit of having a reduced barrier to entry for Python programmers " "(relative to other languages like C or C++)." msgstr "" +"`Cython `__ 是一个成熟的静态编译器,可以把大多数 Python " +"代码编译为 C 扩展模块。初步的编译就能带来一定的速度提升(因为绕过了 CPython " +"解释器层),而 Cython 可选的静态类型特性还能提供更多的提速机会。使用 Cython " +"仍然带有使用二进制扩展的那些 `disadvantages`_,不过它的好处是降低了 Python 程" +"序员的入门门槛(相对于 C 或 C++ 等其他语言)。" #: ../source/guides/packaging-binary-extensions.rst:139 msgid "" @@ -8687,10 +9559,14 @@ msgid "" "code is running, but can provide significant speed increases, especially for " "operations that are amenable to vectorisation." msgstr "" +"`Numba `__ 是一个较新的工具,由科学计算 Python 社区" +"的成员创建,旨在利用 LLVM,在运行时把 Python 应用中选定的部分编译为原生机器码" +"。它要求运行代码的系统上安装有 LLVM,但能够带来显著的提速,尤其是对适合向量化" +"的操作而言。" #: ../source/guides/packaging-binary-extensions.rst:148 msgid "Alternatives to handcoded wrapper modules" -msgstr "" +msgstr "手写包装模块的替代方案" #: ../source/guides/packaging-binary-extensions.rst:150 msgid "" @@ -8700,6 +9576,10 @@ msgid "" "to tap into that functionality. However, wrapping modules by hand is quite " "tedious, so a number of other alternative approaches should be considered." msgstr "" +"C ABI(Application Binary Interface,应用二进制接口)是在多个应用程序之间共享" +"功能的通用标准。CPython C API(Application Programming Interface,应用程序编" +"程接口)的优势之一,就是让 Python 用户能够接入这些功能。然而,手工包装模块相" +"当繁琐,因此应该考虑若干其他替代方案。" #: ../source/guides/packaging-binary-extensions.rst:156 msgid "" @@ -8707,6 +9587,8 @@ msgid "" "but they *can* significantly reduce the maintenance burden of keeping " "wrapper modules up to date." msgstr "" +"下面介绍的方法丝毫不能简化分发这一环节,但它们 *可以* 显著减轻让包装模块保持" +"最新状态的维护负担。" #: ../source/guides/packaging-binary-extensions.rst:160 msgid "" @@ -8719,6 +9601,12 @@ msgid "" "automatic wrapping with Cython. It also supports performance-oriented Python " "implementations that provide a CPython-like C-API, such as PyPy and Pyston." msgstr "" +"除了有助于创建加速模块之外,`Cython `__ 也被广泛用于为 " +"C 或 C++ API 创建包装模块。它需要手工包装接口,这在设计和优化包装代码方面给予" +"了很大的自由度,但如果要快速包装非常庞大的 API,它可能就不是好的选择了。请参" +"见可用于 Cython 自动包装的 `第三方工具列表 `_。它还支持提供类似 CPython C API 的性能导向型 Python 实现,例" +"如 PyPy 和 Pyston。" #: ../source/guides/packaging-binary-extensions.rst:171 msgid "" @@ -8729,6 +9617,11 @@ msgid "" "`__, " "but doesn't require the Boost libraries or BJam." msgstr "" +":doc:`pybind11 ` 是一个纯 C++11 库,为 CPython(以及 PyPy)" +"的 C API 提供了整洁的 C++ 接口。它不需要预处理步骤,完全使用模板化的 C++ 编写" +"。它附带了用于 Setuptools 或 CMake 构建的辅助工具。它基于 `Boost.Python " +"`__," +"但不需要 Boost 库或 BJam。" #: ../source/guides/packaging-binary-extensions.rst:178 msgid "" @@ -8738,6 +9631,9 @@ msgid "" "relatively straightforward to wrap a C module based on its header files, " "even if you don't know C yourself." msgstr "" +":doc:`cffi ` 是由一些 PyPy 开发者创建的项目,让已经同时掌握 " +"Python 和 C 的开发者可以轻松地把他们的 C 模块暴露给 Python 应用。它还可以让你" +"根据头文件相对轻松地包装一个 C 模块,即使你自己并不懂 C。" #: ../source/guides/packaging-binary-extensions.rst:184 msgid "" @@ -8745,6 +9641,8 @@ msgid "" "JIT, allowing CFFI wrapper modules to participate fully in PyPy's tracing " "JIT optimisations." msgstr "" +"``cffi`` 的一个关键优势是与 PyPy JIT 兼容,这让 CFFI 包装模块能够充分参与 " +"PyPy 跟踪式 JIT 的优化。" #: ../source/guides/packaging-binary-extensions.rst:188 msgid "" @@ -8752,6 +9650,8 @@ msgid "" "a variety of programming languages, including Python, to interface with C " "and C++ code." msgstr "" +"`SWIG `__ 是一个包装接口生成器,允许包括 Python 在内的" +"多种编程语言与 C 和 C++ 代码交互。" #: ../source/guides/packaging-binary-extensions.rst:192 msgid "" @@ -8766,10 +9666,16 @@ msgid "" "``cffi`` *can* operate directly at the C ABI level, it suffers from the same " "interface inconsistency problems as ``ctypes`` when it is used that way." msgstr "" +"标准库的 ``ctypes`` 模块虽然在无法获得头文件信息时对访问 C 级接口很有用,但它" +"只在 C ABI 层面上运作,因此在库实际导出的接口与 Python 代码中声明的接口之间没" +"有自动的一致性检查。相比之下,上述替代方案都能够在 C *API* 层面运作,使用 C " +"头文件来确保被包装的库所导出的接口与 Python 包装模块所期望的接口一致。虽然 " +"``cffi`` *可以* 直接在 C ABI 层面运作,但这样使用时,它会遇到与 ``ctypes`` 相" +"同的接口不一致问题。" #: ../source/guides/packaging-binary-extensions.rst:206 msgid "Alternatives for low level system access" -msgstr "" +msgstr "底层系统访问的替代方案" #: ../source/guides/packaging-binary-extensions.rst:208 msgid "" @@ -8781,6 +9687,10 @@ msgid "" "like ``ctypes`` or ``cffi`` is used to obtain access to the relevant C API " "interfaces." msgstr "" +"对于需要底层系统访问的应用(无论出于什么原因),二进制扩展模块往往 *就是* 最" +"佳的实现途径。在需要底层访问 CPython 运行时本身时尤其如此,因为某些操作(比如" +"释放全局解释器锁)在解释器正在运行代码时根本就是无效的,即使使用 ``ctypes`` " +"或 ``cffi`` 这样的模块来获得相关 C API 接口的访问权也不例外。" #: ../source/guides/packaging-binary-extensions.rst:216 msgid "" @@ -8791,10 +9701,14 @@ msgid "" "compatible ABI), and then use one of the wrapping techniques described above " "to make the interface available as an importable Python module." msgstr "" +"如果扩展模块操作的是底层操作系统或硬件(而不是 CPython 运行时),有时更好的做" +"法是直接编写一个普通的 C 库(或者用 C++ 或 Rust 等其他能导出 C 兼容 ABI 的系" +"统编程语言编写的库),然后使用上文介绍的某种包装技术,让该接口可以作为一个可" +"导入的 Python 模块使用。" #: ../source/guides/packaging-binary-extensions.rst:225 msgid "Implementing binary extensions" -msgstr "" +msgstr "实现二进制扩展" #: ../source/guides/packaging-binary-extensions.rst:227 msgid "" @@ -8802,12 +9716,16 @@ msgid "" "includes an introduction to writing a :doc:`custom extension module in C " "`." msgstr "" +"CPython 的 :doc:`扩展和嵌入 ` 指南介绍了如何编写 " +":doc:`自定义 C 扩展模块 `。" #: ../source/guides/packaging-binary-extensions.rst:231 msgid "" "FIXME: Elaborate that all this is one of the reasons why you probably " "*don't* want to handcode your extension modules :)" msgstr "" +"FIXME:这里需要详细说明的是,上述种种正是你可能 *不* 想手写扩展模块的原因之" +"一 :)" #: ../source/guides/packaging-binary-extensions.rst:236 msgid "Extension module lifecycle" @@ -8819,23 +9737,23 @@ msgstr "扩展模块生命周期" #: ../source/guides/packaging-binary-extensions.rst:256 #: ../source/guides/packaging-binary-extensions.rst:376 msgid "FIXME: This section needs to be fleshed out." -msgstr "" +msgstr "FIXME:本节内容有待充实。" #: ../source/guides/packaging-binary-extensions.rst:242 msgid "Implications of shared static state and subinterpreters" -msgstr "" +msgstr "共享静态状态与子解释器的影响" #: ../source/guides/packaging-binary-extensions.rst:248 msgid "Implications of the GIL" -msgstr "" +msgstr "GIL 的影响" #: ../source/guides/packaging-binary-extensions.rst:254 msgid "Memory allocation APIs" -msgstr "" +msgstr "内存分配 API" #: ../source/guides/packaging-binary-extensions.rst:262 msgid "ABI Compatibility" -msgstr "" +msgstr "ABI 兼容性" #: ../source/guides/packaging-binary-extensions.rst:264 msgid "" @@ -8844,6 +9762,9 @@ msgid "" "module against one version of Python, it is only guaranteed to work with the " "same minor version of Python and not with any other minor versions." msgstr "" +"CPython C API 并不保证次要版本(3.2、3.3、3.4 等)之间 ABI 的稳定性。这意味着" +",通常情况下,如果你基于某个 Python 版本构建扩展模块,只能保证它在相同的 " +"Python 次要版本上正常工作,而无法保证在其他任何次要版本上可用。" #: ../source/guides/packaging-binary-extensions.rst:270 msgid "" @@ -8853,6 +9774,10 @@ msgid "" "Wheels containing extensions built against the stable ABI use the ``abi3`` " "ABI tag, to reflect that they're compatible with all Python 3.x versions." msgstr "" +"Python 3.2 引入了受限 API(Limited API),它是 Python C API 的一个定义明确的" +"子集。受限 API 所需的符号构成了“稳定 ABI”,它保证在所有 Python 3.x 版本之间兼" +"容。基于稳定 ABI 构建扩展后,包含这些扩展的 wheels 会使用 ``abi3`` ABI 标签," +"以表明它们与所有 Python 3.x 版本兼容。" #: ../source/guides/packaging-binary-extensions.rst:277 msgid "" @@ -8860,18 +9785,20 @@ msgid "" "information about the API / ABI stability guarantees, how to use the Limited " "API and the exact contents of the \"Limited API\"." msgstr "" +"CPython 的 :doc:`C API 稳定性 ` 页面详细介绍了 API / " +"ABI 稳定性保证、如何使用受限 API 以及“受限 API”的确切内容。" #: ../source/guides/packaging-binary-extensions.rst:283 msgid "Building binary extensions" -msgstr "" +msgstr "构建二进制扩展" #: ../source/guides/packaging-binary-extensions.rst:285 msgid "FIXME: Cover the build-backends available for building extensions." -msgstr "" +msgstr "FIXME:介绍可用于构建扩展的构建后端。" #: ../source/guides/packaging-binary-extensions.rst:288 msgid "Building extensions for multiple platforms" -msgstr "" +msgstr "为多个平台构建扩展" #: ../source/guides/packaging-binary-extensions.rst:290 msgid "" @@ -8881,6 +9808,10 @@ msgid "" "build highly redistributable binaries from CI; these " "include :ref:`cibuildwheel` and :ref:`multibuild`." msgstr "" +"如果你打算分发你的扩展,就应当为你打算支持的所有平台提供 :term:`wheels " +"`。这些 wheels 通常在持续集成(CI)系统上构建。有一些工具可以帮助你从 " +"CI 构建高度可再分发的二进制文件,其中包括 :ref:`cibuildwheel` 和 " +":ref:`multibuild`。" #: ../source/guides/packaging-binary-extensions.rst:296 msgid "" @@ -8888,6 +9819,8 @@ msgid "" "intend to support. This means that the number of wheels you need to build is " "the product of::" msgstr "" +"对于大多数扩展,你需要为自己打算支持的所有平台构建 wheels。这意味着你需要构建" +"的 wheels 数量是以下各项的乘积::" #: ../source/guides/packaging-binary-extensions.rst:302 msgid "" @@ -8897,10 +9830,14 @@ msgid "" "eliminating one dimension of the matrix. It also removes the need to " "generate new wheels for each new minor version of Python." msgstr "" +"使用 CPython 的 :ref:`稳定 ABI ` 可以显著减少你需要提供" +"的 wheels 数量,因为在某个平台上,单个 wheel 即可用于所有 Python 次要版本,从" +"而消除矩阵中的一个维度。它还免去了为每个新的 Python 次要版本生成新 wheels 的" +"需要。" #: ../source/guides/packaging-binary-extensions.rst:309 msgid "Binary extensions for Windows" -msgstr "" +msgstr "Windows 的二进制扩展" #: ../source/guides/packaging-binary-extensions.rst:311 msgid "" @@ -8911,6 +9848,11 @@ msgid "" "extensions, install `Visual Studio Community Edition `__ - any recent version is fine." msgstr "" +"在能够构建二进制扩展之前,必须先确保你有一个合适的可用编译器。在 Windows 上," +"官方 CPython 解释器是使用 Visual C 构建的,构建兼容的二进制扩展时也应当使用 " +"Visual C。要搭建二进制扩展的构建环境,请安装 `Visual Studio Community " +"Edition `__,任何较新的版本都" +"可以。" #: ../source/guides/packaging-binary-extensions.rst:318 msgid "" @@ -8921,6 +9863,11 @@ msgid "" "that do not include this extra file. To avoid this, you can add the compile-" "time argument ``/d2FH4-``. Recent versions of Python may include this file." msgstr "" +"有一点需要注意:如果你使用 Visual Studio 2019 或更高版本,你的扩展将依赖于一" +"个“额外的”文件 ``VCRUNTIME140_1.dll``,此外还有自 2015 年起的所有先前版本都依" +"赖的 ``VCRUNTIME140.dll``。这会给在不包含这个额外文件的 CPython 版本上使用你" +"的扩展增加一项额外要求。为避免这一点,你可以添加编译期参数 ``/d2FH4-``。较新" +"的 Python 版本可能会包含这个文件。" #: ../source/guides/packaging-binary-extensions.rst:326 msgid "" @@ -8933,6 +9880,11 @@ msgid "" "structures, and so on. Tools for generating extension modules usually avoid " "these things for you." msgstr "" +"不建议为 3.5 之前的 Python 版本构建,因为 Microsoft 已不再提供旧版本的 " +"Visual Studio。如果你确实需要为旧版本构建,可以设置 ``DISTUTILS_USE_SDK=1`` " +"和 ``MSSdk=1`` 来强制找到当前已激活的 MSVC 版本;而且在设计扩展时应当小心,不" +"要在不同的库之间 malloc/free 内存,避免依赖已更改的数据结构等。扩展模块生成工" +"具通常会替你规避这些问题。" #: ../source/guides/packaging-binary-extensions.rst:337 msgid "Binary extensions for Linux" @@ -8945,6 +9897,9 @@ msgid "" "images provide a build environment with a glibc old enough to support most " "current Linux distributions on common architectures." msgstr "" +"Linux 二进制文件必须使用足够旧的 glibc,才能与较旧的发行版兼容。`manylinux " +"`_ Docker 镜像提供了一个构建环境,其中的 " +"glibc 足够旧,能够在常见架构上支持大多数当前的 Linux 发行版。" #: ../source/guides/packaging-binary-extensions.rst:345 msgid "Binary extensions for macOS" @@ -8961,6 +9916,12 @@ msgid "" "Spinning Wheels wiki `_." msgstr "" +"macOS 上的二进制兼容性由目标最低部署系统决定,例如 *10.9*;在 macOS 上构建二" +"进制文件时,通常用 ``MACOSX_DEPLOYMENT_TARGET`` 环境变量来指定它。使用 " +"setuptools / distutils 构建时,部署目标通过 ``--plat-name`` 标志指定,例如 " +"``macosx-10.9-x86_64``。关于 macOS Python 发行版的常见部署目标,请参见 " +"`MacPython Spinning Wheels wiki `_。" #: ../source/guides/packaging-binary-extensions.rst:357 msgid "Publishing binary extensions" @@ -8973,10 +9934,13 @@ msgid "" "using the build-backend and upload it to PyPI using :doc:`twine " "`." msgstr "" +"通过 PyPI 发布二进制扩展使用的上传机制与发布纯 Python 软件包相同。你使用构建" +"后端为你的扩展构建一个 wheel 文件,然后用 :doc:`twine ` 把它上传" +"到 PyPI。" #: ../source/guides/packaging-binary-extensions.rst:365 msgid "Avoid binary-only releases" -msgstr "" +msgstr "避免仅发布二进制文件" #: ../source/guides/packaging-binary-extensions.rst:367 msgid "" @@ -8986,14 +9950,17 @@ msgid "" "certain Linux distributions that build from source within their own build " "systems for the distro package repositories." msgstr "" +"强烈建议你在发布二进制扩展的同时,也发布用于构建它们的源代码。这样,用户在需" +"要时就可以从源码构建扩展。值得注意的是,某些 Linux 发行版为了其发行版软件包仓" +"库,会在自己的构建系统中从源码构建,这时源代码是必需的。" #: ../source/guides/packaging-binary-extensions.rst:374 msgid "Weak linking" -msgstr "" +msgstr "弱链接" #: ../source/guides/packaging-binary-extensions.rst:379 msgid "Additional resources" -msgstr "" +msgstr "其他资源" #: ../source/guides/packaging-binary-extensions.rst:381 msgid "" @@ -9004,10 +9971,13 @@ msgid "" "for developers looking to understand more about the underlying binary " "interfaces that those systems rely on at runtime." msgstr "" +"扩展模块的跨平台开发和分发是一个复杂的话题,因此本指南主要提供对各种工具的指" +"引,这些工具能够自动处理相关的底层技术挑战。本节的其他资源则面向希望进一步理" +"解这些系统在运行时所依赖的底层二进制接口的开发者。" #: ../source/guides/packaging-binary-extensions.rst:388 msgid "Cross-platform wheel generation with scikit-build" -msgstr "" +msgstr "使用 scikit-build 生成跨平台 wheel" #: ../source/guides/packaging-binary-extensions.rst:390 msgid "" @@ -9018,36 +9988,44 @@ msgid "" "system generator `_ for Python binary extension modules." msgstr "" +"`scikit-build `_ 软件包有助于" +"抽象化跨平台构建操作,并在创建二进制扩展软件包时提供额外的能力。关于 Python " +"二进制扩展模块的 `C 运行时、编译器和构建系统生成器 `_,还有更多文档可供参考。" #: ../source/guides/packaging-binary-extensions.rst:398 msgid "Introduction to C/C++ extension modules" -msgstr "" +msgstr "C/C++ 扩展模块简介" #: ../source/guides/packaging-binary-extensions.rst:400 msgid "" "For a more in depth explanation of how extension modules are used by CPython " "on a Debian system, see the following articles:" -msgstr "" +msgstr "想要更深入地了解扩展模块在 Debian 系统上如何被 CPython 使用,请参见以下文章:" #: ../source/guides/packaging-binary-extensions.rst:403 msgid "" "`What are (c)python extension modules? `_" msgstr "" +"`什么是 (c)python 扩展模块? `_" #: ../source/guides/packaging-binary-extensions.rst:404 msgid "`Releasing the gil `_" -msgstr "" +msgstr "`释放 gil `_" #: ../source/guides/packaging-binary-extensions.rst:405 msgid "" "`Writing cpython extension modules using C++ `_" msgstr "" +"`用 C++ 编写 cpython 扩展模块 `_" #: ../source/guides/packaging-binary-extensions.rst:408 msgid "Additional considerations for binary wheels" -msgstr "" +msgstr "二进制 wheel 的其他注意事项" #: ../source/guides/packaging-binary-extensions.rst:410 msgid "" @@ -9056,6 +10034,9 @@ msgid "" "aims to provide an overview of the most important packaging issues for such " "projects, with in-depth explanations and references." msgstr "" +"`pypackaging-native `_ 网站对包含原生" +"代码的 Python 软件包的打包有更多的介绍。它旨在概述此类项目最重要的打包问题," +"并提供深入的解释和参考资料。" #: ../source/guides/packaging-binary-extensions.rst:415 msgid "" @@ -9063,10 +10044,13 @@ msgid "" "dependencies\"), the importance of the ABI (Application Binary Interface) of " "native code, dependency on SIMD code and cross compilation." msgstr "" +"所涵盖主题的示例包括:非 Python 的编译型依赖项(“原生依赖项”)、原生代码的 " +"ABI(Application Binary Interface,应用二进制接口)的重要性、对 SIMD 代码的依" +"赖以及交叉编译。" #: ../source/guides/packaging-namespace-packages.rst:5 msgid "Packaging namespace packages" -msgstr "" +msgstr "打包命名空间包" #: ../source/guides/packaging-namespace-packages.rst:7 msgid "" @@ -9076,18 +10060,21 @@ msgid "" "as **distributions** in this document to avoid ambiguity). For example, if " "you have the following package structure:" msgstr "" +"命名空间包允许你把单个 :term:`导入包 ` 中的子包和模块拆分到多" +"个相互独立的 :term:`分发包 ` 中(为避免歧义,本文档中将" +"其统称为 **分发包**)。例如,如果你有如下软件包结构:" #: ../source/guides/packaging-namespace-packages.rst:26 msgid "And you use this package in your code like so::" -msgstr "" +msgstr "然后你在代码中像这样使用该软件包::" #: ../source/guides/packaging-namespace-packages.rst:31 msgid "Then you can break these sub-packages into two separate distributions:" -msgstr "" +msgstr "然后你可以把这些子包拆分为两个独立的分发包:" #: ../source/guides/packaging-namespace-packages.rst:50 msgid "Each sub-package can now be separately installed, used, and versioned." -msgstr "" +msgstr "现在,每个子包都可以单独安装、使用和设定版本。" #: ../source/guides/packaging-namespace-packages.rst:52 msgid "" @@ -9099,16 +10086,21 @@ msgid "" "mynamespace_subpackage_a`` (you could even use ``import " "mynamespace_subpackage_a as subpackage_a`` to keep the import object short)." msgstr "" +"命名空间包对于大量关联松散的软件包集合(例如同一家公司为多个产品提供的大量客" +"户端库)可能很有用。不过,命名空间包存在若干注意事项,并非在所有情况下都适用" +"。一种简单的替代方案是给你的所有分发包都加上统一前缀,例如 ``import " +"mynamespace_subpackage_a``;你甚至可以使用 ``import mynamespace_subpackage_a " +"as subpackage_a`` 来保持导入对象简短。" #: ../source/guides/packaging-namespace-packages.rst:62 msgid "Creating a namespace package" -msgstr "" +msgstr "创建命名空间包" #: ../source/guides/packaging-namespace-packages.rst:64 msgid "" "There are currently two different approaches to creating namespace packages, " "from which the latter is discouraged:" -msgstr "" +msgstr "目前有两种创建命名空间包的不同方法,其中后者已不推荐使用:" #: ../source/guides/packaging-namespace-packages.rst:67 msgid "" @@ -9117,16 +10109,21 @@ msgid "" "if packages in your namespace only ever need to support Python 3 and " "installation via ``pip``." msgstr "" +"使用 `原生命名空间包`_。这类命名空间包在 :pep:`420` 中定义,可在 Python 3.3 " +"及更高版本中使用。如果你命名空间中的软件包只需要支持 Python 3 并且通过 " +"``pip`` 安装,就推荐使用这种方式。" #: ../source/guides/packaging-namespace-packages.rst:71 msgid "" "Use `legacy namespace packages`_. This comprises `pkgutil-style namespace " "packages`_ and `pkg_resources-style namespace packages`_." msgstr "" +"使用 `传统命名空间包`_。它包括 `pkgutil 风格命名空间包`_ 和 `pkg_resources 风" +"格命名空间包`_。" #: ../source/guides/packaging-namespace-packages.rst:75 msgid "Native namespace packages" -msgstr "" +msgstr "原生命名空间包" #: ../source/guides/packaging-namespace-packages.rst:77 msgid "" @@ -9135,6 +10132,9 @@ msgid "" "omit :file:`__init__.py` from the namespace package directory. An example " "file structure (following :ref:`src-layout `):" msgstr "" +"Python 3.3 通过 :pep:`420` 引入了 **隐式** 命名空间包。要创建原生命名空间包," +"只需在命名空间包目录中省略 :file:`__init__.py` 即可。下面是一个文件结构示例(" +"遵循 :ref:`src 布局 `):" #: ../source/guides/packaging-namespace-packages.rst:94 msgid "" @@ -9143,6 +10143,9 @@ msgid "" "style :file:`__init__.py`. If any distribution does not, it will cause the " "namespace logic to fail and the other sub-packages will not be importable." msgstr "" +"极为重要的是,每个使用该命名空间包的分发包都必须省略 :file:`__init__.py`,或" +"者使用 pkgutil 风格的 :file:`__init__.py`。只要有任何分发包没有这样做,就会导" +"致命名空间逻辑失效,其他子包将无法导入。" #: ../source/guides/packaging-namespace-packages.rst:99 msgid "" @@ -9152,26 +10155,29 @@ msgid "" "exclusions or inclusions of packages yourself, this is possible to be " "configured in the top-level :file:`pyproject.toml`:" msgstr "" +"``src-layout`` 目录结构允许大多数 :term:`构建后端 ` 自动发现软" +"件包。更多信息请参见 :ref:`src-layout-vs-flat-layout`。如果你想自行管理软件包" +"的排除或包含,也可以在顶层 :file:`pyproject.toml` 中进行配置:" #: ../source/guides/packaging-namespace-packages.rst:117 msgid "The same can be accomplished with a :file:`setup.cfg`:" -msgstr "" +msgstr "使用 :file:`setup.cfg` 也能实现同样的效果:" #: ../source/guides/packaging-namespace-packages.rst:129 msgid "Or :file:`setup.py`:" -msgstr "" +msgstr "或者使用 :file:`setup.py`:" #: ../source/guides/packaging-namespace-packages.rst:142 msgid "" ":ref:`setuptools` will search the directory structure for implicit namespace " "packages by default." -msgstr "" +msgstr ":ref:`setuptools` 默认会在目录结构中搜索隐式命名空间包。" #: ../source/guides/packaging-namespace-packages.rst:145 msgid "" "A complete working example of two native namespace packages can be found in " "the `native namespace package example project`_." -msgstr "" +msgstr "两个原生命名空间包的完整可运行示例可以在 `原生命名空间包示例项目`_ 中找到。" #: ../source/guides/packaging-namespace-packages.rst:151 msgid "" @@ -9180,10 +10186,13 @@ msgid "" "Python 3 and pkgutil-style namespace packages in the distributions that need " "to support Python 2 and 3." msgstr "" +"由于原生命名空间包与 pkgutil 风格命名空间包在很大程度上兼容,你可以在仅支持 " +"Python 3 的分发包中使用原生命名空间包,并在需要同时支持 Python 2 和 3 的分发" +"包中使用 pkgutil 风格命名空间包。" #: ../source/guides/packaging-namespace-packages.rst:158 msgid "Legacy namespace packages" -msgstr "" +msgstr "传统命名空间包" #: ../source/guides/packaging-namespace-packages.rst:160 msgid "" @@ -9192,12 +10201,14 @@ msgid "" "unless you need compatibility with packages already using one of these " "methods." msgstr "" +"这两种在 :pep:`420` 之前用于创建命名空间包的方法如今已被视为过时,除非你需要" +"与已经在使用其中某种方法的软件包保持兼容,否则不应再使用。" #: ../source/guides/packaging-namespace-packages.rst:164 msgid "" "To migrate an existing package, all packages sharing the namespace must be " "migrated simultaneously." -msgstr "" +msgstr "如果想要迁移某个现有软件包,所有共享该命名空间的软件包都必须同时迁移。" #: ../source/guides/packaging-namespace-packages.rst:166 msgid "" @@ -9206,10 +10217,13 @@ msgid "" "compatible with the other methods. It's inadvisable to use different methods " "in different distributions that provide packages to the same namespace." msgstr "" +"虽然原生命名空间包与 pkgutil 风格命名空间包在很大程度上兼容,但 " +"pkg_resources 风格命名空间包与其他方法并不兼容。不建议在向同一命名空间提供软" +"件包的不同分发包中使用不同的方法。" #: ../source/guides/packaging-namespace-packages.rst:173 msgid "pkgutil-style namespace packages" -msgstr "" +msgstr "pkgutil 风格命名空间包" #: ../source/guides/packaging-namespace-packages.rst:175 msgid "" @@ -9219,19 +10233,24 @@ msgid "" "and Python 3. This was the recommended approach for the highest level of " "compatibility." msgstr "" +"Python 2.3 引入了 :doc:`pkgutil ` 模块和 " +":py:func:`python:pkgutil.extend_path` 函数。它可用于声明需要同时兼容 Python " +"2.3+ 和 Python 3 的命名空间包。这曾是获得最高兼容性水平的推荐方法。" #: ../source/guides/packaging-namespace-packages.rst:180 msgid "" "To create a pkgutil-style namespace package, you need to provide " "an :file:`__init__.py` file for the namespace package:" msgstr "" +"要创建 pkgutil 风格命名空间包,你需要为该命名空间包提供一个 " +":file:`__init__.py` 文件:" #: ../source/guides/packaging-namespace-packages.rst:194 #: ../source/guides/packaging-namespace-packages.rst:249 msgid "" "The :file:`__init__.py` file for the namespace package needs to contain the " "following:" -msgstr "" +msgstr "命名空间包的 :file:`__init__.py` 文件需要包含以下内容:" #: ../source/guides/packaging-namespace-packages.rst:201 #: ../source/guides/packaging-namespace-packages.rst:256 @@ -9241,28 +10260,35 @@ msgid "" "namespace logic to fail and the other sub-packages will not be importable. " "Any additional code in :file:`__init__.py` will be inaccessible." msgstr "" +"**每个** 使用该命名空间包的分发包都必须包含这样的 :file:`__init__.py`。只要有" +"任何分发包没有这样做,就会导致命名空间逻辑失效,其他子包将无法导入,而且 " +":file:`__init__.py` 中的任何附加代码都将无法访问。" #: ../source/guides/packaging-namespace-packages.rst:206 msgid "" "A complete working example of two pkgutil-style namespace packages can be " "found in the `pkgutil namespace example project`_." msgstr "" +"两个 pkgutil 风格命名空间包的完整可运行示例可以在 `pkgutil 命名空间示例项" +"目`_ 中找到。" #: ../source/guides/packaging-namespace-packages.rst:216 msgid "pkg_resources-style namespace packages" -msgstr "" +msgstr "pkg_resources 风格命名空间包" #: ../source/guides/packaging-namespace-packages.rst:220 msgid "" "The information in this section is obsolete and is no longer functional (as " "of Setuptools 82.0.0). It is only retained for historical reference." msgstr "" +"本节的信息已经过时,不再可用(自 Setuptools 82.0.0 起)。保留这些内容仅作历史" +"参考。" #: ../source/guides/packaging-namespace-packages.rst:223 msgid "" "``pkg_resources`` has been deprecated and was fully removed in Setuptools " "82.0.0." -msgstr "" +msgstr "``pkg_resources`` 已被弃用,并在 Setuptools 82.0.0 中被彻底移除。" #: ../source/guides/packaging-namespace-packages.rst:225 msgid "" @@ -9276,18 +10302,26 @@ msgid "" "using this as the different methods are not cross-compatible and it's not " "advisable to try to migrate an existing package." msgstr "" +":doc:`Setuptools ` 此前提供了 " +"``pkg_resources.declare_namespace`` 函数,以及 :func:`~setuptools.setup` 的 " +"``namespace_packages`` 参数。两者结合可以用来声明命名空间包。虽然这种方式已不" +"再受支持,但在使用较旧 ``setuptools`` 版本的环境中仍可能遇到它。如果你要在采" +"用这种方法的现有命名空间包中创建新的分发包,建议继续沿用这种方式,因为各种方" +"法之间不能交叉兼容,而且不建议尝试迁移现有的软件包。" #: ../source/guides/packaging-namespace-packages.rst:235 msgid "" "To create a pkg_resources-style namespace package, you need to provide " "an :file:`__init__.py` file for the namespace package:" msgstr "" +"要创建 pkg_resources 风格命名空间包,你需要为该命名空间包提供一个 " +":file:`__init__.py` 文件:" #: ../source/guides/packaging-namespace-packages.rst:261 msgid "" "Some older recommendations advise the following in the namespace " "package :file:`__init__.py`:" -msgstr "" +msgstr "一些较早的建议推荐在命名空间包的 :file:`__init__.py` 中写入以下内容:" #: ../source/guides/packaging-namespace-packages.rst:271 msgid "" @@ -9297,17 +10331,23 @@ msgid "" "cross-compatible. If the presence of setuptools is a concern then the " "package should just explicitly depend on setuptools via ``install_requires``." msgstr "" +"这样做的用意是,在 setuptools 不可用的罕见情况下,软件包会回退到 pkgutil 风格" +"的软件包。这并不可取,因为 pkgutil 与 pkg_resources 风格命名空间包不能交叉兼" +"容。如果担心 setuptools 是否存在,软件包应当直接通过 ``install_requires`` 显" +"式声明对 setuptools 的依赖。" #: ../source/guides/packaging-namespace-packages.rst:278 msgid "" "Finally, every distribution must provide the ``namespace_packages`` argument " "to :func:`~setuptools.setup` in :file:`setup.py`. For example:" msgstr "" +"最后,每个分发包都必须在 :file:`setup.py` 中为 :func:`~setuptools.setup` 提" +"供 ``namespace_packages`` 参数。例如:" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:5 msgid "" "Publishing package distribution releases using GitHub Actions CI/CD workflows" -msgstr "" +msgstr "使用 GitHub Actions CI/CD 工作流发布分发包版本" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:7 msgid "" @@ -9319,6 +10359,11 @@ msgid "" "GitHub's `upload-artifact`_ and `download-artifact`_ actions for temporarily " "storing and downloading the source packages." msgstr "" +"`GitHub Actions CI/CD`_ 让你可以在 GitHub 平台上发生事件时运行一系列命令。一" +"种流行的选择是使用由 ``push`` 事件触发的工作流。本指南将向你展示如何在每次推" +"送带标签的提交时发布 Python 分发包。发布时将使用 `pypa/gh-action-pypi-" +"publish GitHub Action`_。它还使用 GitHub 的 `upload-artifact`_ 和 `download-" +"artifact`_ 操作来临时存储和下载源软件包。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:19 msgid "" @@ -9327,6 +10372,9 @@ msgid "" "details of building platform specific projects. If you have binary " "components, check out :ref:`cibuildwheel`'s GitHub Action examples." msgstr "" +"本指南 *假定* 你已经拥有一个你知道如何为其构建分发包的项目,并且 *该项目托管" +"在 GitHub 上*。本指南也不涉及构建平台特定项目的细节。如果你的项目包含二进制组" +"件,请查阅 :ref:`cibuildwheel` 的 GitHub Action 示例。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:25 msgid "Configuring Trusted Publishing" @@ -9342,6 +10390,11 @@ msgid "" "like :doc:`devpi `, you may need to provide a username/password " "combination." msgstr "" +"本指南依托 PyPI 的 `Trusted Publishing`_ 实现来连接 `GitHub Actions CI/CD`_。" +"出于安全原因,我们推荐这种做法,因为这样生成的令牌会为你的每个项目单独创建," +"并自动过期。否则,你需要为 PyPI 和 TestPyPI 各自生成 `API token`_。如果发布到" +"第三方索引(例如 :doc:`devpi `),则可能需要提供用户名/密码组合" +"。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:35 msgid "" @@ -9351,6 +10404,9 @@ msgid "" "`. However it is also possible to add `Trusted Publishing`_ to any " "pre-existing project, if you are its owner." msgstr "" +"由于本指南将演示同时上传到 PyPI 和 TestPyPI,我们需要配置两个可信发布者。以下" +"步骤将引导你为新的 :term:`PyPI project ` 创建“待处理”发布者。不过," +"只要你是项目的所有者,也可以为任何既有项目添加 `Trusted Publishing`_。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:44 msgid "" @@ -9360,6 +10416,10 @@ msgid "" "repository and revoke them in your PyPI and TestPyPI account settings in " "case you are replacing your old setup with the new one." msgstr "" +"如果你按照本指南的早期版本操作过,就已经为直接访问 PyPI 和 TestPyPI 创建了密" +"钥 ``PYPI_API_TOKEN`` 和 ``TEST_PYPI_API_TOKEN``。这些密钥如今已废弃;如果你" +"正在以新设置替换旧设置,应当把它们从你的 GitHub 仓库中删除,并在 PyPI 和 " +"TestPyPI 账户设置中予以撤销。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:51 msgid "Let's begin! 🚀" @@ -9367,7 +10427,7 @@ msgstr "让我们开始吧!🚀" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:53 msgid "Go to https://pypi.org/manage/account/publishing/." -msgstr "" +msgstr "前往 https://pypi.org/manage/account/publishing/。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:54 msgid "" @@ -9379,6 +10439,11 @@ msgid "" "Environment (``pypi``) we're going set up under your repository. Register " "the trusted publisher." msgstr "" +"填写你希望发布新 :term:`PyPI project ` 时所用的名称(即 " +"``setup.cfg`` 或 ``pyproject.toml`` 中的 ``name`` 值)、GitHub 仓库所有者的名" +"称(组织或用户)、仓库名称,以及 ``.github/`` 文件夹下发布工作流文件的名称," +"参见 :ref:`workflow-definition`。最后,添加我们要在你的仓库中设置的 GitHub 环" +"境(``pypi``)的名称。注册该可信发布者。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:63 msgid "" @@ -9386,12 +10451,16 @@ msgid "" "second step, but this time, enter ``testpypi`` as the name of the GitHub " "Environment." msgstr "" +"现在,前往 https://test.pypi.org/manage/account/publishing/ 并重复第二步,但" +"这次请输入 ``testpypi`` 作为 GitHub 环境的名称。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:66 msgid "" "Your \"pending\" publishers are now ready for their first use and will " "create your projects automatically once you use them for the first time." msgstr "" +"你的“待处理”发布者现在已经准备就绪,可供首次使用,并且会在你第一次使用它们时" +"自动创建你的项目。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:72 msgid "" @@ -9407,6 +10476,10 @@ msgid "" "managing-deployments/managing-environments-for-deployment#creating-an-" "environment>`_ on each run for the ``pypi`` environment." msgstr "" +"出于安全原因,你必须要求对 ``pypi`` 环境的每次运行进行 `手动批准 `_。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:85 msgid "Creating a workflow definition" @@ -9417,7 +10490,7 @@ msgid "" "GitHub CI/CD workflows are declared in YAML files stored in the ``.github/" "workflows/`` directory of your repository." msgstr "" -"GitHub CI/CD工作流程是在 YAML 文件中声明的,它们存储在你仓库的 ``.github/" +"GitHub CI/CD 工作流程是在 YAML 文件中声明的,它们存储在你仓库的 ``.github/" "workflows/`` 目录下。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:90 @@ -9432,46 +10505,61 @@ msgstr "用一个有意义的名字开始,并定义让 GitHub 运行这个工 #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:101 msgid "Checking out the project and building distributions" -msgstr "" +msgstr "检出项目并构建分发包" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:103 msgid "" "We will have to define two jobs to publish to PyPI and TestPyPI " "respectively, and an additional job to build the distribution packages." msgstr "" +"我们需要定义两个分别用于发布到 PyPI 和 TestPyPI 的作业,以及一个额外的作业来" +"构建分发包。" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" +"请将构建作业与发布作业分开。在发布作业中构建分发包是不受支持的;发布作业应当" +"只下载已构建好的工件并将其上传。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" -msgstr "" +msgstr "首先,我们将定义一个作业来构建你项目的分发包并将其存储以备后用:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " "accordingly. The `cibuildwheel GitHub Actions examples`_ show a fuller wheel " "matrix layout." msgstr "" +"如果你改编此工作流来构建多个特定于平台的 wheel 包,请为每个构建作业使用命名唯" +"一的工件,并相应地调整下载步骤。更完整的 wheel 矩阵布局可参见 `cibuildwheel " +"GitHub Actions examples`_。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." -msgstr "" -"这将把您的版本库下载到 CI 运行程序中,然后安装并激活最新的 Python 3 版本。" +msgstr "这将把你的版本库下载到 CI 运行程序中,然后安装并激活最新的 Python 3 版本。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" +"现在我们可以从源码构建分发包并将其存储。在本例中,我们将使用 ``build`` 软件包" +"。因此,请将以下内容添加到 steps 列表中:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "定义一个工作流程的工作环境" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -9481,76 +10569,94 @@ msgid "" "acquiring an OpenID Connect token that the ``pypi-publish`` actions needs to " "implement secretless Trusted Publishing to PyPI." msgstr "" +"现在,让我们为将要发布到 PyPI 的作业添加初始设置。这是一个会执行我们稍后定义" +"的命令的流程。在本指南中,我们将使用 GitHub Actions 提供的最新稳定版 Ubuntu " +"LTS。这还会为该作业定义一个在其上下文中运行的 GitHub 环境,以及一个可在 " +"GitHub 界面中美观显示的 URL。此外,它还允许获取 ``pypi-publish`` 操作所需的 " +"OpenID Connect 令牌,用以实现对 PyPI 的无密钥可信发布。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." -msgstr "" +msgstr "这还将确保 PyPI 发布工作流仅在当前提交带有标签时才被触发。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "将发行版发布到 PyPI" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "最后,在结尾添加以下步骤:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " "action, it uploads the contents of the ``dist/`` folder into PyPI " "unconditionally." msgstr "" +"此步骤使用 `pypa/gh-action-pypi-publish`_ GitHub Action:在已存储的分发包被 " +"`download-artifact`_ 操作下载之后,它会无条件地把 ``dist/`` 文件夹中的内容上" +"传到 PyPI。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " "and uploads :pep:`740`-compatible attestations for each distribution by " "default. No additional manual signing steps are required." msgstr "" +"`pypa/gh-action-pypi-publish`_ 自 `v1.11.0 `_ 版本起,默认会为每个分发包生成并" +"上传与 :pep:`740` 兼容的证明(attestation)。无需额外的手动签名步骤。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" -msgstr "" +msgstr "发布到 TestPyPI 的独立工作流" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" +"现在,重复这些步骤,在 ``jobs`` 小节下创建另一个用于发布到 TestPyPI 包索引的" +"作业:" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" +"在 ``testpypi`` GitHub 环境中要求手动批准通常没有必要,因为该环境被设计为在每" +"次提交到主分支时运行,往往用来表明版本发布流水线运转正常。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" -msgstr "" +msgstr "完整的 CI/CD 工作流" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." -msgstr "" +msgstr "本段展示了按照上述指南操作后的完整工作流。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "就这些了,伙计们!" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " "TestPyPI which is useful for providing test builds to your alpha users as " "well as making sure that your release pipeline remains healthy!" msgstr "" +"现在,每当你向 GitHub 上的 Git 远程仓库推送带标签的提交时,此工作流都会将其发" +"布到 PyPI。而任何推送都会被发布到 TestPyPI,这既便于为你的 alpha 用户提供测试" +"构建,也能确保你的发布流水线保持健康!" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -9558,12 +10664,16 @@ msgid "" "increased, but a better solution may constitute to use a PyPI-compatible " "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" +"如果你的仓库提交活动频繁,并且每次推送都按上述方式上传到 TestPyPI,该项目可能" +"会超出 `PyPI 项目大小限制 `_。该限" +"制可以提升,但更好的解决方案可能是在 CI 中使用 :ref:`pypiserver` 之类的 PyPI " +"兼容服务器来进行测试。" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." -msgstr "" +msgstr "建议让所集成的 GitHub Actions 保持在最新版本,并经常更新。" #: ../source/guides/section-build-and-publish.rst:3 msgid "Building and Publishing" @@ -9571,7 +10681,7 @@ msgstr "构建和发布" #: ../source/guides/section-hosting.rst:3 msgid "Hosting" -msgstr "" +msgstr "托管" #: ../source/guides/section-install.rst:3 #: ../source/specifications/pylock-toml.rst:744 @@ -9580,16 +10690,16 @@ msgstr "安装" #: ../source/guides/single-sourcing-package-version.rst:-1 msgid "0; url=../../discussions/single-source-version/" -msgstr "" +msgstr "0; url=../../discussions/single-source-version/" #: ../source/guides/single-sourcing-package-version.rst:6 msgid "Redirecting stale single-source package version link..." -msgstr "" +msgstr "正在重定向过时的单一来源软件包版本链接……" #: ../source/guides/single-sourcing-package-version.rst:8 msgid "" "If the page doesn't automatically refresh, see :ref:`single-source-version`." -msgstr "" +msgstr "如果页面没有自动刷新,请参见 :ref:`single-source-version`。" #: ../source/guides/supporting-multiple-python-versions.rst:7 msgid "Supporting multiple Python versions" @@ -9607,6 +10717,9 @@ msgid "" "standard library packages, and the changes between Python versions 2.x and " "3.x include changes in the language syntax." msgstr "" +"除了创建 Python 软件包所需的工作之外,通常还需要让软件包能够支持不同的 " +"Python 版本。不同的 Python 版本可能包含不同的(或已重命名的)标准库软件包,而" +"且 Python 2.x 与 3.x 之间的变化还包括语言语法上的变化。" #: ../source/guides/supporting-multiple-python-versions.rst:42 msgid "" @@ -9615,10 +10728,13 @@ msgid "" "time-consuming. Fortunately, several tools are available for dealing with " "this, and these will briefly be discussed here." msgstr "" +"如果手动执行,要确保软件包在所有目标 Python 版本(以及各种操作系统!)上都能" +"正常工作,所需的全部测试可能非常耗时。幸运的是,有若干工具可用于处理这个问题" +",本文将简要介绍这些工具。" #: ../source/guides/supporting-multiple-python-versions.rst:48 msgid "Automated testing and continuous integration" -msgstr "" +msgstr "自动化测试与持续集成" #: ../source/guides/supporting-multiple-python-versions.rst:50 msgid "" @@ -9627,6 +10743,9 @@ msgid "" "github.com>`_ or `Bitbucket `_) and run your " "project's test suite every time a new commit is made." msgstr "" +"目前有多种提供自动化测试的托管服务。这些服务通常会监控你的源代码仓库(例如 " +"`GitHub `_ 或 `Bitbucket `_ 上的仓" +"库),并在每次有新提交时运行你项目的测试套件。" #: ../source/guides/supporting-multiple-python-versions.rst:55 msgid "" @@ -9634,6 +10753,8 @@ msgid "" "*multiple versions of Python*, giving rapid feedback about whether the code " "will work, without the developer having to perform such tests themselves." msgstr "" +"这些服务还提供了在 *多个 Python 版本* 上运行项目测试套件的功能,能快速反馈代" +"码是否可用,开发者无需亲自执行这些测试。" #: ../source/guides/supporting-multiple-python-versions.rst:59 msgid "" @@ -9642,12 +10763,17 @@ msgid "" "integration systems. There are two hosted services which when used in " "conjunction provide automated testing across Linux, Mac and Windows:" msgstr "" +"维基百科上有一份对众多持续集成系统的详尽 `比较 `_。有两种托管服务,配合使" +"用时可以提供跨 Linux、Mac 和 Windows 的自动化测试:" #: ../source/guides/supporting-multiple-python-versions.rst:65 msgid "" "`GitHub Actions `_ provides Windows, " "Linux and a macOS environments." msgstr "" +"`GitHub Actions `_ 提供 Windows、Linux " +"和 macOS 环境。" #: ../source/guides/supporting-multiple-python-versions.rst:67 msgid "" @@ -9671,10 +10797,12 @@ msgid "" "For Python projects that are intended to be deployed on both Python 2 and 3 " "with a single-source strategy, there are a number of options." msgstr "" +"对于打算以单一来源策略同时部署到 Python 2 和 Python 3 的 Python 项目,有多种" +"可选方案。" #: ../source/guides/supporting-multiple-python-versions.rst:87 msgid "Tools for single-source Python packages" -msgstr "" +msgstr "单一来源 Python 软件包的工具" #: ../source/guides/supporting-multiple-python-versions.rst:89 msgid "" @@ -9687,6 +10815,11 @@ msgid "" "Armin Ronacher, can be used to automatically apply the code modifications " "provided by six_." msgstr "" +"`six `_ 是 Benjamin Peterson 开发的工具,用于" +"封装 Python 2 与 Python 3 之间的差异。six_ 软件包已被广泛使用,可视为编写能同" +"时用于 Python 2 和 3 的单一来源 Python 模块的可靠方式。six_ 模块最早从 " +"Python 2.5 起就能使用。Armin Ronacher 开发了一个名为 `modernize `_ 的工具,可用来自动应用 six_ 提供的代码修改。" #: ../source/guides/supporting-multiple-python-versions.rst:98 msgid "" @@ -9696,14 +10829,18 @@ msgid "" "interoperability between Python 2 and Python 3 with a language syntax that " "matches one of the two Python versions: one may use" msgstr "" +"与 six_ 类似,`python-future `_ 是一" +"个为 Python 2 与 Python 3 源代码提供兼容层的软件包;不过与 six_ 不同,这个软" +"件包旨在让 Python 2 与 Python 3 之间以与二者之一相匹配的语言语法实现互操作:" +"你可以使用" #: ../source/guides/supporting-multiple-python-versions.rst:105 msgid "a Python 2 (by syntax) module in a Python 3 project." -msgstr "" +msgstr "在 Python 3 项目中使用语法为 Python 2 的模块。" #: ../source/guides/supporting-multiple-python-versions.rst:106 msgid "a Python 3 (by syntax) module in a *Python 2* project." -msgstr "" +msgstr "在 *Python 2* 项目中使用语法为 Python 3 的模块。" #: ../source/guides/supporting-multiple-python-versions.rst:108 msgid "" @@ -9714,6 +10851,11 @@ msgid "" "``futurize`` and ``pasteurize`` that can be applied to either a Python 2 " "module or a Python 3 module respectively." msgstr "" +"由于具备这种双向特性,python-future_ 提供了一条将 Python 2 软件包逐个模块转换" +"为 Python 3 语法的途径。不过,与 six_ 相比,python-future_ 只支持 Python 2.6 " +"及以上版本。与 six_ 的 modernize_ 类似,python-future_ 附带两个脚本" +":``futurize`` 和 ``pasteurize``,分别可应用于 Python 2 模块或 Python 3 模块" +"。" #: ../source/guides/supporting-multiple-python-versions.rst:115 msgid "" @@ -9723,10 +10865,14 @@ msgid "" "provides for forward-compatibility to Python 3. Any remaining compatibility " "problems would require manual changes." msgstr "" +"使用 six_ 或 python-future_ 会给你的软件包增加一项额外的运行时依赖项:对于 " +"python-future_,可以在调用 ``futurize`` 脚本时使用 ``--stage1`` 选项,只应用 " +"Python 2.6+ 已为向前兼容 Python 3 提供的那些更改。其余的兼容性问题则需要手动" +"修改。" #: ../source/guides/supporting-multiple-python-versions.rst:122 msgid "What's in which Python?" -msgstr "" +msgstr "各个 Python 版本包含哪些内容?" #: ../source/guides/supporting-multiple-python-versions.rst:124 msgid "" @@ -9738,10 +10884,16 @@ msgid "" "lists may be used to check whether any changes between Python versions may " "affect your package." msgstr "" +"Ned Batchelder 为 `Python 2 `__、`Python 3.0-3.3 `__ 和 `Python 3.4-3.6 `__ 提供了各版" +"本 Python 的变更列表。这些列表可用来检查各 Python 版本之间的变化是否会影响你" +"的软件包。" #: ../source/guides/supporting-windows-using-appveyor.rst:5 msgid "Supporting Windows using Appveyor" -msgstr "" +msgstr "使用 Appveyor 支持 Windows" #: ../source/guides/supporting-windows-using-appveyor.rst:8 msgid "2015-12-03" @@ -9754,6 +10906,9 @@ msgid "" "the code on Windows, and building Windows-targeted binaries for projects " "that use C extensions." msgstr "" +"本节介绍如何使用免费的 `Appveyor`_ 持续集成服务为你的项目提供 Windows 支持。" +"这包括在 Windows 上测试代码,以及为使用 C 扩展的项目构建面向 Windows 的二进制" +"文件。" #: ../source/guides/supporting-windows-using-appveyor.rst:19 msgid "" @@ -9761,6 +10916,8 @@ msgid "" "support can be a challenge, because setting up a suitable Windows test " "environment is non-trivial, and may require buying software licenses." msgstr "" +"许多项目默认是在 Unix 上开发的,提供 Windows 支持可能颇具挑战,因为搭建合适" +"的 Windows 测试环境并非易事,而且可能需要购买软件许可证。" #: ../source/guides/supporting-windows-using-appveyor.rst:23 msgid "" @@ -9771,10 +10928,14 @@ msgid "" "for testing) it is possible for projects without a dedicated Windows " "environment to provide Windows-targeted binaries." msgstr "" +"Windows 用户通常无法使用 C 编译器,因此只能依赖使用 C 扩展的项目将二进制 " +"wheel 包发布到 PyPI,这样分发包才能通过 ``python -m pip install `` 安装" +"。通过把 Appveyor 用作构建服务(即使不用它来测试),没有专用 Windows 环境的项" +"目也可以提供面向 Windows 的二进制文件。" #: ../source/guides/supporting-windows-using-appveyor.rst:31 msgid "Setting up" -msgstr "" +msgstr "设置" #: ../source/guides/supporting-windows-using-appveyor.rst:33 msgid "" @@ -9783,6 +10944,9 @@ msgid "" "given in `the Appveyor documentation `__. " "The free tier of account is perfectly adequate for open source projects." msgstr "" +"要使用 Appveyor 为你的项目构建 Windows wheel 包,你必须在该服务上拥有一个账户" +"。创建账户的说明请见 `Appveyor 文档 `__。免费" +"层级的账户对开源项目来说完全够用。" #: ../source/guides/supporting-windows-using-appveyor.rst:38 msgid "" @@ -9790,16 +10954,20 @@ msgid "" "your project is hosted on one of those two services, setting up Appveyor " "integration is straightforward." msgstr "" +"Appveyor 提供与 `GitHub`_ 和 `Bitbucket`_ 的集成,因此只要你的项目托管在这两" +"个服务之一上,设置 Appveyor 集成就很简单。" #: ../source/guides/supporting-windows-using-appveyor.rst:42 msgid "" "Once you have set up your Appveyor account and added your project, Appveyor " "will automatically build your project each time a commit occurs." msgstr "" +"一旦你设置好 Appveyor 账户并添加了项目,每次发生提交时 Appveyor 都会自动构建" +"你的项目。" #: ../source/guides/supporting-windows-using-appveyor.rst:46 msgid "Adding Appveyor support to your project" -msgstr "" +msgstr "为你的项目添加 Appveyor 支持" #: ../source/guides/supporting-windows-using-appveyor.rst:48 msgid "" @@ -9808,6 +10976,9 @@ msgid "" "be included in the file are covered in the Appveyor documentation. This " "guide will provide the details necessary to set up wheel builds." msgstr "" +"为了定义 Appveyor 应如何构建你的项目,你需要在项目中添加一个 " +":file:`appveyor.yml` 文件。文件中可以包含哪些内容的完整细节请参阅 Appveyor 文" +"档。本指南将提供设置 wheel 构建所需的细节。" #: ../source/guides/supporting-windows-using-appveyor.rst:53 msgid "" @@ -9819,10 +10990,14 @@ msgid "" "version of Visual Studio used includes 64-bit compilers with no additional " "setup)." msgstr "" +"Appveyor 默认包含了构建 Python 扩展所需的所有编译器工具链。对于 Python 2.7、" +"3.5+ 以及 3.3 和 3.4 的 32 位版本,这些工具开箱即用。但对于 Python 3.3 和 " +"3.4 的 64 位版本,还需要少量额外配置让 distutils 知道到哪里查找 64 位编译器。" +"(从 3.5 开始,所使用的 Visual Studio 版本自带 64 位编译器,无需额外设置。)" #: ../source/guides/supporting-windows-using-appveyor.rst:61 msgid "appveyor.yml" -msgstr "" +msgstr "appveyor.yml" #: ../source/guides/supporting-windows-using-appveyor.rst:67 msgid "" @@ -9830,12 +11005,16 @@ msgid "" "pypa/python-packaging-user-guide/master/source/guides/appveyor-sample/" "appveyor.yml>`__." msgstr "" +"此文件可以从 `这里 `__ 下载。" #: ../source/guides/supporting-windows-using-appveyor.rst:69 msgid "" "The :file:`appveyor.yml` file must be located in the root directory of your " "project. It is in ``YAML`` format, and consists of a number of sections." msgstr "" +":file:`appveyor.yml` 文件必须位于你项目的根目录中。该文件为 ``YAML`` 格式,由" +"若干小节组成。" #: ../source/guides/supporting-windows-using-appveyor.rst:72 msgid "" @@ -9847,6 +11026,11 @@ msgid "" "support 2.6 in this document (as Windows users still using Python 2 are " "generally able to move to Python 2.7 without too much difficulty)." msgstr "" +"``environment`` 小节是定义要为哪些 Python 版本构建 wheel 包的关键。Appveyor " +"预装了 Python 2.6、2.7、3.3、3.4 和 3.5,涵盖 32 位和 64 位两种构建。示例文件" +"会为除 Python 2.6 之外的所有这些环境进行构建。为 Python 2.6 安装更为复杂,因" +"为它不自带 pip。本文档不支持 2.6(因为仍在使用 Python 2 的 Windows 用户一般都" +"能不太困难地迁移到 Python 2.7)。" #: ../source/guides/supporting-windows-using-appveyor.rst:80 msgid "" @@ -9856,18 +11040,23 @@ msgid "" "circumstances (for example, to install additional build packages such as " "``Cython``, or test tools such as ``tox``)." msgstr "" +"``install`` 小节使用 pip 来安装项目可能需要的任何额外软件。构建 wheel 包唯一" +"需要的是 ``wheel`` 项目,但在某些情况下,项目可能希望自定义这段代码(例如,安" +"装 ``Cython`` 之类的额外构建软件包,或 ``tox`` 之类的测试工具)。" #: ../source/guides/supporting-windows-using-appveyor.rst:86 msgid "" "The ``build`` section simply switches off builds - there is no build step " "needed for Python, unlike languages like ``C#``." msgstr "" +"``build`` 小节只是简单地关闭构建,因为 Python 不需要构建步骤,这一点与 " +"``C#`` 之类的语言不同。" #: ../source/guides/supporting-windows-using-appveyor.rst:89 msgid "" "The main sections that will need to be tailored to your project are " "``test_script`` and ``after_test``." -msgstr "" +msgstr "需要根据你的项目定制的主要小节是 ``test_script`` 和 ``after_test``。" #: ../source/guides/supporting-windows-using-appveyor.rst:92 msgid "" @@ -9880,6 +11069,12 @@ msgid "" "however if you are using ``tox`` there are some additional configuration " "changes you will need to consider, which are described below." msgstr "" +"``test_script`` 小节是你运行项目测试的地方。所提供的文件使用 ``setup.py " +"test`` 运行你的测试套件。如果你只想构建 wheel 包,而不想在 Windows 上运行测试" +",可以把这一小节替换为一个占位命令,比如 ``echo Skipped Tests``。你可能想使用" +"其他测试工具,比如 ``nose`` 或 :file:`py.test`。你也可以使用 ``tox`` 之类的测" +"试驱动器,不过如果使用 ``tox``,还需要考虑一些额外的配置变更,下文会予以说明" +"。" #: ../source/guides/supporting-windows-using-appveyor.rst:101 msgid "" @@ -9888,16 +11083,21 @@ msgid "" "(specifically, ``setuptools``) then the ``setup.py bdist_wheel`` command " "will build your wheels." msgstr "" +"``after_test`` 在测试完成后运行,因此 wheel 包应在这里构建。假设你的项目使用" +"了推荐的工具(具体来说是 ``setuptools``),那么 ``setup.py bdist_wheel`` 命令" +"就会构建你的 wheel 包。" #: ../source/guides/supporting-windows-using-appveyor.rst:106 msgid "" "Note that wheels will only be built if your tests succeed. If you expect " "your tests to fail on Windows, you can skip them as described above." msgstr "" +"请注意,只有测试成功通过,才会构建 wheel 包。如果你预计测试在 Windows 上会失" +"败,可以按上文所述跳过测试。" #: ../source/guides/supporting-windows-using-appveyor.rst:111 msgid "Support script" -msgstr "" +msgstr "支持脚本" #: ../source/guides/supporting-windows-using-appveyor.rst:113 msgid "" @@ -9906,6 +11106,9 @@ msgid "" "and 3.4. For projects which do not need a compiler, or which don't support " "3.3 or 3.4 on 64-bit Windows, only the :file:`appveyor.yml` file is needed." msgstr "" +":file:`appveyor.yml` 文件依赖于一个支持脚本,该脚本会设置环境,以便在 Python " +"3.3 和 3.4 的 64 位构建中使用 SDK 编译器。对于不需要编译器、或不支持 64 位 " +"Windows 上 3.3 或 3.4 的项目,则只需要 :file:`appveyor.yml` 文件。" #: ../source/guides/supporting-windows-using-appveyor.rst:118 msgid "" @@ -9918,16 +11121,22 @@ msgid "" "Python 3.3 or 3.4, so don't set the environment variable for any other " "builds." msgstr "" +"`build.cmd `__ 是一个 Windows 批处" +"理脚本,会在带有所选 Python 版本对应编译器的环境中运行单条命令。你只需把 " +"``DISTUTILS_USE_SDK`` 这一个环境变量设置为 ``1``,其余工作交由脚本完成。它会" +"为 Python 3.3 或 3.4 的 64 位构建搭建所需的 SDK,因此不要在其他任何构建中设置" +"这个环境变量。" #: ../source/guides/supporting-windows-using-appveyor.rst:125 msgid "" "You can simply download the batch file and include it in your project " "unchanged." -msgstr "" +msgstr "你可以直接下载这个批处理文件,并原封不动地将其包含在你的项目中。" #: ../source/guides/supporting-windows-using-appveyor.rst:129 msgid "Access to the built wheels" -msgstr "" +msgstr "获取构建好的 wheel 包" #: ../source/guides/supporting-windows-using-appveyor.rst:131 msgid "" @@ -9939,10 +11148,14 @@ msgid "" "architecture. You can download those wheels and upload them to PyPI as part " "of your release process." msgstr "" +"构建完成后,构建好的 wheel 包可以在你项目的 Appveyor 控制面板中获取。依次进入" +"每次构建的构建状态页面即可找到它们。构建输出的顶部有一系列链接,其中之一是 " +"\"Artifacts\"。该页面会包含指向对应 Python 版本/架构的 wheel 包的链接列表。你" +"可以下载这些 wheel 包,并在发布流程中把它们上传到 PyPI。" #: ../source/guides/supporting-windows-using-appveyor.rst:142 msgid "Testing with tox" -msgstr "" +msgstr "使用 tox 进行测试" #: ../source/guides/supporting-windows-using-appveyor.rst:144 msgid "" @@ -9950,6 +11163,8 @@ msgid "" "ensures that tests are run in an isolated environment using the exact files " "that will be distributed by the project." msgstr "" +"许多项目使用 :doc:`Tox ` 工具来运行测试。它确保测试在隔离的环境中" +"运行,并且使用的正是项目将要分发的那些文件。" #: ../source/guides/supporting-windows-using-appveyor.rst:148 msgid "" @@ -9957,6 +11172,8 @@ msgid "" "considerations (in actual fact, these issues are not specific to Appveyor, " "and may well affect other CI systems)." msgstr "" +"要在 Appveyor 上使用 ``tox``,还有几点需要额外考虑(实际上,这些问题并非 " +"Appveyor 特有,也很可能影响其他 CI 系统)。" #: ../source/guides/supporting-windows-using-appveyor.rst:152 msgid "" @@ -9965,6 +11182,8 @@ msgid "" "control the compiler, this \"test isolation\" feature will cause the tests " "to use the wrong compiler by default." msgstr "" +"默认情况下,``tox`` 只把选定的部分环境变量传递给测试进程。由于 ``distutils`` " +"使用环境变量来控制编译器,这一“测试隔离”特性会导致测试默认使用错误的编译器。" #: ../source/guides/supporting-windows-using-appveyor.rst:157 msgid "" @@ -9973,6 +11192,8 @@ msgid "" "list the additional environment variables to be passed to the subprocess. " "For the SDK compilers, you need" msgstr "" +"要强制 ``tox`` 把必要的环境变量传递给子进程,你需要设置 ``tox`` 的配置选项 " +"``passenv``,列出要传递给子进程的额外环境变量。对于 SDK 编译器,你需要" #: ../source/guides/supporting-windows-using-appveyor.rst:162 msgid "``DISTUTILS_USE_SDK``" @@ -9998,6 +11219,10 @@ msgid "" "supplied :file:`build.cmd` script does this by default whenever " "``DISTUTILS_USE_SDK`` is set." msgstr "" +"``passenv`` 选项可以在你的 :file:`tox.ini` 中设置;如果你不想在通用项目文件中" +"添加 Windows 特有的设置,也可以通过设置 ``TOX_TESTENV_PASSENV`` 环境变量来完" +"成。只要设置了 ``DISTUTILS_USE_SDK``,所提供的 :file:`build.cmd` 脚本默认就会" +"这样做。" #: ../source/guides/supporting-windows-using-appveyor.rst:173 msgid "" @@ -10009,6 +11234,10 @@ msgid "" "environment to use (there are default environments for most versions of " "Python)." msgstr "" +"在交互式使用时,``tox`` 允许你针对多个环境运行测试(通常这意味着多个 Python " +"版本)。这一特性在 Appveyor 这样的 CI 环境中用处不大,因为在这样的环境里,所" +"有测试都会在每种配置对应的隔离环境中运行。因此,项目通常会向 ``tox`` 传入 ``-" +"e ENVNAME`` 参数来指定使用哪个环境(大多数 Python 版本都有默认环境)。" #: ../source/guides/supporting-windows-using-appveyor.rst:180 msgid "" @@ -10016,6 +11245,9 @@ msgid "" "where there are (for example) two installations of Python 3.4 (32-bit and 64-" "bit) available, but only one ``py34`` environment in ``tox``." msgstr "" +"然而,对于 Appveyor 这样的 Windows CI 系统,这种做法效果 *并不* 理想:例如," +"系统上有两个可用的 Python 3.4 安装(32 位和 64 位),但 ``tox`` 中只有一个 " +"``py34`` 环境。" #: ../source/guides/supporting-windows-using-appveyor.rst:184 msgid "" @@ -10024,6 +11256,9 @@ msgid "" "that was used to run ``tox``. This will ensure that when Appveyor runs the " "tests, they will be run with the configured interpreter." msgstr "" +"因此,为了使用 ``tox`` 运行测试,项目大概应该使用 ``tox`` 中默认的 ``py`` 环" +"境,该环境会使用运行 ``tox`` 时所用的那个 Python 解释器。这样可以确保 " +"Appveyor 运行测试时,使用的是配置好的解释器。" #: ../source/guides/supporting-windows-using-appveyor.rst:189 msgid "" @@ -10032,10 +11267,12 @@ msgid "" "their :file:`tox.ini` file. Doing so is, however, outside the scope of this " "document." msgstr "" +"为了支持在 ``py`` 环境下运行,``tox`` 配置较为复杂的项目可能需要修改自己的 " +":file:`tox.ini` 文件。不过,这超出了本文档的范围。" #: ../source/guides/supporting-windows-using-appveyor.rst:195 msgid "Automatically uploading wheels" -msgstr "" +msgstr "自动上传 wheel 包" #: ../source/guides/supporting-windows-using-appveyor.rst:197 msgid "" @@ -10044,6 +11281,9 @@ msgid "" "(for example) copy the built artifacts to a FTP site, or an Amazon S3 " "instance. Documentation on how to do this is included in the Appveyor guides." msgstr "" +"可以让 Appveyor 自动上传 wheel 包。:file:`appveyor.yml` 中提供了一个 " +"``deployment`` 步骤,可用于(例如)把构建产物复制到 FTP 站点或 Amazon S3 实例" +"。具体做法请参阅 Appveyor 指南中的文档。" #: ../source/guides/supporting-windows-using-appveyor.rst:202 msgid "" @@ -10052,16 +11292,21 @@ msgid "" "clear that uploading new wheels after every commit is desirable (although " "some projects may wish to do this)." msgstr "" +"另一种做法是在构建中添加一个 ``twine upload`` 步骤。所提供的 " +":file:`appveyor.yml` 并没有这样做,因为每次提交后都上传新的 wheel 包是否可取" +"并不明确(尽管有些项目可能希望这样做)。" #: ../source/guides/supporting-windows-using-appveyor.rst:208 msgid "External dependencies" -msgstr "" +msgstr "外部依赖项" #: ../source/guides/supporting-windows-using-appveyor.rst:210 msgid "" "The supplied scripts will successfully build any distribution that does not " "rely on 3rd party external libraries for the build." msgstr "" +"只要分发包的构建不依赖第三方外部库,所提供的脚本就能成功构建任何这样的分发包" +"。" #: ../source/guides/supporting-windows-using-appveyor.rst:213 msgid "" @@ -10072,14 +11317,17 @@ msgid "" "to the compiler. However, this level of configuration is beyond the scope of " "this document." msgstr "" +"可以在 :file:`appveyor.yml` 配置中添加步骤(通常在 \"install\" 小节),用来下" +"载和/或构建分发包所需的外部库。如有需要,还可以为构建添加额外配置,把这些库的" +"位置告知编译器。不过,这一层次的配置超出了本文档的范围。" #: ../source/guides/supporting-windows-using-appveyor.rst:222 msgid "Support scripts" -msgstr "" +msgstr "支持脚本" #: ../source/guides/supporting-windows-using-appveyor.rst:224 msgid "For reference, the SDK setup support script is listed here:" -msgstr "" +msgstr "作为参考,此处列出了 SDK 设置支持脚本:" #: ../source/guides/supporting-windows-using-appveyor.rst:226 msgid "``appveyor-sample/build.cmd``" @@ -10087,7 +11335,7 @@ msgstr "``appveyor-sample/build.cmd``" #: ../source/guides/tool-recommendations.rst:5 msgid "Tool recommendations" -msgstr "" +msgstr "工具推荐" #: ../source/guides/tool-recommendations.rst:7 msgid "" @@ -10102,6 +11350,12 @@ msgid "" "makes some recommendations of tools that you should *not* use because they " "are deprecated or insecure." msgstr "" +"Python 打包领域由许多不同的工具组成。对于许多任务,:term:`Python 打包管理局 " +"` (即 PyPA,这个涵盖众多打包工具并维护本" +"指南的工作组)有意不做一刀切的推荐;例如,之所以存在许多构建后端,是因为这一" +"领域被有意开放,以便开发出能比以往独一无二的后端 setuptools 更好地满足某些用" +"户需求的新后端。本指南确实会指出一些广受认可的工具,同时也会就一些因为已弃用" +"或不安全而你 *不应* 使用的工具提出建议。" #: ../source/guides/tool-recommendations.rst:20 msgid "Virtual environments" @@ -10114,6 +11368,9 @@ msgid "" "(part of the Python standard library, though missing some features of " "virtualenv)." msgstr "" +"手动创建和使用虚拟环境的标准工具是 :ref:`virtualenv` (PyPA 项目)和 " +":doc:`venv ` (Python 标准库的一部分,不过缺少 " +"virtualenv 的一些特性)。" #: ../source/guides/tool-recommendations.rst:28 msgid "Installing packages" @@ -10127,6 +11384,10 @@ msgid "" "default in most Python installations through the standard library " "package :doc:`ensurepip `." msgstr "" +":ref:`Pip` 是从 :term:`PyPI ` 安装软件包的标准工" +"具。你可能想阅读 pip 关于 :doc:`安全安装 ` 的建议" +"。在大多数 Python 安装中,凭借标准库软件包 :doc:`ensurepip `,pip 默认可用。" #: ../source/guides/tool-recommendations.rst:36 msgid "" @@ -10138,15 +11399,19 @@ msgid "" "wide applications making use of the same Python interpreter (especially on " "Linux)." msgstr "" +"另一种选择是 :ref:`pipx`,它专门用于安装通过 PyPI 分发并从命令行运行的 " +"Python 应用程序。Pipx 是 pip 和 venv 的包装器,会把每个应用程序安装到一个专用" +"的虚拟环境中。这样可以避免不同应用程序的依赖项之间的冲突,以及与使用同一 " +"Python 解释器的系统级应用程序之间的冲突(尤其是在 Linux 上)。" #: ../source/guides/tool-recommendations.rst:43 msgid "" "For scientific software specifically, consider :ref:`Conda` or :ref:`Spack`." -msgstr "" +msgstr "专门针对科学软件,可以考虑 :ref:`Conda` 或 :ref:`Spack`。" #: ../source/guides/tool-recommendations.rst:45 msgid "Write a \"pip vs. Conda\" comparison, here or in a new discussion." -msgstr "" +msgstr "在此处或在一个新的讨论页面中撰写 \"pip 与 Conda\" 的对比。" #: ../source/guides/tool-recommendations.rst:47 msgid "" @@ -10156,10 +11421,15 @@ msgid "" "develop``, which are also deprecated (see :ref:`setup-py-deprecated` for " "background and :ref:`modernize-setup-py-project` for migration advice)." msgstr "" +"请 **不要** 使用 ``easy_install`` (它是 :ref:`setuptools` 的一部分),该工具" +"已被弃用,由 pip 取而代之(详见 :ref:`pip vs easy_install`)。同样,请 **不" +"要** 使用 ``python setup.py install`` 或 ``python setup.py develop``,它们也" +"已被弃用(背景参见 :ref:`setup-py-deprecated`,迁移建议参见 :ref:`modernize-" +"setup-py-project`)。" #: ../source/guides/tool-recommendations.rst:55 msgid "Lock files" -msgstr "" +msgstr "锁定文件" #: ../source/guides/tool-recommendations.rst:57 msgid "" @@ -10167,10 +11437,12 @@ msgid "" "files, which contain the exact versions of all packages installed into an " "environment, for reproducibility purposes." msgstr "" +":ref:`pip-tools` 和 :ref:`Pipenv` 是两个公认的用于创建锁定文件的工具。锁定文" +"件中记录了安装到环境里的所有软件包的确切版本,用于保证可重现性。" #: ../source/guides/tool-recommendations.rst:63 msgid "Build backends" -msgstr "" +msgstr "构建后端" #: ../source/guides/tool-recommendations.rst:67 msgid "" @@ -10178,12 +11450,16 @@ msgid "" "particular tool, only to enumerate common tools. Different use cases often " "need specialized workflows." msgstr "" +"请记住:本文档并不试图把读者引导向某个特定的工具,而只是列举常见的工具。不同" +"的使用场景往往需要专门的工作流。" #: ../source/guides/tool-recommendations.rst:71 msgid "" "Popular :term:`build backends ` for pure-Python packages " "include, in alphabetical order:" msgstr "" +"纯 Python 软件包常用的 :term:`构建后端 ` 包括(按字母顺序排列" +"):" #: ../source/guides/tool-recommendations.rst:74 msgid "" @@ -10191,24 +11467,26 @@ msgid "" "from :ref:`Flit`. A minimal and opinionated build backend. It does not " "support plugins." msgstr "" +":doc:`Flit-core ` -- 与 :ref:`Flit` 一同开发,但相互独立" +"。这是一个极简而有主见的构建后端,不支持插件。" #: ../source/guides/tool-recommendations.rst:77 msgid "" "Hatchling_ -- developed with but separate from :ref:`Hatch`. Supports " "plugins." -msgstr "" +msgstr "Hatchling_ -- 与 :ref:`Hatch` 一同开发,但相互独立。支持插件。" #: ../source/guides/tool-recommendations.rst:79 msgid "" "PDM-backend_ -- developed with but separate from :ref:`PDM`. Supports " "plugins." -msgstr "" +msgstr "PDM-backend_ -- 与 :ref:`PDM` 一同开发,但相互独立。支持插件。" #: ../source/guides/tool-recommendations.rst:81 msgid "" "Poetry-core_ -- developed with but separate from :ref:`Poetry`. Supports " "plugins." -msgstr "" +msgstr "Poetry-core_ -- 与 :ref:`Poetry` 一同开发,但相互独立。支持插件。" #: ../source/guides/tool-recommendations.rst:84 msgid "" @@ -10216,11 +11494,13 @@ msgid "" "standard :ref:`[project] table ` (it uses a " "different format, in the ``[tool.poetry]`` table)." msgstr "" +"与列表中的其他后端不同,Poetry-core 不支持标准的 :ref:`[project] 表 `,而是采用另一种格式,写在 ``[tool.poetry]`` 表中。" #: ../source/guides/tool-recommendations.rst:88 msgid "" ":ref:`setuptools`, which used to be the only build backend. Supports plugins." -msgstr "" +msgstr ":ref:`setuptools`,它曾是唯一的构建后端。支持插件。" #: ../source/guides/tool-recommendations.rst:92 msgid "" @@ -10228,6 +11508,8 @@ msgid "" "standardisation efforts are now deprecated and only *temporarily kept* for " "compatibility." msgstr "" +"如果你使用 setuptools,请注意,一些早于标准化工作的特性如今已被弃用,仅为兼容" +"性而 *暂时保留*。" #: ../source/guides/tool-recommendations.rst:96 msgid "" @@ -10238,6 +11520,11 @@ msgid "" "(or :file:`setup.cfg`) whenever possible and keep :file:`setup.py` only if " "programmatic configuration is needed. See :ref:`setup-py-deprecated`." msgstr "" +"特别是,请 **不要** 直接调用 ``python setup.py``。另一方面,通过 " +":file:`setup.py` 文件配置 setuptools 仍然得到完全支持,不过建议尽可能使用现代" +"的 :ref:`pyproject.toml 中的 [project] 表 ` (或 " +":file:`setup.cfg`),只有在需要编程式配置时才保留 :file:`setup.py`。参见 " +":ref:`setup-py-deprecated`。" #: ../source/guides/tool-recommendations.rst:103 msgid "" @@ -10246,6 +11533,10 @@ msgid "" "table ` in :file:`pyproject.toml` " "instead), and the ``easy_install`` command (cf. :ref:`pip vs easy_install`)." msgstr "" +"其他一些你 **不应** 使用的已弃用特性包括:``setup()`` 的 ``setup_requires`` " +"参数(请改用 :file:`pyproject.toml` 中的 :ref:`[build-system] 表 `),以及 ``easy_install`` 命令(参见 :ref:`pip vs " +"easy_install`)。" #: ../source/guides/tool-recommendations.rst:108 msgid "" @@ -10253,10 +11544,12 @@ msgid "" "from the standard library in Python 3.12, although it still remains " "available from setuptools." msgstr "" +"请 **不要** 使用 :ref:`distutils`,它已被弃用,并已在 Python 3.12 中从标准库" +"移除,不过仍然可以从 setuptools 获取。" #: ../source/guides/tool-recommendations.rst:115 msgid "Build backends for extension modules" -msgstr "" +msgstr "扩展模块的构建后端" #: ../source/guides/tool-recommendations.rst:117 msgid "" @@ -10264,28 +11557,34 @@ msgid "" "to use a build system with dedicated support for the language the extension " "is written in, for example:" msgstr "" +"对于带有 :term:`扩展模块 ` 的软件包,最好使用对扩展所用的编" +"程语言提供专门支持的构建系统,例如:" #: ../source/guides/tool-recommendations.rst:121 msgid "" ":ref:`setuptools` -- natively supports C and C++ (with third-party plugins " "for Go and Rust)," -msgstr "" +msgstr ":ref:`setuptools` -- 原生支持 C 和 C++(通过第三方插件支持 Go 和 Rust)," #: ../source/guides/tool-recommendations.rst:122 msgid "" ":ref:`meson-python` -- C, C++, Fortran, Rust, and other languages supported " "by Meson," msgstr "" +":ref:`meson-python` -- 支持 C、C++、Fortran、Rust 以及 Meson 所支持的其他语言" +"," #: ../source/guides/tool-recommendations.rst:123 msgid "" ":ref:`scikit-build-core` -- C, C++, Fortran, and other languages supported " "by CMake," msgstr "" +":ref:`scikit-build-core` -- 支持 C、C++、Fortran 以及 CMake 所支持的其他语言" +"," #: ../source/guides/tool-recommendations.rst:124 msgid ":ref:`maturin` -- Rust, via Cargo." -msgstr "" +msgstr ":ref:`maturin` -- 支持 Rust,通过 Cargo。" #: ../source/guides/tool-recommendations.rst:128 msgid "Building distributions" @@ -10298,6 +11597,10 @@ msgid "" "is :ref:`build`. It will invoke whichever build backend you :ref:`declared " "` in :file:`pyproject.toml`." msgstr "" +"构建用于上传到 PyPI 的 :term:`源分发 ` " +"和 :term:`wheel 包 ` 的标准工具是 :ref:`build`。它会调用你在 " +":file:`pyproject.toml` 中 :ref:`声明 ` 的" +"那个构建后端。" #: ../source/guides/tool-recommendations.rst:135 msgid "" @@ -10305,6 +11608,9 @@ msgid "" "for this task. All direct invocations of :file:`setup.py` " "are :ref:`deprecated `." msgstr "" +"请 **不要** 为此任务使用 ``python setup.py sdist`` 和 ``python setup.py " +"bdist_wheel``。所有对 :file:`setup.py` 的直接调用都已被 :ref:`弃用 `。" #: ../source/guides/tool-recommendations.rst:139 msgid "" @@ -10312,6 +11618,8 @@ msgid "" "distribute wheels for multiple platforms, use :ref:`cibuildwheel` as part of " "your CI setup to build distributable wheels." msgstr "" +"如果你的项目带有 :term:`扩展模块 `,并且想为多个平台分发 " +"wheel 包,请在 CI 环境中使用 :ref:`cibuildwheel` 来构建可分发的 wheel 包。" #: ../source/guides/tool-recommendations.rst:145 msgid "Uploading to PyPI" @@ -10324,44 +11632,51 @@ msgid "" "allows the package to be securely uploaded to PyPI from a CI/CD workflow " "without a manually configured API token." msgstr "" +"对于托管在受支持的 CI/CD 平台上或通过其发布的项目,建议使用 :ref:`可信发布 " +"`,它允许从 CI/CD 工作流中把软件包安全地上传到 PyPI,而无" +"需手动配置 API 令牌。" #: ../source/guides/tool-recommendations.rst:152 msgid "" "As of November 2024, PyPI supports the following platforms as Trusted " "Publishing providers:" msgstr "" +"截至 2024 年 11 月,PyPI 支持以下平台作为可信发布(Trusted Publishing)提供方" +":" #: ../source/guides/tool-recommendations.rst:155 msgid "GitHub Actions (on ``https://github.com``)" -msgstr "" +msgstr "GitHub Actions(在 ``https://github.com`` 上)" #: ../source/guides/tool-recommendations.rst:156 msgid "GitLab CI/CD (on ``https://gitlab.com``)" -msgstr "" +msgstr "GitLab CI/CD(在 ``https://gitlab.com`` 上)" #: ../source/guides/tool-recommendations.rst:157 msgid "ActiveState" -msgstr "" +msgstr "ActiveState" #: ../source/guides/tool-recommendations.rst:158 msgid "Google Cloud" -msgstr "" +msgstr "Google Cloud" #: ../source/guides/tool-recommendations.rst:160 msgid "" "The other available method is to upload the package manually " "using :ref:`twine`." -msgstr "" +msgstr "另一种可用的方法是使用 :ref:`twine` 手动上传软件包。" #: ../source/guides/tool-recommendations.rst:164 msgid "" "**Never** use ``python setup.py upload`` for this task. In addition to " "being :ref:`deprecated `, it is insecure." msgstr "" +"**绝不要** 为此任务使用 ``python setup.py upload``。它除了 :ref:`已被弃用 " +"` 之外,也不安全。" #: ../source/guides/tool-recommendations.rst:169 msgid "Workflow tools" -msgstr "" +msgstr "工作流工具" #: ../source/guides/tool-recommendations.rst:171 msgid "" @@ -10373,6 +11688,10 @@ msgid "" "applications. They often call the tools mentioned above under the hood. In " "alphabetical order:" msgstr "" +"这些工具是环境管理器,可以为项目自动管理虚拟环境。它们还可以充当\"任务运行" +"器\",让你定义并调用诸如运行测试、编译文档、重新生成某些文件等任务。其中一些" +"提供了构建分发包并上传到 PyPI 的快捷方式,一些支持为应用程序生成锁定文件。它" +"们通常会在底层调用上文提到的工具。按字母顺序排列:" #: ../source/guides/tool-recommendations.rst:179 msgid ":ref:`Flit`," @@ -10384,7 +11703,7 @@ msgstr ":ref:`Hatch`," #: ../source/guides/tool-recommendations.rst:181 msgid ":doc:`nox `," -msgstr "" +msgstr ":doc:`nox `," #: ../source/guides/tool-recommendations.rst:182 msgid ":ref:`PDM`," @@ -10400,17 +11719,19 @@ msgstr ":ref:`Poetry`," #: ../source/guides/tool-recommendations.rst:185 msgid ":doc:`tox `." -msgstr "" +msgstr ":doc:`tox `。" #: ../source/guides/using-manifest-in.rst:5 msgid "Including files in source distributions with ``MANIFEST.in``" -msgstr "" +msgstr "使用 ``MANIFEST.in`` 在源分发中包含文件" #: ../source/guides/using-manifest-in.rst:7 msgid "" "The information on this page has moved to :doc:`setuptools:userguide/" "miscellaneous` in the setuptools documentation." msgstr "" +"本页面的信息已迁移至 setuptools 文档中的 :doc:`setuptools:userguide/" +"miscellaneous`。" #: ../source/guides/using-testpypi.rst:7 msgid "" @@ -10419,6 +11740,9 @@ msgid "" "without worrying about affecting the real index. TestPyPI is hosted at " "`test.pypi.org `_" msgstr "" +"``TestPyPI`` 是 :term:`Python Package Index (PyPI)` 的一个独立实例,让你可以" +"试用分发工具和流程,而不必担心影响真实的索引。TestPyPI 托管于 `test.pypi.org " +"`_" #: ../source/guides/using-testpypi.rst:13 msgid "Registering your account" @@ -10430,22 +11754,27 @@ msgid "" "separate user account specifically for TestPyPI. Go to https://test.pypi.org/" "account/register/ to register your account." msgstr "" +"由于 TestPyPI 与正式版 PyPI 使用相互独立的数据库,你需要专门为 TestPyPI 注册" +"一个单独的用户账号。请前往 https://test.pypi.org/account/register/ 注册你的账" +"号。" #: ../source/guides/using-testpypi.rst:19 msgid "" "The database for TestPyPI may be periodically pruned, so it is not unusual " "for user accounts to be deleted." -msgstr "" +msgstr "TestPyPI 的数据库可能会被定期清理,因此用户账号被删除的情况并不少见。" #: ../source/guides/using-testpypi.rst:24 msgid "Using TestPyPI with Twine" -msgstr "" +msgstr "结合 Twine 使用 TestPyPI" #: ../source/guides/using-testpypi.rst:26 msgid "" "You can upload your distributions to TestPyPI using :ref:`twine` by " "specifying the ``--repository`` flag:" msgstr "" +"你可以通过指定 ``--repository`` 标志,使用 :ref:`twine` 将你的分发包上传到 " +"TestPyPI:" #: ../source/guides/using-testpypi.rst:33 msgid "" @@ -10454,10 +11783,13 @@ msgid "" "``sampleproject`` is the name of your project that you uploaded. It may take " "a minute or two for your project to appear on the site." msgstr "" +"你可以访问 URL ``https://test.pypi.org/project/`` 来查看你的软" +"件包是否已成功上传,其中 ``sampleproject`` 是你所上传项目的名称。你的项目可能" +"需要一两分钟才会出现在网站上。" #: ../source/guides/using-testpypi.rst:39 msgid "Using TestPyPI with pip" -msgstr "" +msgstr "结合 pip 使用 TestPyPI" #: ../source/guides/using-testpypi.rst:41 msgid "" @@ -10473,6 +11805,8 @@ msgid "" "specify ``--extra-index-url`` to point to PyPI. This is useful when the " "package you're testing has dependencies:" msgstr "" +"如果你希望 pip 同时也能从 PyPI 下载软件包,可以指定 ``--extra-index-url`` 指" +"向 PyPI。当你测试的软件包带有依赖项时,这会很有用:" #: ../source/guides/using-testpypi.rst:73 msgid "Setting up TestPyPI in :file:`.pypirc`" @@ -10483,6 +11817,8 @@ msgid "" "If you want to avoid being prompted for your username and password every " "time, you can configure TestPyPI in your :file:`$HOME/.pypirc`:" msgstr "" +"如果你想避免每次都被提示输入用户名和密码,可以在你的 :file:`$HOME/.pypirc` 中" +"配置 TestPyPI:" #: ../source/guides/writing-pyproject-toml.rst:5 msgid "Writing your ``pyproject.toml``" @@ -10494,6 +11830,8 @@ msgid "" "as other tools such as linters, type checkers, etc. There are three possible " "TOML tables in this file." msgstr "" +"``pyproject.toml`` 是一个配置文件,供打包工具以及 linter、类型检查器等其他工" +"具使用。该文件中可能出现的 TOML 表有三种。" #: ../source/guides/writing-pyproject-toml.rst:11 msgid "" @@ -10501,6 +11839,8 @@ msgid "" "declare which :term:`build backend` you use and which other dependencies are " "needed to build your project." msgstr "" +"**强烈建议** 使用 ``[build-system]`` 表。它允许你声明你用哪个 :term:`build " +"backend` 以及构建项目还需要哪些其他依赖项。" #: ../source/guides/writing-pyproject-toml.rst:15 msgid "" @@ -10508,6 +11848,8 @@ msgid "" "specify your project's basic metadata, such as the dependencies, your name, " "etc." msgstr "" +"``[project]`` 表是大多数构建后端用来指定项目基本元数据的格式,例如依赖项、你" +"的姓名等。" #: ../source/guides/writing-pyproject-toml.rst:18 msgid "" @@ -10516,18 +11858,26 @@ msgid "" "because its contents are defined by each tool. Consult the particular tool's " "documentation to know what it can contain." msgstr "" +"``[tool]`` 表包含针对各工具的子表,例如 " +"``[tool.hatch]``、``[tool.black]``、``[tool.mypy]``。我们在这里只是简要提及这" +"个表,因为它的内容由各个工具自行定义。请查阅相应工具的文档,了解它可以包含哪" +"些内容。" #: ../source/guides/writing-pyproject-toml.rst:25 msgid "" "The ``[build-system]`` table should always be present, regardless of which " "build backend you use (``[build-system]`` *defines* the build tool you use)." msgstr "" +"无论你使用哪个构建后端,``[build-system]`` 表都应当始终存在(``[build-" +"system]`` *定义* 你所使用的构建工具)。" #: ../source/guides/writing-pyproject-toml.rst:29 msgid "" "On the other hand, the ``[project]`` table is understood by *most* build " "backends, but some build backends use a different format." msgstr "" +"另一方面,*大多数* 构建后端都能理解 ``[project]`` 表,但也有一些构建后端使用" +"别的格式。" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" @@ -10537,6 +11887,10 @@ msgid "" "build backend supports both the ``[project]`` table, and the older format in " "``setup.cfg`` or ``setup.py``." msgstr "" +"一个显著的例外是 Poetry_,它在 2.0 版本(2025 年 1 月 5 日发布)之前不使用 " +"``[project]`` 表,而是使用 ``[tool.poetry]`` 表。从 2.0 版本开始,它两者都支" +"持。此外,setuptools_ 构建后端既支持 ``[project]`` 表,也支持 ``setup.cfg`` " +"或 ``setup.py`` 中的旧格式。" #: ../source/guides/writing-pyproject-toml.rst:38 msgid "" @@ -10545,10 +11899,13 @@ msgid "" "but the ``setup.cfg`` and ``setup.py`` formats are still valid. " "See :ref:`setup-py-deprecated`." msgstr "" +"对于新项目,请使用 ``[project]`` 表;只有在需要某些程序化配置(例如构建 C 扩" +"展)时才保留 ``setup.py``,不过 ``setup.cfg`` 和 ``setup.py`` 格式仍然有效。" +"参见 :ref:`setup-py-deprecated`。" #: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" -msgstr "" +msgstr "声明构建后端" #: ../source/guides/writing-pyproject-toml.rst:49 msgid "" @@ -10559,6 +11916,10 @@ msgid "" "dependencies. You can also constrain the versions, e.g., ``requires = " "[\"setuptools >= 61.0\"]``." msgstr "" +"``[build-system]`` 表包含一个 ``build-backend`` 键,用于指定要使用的构建后端" +"。它还包含一个 ``requires`` 键,这是一个构建项目所需的依赖项列表,通常只包含" +"构建后端软件包本身,但也可能包含额外的依赖项。你还可以约束版本,例如 " +"``requires = [\"setuptools >= 61.0\"]``。" #: ../source/guides/writing-pyproject-toml.rst:55 msgid "" @@ -10566,14 +11927,16 @@ msgid "" "(after :ref:`choosing your build backend `). Here " "are the values for some common build backends:" msgstr "" +"通常,你只需照抄构建后端文档建议的内容(在 :ref:`选择构建后端 ` 之后)。下面是一些常见构建后端的取值:" #: ../source/guides/writing-pyproject-toml.rst:63 msgid "Static vs. dynamic metadata" -msgstr "" +msgstr "静态与动态元数据" #: ../source/guides/writing-pyproject-toml.rst:65 msgid "The rest of this guide is devoted to the ``[project]`` table." -msgstr "" +msgstr "本指南的其余部分都围绕 ``[project]`` 表展开。" #: ../source/guides/writing-pyproject-toml.rst:67 msgid "" @@ -10581,6 +11944,8 @@ msgid "" "field. For example: ``requires-python = \">= 3.8\"``, or ``version = " "\"1.0\"``." msgstr "" +"大多数时候,你会直接编写 ``[project]`` 字段的值。例如 ``requires-python = \">" +"= 3.8\"`` 或 ``version = \"1.0\"``。" #: ../source/guides/writing-pyproject-toml.rst:71 msgid "" @@ -10589,16 +11954,21 @@ msgid "" "a ``__version__`` attribute in your code, a Git tag, or similar. In such " "cases, you should mark the field as dynamic using, e.g.," msgstr "" +"不过在某些情况下,让构建后端替你计算元数据会很有用。例如:许多构建后端可以从" +"代码中的 ``__version__`` 属性、Git 标签或类似来源读取版本号。在这种情况下,你" +"应该将相应字段标记为动态,例如使用:" #: ../source/guides/writing-pyproject-toml.rst:82 msgid "" "When a field is dynamic, it is the build backend's responsibility to fill " "it. Consult your build backend's documentation to learn how it does it." msgstr "" +"当某个字段为动态时,填充该字段就是构建后端的职责。请查阅你所用的构建后端的文" +"档,了解它是如何完成填充的。" #: ../source/guides/writing-pyproject-toml.rst:88 msgid "Basic information" -msgstr "" +msgstr "基本信息" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:129 @@ -10612,6 +11982,8 @@ msgid "" "Put the name of your project on PyPI. This field is required and is the only " "field that cannot be marked as dynamic." msgstr "" +"填写你的项目在 PyPI 上的名称。此字段是必填的,并且是唯一不能标记为动态的字段" +"。" #: ../source/guides/writing-pyproject-toml.rst:103 msgid "" @@ -10652,10 +12024,12 @@ msgid "" "release) are possible; see the :ref:`specification ` for " "full details." msgstr "" +"也可以使用一些更复杂的版本说明符,例如用于 alpha 预发布版本的 " +"``2020.0.0a1``;完整细节请参见 :ref:`规范 `。" #: ../source/guides/writing-pyproject-toml.rst:128 msgid "This field is required, although it is often marked as dynamic using" -msgstr "" +msgstr "此字段是必填的,不过它经常通过以下方式被标记为动态:" #: ../source/guides/writing-pyproject-toml.rst:135 msgid "" @@ -10663,6 +12037,8 @@ msgid "" "attribute or a Git tag. Consult the :ref:`single-source-version` discussion " "for more details." msgstr "" +"这样就能支持诸如从 ``__version__`` 属性或 Git 标签填充版本号之类的用法。更多" +"细节请参见 :ref:`single-source-version` 讨论。" #: ../source/guides/writing-pyproject-toml.rst:141 msgid "Dependencies and requirements" @@ -10670,17 +12046,17 @@ msgstr "依赖项和要求" #: ../source/guides/writing-pyproject-toml.rst:144 msgid "``dependencies``/``optional-dependencies``" -msgstr "" +msgstr "``dependencies``/``optional-dependencies``" #: ../source/guides/writing-pyproject-toml.rst:146 msgid "If your project has dependencies, list them like this:" -msgstr "" +msgstr "如果你的项目有依赖项,可以像这样列出它们:" #: ../source/guides/writing-pyproject-toml.rst:158 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." -msgstr "" +msgstr "可用于约束版本的完整语法,请参见 :ref:`依赖说明符 `。" #: ../source/guides/writing-pyproject-toml.rst:161 msgid "" @@ -10688,6 +12064,8 @@ msgid "" "needed for a specific feature of your package. In that case, put them in " "``optional-dependencies``." msgstr "" +"如果某些依赖项只在软件包的特定功能中才会用到,你可能想把它们设为可选依赖。这" +"种情况下,请把它们放到 ``optional-dependencies`` 中。" #: ../source/guides/writing-pyproject-toml.rst:174 msgid "" @@ -10695,6 +12073,9 @@ msgid "" "could use, e.g., ``pip install your-project-name[gui]`` to install your " "project with GUI support, adding the PyQt5 dependency." msgstr "" +"其中每个键都定义了一个“打包附加功能”。在上面的示例中,可以用 ``pip install " +"your-project-name[gui]`` 这样的命令来安装带 GUI 支持的项目,同时添加 PyQt5 依" +"赖项。" #: ../source/guides/writing-pyproject-toml.rst:180 msgid "" @@ -10703,6 +12084,9 @@ msgid "" "optional features (such as an ``all`` extra hosting dependencies from both " "``gui`` and ``cli``):" msgstr "" +"你还可以定义一个引用当前项目其他附加功能的附加功能。这对于把多个可选功能组合" +"在一起的便利型附加功能很有用(例如一个收纳了 ``gui`` 和 ``cli`` 全部依赖项的 " +"``all`` 附加功能):" #: ../source/guides/writing-pyproject-toml.rst:189 msgid "" @@ -10710,6 +12094,8 @@ msgid "" "referenced extra's dependencies, which can otherwise fall out of sync after " "a few years of maintenance and bug fixes:" msgstr "" +"组合后的附加功能不需要为每个被引用附加功能的依赖项手工维护一份单独的副本,否" +"则这些副本在经过多年的维护和错误修复后很容易失去同步:" #: ../source/guides/writing-pyproject-toml.rst:203 msgid "" @@ -10717,29 +12103,32 @@ msgid "" "including :ref:`pip`, :ref:`uv`, :ref:`poetry`, :ref:`hatch`, :ref:`pdm` " "and :ref:`pipenv`." msgstr "" +"如今大多数包管理器都支持这种附加功能,包括 " +":ref:`pip`、:ref:`uv`、:ref:`poetry`、:ref:`hatch`、:ref:`pdm` 和 " +":ref:`pipenv`。" #: ../source/guides/writing-pyproject-toml.rst:210 #: ../source/specifications/pylock-toml.rst:95 #: ../source/specifications/pyproject-toml.rst:157 #: ../source/specifications/pyproject-toml.rst:250 msgid "``requires-python``" -msgstr "" +msgstr "``requires-python``" #: ../source/guides/writing-pyproject-toml.rst:212 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." -msgstr "" +msgstr "它让你声明你所支持的最低 Python 版本 [#requires-python-upper-bounds]_。" #: ../source/guides/writing-pyproject-toml.rst:224 msgid "Creating executable scripts" -msgstr "" +msgstr "创建可执行脚本" #: ../source/guides/writing-pyproject-toml.rst:226 msgid "" "To install a command as part of your package, declare it in the " "``[project.scripts]`` table." -msgstr "" +msgstr "要把某个命令作为软件包的一部分来安装,请在 ``[project.scripts]`` 表中声明它。" #: ../source/guides/writing-pyproject-toml.rst:234 msgid "" @@ -10747,6 +12136,8 @@ msgid "" "be available. Executing this command will do the equivalent of ``import sys; " "from spam import main_cli; sys.exit(main_cli())``." msgstr "" +"在这个例子中,安装你的项目之后,``spam-cli`` 命令便可使用。执行这个命令的效果" +"等同于执行 ``import sys; from spam import main_cli; sys.exit(main_cli())``。" #: ../source/guides/writing-pyproject-toml.rst:238 msgid "" @@ -10755,33 +12146,38 @@ msgid "" "prevent this from happening, use the ``[project.gui-scripts]`` table instead " "of ``[project.scripts]``." msgstr "" +"在 Windows 上,以这种方式打包的脚本需要终端,因此如果你从图形应用程序中启动它" +"们,就会弹出一个终端窗口。要避免这种情况,请改用 ``[project.gui-scripts]`` 表" +",而不是 ``[project.scripts]`` 表。" #: ../source/guides/writing-pyproject-toml.rst:248 msgid "" "In that case, launching your script from the command line will give back " "control immediately, leaving the script to run in the background." -msgstr "" +msgstr "在这种情况下,从命令行启动你的脚本会立即交还控制权,让脚本在后台运行。" #: ../source/guides/writing-pyproject-toml.rst:251 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" +"``[project.scripts]`` 和 ``[project.gui-scripts]`` 之间的区别只在 Windows 上" +"才有意义。" #: ../source/guides/writing-pyproject-toml.rst:257 msgid "About your project" -msgstr "关于您的项目" +msgstr "关于你的项目" #: ../source/guides/writing-pyproject-toml.rst:260 #: ../source/specifications/pyproject-toml.rst:337 msgid "``authors``/``maintainers``" -msgstr "" +msgstr "``authors``/``maintainers``" #: ../source/guides/writing-pyproject-toml.rst:262 msgid "" "Both of these fields contain lists of people identified by a name and/or an " "email address." -msgstr "" +msgstr "这两个字段都包含以姓名和/或电子邮箱地址标识的人员列表。" #: ../source/guides/writing-pyproject-toml.rst:282 #: ../source/specifications/pyproject-toml.rst:144 @@ -10795,12 +12191,15 @@ msgid "" "\"headline\" of your project page on PyPI (`example `_), and " "other places such as lists of search results (`example `_)." msgstr "" +"这应该是对你项目的一行描述,会显示为 PyPI 项目页面上的“标题”(`示例 `_),也会显示在其他地方,例如搜索结果列表(`示例 `_)" +"。" #: ../source/guides/writing-pyproject-toml.rst:295 #: ../source/specifications/pyproject-toml.rst:156 #: ../source/specifications/pyproject-toml.rst:209 msgid "``readme``" -msgstr "" +msgstr "``readme``" #: ../source/guides/writing-pyproject-toml.rst:297 msgid "" @@ -10808,19 +12207,21 @@ msgid "" "page on PyPI. Typically, your project will have a ``README.md`` or " "``README.rst`` file and you just put its file name here." msgstr "" +"这是对你项目更详细的描述,会显示在 PyPI 的项目页面上。通常,你的项目会有一个 " +"``README.md`` 或 ``README.rst`` 文件,你只需在这里填上它的文件名。" #: ../source/guides/writing-pyproject-toml.rst:306 msgid "The README's format is auto-detected from the extension:" -msgstr "" +msgstr "README 的格式会根据扩展名自动检测:" #: ../source/guides/writing-pyproject-toml.rst:308 msgid "``README.md`` → `GitHub-flavored Markdown `_," -msgstr "" +msgstr "``README.md`` → `GitHub 风格 Markdown `_," #: ../source/guides/writing-pyproject-toml.rst:309 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." -msgstr "``README.rst`` → `reStructuredText `_ (没有 Sphinx扩展)." +msgstr "``README.rst`` → `reStructuredText `_ (没有 Sphinx 扩展)." #: ../source/guides/writing-pyproject-toml.rst:311 msgid "You can also specify the format explicitly, like this:" @@ -10832,17 +12233,19 @@ msgstr "``许可证`` 和 ``许可证文件``" #: ../source/guides/writing-pyproject-toml.rst:326 msgid "As per :pep:`639`, licenses should be declared with two fields:" -msgstr "" +msgstr "根据 :pep:`639`,许可证应当用两个字段来声明:" #: ../source/guides/writing-pyproject-toml.rst:328 msgid "" "``license`` is an :term:`SPDX license expression ` " "consisting of one or more :term:`license identifiers `." msgstr "" +"``license`` 是一个 :term:`SPDX 许可证表达式 `,由一个或多" +"个 :term:`许可证标识符 ` 组成。" #: ../source/guides/writing-pyproject-toml.rst:330 msgid "``license-files`` is a list of license file glob patterns." -msgstr "" +msgstr "``license-files`` 是一个许可证文件的 glob 模式列表。" #: ../source/guides/writing-pyproject-toml.rst:332 msgid "" @@ -10851,10 +12254,13 @@ msgid "" "backends` now support the new format as shown in the " "following table." msgstr "" +"先前的某个 PEP 曾规定 ``license`` 是一个带有 ``file`` 或 ``text`` 键的表,这" +"种格式现已弃用。如今大多数 :term:`构建后端 ` 都支持下表所示的" +"新格式。" #: ../source/guides/writing-pyproject-toml.rst:336 msgid "build backend versions that introduced :pep:`639` support" -msgstr "" +msgstr "开始支持 :pep:`639` 的构建后端版本" #: ../source/guides/writing-pyproject-toml.rst:339 msgid "hatchling" @@ -10866,11 +12272,11 @@ msgstr "setuptools" #: ../source/guides/writing-pyproject-toml.rst:341 msgid "flit-core [#flit-core-pep639]_" -msgstr "" +msgstr "flit-core [#flit-core-pep639]_" #: ../source/guides/writing-pyproject-toml.rst:342 msgid "pdm-backend" -msgstr "" +msgstr "pdm-backend" #: ../source/guides/writing-pyproject-toml.rst:343 msgid "poetry-core" @@ -10882,27 +12288,27 @@ msgstr "uv-build" #: ../source/guides/writing-pyproject-toml.rst:345 msgid "1.27.0" -msgstr "" +msgstr "1.27.0" #: ../source/guides/writing-pyproject-toml.rst:346 msgid "77.0.3" -msgstr "" +msgstr "77.0.3" #: ../source/guides/writing-pyproject-toml.rst:347 msgid "3.12" -msgstr "" +msgstr "3.12" #: ../source/guides/writing-pyproject-toml.rst:348 msgid "2.4.0" -msgstr "" +msgstr "2.4.0" #: ../source/guides/writing-pyproject-toml.rst:349 msgid "2.2.0" -msgstr "" +msgstr "2.2.0" #: ../source/guides/writing-pyproject-toml.rst:350 msgid "0.7.19" -msgstr "" +msgstr "0.7.19" #: ../source/guides/writing-pyproject-toml.rst:356 #: ../source/specifications/pyproject-toml.rst:151 @@ -10918,6 +12324,10 @@ msgid "" "license list page `_. The supported list version is 3.17 " "or any later compatible one." msgstr "" +"``license`` 的新格式是一个有效的 :term:`SPDX 许可证表达式 `,由一个或多个 :term:`许可证标识符 ` 组成。完" +"整的许可证列表可在 `SPDX 许可证列表页面 `_ 查阅。支持的列表" +"版本是 3.17 或任何更新的兼容版本。" #: ../source/guides/writing-pyproject-toml.rst:371 msgid "" @@ -10926,6 +12336,9 @@ msgid "" "and-license-files_>`_ for more context. The now deprecated format is " "`described in PEP 621 `__." msgstr "" +"如果你遇到 ``license`` 应为 dict/table 的构建错误,说明你的构建后端还不支持新" +"格式。更多背景请参见 `上一节 `_ 。现已弃用的格式" +"描述见 `PEP 621 `__ 。" #: ../source/guides/writing-pyproject-toml.rst:376 msgid "" @@ -10933,6 +12346,8 @@ msgid "" "both to avoid confusion and because some organizations avoid software whose " "license is unapproved." msgstr "" +"一般而言,使用标准的、广为人知的许可证是明智之举,这既能避免混淆,也是因为一" +"些组织会回避许可证未经批准的软件。" #: ../source/guides/writing-pyproject-toml.rst:380 msgid "" @@ -10942,6 +12357,9 @@ msgid "" "specification, `clause 10.1 `_ of the version 2.2 or any " "later compatible one." msgstr "" +"如果你的 :term:`Distribution Archive` 所用的许可证没有现成的 SPDX 标识符,你" +"可以按 ``LicenseRef-[idstring]`` 格式创建一个自定义标识符。自定义标识符必须遵" +"循 SPDX 规范 2.2 版或任何更新的兼容版本中的 `10.1 条款 `_ 。" #: ../source/guides/writing-pyproject-toml.rst:395 #: ../source/specifications/pyproject-toml.rst:152 @@ -10954,47 +12372,47 @@ msgstr "``license-files``" msgid "" "This is a list of license files and files containing other legal information " "you want to distribute with your package." -msgstr "" +msgstr "这是你想随软件包一起分发的许可证文件和包含其他法律信息的文件的列表。" #: ../source/guides/writing-pyproject-toml.rst:405 msgid "The glob patterns must follow the specification:" -msgstr "" +msgstr "glob 模式必须遵循以下规范:" #: ../source/guides/writing-pyproject-toml.rst:407 msgid "" "Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots " "(``.``) will be matched verbatim." -msgstr "" +msgstr "字母数字字符、下划线(``_``)、连字符(``-``)和句号(``.``)将按字面值匹配。" #: ../source/guides/writing-pyproject-toml.rst:409 msgid "" "Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " "supported." -msgstr "" +msgstr "支持的特殊字符包括 ``*``、``?``、``**`` 以及字符范围 []。" #: ../source/guides/writing-pyproject-toml.rst:410 msgid "Path delimiters must be the forward slash character (``/``)." -msgstr "" +msgstr "路径分隔符必须是正斜杠字符(``/``)。" #: ../source/guides/writing-pyproject-toml.rst:411 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`, " "and thus may not start with a slash character." -msgstr "" +msgstr "模式相对于包含 :file:`pyproject.toml` 的目录,因此不能以斜杠字符开头。" #: ../source/guides/writing-pyproject-toml.rst:413 msgid "Parent directory indicators (``..``) must not be used." -msgstr "" +msgstr "不得使用父目录指示符(``..``)。" #: ../source/guides/writing-pyproject-toml.rst:414 msgid "Each glob must match at least one file." -msgstr "" +msgstr "每个 glob 必须至少匹配一个文件。" #: ../source/guides/writing-pyproject-toml.rst:416 msgid "" "Literal paths are valid globs. Any characters or character sequences not " "covered by this specification are invalid." -msgstr "" +msgstr "字面量路径是有效的 glob。本规范未涵盖的任何字符或字符序列均无效。" #: ../source/guides/writing-pyproject-toml.rst:422 #: ../source/specifications/pyproject-toml.rst:150 @@ -11007,7 +12425,7 @@ msgstr "``keywords``" msgid "" "This will help PyPI's search box to suggest your project when people search " "for these keywords." -msgstr "" +msgstr "这样,当有人搜索这些关键词时,PyPI 的搜索框就会推荐你的项目。" #: ../source/guides/writing-pyproject-toml.rst:436 #: ../source/specifications/pyproject-toml.rst:142 @@ -11032,6 +12450,9 @@ msgid "" "what Python versions a project can be installed on, use the :ref:`requires-" "python` argument." msgstr "" +"虽然分类器列表经常被用来声明项目支持哪些 Python 版本,但这一信息只用于在 " +"PyPI 上搜索和浏览项目,而不用于安装项目。要真正限制项目可以安装到哪些 Python " +"版本上,请使用 :ref:`requires-python` 参数。" #: ../source/guides/writing-pyproject-toml.rst:468 msgid "" @@ -11039,19 +12460,21 @@ msgid "" "``Private :: Do Not Upload`` classifier. PyPI will always reject packages " "with classifiers beginning with ``Private ::``." msgstr "" +"要防止软件包被上传到 PyPI,请使用特殊的 ``Private :: Do Not Upload`` 分类器。" +"PyPI 始终会拒绝那些分类器以 ``Private ::`` 开头的软件包。" #: ../source/guides/writing-pyproject-toml.rst:475 #: ../source/specifications/pyproject-toml.rst:159 #: ../source/specifications/pyproject-toml.rst:411 #: ../source/specifications/pyproject-toml.rst:662 msgid "``urls``" -msgstr "" +msgstr "``urls``" #: ../source/guides/writing-pyproject-toml.rst:477 msgid "" "A list of URLs associated with your project, displayed on the left sidebar " "of your PyPI project page." -msgstr "" +msgstr "与你的项目关联的 URL 列表,会显示在 PyPI 项目页面的左侧边栏中。" #: ../source/guides/writing-pyproject-toml.rst:482 msgid "" @@ -11060,6 +12483,9 @@ msgid "" "`_ for PyPI-specific " "URL processing." msgstr "" +"关于 PyPI 和其他打包工具专门识别的标签列表,请参见 :ref:`well-known-labels`;" +"关于 PyPI 特有的 URL 处理方式,请参阅 `PyPI 的项目元数据文档 `_。" #: ../source/guides/writing-pyproject-toml.rst:496 msgid "" @@ -11067,6 +12493,8 @@ msgid "" "``Website = \"https://example.com\"`` but ``\"Official Website\" = \"https://" "example.com\"``." msgstr "" +"注意,如果标签包含空格,就需要加引号,例如 ``Website = \"https://" +"example.com\"``,而 ``\"Official Website\" = \"https://example.com\"``。" #: ../source/guides/writing-pyproject-toml.rst:500 msgid "" @@ -11074,6 +12502,8 @@ msgid "" "where appropriate, since consumers of metadata (like package indices) can " "specialize their presentation." msgstr "" +"建议用户在合适的情况下为项目 URL 使用 :ref:`well-known-labels`,因为元数据的" +"消费方(如包索引)可以对其呈现方式做专门处理。" #: ../source/guides/writing-pyproject-toml.rst:504 msgid "" @@ -11081,6 +12511,8 @@ msgid "" "``\"Download Link\"`` is a well-known label, so they will be rendered " "verbatim:" msgstr "" +"例如,在下面的元数据中,``MyHomepage`` 和 ``\"Download Link\"`` 都不是知名标" +"签,因此它们会被原样渲染:" #: ../source/guides/writing-pyproject-toml.rst:514 msgid "" @@ -11089,10 +12521,13 @@ msgid "" "semantics in mind (the project's home page and its external download " "location, respectively)." msgstr "" +"而在下面的元数据中,``HomePage`` 和 ``DOWNLOAD`` 都有对应的知名等价标签" +"(``homepage`` 和 ``download``),因此可以按这些语义来呈现(分别为项目的主页" +"和外部下载位置)。" #: ../source/guides/writing-pyproject-toml.rst:526 msgid "Advanced plugins" -msgstr "" +msgstr "高级插件" #: ../source/guides/writing-pyproject-toml.rst:528 msgid "" @@ -11100,10 +12535,12 @@ msgid "" "Pygments_. To create such a plugin, you need to declare it in a subtable of " "``[project.entry-points]`` like this:" msgstr "" +"有些软件包可以通过插件来扩展,例如 Pytest_ 和 Pygments_。要创建这样的插件,你" +"需要在 ``[project.entry-points]`` 的一个子表中声明它,如下所示:" #: ../source/guides/writing-pyproject-toml.rst:537 msgid "See the :ref:`Plugin guide ` for more information." -msgstr "" +msgstr "更多信息请参见 :ref:`插件指南 `。" #: ../source/guides/writing-pyproject-toml.rst:542 msgid "A full example" @@ -11115,12 +12552,14 @@ msgid "" "3.10\"`` here. `This blog post `_ contains some " "information regarding possible problems." msgstr "" +"在这里设置类似 ``requires-python = \"<= 3.10\"`` 的上限之前,请三思。`这篇博" +"客文章 `_ 包含了可能存在的问题的信息。" #: ../source/guides/writing-pyproject-toml.rst:610 msgid "" "flit-core `does not yet `_ support WITH in SPDX license " "expressions." -msgstr "" +msgstr "flit-core `尚不支持 `_ 在 SPDX 许可证表达式中使用 WITH。" #: ../source/index.rst:-1 msgid "" @@ -11130,11 +12569,11 @@ msgstr "Python 打包用户指南 (PyPUG) 是一个打包 Python 软件的教程 #: ../source/index.rst:-1 msgid "python, packaging, guide, tutorial" -msgstr "python, 包装, 指南, 教程" +msgstr "python, 打包, 指南, 教程" #: ../source/index.rst:3 ../source/key_projects.rst:247 msgid "Python Packaging User Guide" -msgstr "Python 包装用户指南" +msgstr "Python 打包用户指南" #: ../source/index.rst:25 msgid "" @@ -11142,6 +12581,8 @@ msgid "" "references to help you distribute and install Python packages with modern " "tools." msgstr "" +"欢迎来到 *Python 打包用户指南*,这是一系列教程和参考资料,帮助你使用现代工具" +"来分发和安装 Python 软件包。" #: ../source/index.rst:29 msgid "" @@ -11150,7 +12591,7 @@ msgid "" "`. 😊" msgstr "" "本指南在 `GitHub`_ 上由 :doc:`Python Packaging Authority ` 维护。" -"我们很乐意接受任何 :doc:`contributions and feedback `。 😊" +"我们很乐意接受任何 :doc:`贡献与反馈 `。 😊" #: ../source/index.rst:36 msgid "Overview and Flow" @@ -11162,6 +12603,8 @@ msgid "" "continuous improvement are key to success. The overview and flow sections " "provide a starting point for understanding the Python packaging ecosystem." msgstr "" +"建立对 Python 打包的理解是一段旅程。耐心和持续改进是成功的关键。“概览和流程”" +"部分为理解 Python 打包生态系统提供了起点。" #: ../source/index.rst:44 msgid "" @@ -11171,12 +12614,15 @@ msgid "" "It includes what packaging is, the problems that it solves, and key " "considerations." msgstr "" +":doc:`overview` 介绍了 Python 打包及其在准备和分发项目时的用途。这一部分帮助" +"你理解如何选择最适合你的使用场景的工具和流程。内容包括打包是什么、它解决了哪" +"些问题,以及关键的注意事项。" #: ../source/index.rst:51 msgid "" "To get an overview of the workflow used to publish your code, " "see :doc:`packaging flow `." -msgstr "" +msgstr "要概览发布代码的工作流程,请参阅 :doc:`打包流程 `。" #: ../source/index.rst:57 msgid "" @@ -11184,26 +12630,29 @@ msgid "" "time. Tutorials aim to help you succeed and provide a starting point for " "future exploration. The :doc:`tutorials/index` section includes:" msgstr "" +"教程会逐步讲解首次完成一个项目所需的各个步骤。教程旨在帮助你取得成功,并为今" +"后的探索提供起点。:doc:`tutorials/index` 部分包括:" #: ../source/index.rst:62 msgid "" "A :doc:`tutorial on installing packages `" -msgstr "" -":doc:`tutorial on installing packages ` 文档" +msgstr ":doc:`安装软件包教程 ` 文档" #: ../source/index.rst:63 msgid "" "A :doc:`tutorial on managing application dependencies ` in a version controlled project" msgstr "" +"一篇介绍如何在使用版本控制的项目中管理应用程序依赖项的 :doc:`教程 `" #: ../source/index.rst:65 msgid "" "A :doc:`tutorial on packaging and distributing ` your project" msgstr "" -"要学习如何打包和分发你的项目,请参阅 :doc:`tutorial on packaging and " -"distributing `" +"要学习如何打包和分发你的项目,请参阅 :doc:`打包和分发教程 `" #: ../source/index.rst:71 msgid "" @@ -11211,6 +12660,8 @@ msgid "" "users who are already familiar with Python packaging and are looking for " "specific information." msgstr "" +"指南提供了完成特定任务所需的步骤。它们更侧重于已经熟悉 Python 打包、正在寻找" +"特定信息的用户。" #: ../source/index.rst:75 msgid "" @@ -11218,16 +12669,18 @@ msgid "" "major areas: package installation; building and distributing packages; " "miscellaneous topics." msgstr "" +":doc:`guides/index` 部分提供了三大领域的“操作方法”说明:软件包安装;构建和分" +"发软件包;其他主题。" #: ../source/index.rst:80 msgid "Explanations and Discussions" -msgstr "" +msgstr "解释与讨论" #: ../source/index.rst:82 msgid "" "The :doc:`discussions/index` section provides in-depth explanations and " "discussion about topics, such as:" -msgstr "" +msgstr ":doc:`discussions/index` 部分提供了对若干主题的深入解释和讨论,例如:" #: ../source/index.rst:85 msgid ":doc:`discussions/deploying-python-applications`" @@ -11235,7 +12688,7 @@ msgstr ":doc:`discussions/deploying-python-applications`" #: ../source/index.rst:86 msgid ":doc:`discussions/pip-vs-easy-install`" -msgstr "" +msgstr ":doc:`discussions/pip-vs-easy-install`" #: ../source/index.rst:89 msgid "Reference" @@ -11245,7 +12698,7 @@ msgstr "参考" msgid "" "The :doc:`specifications/index` section for packaging interoperability " "specifications." -msgstr "" +msgstr "打包互操作性规范所在的 :doc:`specifications/index` 部分。" #: ../source/index.rst:92 msgid "" @@ -11257,7 +12710,7 @@ msgstr "" #: ../source/index.rst:93 msgid "The :doc:`glossary` for definitions of terms used in Python packaging." -msgstr "" +msgstr "Python 打包中使用的术语定义所在的 :doc:`glossary`。" #: ../source/key_projects.rst:6 msgid "Project Summaries" @@ -11267,7 +12720,7 @@ msgstr "项目摘要" msgid "" "Summaries and links for the most relevant projects in the space of Python " "installation and packaging." -msgstr "" +msgstr "Python 安装与打包领域中最相关的一些项目的简介和链接。" #: ../source/key_projects.rst:14 msgid "PyPA Projects" @@ -11275,7 +12728,7 @@ msgstr "PyPA 项目" #: ../source/key_projects.rst:19 msgid "bandersnatch" -msgstr "" +msgstr "bandersnatch" #: ../source/key_projects.rst:21 msgid "" @@ -11295,10 +12748,14 @@ msgid "" "tests) and to prevent heavily loading PyPI's Content Delivery Network (CDN). " "Files can be served from a local directory or `AWS S3`_." msgstr "" +"``bandersnatch`` 是一个 PyPI 镜像客户端,旨在高效地创建 PyPI 内容的完整镜像。" +"这样,组织既能节省软件包下载的带宽和延迟(尤其是在自动化测试场景下),又能避" +"免给 PyPI 的内容分发网络(CDN)带来过重的负载。文件可由本地目录或 `AWS S3`_ " +"提供。" #: ../source/key_projects.rst:37 msgid "build" -msgstr "建造" +msgstr "build" #: ../source/key_projects.rst:39 msgid "" @@ -11315,6 +12772,8 @@ msgid "" "``build`` is a :pep:`517` compatible Python package builder. It provides a " "CLI to build packages, as well as a Python API." msgstr "" +"``build`` 是一个兼容 :pep:`517` 的 Python 软件包构建器。它既提供了构建软件包" +"的 CLI,也提供了 Python API。" #: ../source/key_projects.rst:51 msgid "cibuildwheel" @@ -11340,6 +12799,8 @@ msgid "" "all common platforms and Python versions on most CI systems. Also " "see :ref:`multibuild`." msgstr "" +"``cibuildwheel`` 是一个 Python 软件包,用于在大多数 CI 系统上为所有常见平台" +"和 Python 版本构建 :term:`wheel `。另请参阅 :ref:`multibuild`。" #: ../source/key_projects.rst:66 msgid "distlib" @@ -11365,6 +12826,10 @@ msgid "" "interoperability, resolve dependencies, manage package resources, and do " "other similar functions." msgstr "" +"``distlib`` 是一个实现了与 Python 软件打包和分发相关的底层功能的库。 " +"``distlib`` 实现了若干相关的 PEP(Python 增强提案标准),对第三方打包工具的开" +"发者很有用,可以帮助他们构建并上传二进制和源码 :term:`分发包 `、实现互操作性、解析依赖项、管理软件包资源,以及完成其他类似的功能。" #: ../source/key_projects.rst:82 msgid "" @@ -11375,6 +12840,9 @@ msgid "" "standards and fall into the subset of packages that are incompatible with " "those standards." msgstr "" +"与下文那个更严格、专门实现现代 Python 打包互操作标准的 :ref:`packaging` 项目" +"不同,``distlib`` 在被要求处理早于现代互操作标准、且属于与这些标准不兼容的软" +"件包子集的旧式软件包和元数据时,还会尝试提供合理的回退行为。" #: ../source/key_projects.rst:93 msgid "distutils" @@ -11384,7 +12852,7 @@ msgstr "distutils" msgid "" "The original Python packaging system, added to the standard library in " "Python 2.0 and removed in 3.12." -msgstr "" +msgstr "最初的 Python 打包系统,于 Python 2.0 中加入标准库,并在 3.12 中移除。" #: ../source/key_projects.rst:98 msgid "" @@ -11396,6 +12864,10 @@ msgid "" "declarations and entry point declarations), it also provides a consistent " "build interface and feature set across all supported Python versions." msgstr "" +"由于维护一个功能更新与语言运行时更新紧密耦合的打包系统困难重重,社区已明确不" +"鼓励直接使用 :ref:`distutils`,并推荐改用 :ref:`Setuptools`。 " +":ref:`Setuptools` 不仅提供了原生 :ref:`distutils` 不具备的功能(如依赖项声明" +"和入口点声明),还在所有受支持的 Python 版本上提供了一致的构建接口和功能集。" #: ../source/key_projects.rst:107 msgid "" @@ -11404,6 +12876,10 @@ msgid "" "in Python 3.12. Setuptools bundles the standalone copy of distutils, and it " "is injected even on Python < 3.12 if you import setuptools first or use pip." msgstr "" +"因此,:ref:`distutils` 已在 Python 3.10 中被 :pep:`632` 弃用,并在 Python " +"3.12 中从标准库里 :doc:`移除 `。Setuptools 捆绑了 " +"distutils 的独立副本;即使是在 Python 3.12 之前的版本上,只要你先导入 " +"setuptools 或使用 pip,它也会被注入。" #: ../source/key_projects.rst:116 msgid "flit" @@ -11425,6 +12901,9 @@ msgid "" "quickly set up a simple project, build source distributions and wheels, and " "upload them to PyPI." msgstr "" +"Flit 提供了一种简单的方式来创建纯 Python 软件包和模块并将其上传到 PyPI。它在" +"打包方面的核心理念是 `让简单的事情保持简单 `_。Flit 可以生成" +"配置文件来快速搭建一个简单的项目,构建源分发和 wheel,并将其上传到 PyPI。" #: ../source/key_projects.rst:127 msgid "" @@ -11433,6 +12912,10 @@ msgid "" "upload them to PyPI. Flit requires Python 3, but you can use it to " "distribute modules for Python 2, so long as they can be imported on Python 3." msgstr "" +"Flit 使用 ``pyproject.toml`` 来配置项目。Flit 不依赖 :ref:`setuptools` 之类的" +"工具来构建分发包,也不依赖 :ref:`twine` 来把它们上传到 PyPI。Flit 需要 " +"Python 3,但只要模块能在 Python 3 上导入,你也可以用它来分发面向 Python 2 的" +"模块。" #: ../source/key_projects.rst:132 msgid "" @@ -11441,6 +12924,9 @@ msgid "" "tidelift.com/lifter/search/pypi/flit>`__, and funds sent to the PSF and " "earmarked for PyPA usage." msgstr "" +"自 2023 年 10 月起,flit 软件包由 `Matthias Bussonnier `__ 在 `tidelift 平台 " +"`__ 上负责维护,相关资金会拨付给 PSF,并专款用于 PyPA。" #: ../source/key_projects.rst:142 msgid "hatch" @@ -11462,6 +12948,10 @@ msgid "" "to configure, version, specify dependencies for, and publish packages to " "PyPI. Its plugin system allows for easily extending functionality." msgstr "" +"Hatch 是一款统一的命令行工具,旨在帮助 Python 开发者便捷地管理依赖项和环境隔" +"离。Python 软件包开发者使用 Hatch 及其 :term:`构建后端 ` " +"Hatchling 来配置项目、管理版本、指定依赖项,并把软件包发布到 PyPI。它的插件系" +"统让扩展功能变得十分容易。" #: ../source/key_projects.rst:157 msgid "packaging" @@ -11480,7 +12970,7 @@ msgstr "" #: ../source/key_projects.rst:164 msgid "" "Core utilities for Python packaging used by :ref:`pip` and :ref:`setuptools`." -msgstr "" +msgstr "供 :ref:`pip` 和 :ref:`setuptools` 使用的 Python 打包核心工具。" #: ../source/key_projects.rst:166 msgid "" @@ -11491,6 +12981,10 @@ msgid "" "distribution, and installation tools listed here often use its functionality " "to parse, discover, and otherwise handle dependency attributes." msgstr "" +"packaging 库中的核心工具负责为 Python 软件包处理版本处理、说明符、标记、需求" +"、标签以及类似的属性和任务。大多数 Python 用户都在间接依赖这个库,而无需显式" +"调用它;这里列出的其他 Python 打包、分发和安装工具的开发者,则经常使用它的功" +"能来解析、发现并处理依赖项属性。" #: ../source/key_projects.rst:174 msgid "" @@ -11502,11 +12996,15 @@ msgid "" "reading of ambiguous metadata in cases where :ref:`packaging` will instead " "report on error." msgstr "" +"本项目专门致力于实现 :ref:`packaging-specifications` 中定义的现代 Python 打包" +"互操作标准,并对与这些标准不兼容的、足够老旧的旧式软件包报告错误。相比之下" +",:ref:`distlib` 项目是一个更宽容的库:在 :ref:`packaging` 会转而报告错误的场" +"合,它会尝试对有歧义的元数据给出合理的解读。" #: ../source/key_projects.rst:186 #: ../source/specifications/platform-compatibility-tags.rst:147 msgid "pip" -msgstr "" +msgstr "pip" #: ../source/key_projects.rst:188 msgid "" @@ -11556,6 +13054,10 @@ msgid "" "``requirements.txt`` and also check for CVEs in `Pipfile`_ using `safety " "`_." msgstr "" +"Pipenv 是一个致力于把各种语言打包领域的精华带到 Python 世界的项目。它把 " +":ref:`Pipfile`、:ref:`pip` 和 :ref:`virtualenv` 融合为一条工具链。它可以自动" +"导入 ``requirements.txt``,还能使用 `safety `_ 来检" +"查 `Pipfile`_ 中的 CVE(安全漏洞)。" #: ../source/key_projects.rst:216 msgid "" @@ -11565,6 +13067,9 @@ msgid "" "with hash-locked dependency specifiers, and eases uninstallation of packages " "and dependencies." msgstr "" +"Pipenv 旨在帮助用户在命令行上管理环境、依赖项和导入的软件包。它在 Windows 上" +"也运行良好(其他工具往往对 Windows 支持不足),可以生成并校验文件哈希,以确保" +"符合哈希锁定的依赖项说明符,并让卸载软件包和依赖项变得更轻松。" #: ../source/key_projects.rst:225 msgid "Pipfile" @@ -11580,6 +13085,8 @@ msgid "" "application-centric alternative to :ref:`pip`'s lower-" "level :file:`requirements.txt` file." msgstr "" +":file:`Pipfile` 及其配套的 :file:`Pipfile.lock` 是 :ref:`pip` 所用的底层 " +":file:`requirements.txt` 文件的一种更以应用为中心、层次更高的替代方案。" #: ../source/key_projects.rst:236 msgid "pipx" @@ -11633,6 +13140,10 @@ msgid "" "via :ref:`twine`, as part of their release management process, to check that " "their package descriptions will properly display on PyPI." msgstr "" +"``readme_renderer`` 是一个供软件包开发者使用的库,用于把以 Markdown 或 " +"reStructuredText 等标记语言编写的用户文档(README)文件渲染成 HTML。开发者会" +"在发布管理流程中单独调用它,或通过 :ref:`twine` 来调用它,以检查软件包描述能" +"否在 PyPI 上正常显示。" #: ../source/key_projects.rst:274 msgid "Setuptools" @@ -11655,10 +13166,13 @@ msgid "" "Python :term:`distributions `, especially ones that " "have dependencies on other packages." msgstr "" +"Setuptools(包含 ``easy_install``)是一组对 Python distutils 的增强,让你能够" +"更轻松地构建和分发 Python :term:`分发包 `,尤其是那些依" +"赖其他软件包的分发包。" #: ../source/key_projects.rst:289 msgid "trove-classifiers" -msgstr "" +msgstr "trove-classifiers" #: ../source/key_projects.rst:291 msgid "" @@ -11677,6 +13191,9 @@ msgid "" "to :ref:`systematically describe their projects ` " "so that users can better find projects that match their needs on the PyPI." msgstr "" +"trove-classifiers 是 `PyPI 上的分类器 `_ 的权" +"威来源;项目维护者用它来 :ref:`系统地描述自己的项目 `,以便用户能在 PyPI 上更好地找到符合自身需求的项目。" #: ../source/key_projects.rst:300 msgid "" @@ -11690,6 +13207,12 @@ msgid "" "the project hosts discussions on proposed classifiers and requests for new " "classifiers." msgstr "" +"trove-classifiers 软件包包含有效分类器和已弃用分类器(已弃用分类器与其替代分" +"类器成对列出)的列表。请用这个软件包来校验打算上传到 PyPI 的软件包中所使用的" +"分类器。由于分类器列表以代码形式发布,你可以安装并导入它,这比查阅 `PyPI 上发" +"布的列表 `_ 更加方便。该项目的 `问题跟踪器 " +"`_ 承载着关于拟议分类器和新" +"分类器请求的讨论。" #: ../source/key_projects.rst:314 msgid "twine" @@ -11713,6 +13236,9 @@ msgid "" "because it's the official PyPI upload tool, it's fast and secure, it's " "maintained, and it reliably works." msgstr "" +"Twine 是开发者用来把软件包上传到 Python 包索引或其他 Python 包索引的主要工具" +"。它是一个命令行程序,会把程序文件和元数据传递给 web API。开发者选择它,是因" +"为它是 PyPI 的官方上传工具,快速而安全,持续有人维护,并且稳定可靠。" #: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" @@ -11738,6 +13264,11 @@ msgid "" "troubleshooting virtual environments. For more information, see the section " "on :ref:`Creating and using Virtual Environments`." msgstr "" +"virtualenv 是一个用于创建隔离的 Python :term:`虚拟环境 " +"` 的工具,与 :ref:`venv` 类似。与 :ref:`venv` 不同,virtualenv 可以为其他版本" +"的 Python 创建虚拟环境,并使用 PATH 环境变量来定位它们。它还提供了便于配置、" +"维护、复制和排查虚拟环境问题的功能。更多信息请参阅 :ref:`Creating and using " +"Virtual Environments` 一节。" #: ../source/key_projects.rst:350 msgid "Warehouse" @@ -11757,6 +13288,8 @@ msgid "" "hosted at `pypi.org `_. The default source for :ref:`pip` " "downloads." msgstr "" +"驱动 :term:`Python Package Index (PyPI)` 的当前代码库,托管在 `pypi.org " +"`_。它是 :ref:`pip` 下载的默认来源。" #: ../source/key_projects.rst:364 msgid "wheel" @@ -11778,6 +13311,9 @@ msgid "" "extension for creating :term:`wheel distributions `. Additionally, " "it offers its own command line utility for creating and installing wheels." msgstr "" +"wheel 项目主要提供 ``bdist_wheel`` 这个 :ref:`setuptools` 扩展,用于创建 " +":term:`wheel 分发包 `。此外,它还提供了自己的命令行实用程序,用于创建" +"和安装 wheel。" #: ../source/key_projects.rst:375 msgid "" @@ -11787,6 +13323,10 @@ msgid "" "check metadata for compliance, and repair the wheel and metadata to properly " "link and include external shared libraries in a package." msgstr "" +"另请参阅 `auditwheel `__,这是一款供软件" +"包开发者检查和修复其正在以二进制 wheel 格式构建的 Python 软件包的工具。它提供" +"的功能包括:发现依赖项、检查元数据的合规性,以及修复 wheel 和元数据,以便正确" +"地链接外部共享库并将其纳入软件包。" #: ../source/key_projects.rst:384 msgid "Non-PyPA Projects" @@ -11813,6 +13353,9 @@ msgid "" "based. It lets you create a buildout configuration and reproduce the same " "software later." msgstr "" +"Buildout 是一个基于 Python 的构建系统,用于从多个部件(其中一些部件可能并非基" +"于 Python)创建、组装和部署应用。它让你可以创建一份 buildout 配置,并在日后重" +"现同样的软件。" #: ../source/key_projects.rst:403 msgid "conda" @@ -11820,7 +13363,7 @@ msgstr "conda" #: ../source/key_projects.rst:405 msgid ":doc:`Docs `" -msgstr "" +msgstr ":doc:`文档 `" #: ../source/key_projects.rst:407 msgid "" @@ -11835,6 +13378,13 @@ msgid "" "or `pixi `_ systems. It is available for Windows, Mac and " "Linux systems." msgstr "" +"Conda 是一个适用于任何语言的软件包、依赖项和环境管理系统,支持 Python、R、" +"Ruby、C/C++、Fortran 等。它用 Python 编写,由于支持非 Python 的编译库和扩展," +"在 Python 科学计算社区中被广泛使用。它是 Anaconda, Inc. 推出的 `Anaconda " +"`__ Python 发行版的基础。它最初面向科学" +"界,但也可以单独使用,或与 :doc:`miniconda `、`miniforge " +"`_ 或 `pixi `_ 等" +"系统配合使用。它可用于 Windows、Mac 和 Linux 系统。" #: ../source/key_projects.rst:416 msgid "" @@ -11843,6 +13393,9 @@ msgid "" "virtual environment management and deployment of binary extensions and other " "binary code." msgstr "" +"Conda 是一个与 :ref:`pip`、virtualenv 和 wheel 完全独立的工具,但提供了它们多" +"项功能的组合,例如软件包管理、虚拟环境管理,以及二进制扩展和其他二进制代码的" +"部署。" #: ../source/key_projects.rst:420 msgid "" @@ -11854,6 +13407,11 @@ msgid "" "are a wide variety of packages from the community supported `conda-forge " "project `__" msgstr "" +"Conda 不会从 PyPI 安装软件包,它只能管理专门为 conda 构建的软件包,这些软件包" +"可以发布在“conda 频道”上,例如托管在 `anaconda.org `__ " +"上的频道,或本地(例如内网)软件包服务器。除了由 `Anaconda, Inc. `__ 管理的“默认”频道外,还有来自社区支持的 `conda-forge 项" +"目 `__ 的大量软件包" #: ../source/key_projects.rst:426 msgid "" @@ -11864,10 +13422,15 @@ msgid "" "latest/user-guide/tutorials/build-pkgs-skeleton.html>`__: a tool to " "automatically make conda packages from Python packages available on PyPI." msgstr "" +"注意,:ref:`pip` 可以安装到 conda 中并与 conda 并行工作,用于管理来自 PyPI " +"的 :term:`分发包 `。还可以使用 `conda skeleton " +"`__ 之类的工具,从 Python 源码软件包构建 conda 软件" +"包:这个工具可以自动用 PyPI 上可用的 Python 软件包制作 conda 软件包。" #: ../source/key_projects.rst:435 msgid "devpi" -msgstr "" +msgstr "devpi" #: ../source/key_projects.rst:437 msgid "" @@ -11886,10 +13449,14 @@ msgid "" "` with inheritance, syncing between these indexes, index " "replication and fail-over, and package upload." msgstr "" +"devpi 提供了一个强大的 PyPI 兼容服务器和 PyPI 代理缓存,并附带一个命令行工具" +",用来驱动 Python 的打包、测试和发布活动。devpi 还提供了一个可浏览、可搜索的 " +"web 界面。devpi 支持镜像 PyPI、带继承的多个 :term:`包索引 `、" +"这些索引之间的同步、索引复制与故障转移,以及软件包上传。" #: ../source/key_projects.rst:452 msgid "dumb-pypi" -msgstr "" +msgstr "dumb-pypi" #: ../source/key_projects.rst:454 msgid "" @@ -11906,6 +13473,9 @@ msgid "" "the package index. It supports serving the hash, core-metadata, and yank-" "status." msgstr "" +"dumb-pypi 是一个简单的 :term:`包索引 ` 静态文件站点生成器,生" +"成的站点随后必须由静态文件 web 服务器托管,才能成为包索引。它支持提供哈希、核" +"心元数据以及 yank 状态。" #: ../source/key_projects.rst:464 msgid "enscons" @@ -11930,10 +13500,15 @@ msgid "" "sdists that can be automatically built by :ref:`pip`, and wheels that are " "independent of enscons." msgstr "" +"Enscons 是一个基于 `SCons`_ 的 Python 打包工具。它无需使用 distutils 或 " +"setuptools 即可构建与 :ref:`pip` 兼容的源分发和 wheel,包括带有 C 扩展的分发" +"包。Enscons 的架构和理念与 :ref:`distutils` 不同:它不是给 Python 打包系统添" +"加构建功能,而是把 Python 打包加到通用构建系统之上。Enscons 帮助你构建可由 " +":ref:`pip` 自动构建的 sdist,以及不依赖 enscons 的 wheel。" #: ../source/key_projects.rst:485 msgid "Flask-Pypi-Proxy" -msgstr "" +msgstr "Flask-Pypi-Proxy" #: ../source/key_projects.rst:487 msgid "" @@ -11946,13 +13521,13 @@ msgstr "" #: ../source/key_projects.rst:491 ../source/key_projects.rst:685 #: ../source/key_projects.rst:744 msgid "Not maintained, project archived" -msgstr "" +msgstr "不再维护,项目已归档" #: ../source/key_projects.rst:493 msgid "" "Flask-Pypi-Proxy is a :term:`package index ` as a cached " "proxy for PyPI." -msgstr "" +msgstr "Flask-Pypi-Proxy 是一个作为 PyPI 缓存代理的 :term:`包索引 `。" #: ../source/key_projects.rst:499 msgid "Hashdist" @@ -11976,10 +13551,15 @@ msgid "" "distribution stateless, cached, and branchable. It is used by some " "researchers but has been lacking in maintenance since 2016." msgstr "" +"Hashdist 是一个用于构建非 root 软件分发的库。Hashdist 力图成为“Debian 技术无" +"法胜任的场景下首选的 Debian”。对 Python 开发者来说,理解 Hashdist 的最好方式" +",也许是把它看作 :ref:`virtualenv` 和 :ref:`buildout` 的一个更强大的混合体。" +"它旨在解决科学软件的安装问题,并让软件包分发变得无状态、可缓存、可分支。一些" +"研究人员在使用它,但自 2016 年起它就缺乏维护了。" #: ../source/key_projects.rst:516 msgid "Maturin" -msgstr "" +msgstr "Maturin" #: ../source/key_projects.rst:518 msgid "" @@ -11995,6 +13575,9 @@ msgid "" "It supports building wheels for python 3.7+ on Windows, Linux, macOS and " "FreeBSD, can upload them to PyPI and has basic PyPy and GraalPy support." msgstr "" +"Maturin 是一个面向 Rust 扩展模块的构建后端,本身也用 Rust 编写。它支持在 " +"Windows、Linux、macOS 和 FreeBSD 上为 Python 3.7+ 构建 wheel,可以把 wheel 上" +"传到 PyPI,并对 PyPy 和 GraalPy 提供基本支持。" #: ../source/key_projects.rst:529 msgid "meson-python" @@ -12015,6 +13598,9 @@ msgid "" "package. It supports a wide variety of languages, including C, and is able " "to fill the needs of most complex build configurations." msgstr "" +"``meson-python`` 是一个使用 Meson_ 构建系统的构建后端。它让 Python 软件包作者" +"能够把 Meson_ 用作其软件包的构建系统。它支持包括 C 在内的多种语言,能够满足大" +"多数复杂构建配置的需求。" #: ../source/key_projects.rst:544 msgid "multibuild" @@ -12030,24 +13616,28 @@ msgid "" "Python :term:`wheels ` for Linux, macOS, and (less flexibly) Windows. " "Also see :ref:`cibuildwheel`." msgstr "" +"Multibuild 是一组 CI 脚本,用于为 Linux、macOS 以及(灵活性稍逊的)Windows 构" +"建和测试 Python :term:`wheel `。另请参阅 :ref:`cibuildwheel`。" #: ../source/key_projects.rst:554 msgid "nginx_pypi_cache" -msgstr "" +msgstr "nginx_pypi_cache" #: ../source/key_projects.rst:556 msgid ":gh:`GitHub `" -msgstr "" +msgstr ":gh:`GitHub `" #: ../source/key_projects.rst:558 msgid "" "nginx_pypi_cache is a :term:`package index ` caching proxy " "using `nginx `_." msgstr "" +"nginx_pypi_cache 是一个使用 `nginx `_ 的 :term:`包索" +"引 ` 缓存代理。" #: ../source/key_projects.rst:564 msgid "pdm" -msgstr "" +msgstr "pdm" #: ../source/key_projects.rst:566 msgid "" @@ -12062,6 +13652,8 @@ msgid "" "PDM is a modern Python package manager. It uses :term:`pyproject.toml` to " "store project metadata as defined in :pep:`621`." msgstr "" +"PDM 是一个现代化的 Python 软件包管理器。它使用 :term:`pyproject.toml` 来存储 " +":pep:`621` 所定义的项目元数据。" #: ../source/key_projects.rst:578 msgid "" @@ -12082,6 +13674,12 @@ msgid "" "PEX. PEX files can optionally have tools embedded that support turning the " "PEX file into a standard venv, graphing dependencies and more." msgstr "" +"Pex 是一个用于生成 :file:`.pex` 文件(Python EXecutable)的工具,这类文件是类" +"似 :ref:`virtualenv` 的独立 Python 环境。PEX 文件是 :doc:`zipapp " +"`,让部署 Python 应用像 ``cp`` 一样简单。单个 PEX 文件" +"可以支持多个目标平台,并且可以由标准的 :ref:`pip` 可解析需求、用 ``pex3 lock " +"...`` 生成的锁文件甚至另一个 PEX 创建而成。PEX 文件还可以选择内嵌一些工具,支" +"持把 PEX 文件转换成标准的 venv、绘制依赖关系图等。" #: ../source/key_projects.rst:594 msgid "pip-tools" @@ -12107,10 +13705,14 @@ msgid "" "their program, update all dependencies (a feature :ref:`pip` currently does " "not provide), and create layers of constraints for the program to obey." msgstr "" +"pip-tools 是一套面向 Python 系统管理员和发布管理者的工具,他们尤其希望构建保" +"持确定性,同时又能跟上依赖项的新版本。用户可以通过哈希来指定依赖项的特定版本" +",可以根据程序其他部分的信息方便地生成格式正确的需求列表,可以更新所有依赖项" +"(这是 :ref:`pip` 目前尚未提供的功能),还可以为程序创建多层约束。" #: ../source/key_projects.rst:612 msgid "pip2pi" -msgstr "" +msgstr "pip2pi" #: ../source/key_projects.rst:614 msgid "" @@ -12123,6 +13725,8 @@ msgid "" "pip2pi is a :term:`package index ` server where specific " "packages are manually synchronised." msgstr "" +"pip2pi 是一个 :term:`包索引 ` 服务器,其中特定的软件包通过手动" +"方式同步。" #: ../source/key_projects.rst:623 msgid "piwheels" @@ -12143,6 +13747,9 @@ msgid "" "that are optimized for installation onto Raspberry Pi computers. Raspberry " "Pi OS pre-configures pip to use piwheels.org as an additional index to PyPI." msgstr "" +"piwheels 是一个网站(以及支撑它的软件),它从 PyPI 获取源分发,并将其编译成针" +"对树莓派(Raspberry Pi)计算机安装而优化的二进制 wheel。Raspberry Pi OS 预先" +"将 pip 配置为在使用 PyPI 的同时把 piwheels.org 用作附加索引。" #: ../source/key_projects.rst:638 msgid "poetry" @@ -12172,7 +13779,7 @@ msgstr "" #: ../source/key_projects.rst:654 msgid "proxpi" -msgstr "" +msgstr "proxpi" #: ../source/key_projects.rst:656 msgid "" @@ -12185,6 +13792,8 @@ msgid "" "proxpi is a simple :term:`package index ` which proxies PyPI " "and other indexes with caching." msgstr "" +"proxpi 是一个简单的 :term:`包索引 `,会代理 PyPI 和其他索引并" +"提供缓存。" #: ../source/key_projects.rst:665 msgid "Pulp-python" @@ -12204,10 +13813,13 @@ msgid "" "`Pulp `_. Pulp-python supports mirrors backed by " "local or `AWS S3`_, package upload, and proxying to multiple package indexes." msgstr "" +"Pulp-python 是 `Pulp `_ 的 Python :term:`包索引 " +"` 插件。Pulp-python 支持由本地存储或 `AWS S3`_ 支撑的镜像、软" +"件包上传,以及向多个包索引的代理。" #: ../source/key_projects.rst:679 msgid "PyPI Cloud" -msgstr "" +msgstr "PyPI Cloud" #: ../source/key_projects.rst:681 msgid "" @@ -12224,6 +13836,9 @@ msgid "" "redirect/cached proxying for PyPI, as well as authentication and " "authorisation." msgstr "" +"PyPI Cloud 是一个 :term:`包索引 ` 服务器,后端可以是 `AWS " +"S3`_ 或其他云存储服务,也可以是本地文件。PyPI Cloud 支持 PyPI 的重定向/缓存代" +"理,还支持身份验证和授权。" #: ../source/key_projects.rst:695 msgid "pypiprivate" @@ -12242,6 +13857,8 @@ msgid "" "pypiprivate serves a local (or `AWS S3`_-hosted) directory of packages as " "a :term:`package index `." msgstr "" +"pypiprivate 把本地(或托管在 `AWS S3`_ 上的)软件包目录作为 :term:`包索引 " +"` 提供服务。" #: ../source/key_projects.rst:706 msgid "pypiserver" @@ -12265,15 +13882,15 @@ msgid "" "Organizations who use pypiserver usually download packages both from " "pypiserver and from PyPI." msgstr "" -"pypiserver 是一个极简的应用程序,充当组织内的私有 Python :term:`package " -"index `(从一个本地目录),实现了一个简单的 API 和浏览器界面。" +"pypiserver 是一个极简的应用程序,充当组织内私有的 Python :term:`包索引 " +"`,从一个本地目录提供服务,实现了一个简单的 API 和浏览器界面。" "你可以使用标准的上传工具上传私有软件包,用户可以使用 :ref:`pip` 下载和安装它" "们,而不用公开发布。使用 pypiserver 的组织通常既从 pypiserver 也从 PyPI 下载" "软件包。" #: ../source/key_projects.rst:722 msgid "PyScaffold" -msgstr "" +msgstr "PyScaffold" #: ../source/key_projects.rst:724 msgid "" @@ -12292,10 +13909,15 @@ msgid "" "environment so developers can start coding right away. PyScaffold can also " "be used with existing projects to make packaging easier." msgstr "" +"PyScaffold 是一个用于引导创建 Python 软件包的项目生成器,生成的软件包可以直接" +"分享到 PyPI,并可通过 :ref:`pip` 安装。它依赖一组为成熟工具(如 " +":ref:`setuptools`、pytest_ 和 Sphinx_)设定的合理默认配置,从而提供一个高效的" +"环境,让开发者可以立即开始编码。PyScaffold 也可以用于现有项目,让打包变得更轻" +"松。" #: ../source/key_projects.rst:739 msgid "pywharf" -msgstr "" +msgstr "pywharf" #: ../source/key_projects.rst:741 msgid "" @@ -12308,6 +13930,8 @@ msgid "" "pywharf is a :term:`package index ` server, serving files " "locally or from `GitHub `_." msgstr "" +"pywharf 是一个 :term:`包索引 ` 服务器,可以在本地或从 `GitHub " +"`_ 提供文件服务。" #: ../source/key_projects.rst:752 msgid "scikit-build" @@ -12333,6 +13957,11 @@ msgid "" "large projects, the user can install `ninja `__ (also available on PyPI)." msgstr "" +"Scikit-build 是一个面向 CPython 的 :ref:`setuptools` 包装器,用于构建 C/C++/" +"Fortran/Cython 扩展。它使用可从 PyPI 获取的 `cmake `__,为额外的编译器、构建系统、交叉编译,以及定位依赖项及其相关构建需求" +"提供更好的支持。为了加速和并行构建大型项目,用户可以安装同样可从 PyPI 获取的 " +"`ninja `__。" #: ../source/key_projects.rst:769 msgid "scikit-build-core" @@ -12357,6 +13986,10 @@ msgid "" "dependencies and their associated build requirements. CMake/Ninja are " "automatically downloaded from PyPI if not available on the system." msgstr "" +"Scikit-build-core 是一个面向 CPython C/C++/Fortran/Cython 扩展的构建后端。它" +"让用户能够使用可从 PyPI 获取的 `cmake `__ 来" +"编写扩展,为额外的编译器、构建系统、交叉编译,以及定位依赖项及其相关构建需求" +"提供更好的支持。如果系统上没有 CMake/Ninja,就会自动从 PyPI 下载。" #: ../source/key_projects.rst:785 msgid "shiv" @@ -12377,10 +14010,13 @@ msgid "" "Its primary goal is making distributing Python applications and command line " "tools fast & easy." msgstr "" +"shiv 是一个命令行实用程序,用于按照 :pep:`441` 构建完全自包含的 Python zipapp" +",而且会将其全部依赖项一并包含在内。它的首要目标是让分发 Python 应用和命令行" +"工具变得快速而简单。" #: ../source/key_projects.rst:799 msgid "simpleindex" -msgstr "" +msgstr "simpleindex" #: ../source/key_projects.rst:801 msgid "" @@ -12397,6 +14033,9 @@ msgid "" "for example `AWS S3`_, with a custom plugin) directories of packages, and " "supports custom plugins." msgstr "" +"simpleindex 是一个 :term:`包索引 `,它把 URL 路由到多个包索引" +"(包括 PyPI),提供本地(或云端托管,例如 `AWS S3`_,需配合自定义插件)的软件" +"包目录服务,并支持自定义插件。" #: ../source/key_projects.rst:814 msgid "" @@ -12405,6 +14044,10 @@ msgid "" "2015/2807623/12OmNBf94Xq>`__ | `Slides `__" msgstr "" +":doc:`文档 ` | `GitHub `__ | `论" +"文 `__ | `幻灯片 `__" #: ../source/key_projects.rst:819 msgid "" @@ -12416,6 +14059,10 @@ msgid "" "building high performance scientific applications on clusters and " "supercomputers." msgstr "" +"一个灵活的软件包管理器,旨在支持多种版本、配置、平台和编译器。Spack 类似于 " +"Homebrew,但它的软件包是用 Python 编写并做了参数化的,便于轻松更换编译器、库" +"版本、构建选项等。任意多个版本的软件包可以在同一系统上共存。Spack 为在集群和" +"超级计算机上快速构建高性能科学应用而设计。" #: ../source/key_projects.rst:827 msgid "" @@ -12426,7 +14073,7 @@ msgstr "" #: ../source/key_projects.rst:833 msgid "uv" -msgstr "" +msgstr "uv" #: ../source/key_projects.rst:835 msgid "" @@ -12442,6 +14089,8 @@ msgid "" "It supports creating and managing virtual environments, installing packages, " "locking dependencies, and managing Python versions and projects." msgstr "" +"一个用 Rust 编写、追求高性能的 Python 软件包和项目管理器。它支持创建和管理虚" +"拟环境、安装软件包、锁定依赖项,以及管理 Python 版本和项目。" #: ../source/key_projects.rst:846 msgid "zest.releaser" @@ -12464,10 +14113,13 @@ msgid "" "automate incrementing package version numbers, updating changelogs, tagging " "releases in source control, and uploading new packages to PyPI." msgstr "" +"``zest.releaser`` 是一个 Python 软件包发布工具,在 :ref:`twine` 之上提供了一" +"个抽象层。Python 开发者使用 ``zest.releaser`` 来自动完成递增软件包版本号、更" +"新变更日志、在源码管理系统中为发布打标签,以及把新软件包上传到 PyPI 等工作。" #: ../source/key_projects.rst:859 msgid "Standard Library Projects" -msgstr "" +msgstr "标准库项目" #: ../source/key_projects.rst:864 msgid "ensurepip" @@ -12488,6 +14140,9 @@ msgid "" "environment. In most cases, end users won't use this module, but rather it " "will be used during the build of the Python distribution." msgstr "" +"Python 标准库中的一个软件包,为把 :ref:`pip` 引导安装到现有的 Python 安装或虚" +"拟环境中提供支持。在大多数情况下,最终用户不会使用这个模块,而是在构建 " +"Python 发行版时使用它。" #: ../source/key_projects.rst:877 msgid "http.server" @@ -12506,6 +14161,8 @@ msgid "" "website, for example as a :term:`package index ` " "(see :ref:`Hosting your Own Simple Repository`)." msgstr "" +"一个软件包和命令行接口,可以把某个目录作为网站来托管,例如作为 :term:`包索引 " +"`,参见 :ref:`Hosting your Own Simple Repository`。" #: ../source/key_projects.rst:889 msgid "venv" @@ -12526,6 +14183,9 @@ msgid "" "information, see the section on :ref:`Creating and using Virtual " "Environments`." msgstr "" +"Python 标准库中的一个软件包(自 Python 3.3 起提供),用于创建 :term:`虚拟环" +"境 `。更多信息请参阅 :ref:`Creating and using Virtual " +"Environments` 一节。" #: ../source/news.rst:2 msgid "News" @@ -12535,7 +14195,7 @@ msgstr "新闻" msgid "" "This document is not currently updated. Previously, the document highlighted " "changes in Python packaging." -msgstr "" +msgstr "本文档目前已不再更新。此前,该文档重点介绍 Python 打包方面的变更。" #: ../source/news.rst:9 msgid "September 2019" @@ -12543,337 +14203,337 @@ msgstr "2019年9月" #: ../source/news.rst:10 msgid "Added a guide about publishing dists via GitHub Actions. (:pr:`647`)" -msgstr "" +msgstr "新增了关于通过 GitHub Actions 发布分发包的指南。(:pr:`647`)" #: ../source/news.rst:13 msgid "August 2019" -msgstr "" +msgstr "2019年8月" #: ../source/news.rst:14 msgid "Updated to use :file:`python3 -m` when installing pipx. (:pr:`631`)" -msgstr "" +msgstr "更新为在安装 pipx 时使用 :file:`python3 -m`。(:pr:`631`)" #: ../source/news.rst:17 msgid "July 2019" -msgstr "" +msgstr "2019年7月" #: ../source/news.rst:18 msgid "Marked all PEP numbers with the :pep: role. (:pr:`629`)" -msgstr "" +msgstr "用 :pep: 角色标记了所有 PEP 编号。(:pr:`629`)" #: ../source/news.rst:19 msgid "Upgraded Sphinx version and removed pypa.io intersphinx. (:pr:`625`)" -msgstr "" +msgstr "升级了 Sphinx 版本,并移除了 pypa.io 的 intersphinx 配置。(:pr:`625`)" #: ../source/news.rst:20 msgid "Mentioned :file:`find_namespace_packages`. (:pr:`622`)" -msgstr "" +msgstr "提到了 :file:`find_namespace_packages`。(:pr:`622`)" #: ../source/news.rst:21 msgid "Updated directory layout examples for consistency. (:pr:`611`)" -msgstr "" +msgstr "为保持一致,更新了目录布局示例。(:pr:`611`)" #: ../source/news.rst:22 msgid "Updated Bandersnatch link to GitHub. (:pr:`623`)" -msgstr "" +msgstr "将 Bandersnatch 链接更新为指向 GitHub。(:pr:`623`)" #: ../source/news.rst:25 msgid "June 2019" -msgstr "" +msgstr "2019年6月" #: ../source/news.rst:26 msgid "Fixed some typos. (:pr:`620`)" -msgstr "" +msgstr "修正了一些拼写错误。(:pr:`620`)" #: ../source/news.rst:29 msgid "May 2019" -msgstr "" +msgstr "2019年5月" #: ../source/news.rst:30 msgid "Added :file:`python_requires` usage to packaging tutorial. (:pr:`613`)" -msgstr "" +msgstr "在打包教程中添加了 :file:`python_requires` 的用法。(:pr:`613`)" #: ../source/news.rst:31 msgid "Added a MANIFEST.in guide page. (:pr:`609`)" -msgstr "" +msgstr "新增了 MANIFEST.in 指南页面。(:pr:`609`)" #: ../source/news.rst:34 msgid "April 2019" -msgstr "" +msgstr "2019年4月" #: ../source/news.rst:35 msgid "" "Added a mention for :file:`shiv` in the key projects section. (:pr:`608`)" -msgstr "" +msgstr "在关键项目部分添加了对 :file:`shiv` 的提及。(:pr:`608`)" #: ../source/news.rst:36 msgid "Reduced emphasis on virtualenv. (:pr:`606`)" -msgstr "" +msgstr "降低了对 virtualenv 的强调程度。(:pr:`606`)" #: ../source/news.rst:39 msgid "March 2019" -msgstr "" +msgstr "2019年3月" #: ../source/news.rst:40 msgid "Moved single-sourcing guide version option to Python 3. (:pr:`605`)" -msgstr "" +msgstr "将单一来源指南中的版本选项改为 Python 3。(:pr:`605`)" #: ../source/news.rst:41 msgid "Covered RTD details for contributing. (:pr:`600`)" -msgstr "" +msgstr "在贡献指南中补充了 RTD 的相关细节。(:pr:`600`)" #: ../source/news.rst:44 msgid "February 2019" -msgstr "" +msgstr "2019年2月" #: ../source/news.rst:45 msgid "" "Elaborate upon the differences between the tutorial and the real packaging " "process. (:pr:`602`)" -msgstr "" +msgstr "详细阐述了教程与真实打包流程之间的差异。(:pr:`602`)" #: ../source/news.rst:46 msgid "Added instructions to install Python CLI applications. (:pr:`594`)" -msgstr "" +msgstr "添加了安装 Python CLI 应用程序的说明。(:pr:`594`)" #: ../source/news.rst:49 msgid "January 2019" -msgstr "" +msgstr "2019年1月" #: ../source/news.rst:50 msgid "Added :file:`--no-deps` to the packaging tutorial. (:pr:`593`)" -msgstr "" +msgstr "在打包教程中添加了 :file:`--no-deps`。(:pr:`593`)" #: ../source/news.rst:51 msgid "Updated Sphinx and Nox. (:pr:`591`)" -msgstr "" +msgstr "更新了 Sphinx 和 Nox。(:pr:`591`)" #: ../source/news.rst:52 msgid "Referenced Twine from Python3. (:pr:`581`)" -msgstr "" +msgstr "从 Python 3 引用了 Twine。(:pr:`581`)" #: ../source/news.rst:55 msgid "December 2018" -msgstr "" +msgstr "2018年12月" #: ../source/news.rst:56 msgid "No programmers in the office!" -msgstr "" +msgstr "办公室里没有程序员!" #: ../source/news.rst:59 msgid "November 2018" -msgstr "" +msgstr "2018年11月" #: ../source/news.rst:60 msgid "Removed landing page link to PyPI migration guide. (:pr:`575`)" -msgstr "" +msgstr "移除了首页上指向 PyPI 迁移指南的链接。(:pr:`575`)" #: ../source/news.rst:61 msgid "Changed bumpversion to bump2version. (:pr:`572`)" -msgstr "" +msgstr "将 bumpversion 改为 bump2version。(:pr:`572`)" #: ../source/news.rst:62 msgid "Added single-sourcing package version example. (:pr:`573`)" -msgstr "" +msgstr "添加了单一来源软件包版本的示例。(:pr:`573`)" #: ../source/news.rst:63 msgid "Added a guide for creating documentation. (:pr:`568`)" -msgstr "" +msgstr "新增了关于创建文档的指南。(:pr:`568`)" #: ../source/news.rst:66 msgid "October 2018" -msgstr "" +msgstr "2018年10月" #: ../source/news.rst:67 msgid "Updated Nox package name. (:pr:`566`)" -msgstr "" +msgstr "更新了 Nox 的软件包名称。(:pr:`566`)" #: ../source/news.rst:68 msgid "Mentioned Sphinx extensions in guides. (:pr:`562`)" -msgstr "" +msgstr "在指南中提到了 Sphinx 扩展。(:pr:`562`)" #: ../source/news.rst:71 msgid "September 2018" -msgstr "" +msgstr "2018年9月" #: ../source/news.rst:72 msgid "Added a section on checking RST markup. (:pr:`554`)" -msgstr "" +msgstr "添加了关于检查 RST 标记的小节。(:pr:`554`)" #: ../source/news.rst:73 msgid "Updated user installs page. (:pr:`558`)" -msgstr "" +msgstr "更新了用户安装页面。(:pr:`558`)" #: ../source/news.rst:74 msgid "Updated Google BigQuery urls. (:pr:`556`)" -msgstr "" +msgstr "更新了 Google BigQuery 的 URL。(:pr:`556`)" #: ../source/news.rst:75 msgid "Replaced tar command with working command. (:pr:`552`)" -msgstr "" +msgstr "将 tar 命令替换为可用的命令。(:pr:`552`)" #: ../source/news.rst:76 msgid "" "Changed to double quotes in the pip install SomeProject==1.4. (:pr:`550`)" -msgstr "" +msgstr "在 pip install SomeProject==1.4 中改用了双引号。(:pr:`550`)" #: ../source/news.rst:79 msgid "August 2018" -msgstr "" +msgstr "2018年8月" #: ../source/news.rst:80 msgid "Removed the recommendation to store passwords in cleartext. (:pr:`546`)" -msgstr "" +msgstr "移除了以明文形式存储密码的建议。(:pr:`546`)" #: ../source/news.rst:81 msgid "" "Moved the Overview to a task based lead in along with the others. (:pr:`540`)" -msgstr "" +msgstr "与其他页面一样,将“总览”改为基于任务的导语。(:pr:`540`)" #: ../source/news.rst:82 msgid "Updated Python version supported by virtualenv. (:pr:`538`)" -msgstr "" +msgstr "更新了 virtualenv 所支持的 Python 版本。(:pr:`538`)" #: ../source/news.rst:83 msgid "Added outline/rough draft of new Overview page. (:pr:`519`)" -msgstr "" +msgstr "添加了新“总览”页面的提纲/草稿。(:pr:`519`)" #: ../source/news.rst:86 msgid "July 2018" -msgstr "" +msgstr "2018年7月" #: ../source/news.rst:88 msgid "Improved binary extension docs. (:pr:`531`)" -msgstr "" +msgstr "改进了二进制扩展相关的文档。(:pr:`531`)" #: ../source/news.rst:89 msgid "Added scikit-build to key projects. (:pr:`530`)" -msgstr "" +msgstr "将 scikit-build 添加到了关键项目中。(:pr:`530`)" #: ../source/news.rst:92 msgid "June 2018" -msgstr "" +msgstr "2018年6月" #: ../source/news.rst:94 msgid "Fixed categories of interop PEP for pypa.io. (:pr:`527`)" -msgstr "" +msgstr "修正了 pypa.io 上互操作性 PEP 的分类。(:pr:`527`)" #: ../source/news.rst:95 msgid "Updated Markdown descriptions explanation. (:pr:`522`)" -msgstr "" +msgstr "更新了关于 Markdown 描述的说明。(:pr:`522`)" #: ../source/news.rst:98 msgid "May 2018" -msgstr "" +msgstr "2018年5月" #: ../source/news.rst:100 msgid "Noted issues with Provides-Dist and Obsoletes-Dist. (:pr:`513`)" -msgstr "" +msgstr "指出了 Provides-Dist 和 Obsoletes-Dist 存在的问题。(:pr:`513`)" #: ../source/news.rst:101 msgid "" "Removed outdated warning about Python version mixing with Pipenv. (:pr:`501`)" -msgstr "" +msgstr "移除了关于在 Pipenv 中混用 Python 版本的过时警告。(:pr:`501`)" #: ../source/news.rst:102 msgid "Simplified packaging tutorial. (:pr:`498`)" -msgstr "" +msgstr "简化了打包教程。(:pr:`498`)" #: ../source/news.rst:103 msgid "Updated Windows users instructions for clarity. (:pr:`493`)" -msgstr "" +msgstr "为使表述更清晰,更新了面向 Windows 用户的说明。(:pr:`493`)" #: ../source/news.rst:104 msgid "Updated the license section description for completeness. (:pr:`492`)" -msgstr "" +msgstr "更新了许可部分的描述,使之更加完整。(:pr:`492`)" #: ../source/news.rst:105 msgid "Added specification-style document to contributing section. (:pr:`489`)" -msgstr "" +msgstr "在贡献章节中添加了规范风格的文档。(:pr:`489`)" #: ../source/news.rst:106 msgid "Added documentation types to contributing guide. (:pr:`485`)" -msgstr "" +msgstr "在贡献指南中添加了文档类型说明。(:pr:`485`)" #: ../source/news.rst:109 msgid "April 2018" -msgstr "" +msgstr "2018年4月" #: ../source/news.rst:111 msgid "Added README guide. (:pr:`461`)" -msgstr "" +msgstr "添加了 README 指南。(:pr:`461`)" #: ../source/news.rst:112 msgid "Updated instructions and status for PyPI launch. (:pr:`475`)" -msgstr "" +msgstr "更新了 PyPI 上线的相关说明与状态。(:pr:`475`)" #: ../source/news.rst:113 msgid "Added instructions for Warehouse. (:pr:`471`)" -msgstr "" +msgstr "添加了关于 Warehouse 的说明。(:pr:`471`)" #: ../source/news.rst:114 msgid "Removed GPG references from publishing tutorial. (:pr:`466`)" -msgstr "" +msgstr "从发布教程中移除了 GPG 的相关引用。(:pr:`466`)" #: ../source/news.rst:115 msgid "Added 'What’s in which Python 3.4–3.6?'. (:pr:`468`)" -msgstr "" +msgstr "添加了《What’s in which Python 3.4–3.6?》一文。(:pr:`468`)" #: ../source/news.rst:116 msgid "Added a guide for phasing out Python versions. (:pr:`459`)" -msgstr "" +msgstr "添加了关于逐步淘汰旧版 Python 的指南。(:pr:`459`)" #: ../source/news.rst:117 msgid "Made default Description-Content-Type variant GFM. (:pr:`462`)" -msgstr "" +msgstr "将 Description-Content-Type 的默认变体改为 GFM。(:pr:`462`)" #: ../source/news.rst:120 msgid "March 2018" -msgstr "" +msgstr "2018年3月" #: ../source/news.rst:122 msgid "Updated \"installing scientific packages\". (:pr:`455`)" -msgstr "" +msgstr "更新了《安装科学计算软件包》的相关内容。(:pr:`455`)" #: ../source/news.rst:123 msgid "" "Added :file:`long_description_content_type` to follow PEP 556. (:pr:`457`)" -msgstr "" +msgstr "为遵循 PEP 556 添加了 :file:`long_description_content_type`。(:pr:`457`)" #: ../source/news.rst:124 msgid "Clarified a long description classifier on pypi.org. (:pr:`456`)" -msgstr "" +msgstr "澄清了 pypi.org 上关于长描述(long description)分类器的表述。(:pr:`456`)" #: ../source/news.rst:125 msgid "Updated Core Metadata spec to follow PEP 556. (:pr:`412`)" -msgstr "" +msgstr "更新了核心元数据规范以遵循 PEP 556。(:pr:`412`)" #: ../source/news.rst:128 msgid "February 2018" -msgstr "" +msgstr "2018年2月" #: ../source/news.rst:130 msgid "" "Added python3-venv and python3-pip to Debian installation instructions. " "(:pr:`445`)" -msgstr "" +msgstr "在 Debian 安装说明中添加了 python3-venv 和 python3-pip。(:pr:`445`)" #: ../source/news.rst:131 msgid "Updated PyPI migration info. (:pr:`439`)" -msgstr "" +msgstr "更新了 PyPI 迁移信息。(:pr:`439`)" #: ../source/news.rst:132 msgid "" "Added a warning about managing multiple versions with pipenv. (:pr:`430`)" -msgstr "" +msgstr "添加了关于使用 pipenv 管理多个版本的警告。(:pr:`430`)" #: ../source/news.rst:133 msgid "Added example of multiple emails to Core Metadata. (:pr:`429`)" -msgstr "" +msgstr "为核心元数据规范添加了多个电子邮箱地址的示例。(:pr:`429`)" #: ../source/news.rst:134 msgid "Added explanation of \"legacy\" in test.pypi.org/legacy. (:pr:`426`)" -msgstr "" +msgstr "添加了对 test.pypi.org/legacy 中“legacy”一词的解释。(:pr:`426`)" #: ../source/news.rst:137 msgid "January 2018" @@ -12894,268 +14554,272 @@ msgstr "2017年12月" #: ../source/news.rst:145 msgid "" "Replaced :file:`~` with :file:`$HOME` in guides and tutorials. (:pr:`418`)" -msgstr "" +msgstr "在指南和教程中将 :file:`~` 替换为 :file:`$HOME`。(:pr:`418`)" #: ../source/news.rst:146 msgid "Noted which fields can be used with environment markers. (:pr:`416`)" -msgstr "" +msgstr "注明了哪些字段可用于环境标记(environment markers)。(:pr:`416`)" #: ../source/news.rst:147 msgid "Updated Requires-Python section. (:pr:`414`)" -msgstr "" +msgstr "更新了 Requires-Python 部分。(:pr:`414`)" #: ../source/news.rst:148 msgid "Added news page. (:pr:`404`)" -msgstr "" +msgstr "添加了新闻页面。(:pr:`404`)" #: ../source/news.rst:151 msgid "November 2017" -msgstr "" +msgstr "2017年11月" #: ../source/news.rst:153 msgid "" "Introduced a new dependency management tutorial based on Pipenv. (:pr:`402`)" -msgstr "" +msgstr "推出了基于 Pipenv 的全新依赖管理教程。(:pr:`402`)" #: ../source/news.rst:154 msgid "" "Updated the *Single Sourcing Package Version* tutorial to reflect pip's " "current strategy. (:pr:`400`)" -msgstr "" +msgstr "更新了 *单一来源软件包版本* 教程,以反映 pip 当前的策略。(:pr:`400`)" #: ../source/news.rst:156 msgid "" "Added documentation about the ``py_modules`` argument to ``setup``. " "(:pr:`398`)" -msgstr "" +msgstr "添加了关于 ``setup`` 的 ``py_modules`` 参数的文档。(:pr:`398`)" #: ../source/news.rst:157 msgid "Simplified the wording for the :file:`manifest.in` section. (:pr:`395`)" -msgstr "" +msgstr "简化了 :file:`manifest.in` 部分的措辞。(:pr:`395`)" #: ../source/news.rst:160 msgid "October 2017" -msgstr "" +msgstr "2017年10月" #: ../source/news.rst:162 msgid "" "Added a specification for the :file:`entry_points.txt` file. (:pr:`398`)" -msgstr "" +msgstr "为 :file:`entry_points.txt` 文件添加了规范。(:pr:`398`)" #: ../source/news.rst:163 msgid "" "Created a new guide for managing packages using ``pip`` and ``virtualenv``. " "(:pr:`385`)" -msgstr "" +msgstr "创建了使用 ``pip`` 和 ``virtualenv`` 管理软件包的新指南。(:pr:`385`)" #: ../source/news.rst:164 msgid "Split the specifications page into multiple pages. (:pr:`386`)" -msgstr "" +msgstr "将规范页面拆分为多个页面。(:pr:`386`)" #: ../source/news.rst:167 msgid "September 2017" -msgstr "" +msgstr "2017年9月" #: ../source/news.rst:169 msgid "" "Encouraged using ``readme_renderer`` to validate :file:`README.rst`. " "(:pr:`379`)" -msgstr "" +msgstr "鼓励使用 ``readme_renderer`` 来校验 :file:`README.rst`。(:pr:`379`)" #: ../source/news.rst:171 msgid "Recommended using the ``--user-base`` option. (:pr:`374`)" -msgstr "" +msgstr "推荐使用 ``--user-base`` 选项。(:pr:`374`)" #: ../source/news.rst:174 msgid "August 2017" -msgstr "" +msgstr "2017年8月" #: ../source/news.rst:176 msgid "" "Added a new, experimental tutorial on installing packages using ``Pipenv``. " "(:pr:`369`)" -msgstr "" +msgstr "添加了一篇使用 ``Pipenv`` 安装软件包的实验性新教程。(:pr:`369`)" #: ../source/news.rst:177 msgid "Added a new guide on how to use ``TestPyPI``. (:pr:`366`)" -msgstr "" +msgstr "添加了关于如何使用 ``TestPyPI`` 的新指南。(:pr:`366`)" #: ../source/news.rst:178 msgid "Added :file:`pypi.org` as a term. (:pr:`365`)" -msgstr "" +msgstr "将 :file:`pypi.org` 添加为术语。(:pr:`365`)" #: ../source/news.rst:181 msgid "July 2017" -msgstr "" +msgstr "2017年7月" #: ../source/news.rst:183 msgid "Added ``flit`` to the key projects list. (:pr:`358`)" -msgstr "" +msgstr "将 ``flit`` 添加到关键项目列表中。(:pr:`358`)" #: ../source/news.rst:184 msgid "Added ``enscons`` to the list of key projects. (:pr:`357`)" -msgstr "" +msgstr "将 ``enscons`` 添加到关键项目列表中。(:pr:`357`)" #: ../source/news.rst:185 msgid "" "Updated this guide's ``readme`` with instructions on how to build the guide " "locally. (:pr:`356`)" -msgstr "" +msgstr "更新了本指南的 ``readme``,补充了如何在本地构建本指南的说明。(:pr:`356`)" #: ../source/news.rst:186 msgid "" "Made the new ``TestPyPI`` URL more visible, adding note to homepage about " "pypi.org. (:pr:`354`)" msgstr "" +"使新的 ``TestPyPI`` URL 更加醒目,并在主页上添加了关于 pypi.org 的说明。" +"(:pr:`354`)" #: ../source/news.rst:187 msgid "" "Added a note about the removal of the explicit registration API. (:pr:`347`)" -msgstr "" +msgstr "添加了关于移除显式注册 API 的说明。(:pr:`347`)" #: ../source/news.rst:190 msgid "June 2017" -msgstr "" +msgstr "2017年6月" #: ../source/news.rst:192 msgid "Added a document on migrating uploads to :file:`PyPI.org`. (:pr:`339`)" -msgstr "" +msgstr "添加了关于将上传内容迁移到 :file:`PyPI.org` 的文档。(:pr:`339`)" #: ../source/news.rst:193 msgid "Added documentation for ``python_requires``. (:pr:`338`)" -msgstr "" +msgstr "添加了 ``python_requires`` 的相关文档。(:pr:`338`)" #: ../source/news.rst:194 msgid "" "Added a note about PyPI migration in the *Tool Recommendations* tutorial. " "(:pr:`335`)" -msgstr "" +msgstr "在 *工具推荐* 教程中添加了关于 PyPI 迁移的说明。(:pr:`335`)" #: ../source/news.rst:195 msgid "" "Added a note that :file:`manifest.in` does not affect wheels. (:pr:`332`)" -msgstr "" +msgstr "添加了 :file:`manifest.in` 不影响 wheel 包的说明。(:pr:`332`)" #: ../source/news.rst:196 msgid "Added a license section to the distributing guide. (:pr:`331`)" -msgstr "" +msgstr "在分发指南中添加了许可部分。(:pr:`331`)" #: ../source/news.rst:197 msgid "Expanded the section on the ``name`` argument. (:pr:`329`)" -msgstr "" +msgstr "扩充了有关 ``name`` 参数的部分。(:pr:`329`)" #: ../source/news.rst:198 msgid "Adjusted the landing page. (:pr:`327`, :pr:`326`, :pr:`324`)" -msgstr "" +msgstr "调整了主页。(:pr:`327`、:pr:`326`、:pr:`324`)" #: ../source/news.rst:199 msgid "Updated to Sphinx 1.6.2. (:pr:`323`)" -msgstr "" +msgstr "更新到 Sphinx 1.6.2。(:pr:`323`)" #: ../source/news.rst:200 msgid "Switched to the PyPA theme. (:pr:`305`)" -msgstr "" +msgstr "切换到 PyPA 主题。(:pr:`305`)" #: ../source/news.rst:201 msgid "Re-organized the documentation into the new structure. (:pr:`318`)" -msgstr "" +msgstr "将文档重组为新的结构。(:pr:`318`)" #: ../source/news.rst:204 msgid "May 2017" -msgstr "" +msgstr "2017年5月" #: ../source/news.rst:206 msgid "" "Added documentation for the ``Description-Content-Type`` field. (:pr:`258`)" -msgstr "" +msgstr "为 ``Description-Content-Type`` 字段添加了文档。(:pr:`258`)" #: ../source/news.rst:207 msgid "Added contributor and style guide. (:pr:`307`)" -msgstr "" +msgstr "添加了贡献者指南和风格指南。(:pr:`307`)" #: ../source/news.rst:208 msgid "" "Documented ``pip`` and ``easy_install``'s differences for per-project " "indexes. (:pr:`233`)" -msgstr "" +msgstr "记录了 ``pip`` 和 ``easy_install`` 在项目专属索引方面的差异。(:pr:`233`)" #: ../source/news.rst:211 msgid "April 2017" -msgstr "" +msgstr "2017年4月" #: ../source/news.rst:213 msgid "Added travis configuration for testing pull requests. (:pr:`300`)" -msgstr "" +msgstr "添加了用于测试拉取请求的 travis 配置。(:pr:`300`)" #: ../source/news.rst:214 msgid "" "Mentioned the requirement of the ``wheel`` package for creating wheels " "(:pr:`299`)" -msgstr "" +msgstr "提到了创建 wheel 包需要 ``wheel`` 软件包的要求 (:pr:`299`)" #: ../source/news.rst:215 msgid "" "Removed the ``twine register`` reference in the *Distributing Packages* " "tutorial. (:pr:`271`)" -msgstr "" +msgstr "移除了 *分发软件包* 教程中对 ``twine register`` 的引用。(:pr:`271`)" #: ../source/news.rst:216 msgid "Added a topic on plugin discovery. (:pr:`294`, :pr:`296`)" -msgstr "" +msgstr "添加了关于插件发现的主题。(:pr:`294`, :pr:`296`)" #: ../source/news.rst:217 msgid "Added a topic on namespace packages. (:pr:`290`)" -msgstr "" +msgstr "添加了关于命名空间包的主题。(:pr:`290`)" #: ../source/news.rst:218 msgid "" "Added documentation explaining prominently how to install ``pip`` in ``/usr/" "local``. (:pr:`230`)" -msgstr "" +msgstr "添加了文档,重点说明了如何将 ``pip`` 安装到 ``/usr/local``。(:pr:`230`)" #: ../source/news.rst:219 msgid "" "Updated development mode documentation to mention that order of local " "packages matters. (:pr:`208`)" -msgstr "" +msgstr "更新了开发模式文档,提到本地软件包的顺序很重要。(:pr:`208`)" #: ../source/news.rst:220 msgid "" "Convert readthedocs link for their ``.org`` -> ``.io`` migration for hosted " "projects (:pr:`239`)" msgstr "" +"为托管项目转换了 readthedocs 链接,以配合其从 ``.org`` 到 ``.io`` 的迁移 " +"(:pr:`239`)" #: ../source/news.rst:221 msgid "" "Swapped order of :file:`setup.py` arguments for the upload command, as order " "is significant. (:pr:`260`)" -msgstr "" +msgstr "交换了 upload 命令的 :file:`setup.py` 参数顺序,因为顺序很重要。(:pr:`260`)" #: ../source/news.rst:223 msgid "" "Explained how to install from unsupported sources using a helper " "application. (:pr:`289`)" -msgstr "" +msgstr "解释了如何使用辅助应用程序从不支持的源进行安装。(:pr:`289`)" #: ../source/news.rst:227 msgid "March 2017" -msgstr "" +msgstr "2017年3月" #: ../source/news.rst:229 msgid "Covered ``manylinux1`` in *Platform Wheels*. (:pr:`283`)" -msgstr "" +msgstr "在 *平台 wheel* 中介绍了 ``manylinux1``。(:pr:`283`)" #: ../source/news.rst:232 msgid "February 2017" -msgstr "" +msgstr "2017年2月" #: ../source/news.rst:234 msgid "Added :pep:`518`. (:pr:`281`)" -msgstr "" +msgstr "添加了 :pep:`518`。(:pr:`281`)" #: ../source/overview.rst:3 msgid "Overview of Python Packaging" -msgstr "" +msgstr "Python 打包概述" #: ../source/overview.rst:7 msgid "" @@ -13163,6 +14827,8 @@ msgid "" "many ways. You can build web sites or industrial robots or a game for your " "friends to play, and much more, all using the same core technology." msgstr "" +"Python 是一种通用编程语言,在设计上可用于多种用途。你可以用它构建网站、工业机" +"器人,或是给朋友们玩的游戏,还能做更多的事情,而这一切都基于同一套核心技术。" #: ../source/overview.rst:12 msgid "" @@ -13172,6 +14838,9 @@ msgid "" "before writing code, but this process does wonders for avoiding future " "headaches." msgstr "" +"Python 的这种灵活性意味着,每个 Python 项目的第一步都必须是思考项目的受众,以" +"及项目将要运行的相应环境。在编写代码之前先考虑打包,这看起来可能有些奇怪,但" +"这一过程对避免日后的麻烦大有奇效。" #: ../source/overview.rst:18 msgid "" @@ -13179,16 +14848,20 @@ msgid "" "Python's plethora of packaging options. Read on to choose the best " "technology for your next project." msgstr "" +"本概述提供了一棵通用的决策树,帮助你梳理 Python 众多的打包选项。请继续阅读," +"为你的下一个项目选择最合适的技术。" #: ../source/overview.rst:23 msgid "Thinking about deployment" -msgstr "" +msgstr "考虑部署" #: ../source/overview.rst:25 msgid "" "Packages exist to be installed (or *deployed*), so before you package " "anything, you'll want to have some answers to the deployment questions below:" msgstr "" +"软件包存在的目的就是被安装(或 *部署*),因此在打包任何东西之前,你需要先想清" +"楚下面这些部署问题:" #: ../source/overview.rst:29 msgid "" @@ -13196,17 +14869,21 @@ msgid "" "developers doing software development, operations people in a datacenter, or " "a less software-savvy group?" msgstr "" +"你的软件用户是谁?你的软件将由正在进行软件开发的开发者、数据中心的运维人员," +"还是不太熟悉软件的群体来安装?" #: ../source/overview.rst:32 msgid "" "Is your software intended to run on servers, desktops, mobile clients " "(phones, tablets, etc.), or embedded in dedicated devices?" msgstr "" +"你的软件打算运行在服务器、桌面计算机、移动客户端(手机、平板电脑等)上,还是" +"嵌入到专用设备中?" #: ../source/overview.rst:34 msgid "" "Is your software installed individually, or in large deployment batches?" -msgstr "" +msgstr "你的软件是逐个安装,还是大批量部署?" #: ../source/overview.rst:36 msgid "" @@ -13216,10 +14893,13 @@ msgid "" "overview will guide you to the packaging technologies best suited to your " "project." msgstr "" +"打包的一切都围绕目标环境和部署体验展开。上面这些问题有很多种答案,每一种情形" +"的组合都有各自的解决方案。掌握这些信息后,下面的概述将引导你找到最适合你项目" +"的打包技术。" #: ../source/overview.rst:43 msgid "Packaging Python libraries and tools" -msgstr "" +msgstr "打包 Python 库和工具" #: ../source/overview.rst:45 msgid "" @@ -13228,6 +14908,9 @@ msgid "" "code to developers, which you can read about in :doc:`guides/distributing-" "packages-using-setuptools`." msgstr "" +"你可能已经听说过 PyPI、``setup.py`` 和 ``wheel`` 文件。这些只是 Python 生态系" +"统为向开发者分发 Python 代码而提供的众多工具中的几种,你可以在 :doc:`guides/" +"distributing-packages-using-setuptools` 中了解相关内容。" #: ../source/overview.rst:50 msgid "" @@ -13236,10 +14919,13 @@ msgid "" "to package Python for a non-technical audience and/or a production setting, " "skip ahead to :ref:`packaging-applications`." msgstr "" +"以下打包方式适用于在开发环境中供技术受众使用的库和工具。如果你想寻找面向非技" +"术受众和/或生产环境打包 Python 的方法,请直接跳到 :ref:`packaging-" +"applications`。" #: ../source/overview.rst:56 msgid "Python modules" -msgstr "" +msgstr "Python 模块" #: ../source/overview.rst:58 msgid "" @@ -13247,6 +14933,8 @@ msgid "" "redistributed and reused. You will also need to ensure it's written for the " "right version of Python, and only relies on the standard library." msgstr "" +"一个 Python 文件,只要它仅依赖标准库,就可以被重新分发和复用。你还需要确保它" +"是为正确版本的 Python 编写的,并且只依赖标准库。" #: ../source/overview.rst:63 msgid "" @@ -13256,6 +14944,10 @@ msgid "" "as an option, such as :doc:`bottle.py` and :doc:`boltons " "`." msgstr "" +"这非常适合在 Python 版本兼容的双方之间分享简单的脚本和代码片段(例如通过电子" +"邮件、StackOverflow 或 GitHub gists)。甚至有一些完整的 Python 库也提供了这种" +"分发方式,例如 :doc:`bottle.py` 和 :doc:`boltons " +"`。" #: ../source/overview.rst:70 msgid "" @@ -13263,10 +14955,12 @@ msgid "" "files, need additional libraries, or need a specific version of Python, " "hence the options below." msgstr "" +"然而,对于由多个文件组成、需要额外的库或需要特定 Python 版本的项目来说,这种" +"模式无法扩展,因此才有了下面这些选项。" #: ../source/overview.rst:75 msgid "Python source distributions" -msgstr "" +msgstr "Python 源分发" #: ../source/overview.rst:77 msgid "" @@ -13274,6 +14968,8 @@ msgid "" "a directory structure. Any directory containing Python files can comprise " "an :term:`Import Package`." msgstr "" +"如果你的代码由多个 Python 文件组成,通常会组织成目录结构。任何包含 Python 文" +"件的目录都可以构成一个 :term:`导入包 `。" #: ../source/overview.rst:81 msgid "" @@ -13283,6 +14979,9 @@ msgid "" "to get incomplete transfers, and harder to guarantee code integrity at the " "destination." msgstr "" +"由于软件包由多个文件组成,分发起来更难。大多数协议一次只支持传输一个文件(你" +"上一次点击某个链接就下载了多个文件是什么时候?)。传输不完整的情况更容易发生" +",也更难保证代码在到达目的地后完好无损。" #: ../source/overview.rst:87 msgid "" @@ -13291,6 +14990,9 @@ msgid "" "use Python's native packaging tools to create a *source* :term:`Distribution " "Package`, or *sdist* for short." msgstr "" +"只要你的代码中只有纯 Python 代码,并且你确定部署环境支持你所用的 Python 版本" +",就可以使用 Python 原生的打包工具创建 *源* :term:`分发包 `,简称 *sdist*。" #: ../source/overview.rst:92 msgid "" @@ -13299,6 +15001,9 @@ msgid "" "depend on other Python packages, you can go to the :ref:`source-distribution-" "format` specification to learn more." msgstr "" +"Python 的 *sdists* 是压缩归档文件(``.tar.gz`` 文件),其中包含一个或多个软件" +"包或模块。如果你的代码是纯 Python 的,并且只依赖其他 Python 软件包,可以前往 " +":ref:`source-distribution-format` 规范了解更多信息。" #: ../source/overview.rst:97 msgid "" @@ -13308,6 +15013,10 @@ msgid "" "pypi.org/project/numpy>`_), you will need to use the format detailed in the " "next section, which also has many advantages for pure-Python libraries." msgstr "" +"如果你依赖任何非 Python 代码或非 Python 软件包(例如 `lxml `_ 所用到的 `libxml2 " +"`_,或 `numpy `_ 所用到的 BLAS 库),你就需要" +"使用下一节详述的格式,这种格式对纯 Python 库也大有好处。" #: ../source/overview.rst:104 msgid "" @@ -13317,6 +15026,10 @@ msgid "" "package, and so does `Pillow `_, an " "actively-maintained fork of PIL!" msgstr "" +"Python 和 PyPI 支持由多个分发包提供同一软件包的不同实现。例如 `PIL 分发包 " +"`_ 虽已停止维护却影响深远,它提供了 PIL 软件包" +";而 `Pillow `_ 这个积极维护的 PIL 分支也同" +"样提供!" #: ../source/overview.rst:111 msgid "" @@ -13324,10 +15037,12 @@ msgid "" "in replacement for PIL, just by changing your project's ``install_requires`` " "or ``requirements.txt``." msgstr "" +"Python 打包的这种超能力让 Pillow 可以直接替代 PIL,只需修改项目的 " +"``install_requires`` 或 ``requirements.txt`` 即可。" #: ../source/overview.rst:116 msgid "Python binary distributions" -msgstr "" +msgstr "Python 二进制分发" #: ../source/overview.rst:118 msgid "" @@ -13335,6 +15050,8 @@ msgid "" "the software ecosystem, in particular libraries written in C, C++, Fortran, " "Rust, and other languages." msgstr "" +"Python 许多实实在在的强大能力,都来自它与软件生态系统的集成,尤其是与用 C、" +"C++、Fortran、Rust 等语言编写的库的集成。" #: ../source/overview.rst:122 msgid "" @@ -13345,6 +15062,10 @@ msgid "" "wheels because installation is always faster, so even pure-Python packages " "work better with wheels." msgstr "" +"并非所有开发者都有合适的工具或经验来构建这些用编译型语言编写的组件,因此 " +"Python 创造了 :term:`Wheel`,这是一种专门用于分发带有编译产物的库的软件包格式" +"。事实上,Python 的软件包安装器 ``pip`` 总是优先选择 wheel 包,因为安装速度总" +"是更快,所以即使是纯 Python 软件包,使用 wheel 包也效果更好。" #: ../source/overview.rst:129 msgid "" @@ -13355,16 +15076,22 @@ msgid "" "archives together, *unless* you're creating artifacts for a very specific " "use case where you know the recipient only needs one or the other." msgstr "" +"二进制分发在配有与之对应的源分发时效果最好。即使你没有为每种操作系统上传代码" +"的 wheel 包,只要上传了 sdist,其他平台的用户就仍然可以自行构建。请默认将 " +"sdist 和 wheel 归档文件一同发布,*除非你是在为非常特定的用例创建产物,并且明" +"确知道接收方只需要其中之一*。" #: ../source/overview.rst:137 msgid "" "Python and PyPI make it easy to upload both wheels and sdists together. Just " "follow the :doc:`tutorials/packaging-projects` tutorial." msgstr "" +"Python 和 PyPI 让同时上传 wheel 包和 sdist 变得非常容易。只需遵循 " +":doc:`tutorials/packaging-projects` 教程即可。" #: ../source/overview.rst:145 msgid "A summary of Python's packaging capabilities for tools and libraries." -msgstr "" +msgstr "对 Python 面向工具和库的打包能力的总结。" #: ../source/overview.rst:145 msgid "" @@ -13372,10 +15099,12 @@ msgid "" "Excerpted from `The Packaging Gradient (2017) `_." msgstr "" +"Python 推荐的内置库和工具打包技术。摘自 `The Packaging Gradient (2017) " +"`_。" #: ../source/overview.rst:152 msgid "Packaging Python applications" -msgstr "" +msgstr "打包 Python 应用程序" #: ../source/overview.rst:154 msgid "" @@ -13384,12 +15113,17 @@ msgid "" "target environments which have Python, and an audience who knows how to " "install Python packages." msgstr "" +"到目前为止,我们只讨论了 Python 原生的分发工具。根据前文的介绍,你可以正确地" +"推断出:这些内置方式只面向装有 Python 的环境,以及知道如何安装 Python 软件包" +"的受众。" #: ../source/overview.rst:159 msgid "" "With the variety of operating systems, configurations, and people out there, " "this assumption is only safe when targeting a developer audience." msgstr "" +"鉴于现实中的操作系统、配置和人群五花八门,这一假设只有在面向开发者受众时才站" +"得住脚。" #: ../source/overview.rst:163 msgid "" @@ -13399,12 +15133,18 @@ msgid "" "technologies like :doc:`setuptools entry_points `." msgstr "" +"Python 的原生打包主要是为在开发者之间分发可复用代码(即“库”)而构建的。你可以" +"借助 :doc:`setuptools 的 entry_points ` 之" +"类的技术,在 Python 的库打包之上搭载 **工具** ,也就是面向开发者的基础应用程" +"序。" #: ../source/overview.rst:169 msgid "" "Libraries are building blocks, not complete applications. For distributing " "applications, there's a whole new world of technologies out there." msgstr "" +"库是构建应用程序的积木,而不是完整的应用程序。要分发应用程序,还有一整个全新" +"的技术世界。" #: ../source/overview.rst:173 msgid "" @@ -13412,10 +15152,12 @@ msgid "" "to their dependencies on the target environment, so you can choose the right " "one for your project." msgstr "" +"接下来的几节将按照对目标环境的依赖程度来组织这些应用程序打包选项,方便你为自" +"己的项目选出合适的方式。" #: ../source/overview.rst:178 msgid "Depending on a framework" -msgstr "" +msgstr "依赖于框架" #: ../source/overview.rst:180 msgid "" @@ -13425,6 +15167,9 @@ msgid "" "frontends and mobile clients, are complex enough to target that a framework " "becomes more than a convenience." msgstr "" +"某些类型的 Python 应用程序,例如网站后端和其他网络服务,已经相当普遍,因此出" +"现了支持其开发和打包的框架。另一些类型的应用程序,例如动态 Web 前端和移动客户" +"端,其目标环境足够复杂,使用框架不再是锦上添花,而是近乎必需。" #: ../source/overview.rst:186 msgid "" @@ -13434,16 +15179,19 @@ msgid "" "cases, you'll want to defer to your framework's packaging guide for the " "easiest and most reliable production experience." msgstr "" +"在所有这些情况下,都不妨从框架的打包与部署方案入手,反向规划。有些框架自带部" +"署系统,封装了本指南其余部分介绍的各项技术。此时,你应当以所用框架的打包指南" +"为准,以获得最简单、最可靠的生产体验。" #: ../source/overview.rst:192 msgid "" "If you ever wonder how these platforms and frameworks work under the hood, " "you can always read the sections beyond." -msgstr "" +msgstr "如果你曾好奇这些平台和框架在底层是如何工作的,随时可以继续阅读后面的章节。" #: ../source/overview.rst:196 msgid "Service platforms" -msgstr "" +msgstr "服务平台" #: ../source/overview.rst:198 msgid "" @@ -13454,16 +15202,22 @@ msgid "" "patterns. Most software does not fit one of these templates, hence the " "existence of all the other options below." msgstr "" +"如果你在为“`Platform-as-a-Service `_”(平台即服务)或“PaaS”平台开发软件,就需要遵循它们各" +"自的打包指南。只要你遵循它们的模式,这类平台就会代为处理打包和部署。大多数软" +"件并不符合这些模板,因此才有了下面列出的其他所有选项。" #: ../source/overview.rst:205 msgid "" "If you're developing software that will be deployed to machines you own, " "users' personal computers, or any other arrangement, read on." msgstr "" +"如果你开发的软件将被部署到你自己的机器、用户的个人电脑或任何其他环境中,请继" +"续阅读。" #: ../source/overview.rst:209 msgid "Web browsers and mobile applications" -msgstr "" +msgstr "Web 浏览器和移动应用程序" #: ../source/overview.rst:211 msgid "" @@ -13471,12 +15225,14 @@ msgid "" "write a mobile app or web application frontend in Python. While the language " "may be familiar, the packaging and deployment practices are brand new." msgstr "" +"Python 的稳步发展正把它带入新的领域。如今,你可以用 Python 编写移动应用或 " +"Web 应用前端。这门语言你可能早已熟悉,但相关的打包和部署实践却是全新的。" #: ../source/overview.rst:216 msgid "" "If you're planning on releasing to these new frontiers, you'll want to check " "out the following frameworks, and refer to their packaging guides:" -msgstr "" +msgstr "如果你打算向这些新领域发布软件,不妨了解以下框架,并参考它们的打包指南:" #: ../source/overview.rst:220 #, fuzzy @@ -13485,11 +15241,11 @@ msgstr "`Poetry `_" #: ../source/overview.rst:221 msgid "`Beeware `_" -msgstr "" +msgstr "`Beeware `_" #: ../source/overview.rst:222 msgid "`Brython `_" -msgstr "" +msgstr "`Brython `_" #: ../source/overview.rst:223 msgid "`Flexx `_" @@ -13501,10 +15257,12 @@ msgid "" "about some of the technologies and techniques utilized by the frameworks " "above, continue reading below." msgstr "" +"如果你对使用框架或平台 *不* 感兴趣,或者只是想了解上述框架所用的一些技术和技" +"巧,请继续阅读下文。" #: ../source/overview.rst:230 msgid "Depending on a pre-installed Python" -msgstr "" +msgstr "依赖于预安装的 Python" #: ../source/overview.rst:232 msgid "" @@ -13514,24 +15272,29 @@ msgid "" "Python preexisting in your data centers or on the personal machines of " "developers and data scientists." msgstr "" +"随便挑选一台电脑,视具体情形而定,它很可能已经安装了 Python。多年来,Python " +"一直默认包含在大多数 Linux 和 Mac 操作系统中,因此你可以合理地认为,你的数据" +"中心里以及开发者和数据科学家的个人机器上早已装有 Python。" #: ../source/overview.rst:238 msgid "Technologies which support this model:" -msgstr "" +msgstr "支持这一模型的技术:" #: ../source/overview.rst:240 msgid ":gh:`PEX ` (Python EXecutable)" msgstr "" +":gh:`PEX ` (Python EXecutable,Python 可执" +"行文件)" #: ../source/overview.rst:241 msgid "" ":doc:`zipapp ` (does not help manage dependencies, " "requires Python 3.5+)" -msgstr "" +msgstr ":doc:`zipapp ` (不帮助管理依赖项,需要 Python 3.5+)" #: ../source/overview.rst:242 msgid ":gh:`shiv ` (requires Python 3)" -msgstr "" +msgstr ":gh:`shiv ` (需要 Python 3)" #: ../source/overview.rst:244 msgid "" @@ -13539,6 +15302,8 @@ msgid "" "most on the target environment. Of course, this also makes for the smallest " "package, as small as single-digit megabytes, or even kilobytes." msgstr "" +"在本文介绍的所有方案中,依赖预安装 Python 的做法对目标环境的依赖程度最高。当" +"然,它也因此能产出最小的软件包,小则只有个位数兆字节,甚至千字节。" #: ../source/overview.rst:249 msgid "" @@ -13546,10 +15311,12 @@ msgid "" "size of our package, so the solutions here are roughly arranged by " "increasing size of output." msgstr "" +"总体而言,对目标系统的依赖越小,我们软件包的体积就越大,因此这里的各种方案大" +"致按产出体积从小到大排列。" #: ../source/overview.rst:256 msgid "Depending on a separate software distribution ecosystem" -msgstr "" +msgstr "依赖于独立的软件分发生态系统" #: ../source/overview.rst:258 msgid "" @@ -13558,6 +15325,9 @@ msgid "" "\"app stores\", but even those focus on consumer applications and offer " "little for developers." msgstr "" +"很长一段时间里,包括 Mac 和 Windows 在内的许多操作系统都缺乏内置的软件包管理" +"。直到最近,这些操作系统才出现了所谓的“应用商店”,但即便是这些商店,也以消费" +"级应用为主,为开发者提供的帮助甚少。" #: ../source/overview.rst:263 msgid "" @@ -13571,16 +15341,25 @@ msgid "" "`_." msgstr "" +"开发者们长期寻找解决办法,并在这场摸索中发展出了自己的软件包管理方案,例如 " +"`Homebrew `_。对 Python 开发者而言,最相关的替代方案是一个" +"名为 `Anaconda " +"`_ 的软件包生态系统。Anaconda 围绕 Python 构建,在学术、分析以及其他面向数据" +"的环境中日益普及,甚至已经 `进入了面向服务器的环境 `_。" #: ../source/overview.rst:273 msgid "Instructions on building and publishing for the Anaconda ecosystem:" -msgstr "" +msgstr "在 Anaconda 生态系统中进行构建和发布的指南:" #: ../source/overview.rst:275 msgid "" "`Building libraries and applications with conda `_" msgstr "" +"`使用 conda 构建库和应用程序 `_" #: ../source/overview.rst:276 msgid "" @@ -13588,26 +15367,32 @@ msgid "" "projects/conda-build/en/latest/user-guide/tutorials/build-pkgs-" "skeleton.html>`_" msgstr "" +"`将原生 Python 软件包迁移到 Anaconda `_" #: ../source/overview.rst:278 msgid "" "A similar model involves installing an alternative Python distribution, but " "does not support arbitrary operating system-level packages:" msgstr "" +"还有一种类似的模式,即安装另一种 Python 发行版,但它不支持任意的操作系统级软" +"件包:" #: ../source/overview.rst:282 msgid "" "`ActiveState ActivePython `_" msgstr "" +"`ActiveState ActivePython `_" #: ../source/overview.rst:283 msgid "`WinPython `_" -msgstr "" +msgstr "`WinPython `_" #: ../source/overview.rst:288 msgid "Bringing your own Python executable" -msgstr "" +msgstr "自带 Python 可执行文件" #: ../source/overview.rst:290 msgid "" @@ -13615,6 +15400,8 @@ msgid "" "operating system natively supports one or more formats of programs they can " "natively execute." msgstr "" +"我们今天所理解的计算,正是由执行程序的能力定义的。每种操作系统都原生支持一种" +"或多种它能够原生执行的程序格式。" #: ../source/overview.rst:294 msgid "" @@ -13622,6 +15409,8 @@ msgid "" "into one of these formats, most of which involve embedding the Python " "interpreter and any other dependencies into a single executable file." msgstr "" +"有许多技术和方法可以把你的 Python 程序转换为这些格式之一,其中大多数都涉及把 " +"Python 解释器及其他所有依赖项嵌入到单个可执行文件中。" #: ../source/overview.rst:299 msgid "" @@ -13629,53 +15418,57 @@ msgid "" "user experience, though often requires multiple technologies, and a good " "amount of effort." msgstr "" +"这种方法称为 *冻结* (freezing),能提供广泛的兼容性和无缝的用户体验,不过往" +"往需要综合运用多种技术,并投入相当多的精力。" #: ../source/overview.rst:303 msgid "A selection of Python freezers:" -msgstr "" +msgstr "一些 Python 冻结工具:" #: ../source/overview.rst:305 msgid "" "`pyInstaller `_ - Cross-" "platform" -msgstr "" +msgstr "`pyInstaller `_ - 跨平台" #: ../source/overview.rst:306 msgid "" "`cx_Freeze `_ - Cross-platform" -msgstr "" +msgstr "`cx_Freeze `_ - 跨平台" #: ../source/overview.rst:307 msgid "" "`constructor `_ - For command-line " "installers" -msgstr "" +msgstr "`constructor `_ - 用于命令行安装程序" #: ../source/overview.rst:308 msgid "`py2exe `_ - Windows only" -msgstr "" +msgstr "`py2exe `_ - 仅限 Windows" #: ../source/overview.rst:309 msgid "`py2app `_ - Mac only" -msgstr "" +msgstr "`py2app `_ - 仅限 Mac" #: ../source/overview.rst:310 msgid "`osnap `_ - Windows and Mac" -msgstr "" +msgstr "`osnap `_ - 适用于 Windows 和 Mac" #: ../source/overview.rst:311 msgid "`pynsist `_ - Windows only" -msgstr "" +msgstr "`pynsist `_ - 仅限 Windows" #: ../source/overview.rst:313 msgid "" "Most of the above imply single-user deployments. For multi-component server " "applications, see :gh:`Chef Omnibus `." msgstr "" +"上述大多数工具都意味着单用户部署。对于由多个组件组成的服务器应用程序,请参见 " +":gh:`Chef Omnibus `。" #: ../source/overview.rst:319 msgid "Bringing your own userspace" -msgstr "" +msgstr "自带用户空间" #: ../source/overview.rst:321 msgid "" @@ -13685,38 +15478,46 @@ msgid "" "level virtualization `_, or *containerization*." msgstr "" +"越来越多的操作系统(包括 Linux、Mac OS 和 Windows)都可以配置为以轻量级镜像的" +"形式运行打包好的应用程序,这借助的是一种相对较新的机制,通常称为 `操作系统级" +"虚拟化 " +"`_,即 *容器化*。" #: ../source/overview.rst:328 msgid "" "These techniques are mostly Python agnostic, because they package whole OS " "filesystems, not just Python or Python packages." msgstr "" +"这些技术大多与 Python 无关,因为它们打包的是整个操作系统的文件系统,而不仅仅" +"是 Python 或 Python 软件包。" #: ../source/overview.rst:331 msgid "" "Adoption is most extensive among Linux servers, where the technology " "originated and where the technologies below work best:" msgstr "" +"这类技术在 Linux 服务器上采用得最为广泛;它们正是诞生于此,下列技术也最适合" +"在 Linux 服务器环境中使用:" #: ../source/overview.rst:334 msgid "`AppImage `_" -msgstr "" +msgstr "`AppImage `_" #: ../source/overview.rst:335 msgid "`Docker `_" -msgstr "" +msgstr "`Docker `_" #: ../source/overview.rst:336 msgid "`Flatpak `_" -msgstr "" +msgstr "`Flatpak `_" #: ../source/overview.rst:337 msgid "`Snapcraft `_" -msgstr "" +msgstr "`Snapcraft `_" #: ../source/overview.rst:340 msgid "Bringing your own kernel" -msgstr "" +msgstr "自带内核" #: ../source/overview.rst:342 msgid "" @@ -13725,6 +15526,9 @@ msgid "" "operating system of their own. Running these virtual machines, or VMs, is a " "mature approach, widespread in data center environments." msgstr "" +"大多数桌面操作系统都支持某种形式的传统虚拟化,以镜像的方式运行应用程序,这些" +"镜像自带完整的操作系统。运行这类虚拟机(VM)是一种成熟的做法,在数据中心环境" +"中已十分普遍。" #: ../source/overview.rst:347 msgid "" @@ -13732,14 +15536,16 @@ msgid "" "centers, though certain complex applications can benefit from this " "packaging. The technologies are Python agnostic, and include:" msgstr "" +"这些技术大多保留给数据中心里的大规模部署使用,不过某些复杂的应用程序也能从这" +"种打包方式中受益。这些技术与 Python 无关,其中包括:" #: ../source/overview.rst:351 msgid "KVM on Linux" -msgstr "" +msgstr "Linux 上的 KVM" #: ../source/overview.rst:352 msgid "Hyper-V on Windows" -msgstr "" +msgstr "Windows 上的 Hyper-V" #: ../source/overview.rst:353 msgid "" @@ -13747,16 +15553,21 @@ msgid "" "en.wikipedia.org/wiki/Amazon_Machine_Image>`_, and :doc:`other formats " "`" msgstr "" +"`VHD `_、`AMI `_ 以及 :doc:`其他格式 " +"`" #: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " "management system written in Python, with extensive VM support" msgstr "" +"`OpenStack `_ - 一个用 Python 编" +"写的云管理系统,对虚拟机提供广泛支持" #: ../source/overview.rst:360 msgid "Bringing your own hardware" -msgstr "" +msgstr "自带硬件" #: ../source/overview.rst:362 msgid "" @@ -13764,6 +15575,8 @@ msgid "" "already-installed on some hardware. This way, your software's user would " "require only electricity." msgstr "" +"发布软件的最彻底方式,就是把它预装在某些硬件上再交付。这样,你的软件的用户所" +"需要的就只有电力了。" #: ../source/overview.rst:366 msgid "" @@ -13771,6 +15584,8 @@ msgid "" "tech-savvy, you can find hardware appliances being used by everyone from the " "most advanced data centers to the youngest children." msgstr "" +"上面介绍的虚拟机主要留给精通技术的人使用,而你会发现上到最先进的数据中心、下" +"到最年幼的孩子,都在使用硬件设备。" #: ../source/overview.rst:370 msgid "" @@ -13779,29 +15594,32 @@ msgid "" "ship it to the datacenter or your users' homes. They plug and play, and you " "can call it a day." msgstr "" +"把你的代码嵌入 :gh:`Adafruit ` 设备、`MicroPython " +"`_ 或其他运行 Python 的更强大的硬件,然后把它交付到" +"数据中心或你的用户家中。它们即插即用,你也就大功告成了。" #: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." -msgstr "" +msgstr "对打包 Python 应用程序所用技术的总结。" #: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." -msgstr "" +msgstr "用于打包 Python 应用程序的各项技术的简化全景。" #: ../source/overview.rst:382 msgid "What about..." -msgstr "" +msgstr "那么,其他的呢……" #: ../source/overview.rst:384 msgid "" "The sections above can only summarize so much, and you might be wondering " "about some of the more conspicuous gaps." -msgstr "" +msgstr "上面的章节只能概述个大概,你可能还对一些较为明显的空缺心存疑惑。" #: ../source/overview.rst:388 msgid "Operating system packages" -msgstr "" +msgstr "操作系统软件包" #: ../source/overview.rst:390 msgid "" @@ -13815,12 +15633,19 @@ msgid "" "fpm.readthedocs.io/en/latest/cli-reference.html#virtualenv>`_ to generate " "both deb and RPMs from the same source." msgstr "" +"如上文 :ref:`depending-on-a-separate-ecosystem` 所述,某些操作系统有自己的软" +"件包管理器。如果你非常确定自己面向的操作系统,可以直接依赖诸如 `deb `_ (用于 Debian、Ubuntu 等)或 `RPM " +"`_ (用于 Red Hat、Fedora " +"等之类的格式,并使用操作系统内置的软件包管理器来负责安装甚至部署。你甚至可以" +"使用 `FPM `_ 从同一份源码同时生成 deb 和 RPM 软件包。" #: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." -msgstr "" +msgstr "在大多数部署流水线中,操作系统的软件包管理器只是拼图里的一块。" #: ../source/overview.rst:407 msgid "" @@ -13831,6 +15656,11 @@ msgid "" "virtualenv tool ` and `osnap `_, both of which wrap virtualenvs in a self-contained way." msgstr "" +":doc:`Virtualenvs ` 一直是好几代 Python 开发者" +"不可或缺的工具,但由于逐渐被更高层的工具封装,它们正慢慢淡出人们的视野。尤其" +"是在打包方面,虚拟环境在 :doc:`dh-virtualenv 工具 ` " +"和 `osnap `_ 中被用作基础组件,这两者都以" +"自包含的方式封装了虚拟环境。" #: ../source/overview.rst:416 msgid "" @@ -13838,6 +15668,8 @@ msgid "" "from the Internet into a virtualenv, as one might do in a development " "environment. The overview above is full of much better solutions." msgstr "" +"对于生产环境的部署,不要像在开发环境中那样,依赖从互联网执行 ``python -m pip " +"install`` 把软件包安装到 virtualenv 里。上面的概述里有很多好得多的方案。" #: ../source/overview.rst:421 msgid "Security" @@ -13848,6 +15680,8 @@ msgid "" "The further down the gradient you come, the harder it gets to update " "components of your package. Everything is more tightly bound together." msgstr "" +"沿梯度往下走得越远,就越难更新你的软件包的各个组件。一切都更紧密地绑定在了一" +"起。" #: ../source/overview.rst:426 msgid "" @@ -13859,10 +15693,15 @@ msgid "" "versus dynamic linking `_." msgstr "" +"例如,如果出现了内核安全问题,而你部署的是容器,那么可以直接更新宿主系统的内" +"核,而无需为应用程序重新构建。如果你部署的是虚拟机镜像,就需要重新构建。这种" +"机制上的差异是否会让其中一种选择更安全,至今仍是一场由来已久的争论,其源头可" +"追溯到尚无定论的 `静态链接与动态链接 `_ 之争。" #: ../source/overview.rst:435 msgid "Wrap up" -msgstr "" +msgstr "总结" #: ../source/overview.rst:437 msgid "" @@ -13872,16 +15711,19 @@ msgid "" "to realize that the varied landscape is a small price Python programmers pay " "for using one of the most balanced, flexible languages available." msgstr "" +"Python 的打包素有颠簸坎坷之名。这种印象主要是 Python 通用性带来的副产品。一旦" +"你理解了各个打包方案之间的天然边界,你就会意识到,这种多样化的格局只是 " +"Python 程序员为使用现有最均衡、最灵活的语言之一而付出的小小代价。" #: ../source/specifications/binary-distribution-format.rst:7 msgid "Binary distribution format" -msgstr "" +msgstr "二进制分发格式" #: ../source/specifications/binary-distribution-format.rst:9 msgid "" "This page specifies the binary distribution format for Python packages, also " "called the wheel format." -msgstr "" +msgstr "本页面规定了 Python 软件包的二进制分发格式,它也称为 wheel 格式。" #: ../source/specifications/binary-distribution-format.rst:12 msgid "" @@ -13893,6 +15735,11 @@ msgid "" "tool while preserving enough information to spread its contents out onto " "their final paths at any later time." msgstr "" +"wheel 是一种 ZIP 格式的归档文件,具有特殊格式的文件名和 ``.whl`` 扩展名。它包" +"含单个分发包,内容几乎等同于该分发包按照 PEP 376 以特定安装方案安装后的样子。" +"虽然推荐使用专门的安装器,但 wheel 文件也可以直接用标准的 'unzip' 工具解压到 " +"site-packages 中,同时保留足够的信息,以便日后随时将其内容展开到各自的最终路" +"径上。" #: ../source/specifications/binary-distribution-format.rst:22 msgid "Details" @@ -13900,44 +15747,48 @@ msgstr "详情" #: ../source/specifications/binary-distribution-format.rst:25 msgid "Installing a wheel 'distribution-1.0-py32-none-any.whl'" -msgstr "" +msgstr "安装 wheel 包 'distribution-1.0-py32-none-any.whl'" #: ../source/specifications/binary-distribution-format.rst:27 msgid "Wheel installation notionally consists of two phases:" -msgstr "" +msgstr "wheel 的安装在概念上分为两个阶段:" #: ../source/specifications/binary-distribution-format.rst:29 msgid "Unpack." -msgstr "" +msgstr "解包。" #: ../source/specifications/binary-distribution-format.rst:31 msgid "Parse ``distribution-1.0.dist-info/WHEEL``." -msgstr "" +msgstr "解析 ``distribution-1.0.dist-info/WHEEL``。" #: ../source/specifications/binary-distribution-format.rst:32 msgid "" "Check that installer is compatible with Wheel-Version. Warn if minor " "version is greater, abort if major version is greater." msgstr "" +"检查安装器是否与 Wheel-Version 兼容。若次版本号更大则发出警告,若主版本号更大" +"则中止安装。" #: ../source/specifications/binary-distribution-format.rst:34 msgid "" "If Root-Is-Purelib == 'true', unpack archive into purelib (site-packages)." -msgstr "" +msgstr "如果 Root-Is-Purelib == 'true',则将归档解包到 purelib(site-packages)。" #: ../source/specifications/binary-distribution-format.rst:36 msgid "Else unpack archive into platlib (site-packages)." -msgstr "" +msgstr "否则将归档解包到 platlib(site-packages)。" #: ../source/specifications/binary-distribution-format.rst:38 msgid "Spread." -msgstr "" +msgstr "展开。" #: ../source/specifications/binary-distribution-format.rst:40 msgid "" "Unpacked archive includes ``distribution-1.0.dist-info/`` and (if there is " "data) ``distribution-1.0.data/``." msgstr "" +"解包后的归档包含 ``distribution-1.0.dist-info/``;如果有数据,还包含 " +"``distribution-1.0.data/``。" #: ../source/specifications/binary-distribution-format.rst:42 msgid "" @@ -13947,34 +15798,40 @@ msgid "" "headers|scripts|data)``. These subdirectories are :ref:`installation paths " "defined by sysconfig `." msgstr "" +"将 ``distribution-1.0.data/`` 的每个子树移到其目标路径。``distribution-" +"1.0.data/`` 的每个子目录都是目标目录字典中的一个键,例如 ``distribution-" +"1.0.data/(purelib|platlib|headers|scripts|data)``。这些子目录是 " +":ref:`sysconfig 定义的安装路径 `。" #: ../source/specifications/binary-distribution-format.rst:48 msgid "" "If applicable, update scripts starting with ``#!python`` to point to the " "correct interpreter." -msgstr "" +msgstr "如适用,更新以 ``#!python`` 开头的脚本,使其指向正确的解释器。" #: ../source/specifications/binary-distribution-format.rst:50 msgid "Update ``distribution-1.0.dist-info/RECORD`` with the installed paths." -msgstr "" +msgstr "用已安装的路径更新 ``distribution-1.0.dist-info/RECORD``。" #: ../source/specifications/binary-distribution-format.rst:52 msgid "Remove empty ``distribution-1.0.data`` directory." -msgstr "" +msgstr "删除空的 ``distribution-1.0.data`` 目录。" #: ../source/specifications/binary-distribution-format.rst:53 msgid "" "Compile any installed .py to .pyc. (Uninstallers should be smart enough to " "remove .pyc even if it is not mentioned in RECORD.)" msgstr "" +"将已安装的所有 .py 编译为 .pyc。(卸载器应该足够智能,即使 RECORD 中没有提及 " +".pyc,也能将其删除。)" #: ../source/specifications/binary-distribution-format.rst:57 msgid "Recommended installer features" -msgstr "" +msgstr "推荐的安装器功能" #: ../source/specifications/binary-distribution-format.rst:67 msgid "Rewrite ``#!python``." -msgstr "" +msgstr "重写 ``#!python``。" #: ../source/specifications/binary-distribution-format.rst:60 msgid "" @@ -13983,16 +15840,22 @@ msgid "" "python'``, rewrite to point to the correct interpreter. Unix installers may " "need to add the +x bit to these files if the archive was created on Windows." msgstr "" +"在 wheel 中,脚本打包在 ``{distribution}-{version}.data/scripts/`` 里。如果 " +"``scripts/`` 中某个文件的第一行恰好以 ``b'#!python'`` 开头,则重写该行,使其" +"指向正确的解释器。如果归档是在 Windows 上创建的,Unix 安装器可能需要为这些文" +"件添加 +x 权限位。" #: ../source/specifications/binary-distribution-format.rst:66 msgid "" "The ``b'#!pythonw'`` convention is allowed. ``b'#!pythonw'`` indicates a GUI " "script instead of a console script." msgstr "" +"允许使用 ``b'#!pythonw'`` 这一约定。``b'#!pythonw'`` 表示的是 GUI 脚本而非控" +"制台脚本。" #: ../source/specifications/binary-distribution-format.rst:72 msgid "Generate script wrappers." -msgstr "" +msgstr "生成脚本包装器。" #: ../source/specifications/binary-distribution-format.rst:70 msgid "" @@ -14000,14 +15863,16 @@ msgid "" "accompanying .exe wrappers. Windows installers may want to add them during " "install." msgstr "" +"在 wheel 中,Unix 系统上打包的脚本必然不会附带 .exe 包装器。Windows 安装器可" +"能需要在安装期间添加它们。" #: ../source/specifications/binary-distribution-format.rst:75 msgid "Recommended archiver features" -msgstr "" +msgstr "推荐的归档工具功能" #: ../source/specifications/binary-distribution-format.rst:82 msgid "Place ``.dist-info`` at the end of the archive." -msgstr "" +msgstr "将 ``.dist-info`` 放在归档末尾。" #: ../source/specifications/binary-distribution-format.rst:78 msgid "" @@ -14016,29 +15881,33 @@ msgid "" "including the ability to amend the metadata without rewriting the entire " "archive." msgstr "" +"鼓励归档工具将 ``.dist-info`` 文件在物理上放置于归档末尾。这样可以实现一些可" +"能颇为有趣的 ZIP 技巧,包括在不重写整个归档的情况下修改元数据。" #: ../source/specifications/binary-distribution-format.rst:85 #: ../source/specifications/pylock-toml.rst:51 msgid "File Format" -msgstr "" +msgstr "文件格式" #: ../source/specifications/binary-distribution-format.rst:90 msgid "File name convention" -msgstr "" +msgstr "文件名约定" #: ../source/specifications/binary-distribution-format.rst:92 msgid "" "The wheel filename is ``{distribution}-{version}(-{build tag})?-{python tag}-" "{abi tag}-{platform tag}.whl``." msgstr "" +"wheel 文件名为 ``{distribution}-{version}(-{build tag})?-{python tag}-{abi " +"tag}-{platform tag}.whl``。" #: ../source/specifications/binary-distribution-format.rst:96 msgid "distribution" -msgstr "" +msgstr "分发包" #: ../source/specifications/binary-distribution-format.rst:96 msgid "Distribution name, e.g. 'django', 'pyramid'." -msgstr "" +msgstr "分发包名称,例如 'django'、'pyramid'。" #: ../source/specifications/binary-distribution-format.rst:99 msgid "version" @@ -14046,11 +15915,11 @@ msgstr "version" #: ../source/specifications/binary-distribution-format.rst:99 msgid "Distribution version, e.g. 1.0." -msgstr "" +msgstr "分发包版本,例如 1.0。" #: ../source/specifications/binary-distribution-format.rst:124 msgid "build tag" -msgstr "" +msgstr "构建标签" #: ../source/specifications/binary-distribution-format.rst:102 msgid "" @@ -14060,6 +15929,10 @@ msgid "" "item tuple with the first item being the initial digits as an ``int``, and " "the second item being the remainder of the tag as a ``str``." msgstr "" +"可选的构建编号。必须以数字开头。当两个 wheel 文件名在其余所有方面(即名称、版" +"本和其他标签)都相同时,构建编号用作决胜依据。若未指定,则按空元组排序;否则" +"按二元元组排序,其中第一项为开头的数字(``int``),第二项为标签的剩余部分" +"(``str``)。" #: ../source/specifications/binary-distribution-format.rst:109 msgid "" @@ -14067,6 +15940,8 @@ msgid "" "to a change in the build environment, like when using the manylinux image to " "build distributions using pre-release CPython versions." msgstr "" +"构建编号的一个常见用例是:由于构建环境发生变化而重新构建二进制分发,例如使用 " +"manylinux 镜像、以预发布版本的 CPython 来构建分发包的情形。" #: ../source/specifications/binary-distribution-format.rst:116 msgid "" @@ -14075,6 +15950,8 @@ msgid "" "ecosystem of tools and standards. A common case where a distribution would " "need to referenced externally is when resolving a security vulnerability." msgstr "" +"构建编号不是分发包版本的一部分,因此难以从外部引用,在 Python 工具与标准生态" +"之外尤其如此。分发包需要被外部引用的一种常见情形是解决安全漏洞时。" #: ../source/specifications/binary-distribution-format.rst:121 msgid "" @@ -14083,32 +15960,34 @@ msgid "" "distribution. Instead a **new distribution version** should be created for " "such cases." msgstr "" +"由于这一限制,需要被外部引用的新分发包在构建时 **不应该** 使用构建编号。相反" +",应该为这类情况创建 **新的分发包版本**。" #: ../source/specifications/binary-distribution-format.rst:127 msgid "language implementation and version tag" -msgstr "" +msgstr "语言实现及版本标签" #: ../source/specifications/binary-distribution-format.rst:127 msgid "E.g. 'py27', 'py2', 'py3'." -msgstr "" +msgstr "例如 'py27'、'py2'、'py3'。" #: ../source/specifications/binary-distribution-format.rst:130 #: ../source/specifications/platform-compatibility-tags.rst:20 msgid "abi tag" -msgstr "" +msgstr "abi 标签" #: ../source/specifications/binary-distribution-format.rst:130 msgid "E.g. 'cp33m', 'abi3', 'none'." -msgstr "" +msgstr "例如 'cp33m'、'abi3'、'none'。" #: ../source/specifications/binary-distribution-format.rst:133 #: ../source/specifications/platform-compatibility-tags.rst:23 msgid "platform tag" -msgstr "" +msgstr "平台标签" #: ../source/specifications/binary-distribution-format.rst:133 msgid "E.g. 'linux_x86_64', 'any'." -msgstr "" +msgstr "例如 'linux_x86_64'、'any'。" #: ../source/specifications/binary-distribution-format.rst:135 msgid "" @@ -14117,6 +15996,9 @@ msgid "" "Python 2.7 implementation), with no ABI (pure Python), on any CPU " "architecture." msgstr "" +"例如,``distribution-1.0-1-py27-none-any.whl`` 是名为 'distribution' 的软件包" +"的第一次构建,它兼容 Python 2.7(任意 Python 2.7 实现),无 ABI(纯 Python)" +",适用于任何 CPU 架构。" #: ../source/specifications/binary-distribution-format.rst:140 msgid "" @@ -14124,10 +16006,12 @@ msgid "" "\"compatibility tags.\" The compatibility tags express the package's basic " "interpreter requirements and are detailed in PEP 425." msgstr "" +"文件名中位于扩展名之前的最后三个组成部分称为“兼容性标签”。兼容性标签表达了软" +"件包的基本解释器要求,详见 PEP 425。" #: ../source/specifications/binary-distribution-format.rst:145 msgid "Escaping and Unicode" -msgstr "" +msgstr "转义与 Unicode" #: ../source/specifications/binary-distribution-format.rst:147 msgid "" @@ -14135,6 +16019,8 @@ msgid "" "MINUS), this character cannot appear within any component. This is handled " "as follows:" msgstr "" +"由于文件名的各个组成部分以连字符(``-``,HYPHEN-MINUS)分隔,该字符不能出现在" +"任何组成部分之内。具体处理方式如下:" #: ../source/specifications/binary-distribution-format.rst:150 msgid "" @@ -14146,6 +16032,11 @@ msgid "" "prepared to accept ``.`` (FULL STOP) and uppercase letters, however, as " "these were allowed by an earlier version of this specification." msgstr "" +"在分发包名称中,任何由 ``-_.`` 字符(HYPHEN-MINUS、LOW LINE 和 FULL STOP)组" +"成的连续段都应该替换为 ``_`` (LOW LINE),大写字母也应该替换为对应的小写字母" +"。这等价于先执行常规的 :ref:`名称规范化 `,再将 ``-`` 替" +"换为 ``_``。不过,处理 wheel 的工具必须准备好接受 ``.`` (FULL STOP)和大写字" +"母,因为本规范的早期版本允许这些字符。" #: ../source/specifications/binary-distribution-format.rst:157 msgid "" @@ -14153,12 +16044,14 @@ msgid "" "specifier specification `. Normalised version numbers " "cannot contain ``-``." msgstr "" +"版本号应该按照 :ref:`版本说明符规范 ` 进行规范化。规范化" +"后的版本号不能包含 ``-``。" #: ../source/specifications/binary-distribution-format.rst:159 msgid "" "The remaining components may not contain ``-`` characters, so no escaping is " "necessary." -msgstr "" +msgstr "其余组成部分不能包含 ``-`` 字符,因此无需转义。" #: ../source/specifications/binary-distribution-format.rst:162 msgid "" @@ -14166,6 +16059,8 @@ msgid "" "contain ``-``, as the resulting file may not be processed correctly if they " "do." msgstr "" +"构建 wheel 的工具应该检查文件名的各个组成部分不含 ``-``,因为如果包含,生成的" +"文件可能无法被正确处理。" #: ../source/specifications/binary-distribution-format.rst:165 msgid "" @@ -14173,6 +16068,8 @@ msgid "" "updated to support non-ASCII filenames, but they are supported in this " "specification." msgstr "" +"归档文件名是 Unicode 的。相关工具还需要一段时间才会更新以支持非 ASCII 文件名" +",但本规范支持这类文件名。" #: ../source/specifications/binary-distribution-format.rst:169 msgid "" @@ -14180,10 +16077,12 @@ msgid "" "clients in common use do not properly display UTF-8 filenames, the encoding " "is supported by both the ZIP specification and Python's ``zipfile``." msgstr "" +"归档文件 *内部* 的文件名以 UTF-8 编码。尽管一些常用 ZIP 客户端不能正确显示 " +"UTF-8 文件名,但该编码同时得到 ZIP 规范和 Python 的 ``zipfile`` 的支持。" #: ../source/specifications/binary-distribution-format.rst:175 msgid "File contents" -msgstr "" +msgstr "文件内容" #: ../source/specifications/binary-distribution-format.rst:177 msgid "" @@ -14194,6 +16093,10 @@ msgid "" "characters replaced with underscore/``_`` characters in both fields) consist " "of:" msgstr "" +"wheel 文件的内容如下,其中 {distribution} 替换为软件包的 :ref:`规范化名称 " +"` (例如 ``beaglevote``),{version} 替换为其 :ref:`规范" +"化版本 ` (例如 ``1.0.0``),且这两个字段中" +"的连字符 ``-`` 均替换为下划线 ``_``:" #: ../source/specifications/binary-distribution-format.rst:184 msgid "" @@ -14201,15 +16104,18 @@ msgid "" "``purelib`` or ``platlib`` as specified in ``WHEEL``. ``purelib`` and " "``platlib`` are usually both ``site-packages``." msgstr "" +"``/`` 是归档的根目录,包含按 ``WHEEL`` 的规定要安装到 ``purelib`` 或 " +"``platlib`` 的所有文件。``purelib`` 和 ``platlib`` 通常都是 ``site-" +"packages``。" #: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." -msgstr "" +msgstr "``{distribution}-{version}.dist-info/`` 包含元数据。" #: ../source/specifications/binary-distribution-format.rst:188 msgid "" ":file:`{distribution}-{version}.dist-info/licenses/` contains license files." -msgstr "" +msgstr ":file:`{distribution}-{version}.dist-info/licenses/` 包含许可证文件。" #: ../source/specifications/binary-distribution-format.rst:189 msgid "" @@ -14218,6 +16124,9 @@ msgid "" "an index into a dictionary of install paths (e.g. ``data``, ``scripts``, " "``headers``, ``purelib``, ``platlib``)." msgstr "" +"``{distribution}-{version}.data/`` 为每个尚未涵盖的非空安装方案键包含一个子目" +"录,子目录名称是安装路径字典中的索引(例如 " +"``data``、``scripts``、``headers``、``purelib``、``platlib``)。" #: ../source/specifications/binary-distribution-format.rst:193 msgid "" @@ -14226,28 +16135,35 @@ msgid "" "rewriting at install time. They may have any or no extension. The " "``scripts`` directory may only contain regular files." msgstr "" +"Python 脚本必须出现在 ``scripts`` 中,并且恰好以 ``b'#!python'`` 开头,才能在" +"安装时获得脚本包装器生成和 ``#!python`` 重写。它们可以带任意扩展名,也可以不" +"带扩展名。``scripts`` 目录只能包含常规文件。" #: ../source/specifications/binary-distribution-format.rst:197 msgid "" "``{distribution}-{version}.dist-info/METADATA`` is Metadata version 1.1 or " "greater format metadata." msgstr "" +"``{distribution}-{version}.dist-info/METADATA`` 是 Metadata 版本 1.1 或更高格" +"式的元数据。" #: ../source/specifications/binary-distribution-format.rst:199 msgid "" "``{distribution}-{version}.dist-info/WHEEL`` is metadata about the archive " "itself in the same basic key: value format::" msgstr "" +"``{distribution}-{version}.dist-info/WHEEL`` 是关于归档文件本身的元数据,采用" +"同样的基本“键:值”格式::" #: ../source/specifications/binary-distribution-format.rst:209 msgid "``Wheel-Version`` is the version number of the Wheel specification." -msgstr "" +msgstr "``Wheel-Version`` 是 wheel 规范的版本号。" #: ../source/specifications/binary-distribution-format.rst:210 msgid "" "``Generator`` is the name and optionally the version of the software that " "produced the archive." -msgstr "" +msgstr "``Generator`` 是生成该归档文件的软件的名称及其可选的版本号。" #: ../source/specifications/binary-distribution-format.rst:212 msgid "" @@ -14255,17 +16171,21 @@ msgid "" "be installed into purelib; otherwise the root should be installed into " "platlib." msgstr "" +"如果归档文件的顶层目录应当安装到 purelib,则 ``Root-Is-Purelib`` 为 true;否" +"则应将根目录安装到 platlib。" #: ../source/specifications/binary-distribution-format.rst:215 msgid "" "``Tag`` is the wheel's expanded compatibility tags; in the example the " "filename would contain ``py2.py3-none-any``." msgstr "" +"``Tag`` 是 wheel 包展开后的兼容性标签;在上面的示例中,文件名将包含 " +"``py2.py3-none-any``。" #: ../source/specifications/binary-distribution-format.rst:217 msgid "" "``Build`` is the build number and is omitted if there is no build number." -msgstr "" +msgstr "``Build`` 是构建编号,如果没有构建编号则省略。" #: ../source/specifications/binary-distribution-format.rst:218 msgid "" @@ -14273,12 +16193,14 @@ msgid "" "it supports, and must fail if Wheel-Version has a greater major version than " "the version it supports." msgstr "" +"如果 Wheel-Version 大于所支持的版本,wheel 安装器应该发出警告;如果 Wheel-" +"Version 的主版本号大于所支持的版本,安装器必须失败。" #: ../source/specifications/binary-distribution-format.rst:221 msgid "" "Wheel, being an installation format that is intended to work across multiple " "versions of Python, does not generally include .pyc files." -msgstr "" +msgstr "wheel 作为一种旨在跨多个 Python 版本使用的安装格式,通常不包含 .pyc 文件。" #: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." @@ -14291,6 +16213,8 @@ msgid "" "layout offers a superset of the functionality provided by the existing " "wininst and egg binary formats." msgstr "" +"本版本的 wheel 规范基于 distutils 安装方案,并未定义如何将文件安装到其他位置" +"。这种布局提供了现有 wininst 和 egg 二进制格式所提供功能的超集。" #: ../source/specifications/binary-distribution-format.rst:232 #: ../source/specifications/recording-installed-packages.rst:23 @@ -14301,17 +16225,17 @@ msgstr "目录 .dist-info" msgid "" "Wheel .dist-info directories include at a minimum METADATA, WHEEL, and " "RECORD." -msgstr "" +msgstr "wheel 包的 .dist-info 目录至少包含 METADATA、WHEEL 和 RECORD。" #: ../source/specifications/binary-distribution-format.rst:236 msgid "" "METADATA is the package metadata, the same format as PKG-INFO as found at " "the root of sdists." -msgstr "" +msgstr "METADATA 是软件包元数据,其格式与源分发根目录下的 PKG-INFO 相同。" #: ../source/specifications/binary-distribution-format.rst:238 msgid "WHEEL is the wheel metadata specific to a build of the package." -msgstr "" +msgstr "WHEEL 是特定于软件包某次构建的 wheel 元数据。" #: ../source/specifications/binary-distribution-format.rst:239 msgid "" @@ -14320,10 +16244,13 @@ msgid "" "hash of itself, must include its hash. The hash algorithm must be sha256 or " "better; specifically, md5 and sha1 are not permitted." msgstr "" +"RECORD 是 wheel 中(几乎)所有文件及其安全哈希的列表。与 PEP 376 不同,除无法" +"包含自身哈希的 RECORD 之外,每个文件都必须包含其哈希。哈希算法必须是 sha256 " +"或更强的算法;具体而言,不得使用 md5 和 sha1。" #: ../source/specifications/binary-distribution-format.rst:244 msgid "PEP 376's INSTALLER and REQUESTED are not included in the archive." -msgstr "" +msgstr "归档文件中不包含 PEP 376 的 INSTALLER 和 REQUESTED。" #: ../source/specifications/binary-distribution-format.rst:245 msgid "" @@ -14332,6 +16259,9 @@ msgid "" "and other tools must not add them to wheels anymore, installers should be " "aware that these files may still be part of some wheels." msgstr "" +"RECORD.jws 和 RECORD.p7s 已弃用。在仍在使用它们的情况下,RECORD.jws 和 " +"RECORD.p7s 都不会在 RECORD 中列出。构建后端和其他工具不得再将其添加到 wheel " +"包中,安装器应该知悉这些文件可能仍是某些 wheel 包的一部分。" #: ../source/specifications/binary-distribution-format.rst:250 msgid "" @@ -14340,10 +16270,13 @@ msgid "" "installation will fail if any file in the archive is not both mentioned and " "correctly hashed in RECORD." msgstr "" +"在解压过程中,wheel 安装器会对照文件内容校验 RECORD 中的所有哈希。除 RECORD、" +"RECORD.jws 和 RECORD.p7s 之外,如果归档文件中的任何文件没有同时在 RECORD 中列" +"出并记录正确的哈希,安装就会失败。" #: ../source/specifications/binary-distribution-format.rst:256 msgid "Subdirectories in :file:`.dist-info/`" -msgstr "" +msgstr ":file:`.dist-info/` 中的子目录" #: ../source/specifications/binary-distribution-format.rst:258 msgid "" @@ -14351,6 +16284,8 @@ msgid "" "following subdirectory names under :file:`.dist-info/` are reserved for " "specific usage:" msgstr "" +":file:`.dist-info/` 下的子目录保留供将来使用。以下 :file:`.dist-info/` 下的子" +"目录名称保留用于特定用途:" #: ../source/specifications/binary-distribution-format.rst:262 msgid "Subdirectory name" @@ -14358,7 +16293,7 @@ msgstr "子目录名称" #: ../source/specifications/binary-distribution-format.rst:262 msgid "PEP / Standard" -msgstr "" +msgstr "PEP / 标准" #: ../source/specifications/binary-distribution-format.rst:264 msgid "``licenses``" @@ -14367,7 +16302,7 @@ msgstr "``licenses``" #: ../source/specifications/binary-distribution-format.rst:264 #: ../source/specifications/binary-distribution-format.rst:265 msgid ":pep:`639`" -msgstr "" +msgstr ":pep:`639`" #: ../source/specifications/binary-distribution-format.rst:265 msgid "``license_files``" @@ -14379,15 +16314,15 @@ msgstr "``LICENSES``" #: ../source/specifications/binary-distribution-format.rst:266 msgid "`REUSE licensing framework `__" -msgstr "" +msgstr "`REUSE 许可框架 `__" #: ../source/specifications/binary-distribution-format.rst:267 msgid "``sboms``" -msgstr "" +msgstr "``sboms``" #: ../source/specifications/binary-distribution-format.rst:267 msgid ":pep:`770`" -msgstr "" +msgstr ":pep:`770`" #: ../source/specifications/binary-distribution-format.rst:271 msgid "The :file:`.dist-info/licenses/` directory" @@ -14401,6 +16336,10 @@ msgid "" "``License-File`` fields in the :file:`METADATA` file at their respective " "paths relative to the :file:`licenses/` directory." msgstr "" +"如果元数据版本为 2.4 或更高,并且指定了一个或多个 ``License-File`` 字段,则 " +":file:`.dist-info/` 目录必须包含 :file:`licenses/` 子目录,该子目录必须包含 " +":file:`METADATA` 文件的 ``License-File`` 字段中所列出的文件,这些文件位于相对" +"于 :file:`licenses/` 目录的各自路径处。" #: ../source/specifications/binary-distribution-format.rst:282 msgid "The :file:`.dist-info/sboms/` directory" @@ -14412,6 +16351,8 @@ msgid "" "Software Bill-of-Materials (SBOM) files that describe software contained " "within the distribution archive." msgstr "" +":file:`.dist-info/sboms/` 目录中包含的所有文件必须是软件物料清单(SBOM)文件" +",用于描述分发包归档中所含的软件。" #: ../source/specifications/binary-distribution-format.rst:289 msgid "The .data directory" @@ -14423,6 +16364,8 @@ msgid "" "the .data directory, named as the .dist-info directory but with the .data/ " "extension::" msgstr "" +"任何通常不安装到 site-packages 内的文件都会放入 .data 目录,该目录命名为 " +".dist-info,但扩展名为 .data/::" #: ../source/specifications/binary-distribution-format.rst:299 msgid "" @@ -14430,15 +16373,17 @@ msgid "" "documentation and so forth from the distribution. During installation the " "contents of these subdirectories are moved onto their destination paths." msgstr "" +".data 目录包含若干子目录,其中存放来自分发包的脚本、头文件、文档等内容。在安" +"装过程中,这些子目录的内容会被移动到各自的目标路径。" #: ../source/specifications/binary-distribution-format.rst:305 #: ../source/specifications/platform-compatibility-tags.rst:376 msgid "FAQ" -msgstr "" +msgstr "常见问题" #: ../source/specifications/binary-distribution-format.rst:309 msgid "Wheel defines a .data directory. Should I put all my data there?" -msgstr "" +msgstr "wheel 定义了 .data 目录。我应该把所有数据都放在那里吗?" #: ../source/specifications/binary-distribution-format.rst:311 msgid "" @@ -14449,10 +16394,14 @@ msgid "" "though *those* files will usually not be distributed in *wheel's* ``.data`` " "directory." msgstr "" +"本规范对你如何组织代码不持立场。.data 目录只是用来存放那些通常不会安装到 " +"``site-packages`` 内部或 PYTHONPATH 上的文件。换句话说,你可以继续使用 " +"``pkgutil.get_data(package, resource)``,尽管 *这些* 文件通常不会分发在 " +"*wheel 的* ``.data`` 目录中。" #: ../source/specifications/binary-distribution-format.rst:320 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" -msgstr "" +msgstr "“purelib”与“platlib”是怎么回事?" #: ../source/specifications/binary-distribution-format.rst:322 msgid "" @@ -14461,6 +16410,9 @@ msgid "" "packages to '/usr/lib/pythonX.Y/site-packages' and platform dependent " "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" +"wheel 保留了“purelib”与“platlib”之分,这种区别在某些平台上很重要。例如," +"Fedora 会把纯 Python 软件包安装到 '/usr/lib/pythonX.Y/site-packages',而把依" +"赖平台的软件包安装到 '/usr/lib64/pythonX.Y/site-packages'。" #: ../source/specifications/binary-distribution-format.rst:327 msgid "" @@ -14469,6 +16421,9 @@ msgid "" "true\" with those same files in the root, and it is legal to have files in " "both the \"purelib\" and \"platlib\" categories." msgstr "" +"一个“Root-Is-Purelib: false”且所有文件都位于 ``{name}-{version}.data/" +"purelib`` 中的 wheel 包,等价于一个“Root-Is-Purelib: true”且这些相同文件位于" +"根目录的 wheel 包;同时在“purelib”和“platlib”两个类别中都放置文件也是合法的。" #: ../source/specifications/binary-distribution-format.rst:332 msgid "" @@ -14476,10 +16431,12 @@ msgid "" "depending on whether it is pure Python or not and those files should be at " "the root with the appropriate setting given for \"Root-is-purelib\"." msgstr "" +"实际上,wheel 包应该根据自身是否为纯 Python 而只包含“purelib”或“platlib”之一" +",并且这些文件应该位于根目录,同时为“Root-is-purelib”给出相应的设置。" #: ../source/specifications/binary-distribution-format.rst:340 msgid "Is it possible to import Python code directly from a wheel file?" -msgstr "" +msgstr "可以直接从 wheel 文件导入 Python 代码吗?" #: ../source/specifications/binary-distribution-format.rst:342 msgid "" @@ -14489,6 +16446,9 @@ msgid "" "``sys.path``. However, while this behaviour is a natural consequence of the " "format design, actually relying on it is generally discouraged." msgstr "" +"从技术上讲,由于 wheel 既支持通过简单解压进行安装,又使用了与 ``zipimport`` " +"兼容的归档格式,一部分 wheel 文件 *确实* 支持被直接放置在 ``sys.path`` 上。然" +"而,尽管这一行为是格式设计的自然结果,通常并不建议实际依赖它。" #: ../source/specifications/binary-distribution-format.rst:348 msgid "" @@ -14500,6 +16460,10 @@ msgid "" "purposes, or integrating fully with the standard build machinery for C " "extensions by publishing header files in the appropriate place)." msgstr "" +"首先,wheel *是* 主要作为一种分发格式来设计的,因此跳过安装步骤也意味着刻意避" +"免依赖任何以完整安装为前提的特性(例如,能够使用 ``pip`` 和 ``virtualenv`` 等" +"标准工具来捕获和管理依赖项,采用可被妥善跟踪以满足审计和安全更新需要的方式;" +"或者通过在适当的位置发布头文件,与 C 扩展的标准构建机制完全集成)。" #: ../source/specifications/binary-distribution-format.rst:357 msgid "" @@ -14518,6 +16482,14 @@ msgid "" "uses the abstract resource APIs internally, interfacing with external " "components may still require the availability of an actual on-disk file." msgstr "" +"其次,虽然某些 Python 软件在编写时就支持直接从 zip 归档运行,但常见的情形仍是" +"代码在编写时假定自己已被完整安装。当试图从 zip 归档运行软件而打破这一假定时," +"出现的故障往往晦涩且难以诊断(尤其是在第三方库中发生时)。这方面最常见的两个" +"问题来源是:从 zip 归档导入 C 扩展 *不* 受 CPython 支持(因为任何平台的动态加" +"载机制都不直接支持这样做);以及从 zip 归档运行时,``__file__`` 属性不再指向" +"普通的文件系统路径,而是指向一个组合路径,其中既包含 zip 归档在文件系统上的位" +"置,也包含模块在归档内部的相对路径。即使软件在内部正确使用了抽象资源 API,与" +"外部组件交互时仍可能需要存在实际的磁盘文件。" #: ../source/specifications/binary-distribution-format.rst:374 msgid "" @@ -14527,11 +16499,15 @@ msgid "" "many projects will require a failure to be reproduced with a fully installed " "package before accepting it as a genuine bug." msgstr "" +"就像元类、猴子补丁(monkeypatching)和元路径导入器一样,如果你还不能确定自己" +"需要利用这一特性,那么几乎可以肯定你并不需要它。如果你 *确实* 决定无论如何都" +"要使用它,请注意,许多项目会要求先在完整安装的软件包上复现故障,然后才会将其" +"认定为真实的缺陷。" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -14548,17 +16524,19 @@ msgstr "" #: ../source/specifications/version-specifiers.rst:1282 #: ../source/specifications/virtual-environments.rst:54 msgid "History" -msgstr "" +msgstr "历史" #: ../source/specifications/binary-distribution-format.rst:384 msgid "February 2013: This specification was approved through :pep:`427`." -msgstr "" +msgstr "2013 年 2 月:本规范通过 :pep:`427` 获得批准。" #: ../source/specifications/binary-distribution-format.rst:385 msgid "" "February 2021: The rules on escaping in wheel filenames were revised, to " "bring them into line with what popular tools actually do." msgstr "" +"2021 年 2 月:修订了 wheel 文件名中转义处理的规则,使其与流行工具的实际做法保" +"持一致。" #: ../source/specifications/binary-distribution-format.rst:387 msgid "" @@ -14567,40 +16545,44 @@ msgid "" "symlinks or subdirectories in this folder is not formally defined, and hence " "may vary between tools)." msgstr "" +"2024 年 12 月:澄清了 ``scripts`` 文件夹应该只包含常规文件(使用方工具在该文" +"件夹中遇到符号链接或子目录时的预期行为没有正式定义,因此可能因工具而异)。" #: ../source/specifications/binary-distribution-format.rst:391 #: ../source/specifications/recording-installed-packages.rst:288 msgid "" "December 2024: The :file:`.dist-info/licenses/` directory was specified " "through :pep:`639`." -msgstr "" +msgstr "2024 年 12 月:通过 :pep:`639` 规定了 :file:`.dist-info/licenses/` 目录。" #: ../source/specifications/binary-distribution-format.rst:393 msgid "" "January 2025: Clarified that name and version needs to be normalized for " "``.dist-info`` and ``.data`` directories." msgstr "" +"2025 年 1 月:澄清了 ``.dist-info`` 和 ``.data`` 目录所用的名称和版本号需要经" +"过规范化。" #: ../source/specifications/binary-distribution-format.rst:395 msgid "January 2026: Deprecate RECORD.jws and RECORD.p7s :pep:`815`." -msgstr "" +msgstr "2026 年 1 月:弃用 RECORD.jws 和 RECORD.p7s,见 :pep:`815`。" #: ../source/specifications/binary-distribution-format.rst:399 msgid "Appendix" -msgstr "" +msgstr "附录" #: ../source/specifications/binary-distribution-format.rst:401 msgid "Example urlsafe-base64-nopad implementation::" -msgstr "" +msgstr "urlsafe-base64-nopad 实现示例::" #: ../source/specifications/build-details/index.rst:7 #: ../source/specifications/build-details/index.rst:41 msgid "v1.0" -msgstr "" +msgstr "v1.0" #: ../source/specifications/build-details/index.rst:5 msgid ":file:`build-details.json`" -msgstr "" +msgstr ":file:`build-details.json`" #: ../source/specifications/build-details/index.rst:13 msgid "" @@ -14609,6 +16591,8 @@ msgid "" "extension ABI details, and other information that is specific to that " "particular build of Python." msgstr "" +"``build-details.json`` 文件是一种标准化的文件格式,提供与 Python 安装构建相关" +"的信息,例如其版本、扩展 ABI 细节,以及其他特定于该次 Python 构建的信息。" #: ../source/specifications/build-details/index.rst:18 msgid "" @@ -14616,12 +16600,14 @@ msgid "" "platform-independent standard library directory (``stdlib``, e.g. ``/usr/lib/" "python3.14/build-details.json``)." msgstr "" +"从 Python 3.14 开始,会在与平台无关的标准库目录(``stdlib``,例如 ``/usr/lib/" +"python3.14/build-details.json``)中安装一个 ``build-details.json`` 文件。" #: ../source/specifications/build-details/index.rst:22 msgid "" "Please refer to the :ref:`latest version ` for its " "specification." -msgstr "" +msgstr "请参阅 :ref:`最新版本 ` 以了解其规范。" #: ../source/specifications/build-details/index.rst:28 #: ../source/specifications/build-details/v1.0.rst:16 @@ -14632,7 +16618,7 @@ msgstr "例子" #: ../source/specifications/build-details/index.rst:35 msgid "Changelog" -msgstr "" +msgstr "变更日志" #: ../source/specifications/build-details/index.rst:45 #: ../source/specifications/build-details/v1.0.rst:9 @@ -14650,11 +16636,11 @@ msgstr "技术参数" #: ../source/specifications/build-details/index.rst:46 msgid ":ref:`build-details-v1.0`" -msgstr "" +msgstr ":ref:`build-details-v1.0`" #: ../source/specifications/build-details/index.rst:48 msgid "Schema" -msgstr "" +msgstr "模式" #: ../source/specifications/build-details/index.rst:49 #: ../source/specifications/build-details/v1.0.rst:12 @@ -14662,24 +16648,26 @@ msgid "" "https://packaging.python.org/en/latest/specifications/schemas/build-details-" "v1.0.schema.json" msgstr "" +"https://packaging.python.org/en/latest/specifications/schemas/build-details-" +"v1.0.schema.json" #: ../source/specifications/build-details/index.rst:52 msgid "Initial version, introduced by :pep:`739`." -msgstr "" +msgstr "初始版本,由 :pep:`739` 引入。" #: ../source/specifications/build-details/v1.0.rst:5 msgid "``build-details.json`` v1.0" -msgstr "" +msgstr "``build-details.json`` v1.0" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "*build-details.json — a static description file with build details of Python " "installations*" -msgstr "" +msgstr "*build-details.json —— 一个包含 Python 安装构建细节的静态描述文件*" #: ../source/specifications/build-details/v1.0.rst:12 msgid "type" -msgstr "" +msgstr "type" #: ../source/specifications/build-details/v1.0.rst:12 msgid "*object*" @@ -14687,11 +16675,11 @@ msgstr "*对象*" #: ../source/specifications/build-details/v1.0.rst:12 msgid "properties" -msgstr "" +msgstr "properties" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**schema\\_version**" -msgstr "" +msgstr "**schema\\_version**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Schema version." @@ -14704,12 +16692,15 @@ msgid "" "**minor** components of the version. Versions may be arithmetically compared " "by intrepreting the version string as a decimal number." msgstr "" +"这是一个遵循 ``.`` 格式的字符串,其中 ```` 和 ``" +"`` 是不带补零的数字,分别表示版本的 **major** 和 **minor** 组成部分(即主版本" +"号和次版本号)。将版本字符串解释为十进制数后,各版本之间即可进行算术比较。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "For this specification version, this value is constant and **MUST** be " "``1.0``." -msgstr "" +msgstr "对本规范版本而言,该值为固定值,且 **必须** 为 ``1.0``。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" @@ -14722,10 +16713,15 @@ msgid "" "the older specification, with the exception of additional properties (errors " "caused by ``additionalProperties``)." msgstr "" +"该 schema 的未来版本 **必须** 使用更高的版本号。该 schema 的未来版本 **不" +"得** 使用与其他 schema 版本相同的 **major** 版本组成部分,除非其规范被认定为" +"与它们向后兼容,即:不能以任何导致所解释数据语义发生变化的方式更改或扩展当前" +"规范的任何部分,也不能使在新规范下有效的数据在旧规范下变为无效;附加属性(由 " +"``additionalProperties`` 引起的错误)除外。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "*string*" -msgstr "" +msgstr "*string*" #: ../source/specifications/build-details/v1.0.rst:12 msgid "const" @@ -14733,21 +16729,21 @@ msgstr "const" #: ../source/specifications/build-details/v1.0.rst:12 msgid "1.0" -msgstr "" +msgstr "1.0" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**base\\_prefix**" -msgstr "" +msgstr "**base\\_prefix**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Base prefix of the Python installation." -msgstr "" +msgstr "Python 安装的基础前缀。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "Either an absolute path, or a path relative to directory where this file is " "contained." -msgstr "" +msgstr "可以是绝对路径,也可以是相对于该文件所在目录的相对路径。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "examples" @@ -14755,33 +16751,33 @@ msgstr "例子" #: ../source/specifications/build-details/v1.0.rst:12 msgid "/usr" -msgstr "" +msgstr "/usr" #: ../source/specifications/build-details/v1.0.rst:12 msgid "../.." -msgstr "" +msgstr "../.." #: ../source/specifications/build-details/v1.0.rst:12 msgid "base\\_interpreter" -msgstr "" +msgstr "base\\_interpreter" #: ../source/specifications/build-details/v1.0.rst:12 msgid "The path to the Python interprer of the base installation." -msgstr "" +msgstr "基础安装中 Python 解释器的路径。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Either an absolute path, or a path relative to ``base_prefix``." -msgstr "" +msgstr "可以是绝对路径,也可以是相对于 ``base_prefix`` 的相对路径。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "This field **MUST** be present if the installation provides an interpreter " "executable." -msgstr "" +msgstr "如果安装提供了解释器可执行文件,则 **必须** 包含此字段。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "/usr/bin/python" -msgstr "" +msgstr "/usr/bin/python" #: ../source/specifications/build-details/v1.0.rst:12 msgid "bin/python" @@ -14789,27 +16785,27 @@ msgstr "bin/python" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**platform**" -msgstr "" +msgstr "**platform**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "System platform string." -msgstr "" +msgstr "系统平台字符串。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "This field **SHOULD** be equivalent to ``sysconfig.get_platform()``." -msgstr "" +msgstr "此字段 **应该** 等价于 ``sysconfig.get_platform()``。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "linux-x86\\_64" -msgstr "" +msgstr "linux-x86\\_64" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**language**" -msgstr "" +msgstr "**language**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Object containing details related to the Python language specification." -msgstr "" +msgstr "包含与 Python 语言规范相关细节的对象。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**version**" @@ -14820,15 +16816,17 @@ msgid "" "String representation the Python language version — a version string " "consisting only of the *major* and *minor* components." msgstr "" +"Python 语言版本的字符串表示形式——仅由 *major* 和 *minor* 组成部分构成的版本字" +"符串。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "This field **SHOULD** be equivalent to ``sysconfig.get_python_version()``." -msgstr "" +msgstr "此字段 **应该** 等价于 ``sysconfig.get_python_version()``。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "3.14" -msgstr "" +msgstr "3.14" #: ../source/specifications/build-details/v1.0.rst:12 msgid "version\\_info" @@ -14836,35 +16834,35 @@ msgstr "version\\_info" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Object in the format of :py:data:`sys.version_info`." -msgstr "" +msgstr "格式为 :py:data:`sys.version_info` 的对象。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "This section **SHOULD** be equivalent to :py:data:`sys.version_info`." -msgstr "" +msgstr "此小节 **应该** 等价于 :py:data:`sys.version_info`。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "major" -msgstr "" +msgstr "major" #: ../source/specifications/build-details/v1.0.rst:12 msgid "3" -msgstr "" +msgstr "3" #: ../source/specifications/build-details/v1.0.rst:12 msgid "minor" -msgstr "" +msgstr "minor" #: ../source/specifications/build-details/v1.0.rst:12 msgid "14" -msgstr "" +msgstr "14" #: ../source/specifications/build-details/v1.0.rst:12 msgid "micro" -msgstr "" +msgstr "micro" #: ../source/specifications/build-details/v1.0.rst:12 msgid "1" -msgstr "" +msgstr "1" #: ../source/specifications/build-details/v1.0.rst:12 msgid "releaselevel" @@ -14872,19 +16870,19 @@ msgstr "发行级别" #: ../source/specifications/build-details/v1.0.rst:12 msgid "final" -msgstr "" +msgstr "final" #: ../source/specifications/build-details/v1.0.rst:12 msgid "serial" -msgstr "" +msgstr "serial" #: ../source/specifications/build-details/v1.0.rst:12 msgid "0" -msgstr "" +msgstr "0" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**major**" -msgstr "" +msgstr "**major**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "*number*" @@ -14892,27 +16890,27 @@ msgstr "*编号*" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**minor**" -msgstr "" +msgstr "**minor**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**micro**" -msgstr "" +msgstr "**micro**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**releaselevel**" -msgstr "" +msgstr "**releaselevel**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "enum" -msgstr "" +msgstr "enum" #: ../source/specifications/build-details/v1.0.rst:12 msgid "alpha, beta, candidate, final" -msgstr "" +msgstr "alpha, beta, candidate, final" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**serial**" -msgstr "" +msgstr "**serial**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "additionalProperties" @@ -14920,7 +16918,7 @@ msgstr "附加属性" #: ../source/specifications/build-details/v1.0.rst:12 msgid "False" -msgstr "" +msgstr "False" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**implementation**" @@ -14928,7 +16926,7 @@ msgstr "**实现**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Object containing details related to Python implementation." -msgstr "" +msgstr "包含与 Python 实现相关细节的对象。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" @@ -14937,14 +16935,17 @@ msgid "" "required keys, implementation-specific keys can also exist, but must be " "prefixed with an underscore." msgstr "" +"此小节 **应该** 等价于 :py:data:`sys.implementation`。它遵循 PEP 421 定义的规" +"范,这意味着除了必需的键之外,还可以存在实现特定的键,但这些键必须以下划线作" +"为前缀。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**name**" -msgstr "" +msgstr "**name**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Lower-case name of the Python implementation." -msgstr "" +msgstr "Python 实现的小写名称。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "cpython" @@ -14952,33 +16953,33 @@ msgstr "cpython" #: ../source/specifications/build-details/v1.0.rst:12 msgid "pypy" -msgstr "" +msgstr "pypy" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "Object in the format of :py:data:`sys.version_info`, containing the " "implementation version." -msgstr "" +msgstr "格式为 :py:data:`sys.version_info` 的对象,包含实现的版本。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "7" -msgstr "" +msgstr "7" #: ../source/specifications/build-details/v1.0.rst:12 msgid "16" -msgstr "" +msgstr "16" #: ../source/specifications/build-details/v1.0.rst:12 msgid "True" -msgstr "" +msgstr "True" #: ../source/specifications/build-details/v1.0.rst:12 msgid "abi" -msgstr "" +msgstr "abi" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Object containing details related to ABI." -msgstr "" +msgstr "包含与 ABI 相关细节的对象。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**flags**" @@ -14986,70 +16987,72 @@ msgstr "**标记**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Build configuration flags, used to calculate the extension suffix." -msgstr "" +msgstr "构建配置标志,用于计算扩展后缀。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "The flags **MUST** be defined in the order they appear on the extension " "suffix." -msgstr "" +msgstr "这些标志 **必须** 按照它们在扩展后缀中出现的顺序定义。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "*array*" -msgstr "" +msgstr "*array*" #: ../source/specifications/build-details/v1.0.rst:12 msgid "t" -msgstr "" +msgstr "t" #: ../source/specifications/build-details/v1.0.rst:12 msgid "d" -msgstr "" +msgstr "d" #: ../source/specifications/build-details/v1.0.rst:12 msgid "extension\\_suffix" -msgstr "" +msgstr "extension\\_suffix" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "Suffix used for extensions built against the current implementation version." -msgstr "" +msgstr "针对当前实现版本构建的扩展所使用的后缀。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "This field **MUST** be present if the Python implementation supports " "extensions, otherwise this entry will be missing." -msgstr "" +msgstr "如果 Python 实现支持扩展,则 **必须** 包含此字段,否则此条目将会缺失。" #: ../source/specifications/build-details/v1.0.rst:12 msgid ".cpython-314-x86\\_64-linux-gnu.so" -msgstr "" +msgstr ".cpython-314-x86\\_64-linux-gnu.so" #: ../source/specifications/build-details/v1.0.rst:12 msgid "stable\\_abi\\_suffix" -msgstr "" +msgstr "stable\\_abi\\_suffix" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Suffix used for extensions built against the stable ABI." -msgstr "" +msgstr "针对稳定 ABI 构建的扩展所使用的后缀。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "This field **MUST** be present if the Python implementation has a stable ABI " "extension suffix, otherwise this entry will be missing." msgstr "" +"如果 Python 实现具有稳定 ABI 扩展后缀,则 **必须** 包含此字段,否则此条目将会" +"缺失。" #: ../source/specifications/build-details/v1.0.rst:12 msgid ".abi3.so" -msgstr "" +msgstr ".abi3.so" #: ../source/specifications/build-details/v1.0.rst:12 msgid "suffixes" -msgstr "" +msgstr "suffixes" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Valid module suffixes grouped by type." -msgstr "" +msgstr "按类型分组的有效模块后缀。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" @@ -15057,6 +17060,8 @@ msgid "" "importing external files, and it **SHOULD** be equivalent to the " "``importlib.machinery.*_SUFFIXES`` attributes." msgstr "" +"如果 Python 安装支持导入外部文件,则 **必须** 包含此小节,并且它 **应该** 等" +"价于 ``importlib.machinery.*_SUFFIXES`` 属性。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" @@ -15064,30 +17069,32 @@ msgid "" "the ones listed on ``importlib.machinery`` module, they **MAY** add a sub-" "section for them." msgstr "" +"此外,如果某个 Python 实现提供了 ``importlib.machinery`` 模块中所列种类之外的" +"扩展种类,则 **可以** 为它们添加一个子节。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "source" -msgstr "" +msgstr "source" #: ../source/specifications/build-details/v1.0.rst:12 msgid ".py" -msgstr "" +msgstr ".py" #: ../source/specifications/build-details/v1.0.rst:12 msgid "bytecode" -msgstr "" +msgstr "bytecode" #: ../source/specifications/build-details/v1.0.rst:12 msgid ".pyc" -msgstr "" +msgstr ".pyc" #: ../source/specifications/build-details/v1.0.rst:12 msgid "optimized_bytecode" -msgstr "" +msgstr "optimized_bytecode" #: ../source/specifications/build-details/v1.0.rst:12 msgid "debug_bytecode" -msgstr "" +msgstr "debug_bytecode" #: ../source/specifications/build-details/v1.0.rst:12 msgid "extensions" @@ -15095,11 +17102,11 @@ msgstr "扩展" #: ../source/specifications/build-details/v1.0.rst:12 msgid ".cpython-313-x86\\_64-linux-gnu.so" -msgstr "" +msgstr ".cpython-313-x86\\_64-linux-gnu.so" #: ../source/specifications/build-details/v1.0.rst:12 msgid ".so" -msgstr "" +msgstr ".so" #: ../source/specifications/build-details/v1.0.rst:12 msgid "libpython" @@ -15107,43 +17114,47 @@ msgstr "libpython" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Object containing details related to the ``libpython`` library." -msgstr "" +msgstr "包含与 ``libpython`` 库相关细节的对象。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "This section **MUST** by present if Python installation provides a " "``libpython`` library, otherwise this section will be missing." msgstr "" +"如果 Python 安装提供了 ``libpython`` 库,则 **必须** 包含此小节,否则此小节将" +"会缺失。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "dynamic" -msgstr "" +msgstr "dynamic" #: ../source/specifications/build-details/v1.0.rst:12 msgid "The path to the dynamic ``libpython`` library." -msgstr "" +msgstr "动态 ``libpython`` 库的路径。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "This field **MUST** be present if the Python installation provides a dynamic " "``libpython`` library, otherwise this entry will be missing." msgstr "" +"如果 Python 安装提供了动态 ``libpython`` 库,则 **必须** 包含此字段,否则此条" +"目将会缺失。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "/usr/lib/libpython3.14.so.1.0" -msgstr "" +msgstr "/usr/lib/libpython3.14.so.1.0" #: ../source/specifications/build-details/v1.0.rst:12 msgid "lib/libpython3.14.so.1.0" -msgstr "" +msgstr "lib/libpython3.14.so.1.0" #: ../source/specifications/build-details/v1.0.rst:12 msgid "dynamic\\_stableabi" -msgstr "" +msgstr "dynamic\\_stableabi" #: ../source/specifications/build-details/v1.0.rst:12 msgid "The path to the dynamic ``libpython`` library for the stable ABI." -msgstr "" +msgstr "供稳定 ABI 使用的动态 ``libpython`` 库的路径。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" @@ -15151,66 +17162,70 @@ msgid "" "``libpython`` library targeting the Stable ABI, otherwise this entry will be " "missing." msgstr "" +"如果 Python 安装提供了面向稳定 ABI 的动态 ``libpython`` 库,则 **必须** 包含" +"此字段,否则此条目将会缺失。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "If this key is present ``dynamic`` **MUST** also be set." -msgstr "" +msgstr "如果存在此键,则还 **必须** 设置 ``dynamic``。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "/usr/lib/libpython3.so" -msgstr "" +msgstr "/usr/lib/libpython3.so" #: ../source/specifications/build-details/v1.0.rst:12 msgid "lib/libpython3.so" -msgstr "" +msgstr "lib/libpython3.so" #: ../source/specifications/build-details/v1.0.rst:12 msgid "static" -msgstr "" +msgstr "static" #: ../source/specifications/build-details/v1.0.rst:12 msgid "The path to the static ``libpython`` library." -msgstr "" +msgstr "静态 ``libpython`` 库的路径。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "This field **MUST** be present if the Python installation provides a static " "``libpython`` library, otherwise this entry will be missing." msgstr "" +"如果 Python 安装提供了静态 ``libpython`` 库,则 **必须** 包含此字段,否则此条" +"目将会缺失。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "/usr/lib/python3.14/config-3.14-x86\\_64-linux-gnu/libpython3.14.a" -msgstr "" +msgstr "/usr/lib/python3.14/config-3.14-x86\\_64-linux-gnu/libpython3.14.a" #: ../source/specifications/build-details/v1.0.rst:12 msgid "lib/python3.14/config-3.14-x86\\_64-linux-gnu/libpython3.14.a" -msgstr "" +msgstr "lib/python3.14/config-3.14-x86\\_64-linux-gnu/libpython3.14.a" #: ../source/specifications/build-details/v1.0.rst:12 msgid "link\\_extensions" -msgstr "" +msgstr "link\\_extensions" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Should extensions built against a dynamic ``libpython`` link to it?" -msgstr "" +msgstr "针对动态 ``libpython`` 构建的扩展是否应链接到该库?" #: ../source/specifications/build-details/v1.0.rst:12 msgid "*boolean*" -msgstr "" +msgstr "*布尔值*" #: ../source/specifications/build-details/v1.0.rst:12 msgid "c\\_api" -msgstr "" +msgstr "c\\_api" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Object containing details related to the Python C API." -msgstr "" +msgstr "包含与 Python C API 相关细节的对象。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "This section **MUST** be present if the Python implementation provides a C " "API, otherwise this section will be missing." -msgstr "" +msgstr "如果 Python 实现提供了 C API,则 **必须** 包含此小节,否则此小节将会缺失。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**headers**" @@ -15218,45 +17233,47 @@ msgstr "**标头**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "The path to the C API headers." -msgstr "" +msgstr "C API 头文件的路径。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "/usr/include/python3.14" -msgstr "" +msgstr "/usr/include/python3.14" #: ../source/specifications/build-details/v1.0.rst:12 msgid "include/python3.14" -msgstr "" +msgstr "include/python3.14" #: ../source/specifications/build-details/v1.0.rst:12 msgid "pkgconfig\\_path" -msgstr "" +msgstr "pkgconfig\\_path" #: ../source/specifications/build-details/v1.0.rst:12 msgid "The path to the pkg-config definition files." -msgstr "" +msgstr "pkg-config 定义文件的路径。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" "This field **MUST** be present if the Python implementation provides pkg-" "config definition files, otherwise this section will be missing." msgstr "" +"如果 Python 实现提供了 pkg-config 定义文件,则 **必须** 包含此字段,否则此小" +"节将会缺失。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "/usr/lib/pkgconfig" -msgstr "" +msgstr "/usr/lib/pkgconfig" #: ../source/specifications/build-details/v1.0.rst:12 msgid "lib/pkgconfig" -msgstr "" +msgstr "lib/pkgconfig" #: ../source/specifications/build-details/v1.0.rst:12 msgid "arbitrary\\_data" -msgstr "" +msgstr "arbitrary\\_data" #: ../source/specifications/build-details/v1.0.rst:12 msgid "Object containing extra arbitrary data." -msgstr "" +msgstr "包含额外任意数据的对象。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" @@ -15264,20 +17281,22 @@ msgid "" "that is not covered by this specification. Implementations may choose what " "data to provide in this section." msgstr "" +"此小节旨在作为逃生通道使用,用于包含本规范未涵盖的任何相关数据。各实现可以自" +"行选择在此小节中提供哪些数据。" #: ../source/specifications/core-metadata.rst:7 msgid "Core metadata specifications" -msgstr "" +msgstr "核心元数据规范" #: ../source/specifications/core-metadata.rst:9 msgid "This page describes version 2.6, approved in May 2026." -msgstr "" +msgstr "本页面描述 2026 年 5 月批准的版本 2.6。" #: ../source/specifications/core-metadata.rst:11 msgid "" "Fields defined in the following specification should be considered valid, " "complete and not subject to change. The required fields are:" -msgstr "" +msgstr "以下规范中定义的字段应被视为有效、完整且不再变更。必需的字段如下:" #: ../source/specifications/core-metadata.rst:14 msgid "``Metadata-Version``" @@ -15285,7 +17304,7 @@ msgstr "" #: ../source/specifications/core-metadata.rst:15 msgid "``Name``" -msgstr "" +msgstr "``Name``" #: ../source/specifications/core-metadata.rst:16 msgid "``Version``" @@ -15293,7 +17312,7 @@ msgstr "" #: ../source/specifications/core-metadata.rst:18 msgid "All the other fields are optional." -msgstr "" +msgstr "所有其他字段均为可选。" #: ../source/specifications/core-metadata.rst:20 msgid "" @@ -15306,12 +17325,20 @@ msgid "" "library :mod:`python:email.parser` module can parse using " "the :data:`~.python:email.policy.compat32` policy." msgstr "" +"元数据的标准文件格式(包括 :doc:`wheel 包 ` 和 " +":doc:`已安装项目 ` 中所用的格式)基于电子邮件头" +"部的格式。然而,电子邮件格式经历过多次修订,究竟哪一份电子邮件 RFC 适用于打包" +"元数据并未指明。在缺乏精确定义的情况下,实际标准由标准库 " +":mod:`python:email.parser` 模块在 :data:`~.python:email.policy.compat32` 策略" +"下所能解析的内容来确定。" #: ../source/specifications/core-metadata.rst:29 msgid "" "Whenever metadata is serialised to a byte stream (for example, to save to a " "file), strings must be serialised using the UTF-8 encoding." msgstr "" +"每当将元数据序列化为字节流时(例如保存到文件),字符串都必须使用 UTF-8 编码进" +"行序列化。" #: ../source/specifications/core-metadata.rst:32 msgid "" @@ -15320,6 +17347,9 @@ msgid "" "format. The need for tools to work with years worth of existing packages " "makes it difficult to shift to a new format." msgstr "" +"尽管 :pep:`566` 定义了将元数据转换为 JSON 兼容字典的方法,但这尚未被用作标准" +"交换格式。工具需要处理多年积累下来的海量现有软件包,这使得转向新格式十分困难" +"。" #: ../source/specifications/core-metadata.rst:37 msgid "" @@ -15330,16 +17360,22 @@ msgid "" "more relaxed formatting rules even for metadata files that are nominally " "less than version 2.1." msgstr "" +"*解读旧元数据:* 在 :pep:`566` 中,版本说明符字段的格式规范被放宽,以接受流行" +"发布工具所使用的语法(即取消了版本说明符必须用括号括起来的要求)。即使对于名" +"义上版本低于 2.1 的元数据文件,元数据消费方也可以使用这种更宽松的格式规则。" #: ../source/specifications/core-metadata.rst:48 msgid "Metadata-Version" -msgstr "" +msgstr "Metadata-Version" #: ../source/specifications/core-metadata.rst:52 msgid "" "Version of the file format; legal values are \"1.0\", \"1.1\", \"1.2\", " "\"2.1\", \"2.2\", \"2.3\", \"2.4\", \"2.5\", and \"2.6\"." msgstr "" +"文件格式的版本;合法值为 " +"\"1.0\"、\"1.1\"、\"1.2\"、\"2.1\"、\"2.2\"、\"2.3\"、\"2.4\"、\"2.5\" 和 " +"\"2.6\"。" #: ../source/specifications/core-metadata.rst:55 msgid "" @@ -15349,6 +17385,10 @@ msgid "" "(as described in the :ref:`Version specifier specification `, the major version is the value before the first dot)." msgstr "" +"如果 ``metadata-version`` 大于消费元数据的自动化工具所支持的版本号上限,该工" +"具应该发出警告;如果 ``metadata-version`` 的主版本号大于其所支持的版本号上限" +",则必须失败(如 :ref:`版本说明符规范 ` 中所述,主版本号" +"是第一个点号之前的数值)。" #: ../source/specifications/core-metadata.rst:62 msgid "" @@ -15356,6 +17396,8 @@ msgid "" "metadata using the lowest metadata version that includes all of the needed " "fields." msgstr "" +"为了获得更广泛的兼容性,构建工具可以选用包含全部所需字段的最低元数据版本来生" +"成分发元数据。" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 @@ -15378,7 +17420,7 @@ msgstr "" #: ../source/specifications/core-metadata.rst:940 #: ../source/specifications/core-metadata.rst:1037 msgid "Example::" -msgstr "" +msgstr "示例::" #: ../source/specifications/core-metadata.rst:74 msgid "Name" @@ -15386,7 +17428,7 @@ msgstr "名称" #: ../source/specifications/core-metadata.rst:77 msgid "Added restrictions on format from the :ref:`name format `." -msgstr "" +msgstr "添加了来自 :ref:`名称格式 ` 的格式限制。" #: ../source/specifications/core-metadata.rst:80 msgid "" @@ -15394,12 +17436,16 @@ msgid "" "distribution. It must conform to the :ref:`name format specification `." msgstr "" +"分发包的名称。名称字段是分发包的主要标识符。它必须符合 :ref:`名称格式规范 " +"`。" #: ../source/specifications/core-metadata.rst:88 msgid "" "For comparison purposes, the names should be :ref:`normalized ` before comparing." msgstr "" +"为便于比较,名称在比较之前应该先进行 :ref:`规范化 ` 处理" +"。" #: ../source/specifications/core-metadata.rst:93 msgid "Version" @@ -15411,10 +17457,12 @@ msgid "" "in the format specified in the :ref:`Version specifier specification " "`." msgstr "" +"一个包含分发包版本号的字符串。该字段必须采用 :ref:`版本说明符规范 ` 中规定的格式。" #: ../source/specifications/core-metadata.rst:109 msgid "Dynamic (multiple use)" -msgstr "" +msgstr "Dynamic(多次使用)" #: ../source/specifications/core-metadata.rst:112 msgid "" @@ -15422,6 +17470,9 @@ msgid "" "``Dynamic`` may only be appended to in a wheel built from the sdist. " "Previously any field listed in Dynamic was ignored in an sdist." msgstr "" +"对于在源分发中存在且同时标记为 ``Dynamic`` 的多次使用字段,在由该源分发构建" +"的 wheel 包中只能向其追加内容。此前,Dynamic 中列出的任何字段在 sdist 中都会" +"被忽略。" #: ../source/specifications/core-metadata.rst:117 msgid "" @@ -15429,12 +17480,14 @@ msgid "" "``Name``, ``Version``, and ``Metadata-Version`` may not be specified in this " "field." msgstr "" +"一个包含另一个核心元数据字段名称的字符串。字段名 ``Name``、``Version`` 和 " +"``Metadata-Version`` 不得在此字段中指定。" #: ../source/specifications/core-metadata.rst:121 msgid "" "When found in the metadata of a source distribution, the following rules " "apply:" -msgstr "" +msgstr "当在源分发的元数据中发现该字段时,适用以下规则:" #: ../source/specifications/core-metadata.rst:124 msgid "" @@ -15443,12 +17496,17 @@ msgid "" "field is not in the sdist, and not marked as ``Dynamic``, then it MUST NOT " "be present in the wheel." msgstr "" +"如果某字段 *未* 标记为 ``Dynamic``,那么在由该 sdist 构建的任何 wheel 包中," +"该字段的值都必须与 sdist 中的值相同。如果该字段不在 sdist 中,也未标记为 " +"``Dynamic``,则它不得出现在 wheel 包中。" #: ../source/specifications/core-metadata.rst:128 msgid "" "If a single-use field is marked as ``Dynamic``, it may contain any valid " "value in a wheel built from the sdist (including not being present at all)." msgstr "" +"如果单次使用的字段标记为 ``Dynamic``,那么在由该 sdist 构建的 wheel 包中,它" +"可以取任何有效的值(包括完全不出现的情况)。" #: ../source/specifications/core-metadata.rst:130 msgid "" @@ -15457,6 +17515,9 @@ msgid "" "sdist. The wheel MAY add further values, but it MUST NOT remove, reorder, or " "modify the values present in the sdist." msgstr "" +"如果某个多次使用字段存在于 sdist 中且同时标记为 ``Dynamic``,那么由该 sdist " +"构建的 wheel 包必须包含 sdist 中已有的值。该 wheel 包可以添加更多值,但不得删" +"除、重排或修改 sdist 中已有的值。" #: ../source/specifications/core-metadata.rst:135 msgid "" @@ -15464,6 +17525,8 @@ msgid "" "should be treated as if they were specified with ``Dynamic`` (i.e. there are " "no special restrictions on the metadata of wheels built from the sdist)." msgstr "" +"如果 sdist 的元数据版本低于 2.2,那么所有字段都应视为已用 ``Dynamic`` 指定(" +"即由该 sdist 构建的 wheel 包的元数据不受特殊限制)。" #: ../source/specifications/core-metadata.rst:139 msgid "" @@ -15472,6 +17535,8 @@ msgid "" "build time, and may not be the same as the value in the sdist or in other " "wheels for the project." msgstr "" +"在源分发以外的任何上下文中,``Dynamic`` 仅用于提供信息,表示该字段的值是在构" +"建 wheel 包时计算得出的,可能与 sdist 或该项目其他 wheel 包中的值不同。" #: ../source/specifications/core-metadata.rst:144 msgid "" @@ -15485,15 +17550,21 @@ msgid "" "build from that sdist, you cannot assume that the wheel's metadata matches " "that of the sdist, even if the field is not marked as ``Dynamic``." msgstr "" +"特别要注意,如果你获得了预构建的 wheel 包,你不能认为未标记为 ``Dynamic`` 的" +"字段在其他 wheel 包中具有相同的值,因为有些 wheel 包并非直接从 sdist 构建,而" +"是由现有的 wheel 包修改而来(例如 ``auditwheel`` 工具就会这样做,在为 PyPI 构" +"建 wheel 包时它很常用)。这类修改 *有可能* 包括更改元数据(甚至非动态元数据)" +"。类似地,如果你有一个 sdist 和一个并非由该 sdist 构建的 wheel 包,那么即使字" +"段未标记为 ``Dynamic``,你也不能认为该 wheel 包的元数据与 sdist 的一致。" #: ../source/specifications/core-metadata.rst:154 msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." -msgstr "" +msgstr "``Dynamic`` 语义的完整细节在 :pep:`643` 中描述。" #: ../source/specifications/core-metadata.rst:159 msgid "Platform (multiple use)" -msgstr "" +msgstr "Platform(多次使用)" #: ../source/specifications/core-metadata.rst:163 msgid "" @@ -15501,6 +17572,8 @@ msgid "" "distribution which is not listed in the \"Operating System\" Trove " "classifiers. See \"Classifier\" below." msgstr "" +"一条平台说明,用于描述分发包所支持的、但未列在 \"Operating System\" Trove 分" +"类器中的操作系统。参见下文的 \"Classifier\"。" #: ../source/specifications/core-metadata.rst:167 #: ../source/specifications/core-metadata.rst:473 @@ -15520,7 +17593,7 @@ msgstr "例子::" #: ../source/specifications/core-metadata.rst:175 msgid "Supported-Platform (multiple use)" -msgstr "" +msgstr "Supported-Platform(多次使用)" #: ../source/specifications/core-metadata.rst:179 msgid "" @@ -15529,6 +17602,9 @@ msgid "" "binary distribution was compiled. The semantics of the Supported-Platform " "field are not specified in this PEP." msgstr "" +"包含 PKG-INFO 文件的二进制分发会在其元数据中使用 Supported-Platform 字段,来" +"指定编译该二进制分发时所面向的操作系统和 CPU。本 PEP 未规定 Supported-" +"Platform 字段的语义。" #: ../source/specifications/core-metadata.rst:193 msgid "Summary" @@ -15536,11 +17612,11 @@ msgstr "总结" #: ../source/specifications/core-metadata.rst:197 msgid "A one-line summary of what the distribution does." -msgstr "" +msgstr "对分发包功能的一行式总结。" #: ../source/specifications/core-metadata.rst:217 msgid "This field may be specified in the message body instead." -msgstr "" +msgstr "此字段可以改为在消息主体中指定。" #: ../source/specifications/core-metadata.rst:220 msgid "" @@ -15549,6 +17625,8 @@ msgid "" "size for this field, though people shouldn't include their instruction " "manual as the description." msgstr "" +"对分发包更长的描述,可以长达数段。处理元数据的软件不应假设此字段有任何最大长" +"度限制,不过人们也不应把使用说明手册整个当作描述放进来。" #: ../source/specifications/core-metadata.rst:225 msgid "" @@ -15557,6 +17635,9 @@ msgid "" "optional; programs can also display the contents of the field as-is. This " "means that authors should be conservative in the markup they use." msgstr "" +"此字段的内容可以使用 reStructuredText 标记编写 [1]_。对于处理元数据的程序而言" +",支持标记是可选的;程序也可以按原样显示该字段的内容。这意味着作者在使用标记" +"时应该保持保守。" #: ../source/specifications/core-metadata.rst:231 msgid "" @@ -15565,6 +17646,9 @@ msgid "" "pipe (\"|\") char. As a result, the Description field is encoded into a " "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" +"为了在 RFC 822 格式下支持空行和带缩进的行,任何 CRLF 字符后面都必须缀上 7 个" +"空格和一个竖线(\"|\")字符。这样一来,Description 字段就被编码为一个可由 " +"RFC822 解析器解读的折叠字段 [2]_。" #: ../source/specifications/core-metadata.rst:248 msgid "" @@ -15572,6 +17656,8 @@ msgid "" "and a pipe char have to be replaced by a single CRLF when the field is " "unfolded using a RFC822 reader." msgstr "" +"这种编码意味着,当使用 RFC822 读取器展开该字段时,其中每一处“CRLF 后跟 7 个空" +"格和竖线字符”的出现都必须替换为单个 CRLF。" #: ../source/specifications/core-metadata.rst:252 msgid "" @@ -15579,16 +17665,20 @@ msgid "" "message body (i.e., after a completely blank line following the headers, " "with no indentation or other special formatting necessary)." msgstr "" +"或者,分发包的描述也可以改由消息主体提供(即位于头部之后的一个完全空行之后," +"无需缩进或其他特殊格式)。" #: ../source/specifications/core-metadata.rst:261 msgid "Description-Content-Type" -msgstr "" +msgstr "Description-Content-Type" #: ../source/specifications/core-metadata.rst:265 msgid "" "A string stating the markup syntax (if any) used in the distribution's " "description, so that tools can intelligently render the description." msgstr "" +"一个字符串,指明分发包描述中所使用的标记语法(如果有),以便工具能够智能地渲" +"染该描述。" #: ../source/specifications/core-metadata.rst:268 msgid "" @@ -15606,6 +17696,14 @@ msgid "" "possibility for PyPI and other tools to be able to render Markdown and other " "formats." msgstr "" +"历史上,PyPI 支持纯文本和 `reStructuredText (reST) `_ 格式的描述,并" +"能将 reST 渲染为 HTML。然而,分发包作者通常使用 `Markdown `_ 编写描述(:rfc:`7763`),因为许多代" +"码托管站点会渲染 Markdown README,作者便复用该文件作为描述。PyPI 无法识别这种" +"格式,因此不能正确渲染描述。这导致 PyPI 上出现了许多描述渲染不佳的软件包:" +"Markdown 被留作纯文本显示,甚至被尝试当作 reST 来渲染。此字段允许分发包作者指" +"定描述的格式,使 PyPI 和其他工具有可能渲染 Markdown 及其他格式。" #: ../source/specifications/core-metadata.rst:281 msgid "" @@ -15614,26 +17712,29 @@ msgid "" "Type.html>`_). Briefly, this means that it has a ``type/subtype`` part and " "then it can optionally have a number of parameters:" msgstr "" +"此字段的格式与 HTTP 中的 ``Content-Type`` 头部相同(即:`RFC 1341 `_)。简而言之,它包含一个 " +"``type/subtype`` 部分,其后还可以带有若干参数:" #: ../source/specifications/core-metadata.rst:287 msgid "Format::" -msgstr "" +msgstr "格式::" #: ../source/specifications/core-metadata.rst:291 msgid "The ``type/subtype`` part has only a few legal values:" -msgstr "" +msgstr "``type/subtype`` 部分只有少数几个合法值:" #: ../source/specifications/core-metadata.rst:293 msgid "``text/plain``" -msgstr "" +msgstr "``text/plain``" #: ../source/specifications/core-metadata.rst:294 msgid "``text/x-rst``" -msgstr "" +msgstr "``text/x-rst``" #: ../source/specifications/core-metadata.rst:295 msgid "``text/markdown``" -msgstr "" +msgstr "``text/markdown``" #: ../source/specifications/core-metadata.rst:297 msgid "" @@ -15641,6 +17742,8 @@ msgid "" "the description. The only legal value is ``UTF-8``. If omitted, it is " "assumed to be ``UTF-8``." msgstr "" +"``charset`` 参数可用于指定描述的字符编码。唯一合法的值是 ``UTF-8``。如果省略" +",则假定为 ``UTF-8``。" #: ../source/specifications/core-metadata.rst:301 msgid "" @@ -15649,14 +17752,17 @@ msgid "" "allows specifying the variant of Markdown in use (defaults to ``GFM`` if not " "specified). Currently, two variants are recognized:" msgstr "" +"其他参数可能特定于所选择的子类型。例如,对于 ``markdown`` 子类型,有一个可选" +"的 ``variant`` 参数,用于指定所使用的 Markdown 变体(未指定时默认为 ``GFM``)" +"。目前可识别的变体有两种:" #: ../source/specifications/core-metadata.rst:306 msgid "``GFM`` for :rfc:`GitHub-flavored Markdown <7764#section-3.2>`" -msgstr "" +msgstr "``GFM`` 表示 :rfc:`GitHub-flavored Markdown <7764#section-3.2>`" #: ../source/specifications/core-metadata.rst:307 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" -msgstr "" +msgstr "``CommonMark`` 表示 :rfc:`CommonMark <7764#section-3.5>`" #: ../source/specifications/core-metadata.rst:325 msgid "" @@ -15664,6 +17770,8 @@ msgid "" "attempt to render it as ``text/x-rst; charset=UTF-8`` and fall back to " "``text/plain`` if it is not valid rst." msgstr "" +"如果未指定 ``Description-Content-Type``,那么应用程序应该尝试将其按 ``text/x-" +"rst; charset=UTF-8`` 渲染,并在它不是有效 rst 时回退为 ``text/plain``。" #: ../source/specifications/core-metadata.rst:329 msgid "" @@ -15671,6 +17779,8 @@ msgid "" "content type is ``text/plain`` (Although PyPI will probably reject anything " "with an unrecognized value)." msgstr "" +"如果 ``Description-Content-Type`` 是无法识别的值,那么假定的内容类型为 " +"``text/plain`` (尽管 PyPI 很可能会拒绝任何带有无法识别值的内容)。" #: ../source/specifications/core-metadata.rst:333 msgid "" @@ -15678,6 +17788,8 @@ msgid "" "not specified or is set to an unrecognized value, then the assumed " "``variant`` is ``GFM``." msgstr "" +"如果 ``Description-Content-Type`` 为 ``text/markdown``,且 ``variant`` 未指定" +"或设为无法识别的值,那么假定的 ``variant`` 为 ``GFM``。" #: ../source/specifications/core-metadata.rst:337 msgid "" @@ -15685,16 +17797,18 @@ msgid "" "``variant`` defaults to ``GFM`` and thus it is equivalent to the example " "before it." msgstr "" +"因此,对于上面的最后一个示例,``charset`` 默认为 ``UTF-8``,``variant`` 默认" +"为 ``GFM``,因而它与其前一个示例等价。" #: ../source/specifications/core-metadata.rst:346 msgid "Keywords" -msgstr "" +msgstr "关键词" #: ../source/specifications/core-metadata.rst:350 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." -msgstr "" +msgstr "一个由附加关键字组成的列表,以逗号分隔,用于帮助在更大的目录中搜索该分发包。" #: ../source/specifications/core-metadata.rst:359 msgid "" @@ -15703,33 +17817,38 @@ msgid "" "very widely used for many years, so it was easier to update the " "specification to match the de facto standard." msgstr "" +"该规范早先展示的关键字是以空格分隔的,但 distutils 和 setuptools 在实现时使用" +"的是逗号。这些工具多年来已被非常广泛地使用,因此更新规范以匹配事实上的标准会" +"更容易。" #: ../source/specifications/core-metadata.rst:368 msgid "Author" -msgstr "" +msgstr "Author" #: ../source/specifications/core-metadata.rst:372 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." -msgstr "" +msgstr "一个至少包含作者姓名的字符串;也可以提供额外的联系信息。" #: ../source/specifications/core-metadata.rst:385 msgid "Author-email" -msgstr "" +msgstr "Author-email" #: ../source/specifications/core-metadata.rst:389 msgid "" "A string containing the author's e-mail address. It can contain a name and " "e-mail address in the legal forms for a RFC-822 ``From:`` header." msgstr "" +"一个包含作者电子邮件地址的字符串。它可以包含符合 RFC-822 ``From:`` 头部合法形" +"式的姓名和电子邮件地址。" #: ../source/specifications/core-metadata.rst:397 #: ../source/specifications/core-metadata.rst:444 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" -msgstr "" +msgstr "根据 RFC-822,此字段可以包含多个以英文逗号分隔的电子邮件地址::" #: ../source/specifications/core-metadata.rst:407 msgid "Maintainer" @@ -15739,7 +17858,7 @@ msgstr "维护者" msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." -msgstr "" +msgstr "一个至少包含维护者姓名的字符串;也可以提供额外的联系信息。" #: ../source/specifications/core-metadata.rst:414 msgid "" @@ -15747,16 +17866,20 @@ msgid "" "by someone other than the original author: it should be omitted if it is " "identical to ``Author``." msgstr "" +"请注意,此字段适用于项目由原作者之外的其他人维护的情况:如果它与 ``Author`` " +"相同,则应该省略。" #: ../source/specifications/core-metadata.rst:428 msgid "Maintainer-email" -msgstr "" +msgstr "Maintainer-email" #: ../source/specifications/core-metadata.rst:432 msgid "" "A string containing the maintainer's e-mail address. It can contain a name " "and e-mail address in the legal forms for a RFC-822 ``From:`` header." msgstr "" +"一个包含维护者电子邮件地址的字符串。它可以包含符合 RFC-822 ``From:`` 头部合法" +"形式的姓名和电子邮件地址。" #: ../source/specifications/core-metadata.rst:436 msgid "" @@ -15764,14 +17887,16 @@ msgid "" "by someone other than the original author: it should be omitted if it is " "identical to ``Author-email``." msgstr "" +"请注意,此字段适用于项目由原作者之外的其他人维护的情况:如果它与 ``Author-" +"email`` 相同,则应该省略。" #: ../source/specifications/core-metadata.rst:454 msgid "License" -msgstr "" +msgstr "License" #: ../source/specifications/core-metadata.rst:457 msgid "in favour of ``License-Expression``." -msgstr "" +msgstr "改用 ``License-Expression``。" #: ../source/specifications/core-metadata.rst:461 msgid "" @@ -15780,6 +17905,9 @@ msgid "" "``License`` and PyPI will reject uploads. See `PEP 639 `__." msgstr "" +"自 Metadata 2.4 起,``License`` 与 ``License-Expression`` 互斥。如果两者都指" +"定了,解析元数据的工具会忽略 ``License``,并且 PyPI 将拒绝上传。参见 `PEP " +"639 `__。" #: ../source/specifications/core-metadata.rst:466 msgid "" @@ -15790,16 +17918,22 @@ msgid "" "``Classifier`` field, or to indicate a variation or exception to such a " "license." msgstr "" +"一段文本,用于说明分发包适用的许可证,适用于该许可证并非从 \"License\" Trove " +"分类器中选取的情况。参见下文的 :ref:`\"Classifier\" `。" +"此字段还可用于指定经由 ``Classifier`` 字段指明的某个许可证的特定版本,或指出" +"对该许可证的变体或例外情况。" #: ../source/specifications/core-metadata.rst:486 msgid "License-Expression" -msgstr "" +msgstr "License-Expression" #: ../source/specifications/core-metadata.rst:490 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" +"一个有效的 SPDX :term:`许可证表达式 ` 文本字符串,具体规" +"定见 :doc:`/specifications/license-expression`。" #: ../source/specifications/core-metadata.rst:494 msgid "" @@ -15809,10 +17943,14 @@ msgid "" "or :term:`Wheel`), not the project overall or other files related to the " "project (including other distribution archives)." msgstr "" +"请注意,此字段中的表达式仅适用于包含该字段元数据的 :term:`Distribution " +"Archive`,例如 :term:`源分发 ` 或 " +":term:`Wheel`,而不适用于整个项目或与项目相关的其他文件(包括其他分发归档文件" +")。" #: ../source/specifications/core-metadata.rst:515 msgid "License-File (multiple use)" -msgstr "" +msgstr "License-File(可多次使用)" #: ../source/specifications/core-metadata.rst:519 msgid "" @@ -15820,10 +17958,12 @@ msgid "" "The path is located within the project source tree, relative to the project " "root directory. For details see :pep:`639`." msgstr "" +"每个条目都是一个字符串,表示许可证相关文件的路径。该路径位于项目源码树内,相" +"对于项目根目录。详情参见 :pep:`639`。" #: ../source/specifications/core-metadata.rst:536 msgid "Classifier (multiple use)" -msgstr "" +msgstr "Classifier(可多次使用)" #: ../source/specifications/core-metadata.rst:540 msgid "" @@ -15832,6 +17972,9 @@ msgid "" "Package Index publishes a dynamic list of `currently defined classifiers " "`__." msgstr "" +"每个条目都是一个字符串,为分发包给出一个分类值。分类器在 :pep:`301` 中有所描" +"述,Python 包索引则发布动态维护的 `当前已定义的分类器 `__ 列表。" #: ../source/specifications/core-metadata.rst:546 msgid "" @@ -15839,17 +17982,20 @@ msgid "" "``License-Expression`` instead. See `PEP 639 `_." msgstr "" +"自 Metadata 2.4 起,``License ::`` 分类器已被弃用,请改用 ``License-" +"Expression``。参见 `PEP 639 `_。" #: ../source/specifications/core-metadata.rst:550 #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:879 #: ../source/specifications/core-metadata.rst:904 msgid "This field may be followed by an environment marker after a semicolon." -msgstr "" +msgstr "此字段可以在分号后跟一个环境标记。" #: ../source/specifications/core-metadata.rst:561 msgid "Requires-Dist (multiple use)" -msgstr "" +msgstr "Requires-Dist(可多次使用)" #: ../source/specifications/core-metadata.rst:564 #: ../source/specifications/core-metadata.rst:627 @@ -15858,23 +18004,23 @@ msgstr "" msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." -msgstr "" +msgstr "该字段的格式规范已放宽,以接受流行的发布工具所使用的语法。" #: ../source/specifications/core-metadata.rst:568 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." -msgstr "" +msgstr "每个条目包含一个字符串,给出此分发包所需的某个其他 distutils 项目的名称。" #: ../source/specifications/core-metadata.rst:571 msgid "The format of a requirement string contains from one to four parts:" -msgstr "" +msgstr "需求字符串的格式包含一到四个部分:" #: ../source/specifications/core-metadata.rst:573 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." -msgstr "" +msgstr "项目名称,格式与 ``Name:`` 字段相同。这是唯一必需的部分。" #: ../source/specifications/core-metadata.rst:575 msgid "" @@ -15883,35 +18029,40 @@ msgid "" "The names MUST conform to the restrictions specified by the ``Provides-" "Extra:`` field." msgstr "" +"一个以逗号分隔的“附加功能(extra)”名称列表。这些名称由被依赖的项目定义,指向" +"可能需要额外依赖项的特定功能。名称必须符合 ``Provides-Extra:`` 字段规定的限制" +"。" #: ../source/specifications/core-metadata.rst:579 msgid "" "A version specifier. Tools parsing the format should accept optional " "parentheses around this, but tools generating it should not use parentheses." msgstr "" +"一个版本说明符。解析该格式的工具应该接受其外面可选的圆括号,但生成该格式的工" +"具不应该使用圆括号。" #: ../source/specifications/core-metadata.rst:582 msgid "" "An environment marker after a semicolon. This means that the requirement is " "only needed in the specified conditions." -msgstr "" +msgstr "分号后面的环境标记。这表示该需求只在指定条件下才需要。" #: ../source/specifications/core-metadata.rst:585 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." -msgstr "" +msgstr "项目名称应该与 `Python Package Index`_ 上的名称相对应。" #: ../source/specifications/core-metadata.rst:588 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." -msgstr "" +msgstr "版本说明符必须遵循 :doc:`version-specifiers` 中描述的规则。" #: ../source/specifications/core-metadata.rst:591 msgid "" "See :ref:`dependency-specifiers` for full details of the allowed format." -msgstr "" +msgstr "关于允许格式的完整细节,请参见 :ref:`dependency-specifiers`。" #: ../source/specifications/core-metadata.rst:604 msgid "Requires-Python" @@ -15923,24 +18074,28 @@ msgid "" "compatible with. Installation tools may look at this when picking which " "version of a project to install." msgstr "" +"此字段指定该分发包兼容的 Python 版本。安装工具在选择要安装某个项目的哪个版本" +"时可以参考此字段。" #: ../source/specifications/core-metadata.rst:612 msgid "The value must be in the format specified in :doc:`version-specifiers`." -msgstr "" +msgstr "该值必须采用 :doc:`version-specifiers` 中规定的格式。" #: ../source/specifications/core-metadata.rst:614 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" +"例如,如果某个分发包使用了 :ref:`f-strings `,那么它可以通" +"过指定以下内容阻止在 Python < 3.6 上安装::" #: ../source/specifications/core-metadata.rst:619 msgid "This field cannot be followed by an environment marker." -msgstr "" +msgstr "此字段后面不能跟环境标记。" #: ../source/specifications/core-metadata.rst:624 msgid "Requires-External (multiple use)" -msgstr "" +msgstr "Requires-External(可多次使用)" #: ../source/specifications/core-metadata.rst:631 msgid "" @@ -15949,12 +18104,16 @@ msgid "" "to downstream project maintainers, and has no semantics which are meaningful " "to the ``distutils`` distribution." msgstr "" +"每个条目包含一个字符串,描述分发包将被使用的系统中的某个依赖项。此字段旨在为" +"下游项目维护者提供提示,对 ``distutils`` 分发包而言不具有有意义的语义。" #: ../source/specifications/core-metadata.rst:636 msgid "" "The format of a requirement string is a name of an external dependency, " "optionally followed by a version declaration within parentheses." msgstr "" +"需求字符串的格式是一个外部依赖项的名称,后面可以选择性地跟一个用圆括号括起的" +"版本声明。" #: ../source/specifications/core-metadata.rst:642 msgid "" @@ -15963,24 +18122,27 @@ msgid "" "the :ref:`Version specifier specification `: they should " "correspond to the version scheme used by the external dependency." msgstr "" +"由于它们指的是非 Python 软件的发布版本,此字段的版本号 **不** 需要遵循 " +":ref:`版本说明符规范 ` 中规定的格式:它们应该与外部依赖项" +"所使用的版本方案相对应。" #: ../source/specifications/core-metadata.rst:647 msgid "Notice that there is no particular rule on the strings to be used." -msgstr "" +msgstr "请注意,对所使用的字符串没有特定规则。" #: ../source/specifications/core-metadata.rst:659 msgid "Project-URL (multiple-use)" -msgstr "" +msgstr "Project-URL(可多次使用)" #: ../source/specifications/core-metadata.rst:663 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." -msgstr "" +msgstr "一个字符串,包含项目的一个可浏览 URL 及其标签,二者以逗号分隔。" #: ../source/specifications/core-metadata.rst:670 msgid "The label is free text limited to 32 characters." -msgstr "" +msgstr "标签是自由文本,长度限制为 32 个字符。" #: ../source/specifications/core-metadata.rst:672 msgid "" @@ -15989,10 +18151,13 @@ msgid "" "known\" labels, which can then be given special presentations when being " "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" +"从 :pep:`753` 开始,项目元数据的消费者(如 Python 包索引)可以使用标准的规范" +"化过程来发现“知名(well-known)”标签,这些标签在渲染供人阅读时可以被给予特殊" +"的展示效果。参见 :ref:`well-known-project-urls`。" #: ../source/specifications/core-metadata.rst:682 msgid "Provides-Extra (multiple use)" -msgstr "" +msgstr "Provides-Extra(可多次使用)" #: ../source/specifications/core-metadata.rst:685 msgid "" @@ -16000,6 +18165,8 @@ msgid "" "required). For older metadata versions, value restrictions were brought into " "line with ``Name:`` and normalization rules were introduced." msgstr "" +":pep:`685` 将有效值限制为无歧义的(即无需规范化)。对于较旧的元数据版本,值限" +"制已与 ``Name:`` 保持一致,并引入了规范化规则。" #: ../source/specifications/core-metadata.rst:690 msgid "" @@ -16009,12 +18176,15 @@ msgid "" "hyphen. Names are limited to those which match the following regex (which " "guarantees unambiguity)::" msgstr "" +"一个包含可选功能名称的字符串。有效名称只能由小写 ASCII 字母、ASCII 数字和连字" +"符组成。名称必须以字母或数字开头和结尾。连字符后面不能紧跟另一个连字符。名称" +"仅限于匹配以下正则表达式(这保证了无歧义性)的那些名称::" #: ../source/specifications/core-metadata.rst:698 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." -msgstr "" +msgstr "指定的名称可用于使某个依赖项以是否请求了该可选功能为条件。" #: ../source/specifications/core-metadata.rst:706 msgid "" @@ -16023,6 +18193,9 @@ msgid "" "comma (,). The requirements are evaluated for each requested feature and " "added to the set of requirements for the distribution." msgstr "" +"另一个分发包通过将可选依赖项放入方括号中来请求它,并且可以通过用逗号(,)分隔" +"来请求多个功能。需求会针对每个被请求的功能进行求值,并被加入到该分发包的需求" +"集合中。" #: ../source/specifications/core-metadata.rst:716 msgid "" @@ -16030,12 +18203,14 @@ msgid "" "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" +"``test`` 和 ``doc`` 这两个功能名称是保留的,分别用于标记运行自动化测试和生成" +"文档所需的依赖项。" #: ../source/specifications/core-metadata.rst:720 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." -msgstr "" +msgstr "指定 ``Provides-Extra:`` 而不在任何 ``Requires-Dist:`` 中引用它也是合法的。" #: ../source/specifications/core-metadata.rst:723 msgid "" @@ -16044,6 +18219,9 @@ msgid "" "comparisons. Tools writing metadata MUST raise an error if two ``Provides-" "Extra:`` entries would clash after being normalized." msgstr "" +"在为较旧的元数据版本写入数据时,名称必须按照 ``Name:`` 字段在执行比较时所用的" +"相同规则进行规范化。如果两个 ``Provides-Extra:`` 条目在规范化后会发生冲突,写" +"入元数据的工具必须抛出错误。" #: ../source/specifications/core-metadata.rst:728 msgid "" @@ -16054,10 +18232,14 @@ msgid "" "Tools MAY choose to raise an error when reading an invalid name for older " "metadata versions." msgstr "" +"在读取较旧元数据版本的数据时,如果此字段的值在较新的元数据版本下将是无效的," +"工具应该发出警告。如果某个值在任何核心元数据版本中按照 ``Name:`` 的规则都是无" +"效的,则应该警告用户并忽略该值,以避免歧义。对于较旧元数据版本中的无效名称," +"工具可以选择在读取时抛出错误。" #: ../source/specifications/core-metadata.rst:738 msgid "Import-Name (multiple use)" -msgstr "" +msgstr "Import-Name(可多次使用)" #: ../source/specifications/core-metadata.rst:742 msgid "" @@ -16068,6 +18250,10 @@ msgid "" "project. This implies that the metadata MUST be consistent across all sdists " "and wheels for a project release." msgstr "" +"一个包含导入名称的字符串,该名称由项目在安装后独占提供。指定的导入名称必须是" +"有效的 Python 标识符,或者可以为空。对于项目的同一版本,此字段中列出的导入名" +"称在项目安装到 *某些* 平台上时必须是可以导入的。这意味着,项目元数据在同一次" +"发布的所有 sdist 和 wheel 包中必须保持一致。" #: ../source/specifications/core-metadata.rst:749 #: ../source/specifications/core-metadata.rst:804 @@ -16077,6 +18263,9 @@ msgid "" "signals to tools that the import name is not part of the public API for the " "project." msgstr "" +"导入名称后面可以跟一个分号以及术语 \"private\"(例如 ``; private``),分号两" +"侧可以带有任意数量的空白。这会向工具表明,该导入名称不属于项目公开 API 的一部" +"分。" #: ../source/specifications/core-metadata.rst:754 #: ../source/specifications/core-metadata.rst:809 @@ -16086,6 +18275,9 @@ msgid "" "intervening names from that name to the top-level name SHOULD also be listed " "appropriately in ``Import-Name`` and/or ``Import-Namespace``." msgstr "" +"项目应该列出由该项目独占提供的所有最短导入名称。如果这些最短名称中有点分名称" +",那么从该名称到顶层名称之间的所有中间名称,也应该适当地列入 ``Import-Name`` " +"和/或 ``Import-Namespace``。" #: ../source/specifications/core-metadata.rst:759 #: ../source/specifications/core-metadata.rst:819 @@ -16093,6 +18285,8 @@ msgid "" "If a project lists the same name in both ``Import-Name`` and ``Import-" "Namespace``, tools MUST raise an error due to ambiguity." msgstr "" +"如果某个项目在 ``Import-Name`` 和 ``Import-Namespace`` 中列出了相同的名称,工" +"具必须因歧义而报错。" #: ../source/specifications/core-metadata.rst:762 msgid "" @@ -16104,6 +18298,10 @@ msgid "" "installing a project into a preexisting environment where there is import " "name overlap with a project that is already installed." msgstr "" +"当即将安装的两个项目在彼此的 ``Import-Name`` 条目中列出了重叠的名称,或者某个" +"项目在 ``Import-Name`` 中的条目与另一个项目的 ``Import-Namespace`` 条目重叠时" +",工具应该报错。这是为了避免项目意外遮蔽另一个项目的代码。在把项目安装到已有" +"环境、且存在与已安装项目的导入名称重叠的情况时,工具可以发出警告或报错。" #: ../source/specifications/core-metadata.rst:770 msgid "" @@ -16111,6 +18309,8 @@ msgid "" "represent a project with no import names (i.e. there are no Python modules " "of any kind in the distribution file)." msgstr "" +"项目的元数据中可以包含空的 ``Import-Name`` 字段,以表示没有任何导入名称的项目" +"(即分发包文件中不存在任何类型的 Python 模块)。" #: ../source/specifications/core-metadata.rst:774 msgid "" @@ -16123,10 +18323,16 @@ msgid "" "(e.g. ``packaging.utils.canonicalize_name(name, validate=True).replace(\"-" "\", \"_\")``) can be used if some answer is needed." msgstr "" +"由于项目可以没有 ``Import-Name`` 元数据(要么是因为项目使用了较旧的元数据版本" +",要么是因为它没有指定任何导入名称),工具便无从得知该项目提供了哪些名称。不" +"过在实践中,大多数项目的项目名称都与它们的导入名称相一致。因此,做一个合理的" +"假设是:在需要给出某种答案时,可以使用按某种方式规范化为导入名称的项目名称(" +"例如 ``packaging.utils.canonicalize_name(name, validate=True).replace(\"-\", " +"\"_\")``)。" #: ../source/specifications/core-metadata.rst:794 msgid "Import-Namespace (multiple use)" -msgstr "" +msgstr "Import-Namespace(可多次使用)" #: ../source/specifications/core-metadata.rst:798 msgid "" @@ -16137,6 +18343,10 @@ msgid "" "the same import name in ``Import-Namespace`` can be installed together " "without shadowing each other." msgstr "" +"一个包含导入名称的字符串,该名称由项目在安装后提供,但并非独占提供。指定的导" +"入名称必须是有效的 Python 标识符。此字段用于命名空间包,即多个项目可以为同一" +"个导入命名空间做出贡献的情形。多个项目都在 ``Import-Namespace`` 中列出同一个" +"导入名称时,可以安装在一起而不会相互遮蔽。" #: ../source/specifications/core-metadata.rst:814 msgid "" @@ -16145,14 +18355,17 @@ msgid "" "implies that the metadata MUST be consistent across all sdists and wheels " "for a project release." msgstr "" +"对于项目的同一版本,此字段中列出的导入名称在项目安装到 *某些* 平台上时必须是" +"可以导入的。这意味着,项目元数据在同一次发布的所有 sdist 和 wheel 包中必须保" +"持一致。" #: ../source/specifications/core-metadata.rst:822 msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." -msgstr "" +msgstr "注意,``Import-Namespace`` 不能像 ``Import-Name`` 那样为空。" #: ../source/specifications/core-metadata.rst:831 msgid "Rarely Used Fields" -msgstr "" +msgstr "很少使用的字段" #: ../source/specifications/core-metadata.rst:833 msgid "" @@ -16161,6 +18374,9 @@ msgid "" "it isn't at all clear how tools should interpret them in the context of an " "open index server such as `PyPI `__." msgstr "" +"本节中的这些字段目前很少使用,因为它们的设计借鉴了 Linux 软件包管理系统中类似" +"的机制,而且在 `PyPI `__ 这样的开放索引服务器的环境下,工具" +"应如何解读这些字段也完全不明确。" #: ../source/specifications/core-metadata.rst:838 msgid "" @@ -16171,10 +18387,14 @@ msgid "" "used for their originally intended purpose in combination with a curated " "package repository." msgstr "" +"因此,流行的安装工具会完全忽略这些字段,这反过来又意味着软件包发布者几乎没有" +"什么动力去恰当地设置它们。不过,它们仍保留在元数据规范中,因为它们对于信息展" +"示用途仍有潜在价值,而且与经过人工维护的软件包仓库结合使用时,也可以用于其最" +"初的预期用途。" #: ../source/specifications/core-metadata.rst:848 msgid "Provides-Dist (multiple use)" -msgstr "" +msgstr "Provides-Dist(可多次使用)" #: ../source/specifications/core-metadata.rst:855 msgid "" @@ -16182,6 +18402,8 @@ msgid "" "within this distribution. This field *must* include the project identified " "in the ``Name`` field, followed by the version : Name (Version)." msgstr "" +"每个条目包含一个字符串,给出包含在此分发包中的某个 Distutils 项目的名称。此字" +"段 *必须* 包含 ``Name`` 字段所标识的项目,后面跟版本号,即:Name (Version)。" #: ../source/specifications/core-metadata.rst:860 msgid "" @@ -16191,6 +18413,10 @@ msgid "" "which is now available as a separate distribution. Installing such a source " "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" +"分发包还可以提供额外的名称,例如用来表明多个项目被打包在了一起。举例来说" +",``ZODB`` 项目的源分发在历史上曾包含 ``transaction`` 项目,而后者现在已作为" +"单独的分发包提供。安装这样的源分发即可同时满足对 ``ZODB`` 和 ``transaction`` " +"两者的需求。" #: ../source/specifications/core-metadata.rst:867 msgid "" @@ -16202,6 +18428,10 @@ msgid "" "bindings``, allowing other projects to depend only on having at most one of " "them installed." msgstr "" +"分发包还可以提供一个“虚拟”项目名称,它不对应任何单独分发的项目:这样的名称可" +"以用来表示一种抽象能力,而该能力可以由多个项目中的某一个提供。例如,多个项目" +"都可以为某个给定的 ORM 提供 RDBMS 绑定:每个项目都可以声明自己提供 ``ORM-" +"bindings``,从而让其他项目只需依赖于“至多安装其中之一”这一条件。" #: ../source/specifications/core-metadata.rst:875 msgid "" @@ -16209,10 +18439,12 @@ msgid "" "in :doc:`version-specifiers`. The distribution's version number will be " "implied if none is specified." msgstr "" +"可以提供版本声明,且该声明必须遵循 :doc:`version-specifiers` 中所述的规则。如" +"果未指定版本,则隐含使用分发包的版本号。" #: ../source/specifications/core-metadata.rst:890 msgid "Obsoletes-Dist (multiple use)" -msgstr "" +msgstr "Obsoletes-Dist(可多次使用)" #: ../source/specifications/core-metadata.rst:897 msgid "" @@ -16220,12 +18452,14 @@ msgid "" "which this distribution renders obsolete, meaning that the two projects " "should not be installed at the same time." msgstr "" +"每个条目包含一个字符串,描述由此分发包淘汰的某个 distutils 项目的分发包,也就" +"是说这两个项目不应该同时安装。" #: ../source/specifications/core-metadata.rst:901 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." -msgstr "" +msgstr "可以提供版本声明。版本号必须采用 :doc:`version-specifiers` 中规定的格式。" #: ../source/specifications/core-metadata.rst:906 msgid "" @@ -16233,10 +18467,12 @@ msgid "" "e.g. Gorgon 2.3 gets subsumed into Torqued Python 1.0. When you install " "Torqued Python, the Gorgon distribution should be removed." msgstr "" +"此字段最常见的用途是项目名称发生变更的情况,例如 Gorgon 2.3 被并入 Torqued " +"Python 1.0。当你安装 Torqued Python 时,应当移除 Gorgon 分发包。" #: ../source/specifications/core-metadata.rst:919 msgid "Deprecated Fields" -msgstr "" +msgstr "已弃用的字段" #: ../source/specifications/core-metadata.rst:921 msgid "" @@ -16246,23 +18482,26 @@ msgid "" "prior to the removal). Tools SHOULD warn users when deprecated fields are " "used." msgstr "" +"应当避免使用已弃用的字段,但它们仍是有效的元数据字段。它们可能会在核心元数据" +"标准的未来版本中被移除(届时,它们将只在所声明的元数据版本早于移除时所涉版本" +"的文件中仍然有效)。当使用了已弃用的字段时,工具应该警告用户。" #: ../source/specifications/core-metadata.rst:930 msgid "Home-page" -msgstr "" +msgstr "Home-page" #: ../source/specifications/core-metadata.rst:936 #: ../source/specifications/core-metadata.rst:953 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." -msgstr "" +msgstr "根据 :pep:`753`,请改用 :ref:`core-metadata-project-url`。" #: ../source/specifications/core-metadata.rst:938 msgid "A string containing the URL for the distribution's home page." -msgstr "" +msgstr "一个包含分发包主页 URL 的字符串。" #: ../source/specifications/core-metadata.rst:947 msgid "Download-URL" -msgstr "" +msgstr "Download-URL" #: ../source/specifications/core-metadata.rst:955 msgid "" @@ -16271,6 +18510,9 @@ msgid "" "BeagleVote-latest.tgz``\", but instead must be \"``.../" "BeagleVote-0.45.tgz``\".)" msgstr "" +"一个包含该版本分发包下载 URL 的字符串。(也就是说,URL 不能是类似 \"``.../" +"BeagleVote-latest.tgz``\" 这样的形式,而必须是 \"``.../BeagleVote-" +"0.45.tgz``\"。)" #: ../source/specifications/core-metadata.rst:961 msgid "Requires" @@ -16278,13 +18520,13 @@ msgstr "要求" #: ../source/specifications/core-metadata.rst:964 msgid "in favour of ``Requires-Dist``" -msgstr "" +msgstr "改用 ``Requires-Dist``" #: ../source/specifications/core-metadata.rst:967 msgid "" "Each entry contains a string describing some other module or package " "required by this package." -msgstr "" +msgstr "每个条目包含一个字符串,描述此软件包所需的某个其他模块或软件包。" #: ../source/specifications/core-metadata.rst:970 msgid "" @@ -16292,6 +18534,8 @@ msgid "" "package name usable with the ``import`` statement, optionally followed by a " "version declaration within parentheses." msgstr "" +"需求字符串的格式与可用于 ``import`` 语句的模块或软件包名称的格式相同,后面可" +"以选择性地在圆括号内跟一个版本声明。" #: ../source/specifications/core-metadata.rst:974 msgid "" @@ -16303,32 +18547,41 @@ msgid "" "on the end consisting of the letter 'a' or 'b' followed by a number. Example " "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" +"版本声明是一系列由逗号分隔的条件运算符和版本号。条件运算符必须是 \"<\"、\">" +"\"'、\"<=\"、\">=\"、\"==\" 和 \"!=\" 之一。版本号必须采用 " +"``distutils.version.StrictVersion`` 类所接受的格式:两到三个以点分隔的数字部" +"分,末尾可带一个可选的“预发布”标签,该标签由字母 'a' 或 'b' 后跟一个数字组成" +"。版本号的示例有 \"1.0\"、\"2.3a2\"、\"1.3.99\"," #: ../source/specifications/core-metadata.rst:982 msgid "" "Any number of conditional operators can be specified, e.g. the string " "\">1.0, !=1.3.4, <2.0\" is a legal version declaration." msgstr "" +"可以指定任意数量的条件运算符,例如字符串 \">1.0, !=1.3.4, <2.0\" 就是一个合法" +"的版本声明。" #: ../source/specifications/core-metadata.rst:985 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." -msgstr "" +msgstr "以下都是可能的需求字符串:\"rfc822\"、\"zlib (>=1.1.4)\"、\"zope\"。" #: ../source/specifications/core-metadata.rst:988 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." msgstr "" +"对于应该使用哪些字符串,并没有一份权威清单;Python 社区可以自行选择自己的标准" +"。" #: ../source/specifications/core-metadata.rst:1001 msgid "Provides" -msgstr "" +msgstr "Provides" #: ../source/specifications/core-metadata.rst:1004 msgid "in favour of ``Provides-Dist``" -msgstr "" +msgstr "改用 ``Provides-Dist``" #: ../source/specifications/core-metadata.rst:1007 msgid "" @@ -16338,14 +18591,17 @@ msgid "" "(without a comparison operator); the package’s version number will be " "implied if none is specified." msgstr "" +"每个条目包含一个字符串,描述此软件包安装后将提供的某个软件包或模块。这些字符" +"串应该与 Requirements 字段中使用的字符串相匹配。可以提供版本声明(不带比较运" +"算符);如果未指定,则隐含使用该软件包的版本号。" #: ../source/specifications/core-metadata.rst:1023 msgid "Obsoletes" -msgstr "" +msgstr "Obsoletes" #: ../source/specifications/core-metadata.rst:1026 msgid "in favour of ``Obsoletes-Dist``" -msgstr "" +msgstr "改用 ``Obsoletes-Dist``" #: ../source/specifications/core-metadata.rst:1029 msgid "" @@ -16353,6 +18609,8 @@ msgid "" "package renders obsolete, meaning that the two packages should not be " "installed at the same time. Version declarations can be supplied." msgstr "" +"每个条目包含一个字符串,描述会被此软件包淘汰的某个软件包或模块,也就是说这两" +"个软件包不应该同时安装。可以提供版本声明。" #: ../source/specifications/core-metadata.rst:1033 msgid "" @@ -16360,86 +18618,92 @@ msgid "" "e.g. Gorgon 2.3 gets subsumed into Torqued Python 1.0. When you install " "Torqued Python, the Gorgon package should be removed." msgstr "" +"此字段最常见的用途是软件包名称发生变更的情况,例如 Gorgon 2.3 被并入 Torqued " +"Python 1.0。当你安装 Torqued Python 时,应当移除 Gorgon 软件包。" #: ../source/specifications/core-metadata.rst:1045 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." -msgstr "" +msgstr "2001 年 3 月:核心元数据 1.0 通过 :pep:`241` 获得批准。" #: ../source/specifications/core-metadata.rst:1047 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." -msgstr "" +msgstr "2003 年 4 月:核心元数据 1.1 通过 :pep:`314` 获得批准。" #: ../source/specifications/core-metadata.rst:1049 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." -msgstr "" +msgstr "2010 年 2 月:核心元数据 1.2 通过 :pep:`345` 获得批准。" #: ../source/specifications/core-metadata.rst:1051 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." -msgstr "" +msgstr "2018 年 2 月:核心元数据 2.1 通过 :pep:`566` 获得批准。" #: ../source/specifications/core-metadata.rst:1053 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." -msgstr "" +msgstr "添加了 ``Description-Content-Type`` 和 ``Provides-Extra``。" #: ../source/specifications/core-metadata.rst:1054 msgid "Added canonical method for transforming metadata to JSON." -msgstr "" +msgstr "添加了将元数据转换为 JSON 的规范方法。" #: ../source/specifications/core-metadata.rst:1055 msgid "Restricted the grammar of the ``Name`` field." -msgstr "" +msgstr "限制了 ``Name`` 字段的语法。" #: ../source/specifications/core-metadata.rst:1057 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." -msgstr "" +msgstr "2020 年 10 月:核心元数据 2.2 通过 :pep:`643` 获得批准。" #: ../source/specifications/core-metadata.rst:1059 msgid "Added the ``Dynamic`` field." -msgstr "" +msgstr "添加了 ``Dynamic`` 字段。" #: ../source/specifications/core-metadata.rst:1061 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." -msgstr "" +msgstr "2022 年 3 月:核心元数据 2.3 通过 :pep:`685` 获得批准。" #: ../source/specifications/core-metadata.rst:1063 msgid "Restricted extra names to be normalized." -msgstr "" +msgstr "限制附加功能(extra)名称必须规范化。" #: ../source/specifications/core-metadata.rst:1065 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." -msgstr "" +msgstr "2024 年 8 月:核心元数据 2.4 通过 :pep:`639` 获得批准。" #: ../source/specifications/core-metadata.rst:1067 msgid "Added the ``License-Expression`` field." -msgstr "" +msgstr "添加了 ``License-Expression`` 字段。" #: ../source/specifications/core-metadata.rst:1068 msgid "Added the ``License-File`` field." -msgstr "" +msgstr "添加了 ``License-File`` 字段。" #: ../source/specifications/core-metadata.rst:1070 msgid "" "August 2025: Clarified that ``Dynamic`` only affects how fields must be " "treated when building a wheel from a sdist, not when modifying a wheel." msgstr "" +"2025 年 8 月:澄清了 ``Dynamic`` 只影响从 sdist 构建 wheel 包时各字段必须受到" +"的处理方式,而不影响修改 wheel 包时的处理方式。" #: ../source/specifications/core-metadata.rst:1074 msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." -msgstr "" +msgstr "2025 年 9 月:核心元数据 2.5 通过 :pep:`794` 获得批准。" #: ../source/specifications/core-metadata.rst:1076 msgid "Added the ``Import-Name`` field." -msgstr "" +msgstr "添加了 ``Import-Name`` 字段。" #: ../source/specifications/core-metadata.rst:1077 msgid "Added the ``Import-Namespace`` field." -msgstr "" +msgstr "添加了 ``Import-Namespace`` 字段。" #: ../source/specifications/core-metadata.rst:1079 msgid "" "October 2025: Clarified that ``License-Expression`` applies to the " "containing distribution file and not the project itself." msgstr "" +"2025 年 10 月:澄清了 ``License-Expression`` 适用于所在的分发文件,而非项目本" +"身。" #: ../source/specifications/core-metadata.rst:1082 #: ../source/specifications/pyproject-toml.rst:715 @@ -16447,10 +18711,12 @@ msgid "" "January 2026: Replaced outdated direct reference to :pep:`508` with a " "reference to :ref:`dependency-specifiers`." msgstr "" +"2026 年 1 月:将过时的对 :pep:`508` 的直接引用替换为对 :ref:`dependency-" +"specifiers` 的引用。" #: ../source/specifications/core-metadata.rst:1085 msgid "May 2026: Core metadata 2.6 was approved through :pep:`808`." -msgstr "" +msgstr "2026 年 5 月:核心元数据 2.6 已通过 :pep:`808` 获得批准。" #: ../source/specifications/core-metadata.rst:1087 msgid "" @@ -16458,14 +18724,16 @@ msgid "" "built from a sdist, requiring the wheel to preserve the value(s) present in " "the sdist." msgstr "" +"允许在从源分发构建的 wheel 包中对标记为 ``Dynamic`` 的可多次使用字段进行追加" +",并要求该 wheel 包保留源分发中已有的值。" #: ../source/specifications/core-metadata.rst:1093 msgid "reStructuredText markup: https://docutils.sourceforge.io/" -msgstr "reStructuredText 标记:https://docutils.sourceforge.io/" +msgstr "`reStructuredText 标记 `_" #: ../source/specifications/core-metadata.rst:1098 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" -msgstr "" +msgstr "RFC 822 长头部字段::rfc:`822#section-3.1.1`" #: ../source/specifications/dependency-groups.rst:5 msgid "Dependency Groups" @@ -16477,6 +18745,8 @@ msgid "" "package requirements in ``pyproject.toml`` files such that they are not " "included in project metadata when it is built." msgstr "" +"本规范定义了依赖群:一种将软件包需求存储在 ``pyproject.toml`` 文件中的机制," +"使这些需求在项目构建时不会被包含进项目元数据。" #: ../source/specifications/dependency-groups.rst:11 msgid "" @@ -16484,6 +18754,8 @@ msgid "" "linting and testing, as well as for projects which are not built for " "distribution, like collections of related scripts." msgstr "" +"依赖群适用于诸如代码检查(linting)和测试之类的内部开发用途,也适用于不会构建" +"为分发包的项目,比如相关脚本的集合。" #: ../source/specifications/dependency-groups.rst:15 msgid "" @@ -16491,20 +18763,22 @@ msgid "" "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" +"从根本上说,应当把依赖群视为 ``requirements.txt`` 文件(这些文件是 ``pip`` 专" +"有的)能力的一个标准化子集。" #: ../source/specifications/dependency-groups.rst:25 msgid "This is a simple table which shows ``docs`` and ``test`` groups::" -msgstr "" +msgstr "这是一个展示 ``docs`` 和 ``test`` 群组的简单表格::" #: ../source/specifications/dependency-groups.rst:31 msgid "" "and a similar table which defines ``docs``, ``test``, and ``coverage`` " "groups::" -msgstr "" +msgstr "而下面这个类似的表格则定义了 ``docs``、``test`` 和 ``coverage`` 群组::" #: ../source/specifications/dependency-groups.rst:39 msgid "The ``[dependency-groups]`` Table" -msgstr "" +msgstr "``[dependency-groups]`` 表格" #: ../source/specifications/dependency-groups.rst:41 msgid "" @@ -16513,6 +18787,9 @@ msgid "" "number of user-defined keys, each of which has, as its value, a list of " "requirements." msgstr "" +"依赖群被定义为 ``pyproject.toml`` 中一个名为 ``dependency-groups`` 的表格" +"。``dependency-groups`` 表格包含任意数量的用户自定义键,每个键的值都是一个需" +"求列表。" #: ../source/specifications/dependency-groups.rst:46 msgid "" @@ -16521,6 +18798,9 @@ msgid "" "Dependency Groups MUST :ref:`normalize ` these names " "before comparisons." msgstr "" +"``[dependency-groups]`` 的键(有时也称为“群组名”)必须是 :ref:`有效的未规范化" +"名称 `。处理依赖群的工具必须在比较之前 :ref:`规范化 ` 这些名称。" #: ../source/specifications/dependency-groups.rst:51 msgid "" @@ -16528,6 +18808,8 @@ msgid "" "and if duplicate names are detected after normalization, tools SHOULD emit " "an error." msgstr "" +"工具应该优先向用户展示原始的、未规范化的名称;如果在规范化之后检测到重复的名" +"称,则工具应该报错。" #: ../source/specifications/dependency-groups.rst:55 msgid "" @@ -16536,6 +18818,9 @@ msgid "" "Strings must be valid :ref:`dependency specifiers `, " "and tables must be valid Dependency Group Includes." msgstr "" +"需求列表(即 ``[dependency-groups]`` 中的值)可以包含字符串、表格(Python 中" +"的 ``dict``)或者字符串与表格的混合。字符串必须是有效的 :ref:`依赖说明符 " +"`,表格必须是有效的依赖群包括。" #: ../source/specifications/dependency-groups.rst:61 msgid "Dependency Group Include" @@ -16545,13 +18830,15 @@ msgstr "依赖群包括" msgid "" "A Dependency Group Include includes another Dependency Group in the current " "group." -msgstr "" +msgstr "依赖群包括(Dependency Group Include)会把另一个依赖群包含到当前群组中。" #: ../source/specifications/dependency-groups.rst:66 msgid "" "An include is a table with exactly one key, ``\"include-group\"``, whose " "value is a string, the name of another Dependency Group." msgstr "" +"包括项是一个表格,它恰好只有一个键 ``\"include-group\"``,其值为一个字符串," +"即另一个依赖群的名称。" #: ../source/specifications/dependency-groups.rst:69 msgid "" @@ -16562,6 +18849,10 @@ msgid "" "evaluate to ``[\"c\", \"a\", \"b\", \"d\"]`` when Dependency Group Includes " "are expanded." msgstr "" +"包括项的定义是:它与所指名的依赖群的内容完全等价,这些内容会被插入到当前群组" +"中该包括项所在的位置。例如,如果 ``foo = [\"a\", \"b\"]`` 是一个群组,而 " +"``bar = [\"c\", {include-group = \"foo\"}, \"d\"]`` 是另一个群组,那么当依赖" +"群包括被展开时, ``bar`` 的求值结果应该是 ``[\"c\", \"a\", \"b\", \"d\"]``。" #: ../source/specifications/dependency-groups.rst:75 msgid "" @@ -16569,6 +18860,8 @@ msgid "" "SHOULD NOT deduplicate or otherwise alter the list contents produced by the " "include. For example, given the following table:" msgstr "" +"依赖群包括可以多次指定同一个软件包。工具不应对包括项产生的列表内容进行去重或" +"做出其他改动。例如,给定以下表格:" #: ../source/specifications/dependency-groups.rst:92 msgid "" @@ -16577,6 +18870,9 @@ msgid "" "any other case in which they are asked to process the same requirement " "multiple times with different version constraints." msgstr "" +"``all`` 解析后的值应该是 ``[\"foo\", \"foo\", \"foo>1.0\", \"foo<1.0\"]``。工" +"具应该像处理其他任何“以不同版本约束多次处理同一需求”的情形那样来处理这样的列" +"表。" #: ../source/specifications/dependency-groups.rst:97 msgid "" @@ -16585,6 +18881,8 @@ msgid "" "Dependency Group Includes MUST NOT include cycles, and tools SHOULD report " "an error if they detect a cycle." msgstr "" +"依赖群包括可以包含自身又含有依赖群包括的群组,此时这些包括项也应该被展开。依" +"赖群包括不得包含循环,工具如果检测到循环,应该报错。" #: ../source/specifications/dependency-groups.rst:102 msgid "Package Building" @@ -16597,6 +18895,9 @@ msgid "" "``METADATA`` files should not include referenceable fields containing " "dependency groups." msgstr "" +"构建后端不得将依赖群数据作为软件包元数据包含到构建出的分发包中。这意味着 " +"sdist 的 ``PKG-INFO`` 文件和 wheel 的 ``METADATA`` 文件不应该包含带有依赖群的" +"可引用字段。" #: ../source/specifications/dependency-groups.rst:108 msgid "" @@ -16605,6 +18906,9 @@ msgid "" "``[dependency-groups]``. However, the table's contents are not part of a " "built package's interfaces." msgstr "" +"不过,在动态元数据的求值过程中使用依赖群是有效的,并且 sdist 中所含的 " +"``pyproject.toml`` 文件仍将包含 ``[dependency-groups]``。但是,该表格的内容并" +"不属于已构建软件包的接口。" #: ../source/specifications/dependency-groups.rst:114 msgid "Installing Dependency Groups & Extras" @@ -16616,6 +18920,8 @@ msgid "" "referring to dependency groups. Tools are expected to provide dedicated " "interfaces for this purpose." msgstr "" +"目前既没有用于安装或引用依赖群的语法,也没有由本规范定义的接口。工具应当为此" +"提供专门的接口。" #: ../source/specifications/dependency-groups.rst:120 msgid "" @@ -16626,10 +18932,13 @@ msgid "" "dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" +"工具可以选择为依赖群提供交互接口,使其与管理附加功能(extras)的接口相同或类" +"似。建议工具作者注意,本规范并不禁止让附加功能与某个依赖群同名。另外,建议用" +"户避免创建与附加功能同名的依赖群,并且工具可以将这种匹配视为错误。" #: ../source/specifications/dependency-groups.rst:128 msgid "Validation and Compatibility" -msgstr "" +msgstr "验证与兼容性" #: ../source/specifications/dependency-groups.rst:130 msgid "" @@ -16638,18 +18947,20 @@ msgid "" "possibility of future extensions to the specification, so that they do not " "unnecessarily emit errors or warnings." msgstr "" +"支持依赖群的工具可能希望在使用数据之前先对其进行验证。在实现此类验证时,工具" +"作者应该意识到本规范存在未来扩展的可能性,以免不必要地发出错误或警告。" #: ../source/specifications/dependency-groups.rst:135 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " "dependency groups." -msgstr "" +msgstr "在求值或处理依赖群中无法识别的数据时,工具应该报错。" #: ../source/specifications/dependency-groups.rst:138 msgid "" "Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." -msgstr "" +msgstr "除非确有必要,工具不应预先验证 *所有* 依赖群的内容。" #: ../source/specifications/dependency-groups.rst:141 msgid "" @@ -16657,6 +18968,8 @@ msgid "" "allow the ``foo`` group to be used and only error if the ``bar`` group is " "used:" msgstr "" +"这意味着,在存在以下数据的情况下,大多数工具应该允许使用 ``foo`` 群组,并且只" +"在使用 ``bar`` 群组时报错:" #: ../source/specifications/dependency-groups.rst:152 msgid "" @@ -16664,6 +18977,8 @@ msgid "" "Linters and validators are an example, as their purpose is to validate the " "contents of all dependency groups." msgstr "" +"已知有若干类工具有充分的理由采取更严格的做法。代码检查工具(linter)和验证器" +"便是一例,因为它们的用途就是验证所有依赖群的内容。" #: ../source/specifications/dependency-groups.rst:157 #: ../source/specifications/inline-script-metadata.rst:134 @@ -16676,14 +18991,16 @@ msgid "" "Group to stdout, newline delimited. The output is therefore valid " "``requirements.txt`` data." msgstr "" +"下面的参考实现会把一个依赖群的内容打印到 stdout,并以换行符分隔。因此,该输出" +"是有效的 ``requirements.txt`` 数据。" #: ../source/specifications/dependency-groups.rst:252 msgid "October 2024: This specification was approved through :pep:`735`." -msgstr "" +msgstr "2024 年 10 月:本规范通过 :pep:`735` 获得批准。" #: ../source/specifications/dependency-specifiers.rst:7 msgid "Dependency specifiers" -msgstr "" +msgstr "依赖说明符" #: ../source/specifications/dependency-specifiers.rst:9 msgid "" @@ -16691,6 +19008,8 @@ msgid "" "projects. The language defined is a compact line based format which was " "adapted from the format originally used in ``pip`` requirements files." msgstr "" +"本文档定义了用于指定对其他项目的依赖关系的格式。所定义的语言是一种紧凑的、基" +"于行的格式,改编自最初用于 ``pip`` 需求文件的格式。" #: ../source/specifications/dependency-specifiers.rst:13 msgid "" @@ -16700,6 +19019,10 @@ msgid "" "Sometimes dependencies are only relevant on one platform, or only some " "versions are acceptable, so the language permits describing all these cases." msgstr "" +"依赖项的作用是让 pip [#pip]_ 之类的工具能够找到合适的软件包来安装。有时这非常" +"宽松,只是指定一个名称;有时又非常具体,指向要安装的特定文件。有时依赖项只在" +"某个平台上才有意义,或者只有部分版本可以接受,因此该语言允许描述所有这些情况" +"。" #: ../source/specifications/dependency-specifiers.rst:19 msgid "" @@ -16707,6 +19030,8 @@ msgid "" "dependency specifiers is largely dependent on the role of the tool in the " "wider ecosystem:" msgstr "" +"工具在处理依赖说明符时应该严格还是宽松,很大程度上取决于该工具在整个生态系统" +"中所扮演的角色:" #: ../source/specifications/dependency-specifiers.rst:22 msgid "" @@ -16714,6 +19039,8 @@ msgid "" "new releases, encouraging the consistency of published specifiers to improve " "over time" msgstr "" +"发布工具和索引服务器在处理新发布时应该保持严格,以促使已发布说明符的一致性随" +"时间推移不断改进" #: ../source/specifications/dependency-specifiers.rst:25 msgid "" @@ -16721,18 +19048,20 @@ msgid "" "allowing consumption of older packages which may contain dependency " "specifiers that are arguably nonsensical" msgstr "" +"锁定工具和安装工具在处理时可以保持宽松,从而允许使用较旧的软件包,即使这些软" +"件包可能包含可被认为是无意义的依赖说明符。" #: ../source/specifications/dependency-specifiers.rst:35 msgid "All features of the language shown with a name based lookup::" -msgstr "" +msgstr "以基于名称的查找展示的该语言的所有特性::" #: ../source/specifications/dependency-specifiers.rst:39 msgid "A minimal URL based lookup::" -msgstr "" +msgstr "一个最简的基于 URL 的查找::" #: ../source/specifications/dependency-specifiers.rst:44 msgid "Concepts" -msgstr "" +msgstr "概念" #: ../source/specifications/dependency-specifiers.rst:46 msgid "" @@ -16742,16 +19071,19 @@ msgid "" "version limits, or giving the URL to a specific artifact to install. Finally " "the dependency can be made conditional using environment markers." msgstr "" +"依赖说明符总是会指定一个分发包名称。它可以包含附加功能(extras),用于扩展所" +"指名分发包的依赖项,以启用可选特性。安装的版本可以通过版本限制来控制,也可以" +"给出要安装的特定制品的 URL。最后,还可以使用环境标记让依赖项变为有条件的。" #: ../source/specifications/dependency-specifiers.rst:53 msgid "Grammar" -msgstr "" +msgstr "语法" #: ../source/specifications/dependency-specifiers.rst:55 msgid "" "We first cover the grammar briefly and then drill into the semantics of each " "section later." -msgstr "" +msgstr "我们先简要介绍语法,稍后再深入探讨各部分的语义。" #: ../source/specifications/dependency-specifiers.rst:58 msgid "" @@ -16761,12 +19093,15 @@ msgid "" "such as comments, multiple line support via continuations, or other such " "features." msgstr "" +"分发说明符以 ASCII 文本书写。我们使用 parsley [#parsley]_ 语法来给出精确的语" +"法定义。预计该说明符会被嵌入到更大的系统中,由后者提供注释、通过续行支持多行" +"之类的框架性功能。" #: ../source/specifications/dependency-specifiers.rst:63 msgid "" "The full grammar including annotations to build a useful parse tree is " "included at the end of this document." -msgstr "" +msgstr "包含注解、可用于构建实用解析树的完整语法收录在本文档末尾。" #: ../source/specifications/dependency-specifiers.rst:66 msgid "" @@ -16774,34 +19109,36 @@ msgid "" "specifier specification `. (Note: URI is defined " "in :rfc:`std-66 <3986>`)::" msgstr "" +"可以根据 :ref:`版本说明符规范 ` 的规则来指定版本。(注意" +":URI 的定义见 :rfc:`std-66 <3986>`)::" #: ../source/specifications/dependency-specifiers.rst:77 msgid "" "Environment markers allow making a specification only take effect in some " "environments::" -msgstr "" +msgstr "环境标记允许让规范仅在部分环境中生效::" #: ../source/specifications/dependency-specifiers.rst:106 msgid "" "Optional components of a distribution may be specified using the extras " "field::" -msgstr "" +msgstr "可以使用 extras 字段来指定分发包的可选组件::" #: ../source/specifications/dependency-specifiers.rst:115 msgid "Giving us a rule for name based requirements::" -msgstr "" +msgstr "给我们一条基于名称的要求的规则::" #: ../source/specifications/dependency-specifiers.rst:119 msgid "And a rule for direct reference specifications::" -msgstr "" +msgstr "以及一条针对直接引用规范的规则::" #: ../source/specifications/dependency-specifiers.rst:123 msgid "Leading to the unified rule that can specify a dependency.::" -msgstr "" +msgstr "最终得到可以指定依赖项的统一规则::" #: ../source/specifications/dependency-specifiers.rst:128 msgid "Whitespace" -msgstr "" +msgstr "空白字符" #: ../source/specifications/dependency-specifiers.rst:130 msgid "" @@ -16809,6 +19146,8 @@ msgid "" "The sole exceptions are detecting the end of a URL requirement and inside " "user supplied constants in environment markers." msgstr "" +"非换行空白字符大多是可选的,且不具语义。唯一的例外是检测 URL 需求的结束位置," +"以及环境标记中用户提供的常量内部。" #: ../source/specifications/dependency-specifiers.rst:137 msgid "Names" @@ -16821,16 +19160,18 @@ msgid "" "present in all dependency specifications, and are sufficient to be a " "specification on their own." msgstr "" +"分发包名称在 :ref:`核心元数据 ` 中定义。名称是分发包的主" +"要标识符。它们存在于所有依赖说明符中,并且仅凭其自身就足以构成一个说明符。" #: ../source/specifications/dependency-specifiers.rst:144 msgid "" "Valid distribution names are defined in the :ref:`name format specification " "`." -msgstr "" +msgstr "有效的分发包名称在 :ref:`名称格式规范 ` 中定义。" #: ../source/specifications/dependency-specifiers.rst:151 msgid "Extras" -msgstr "" +msgstr "附加功能(extras)" #: ../source/specifications/dependency-specifiers.rst:153 msgid "" @@ -16839,6 +19180,9 @@ msgid "" "additional dependencies of the distribution **when** the extra is used in a " "dependency specification. For instance::" msgstr "" +"附加功能(extra)是分发包的可选部分。分发包希望指定多少附加功能就可以指定多少" +",**当附加功能被用于依赖规范中时**,每个附加功能导致声明该分发包的额外依赖项" +"。例如::" #: ../source/specifications/dependency-specifiers.rst:160 msgid "" @@ -16847,11 +19191,14 @@ msgid "" "requests being installed, and requests own dependencies, and also any " "dependencies that are listed in the \"security\" extra of requests." msgstr "" +"附加功能会把它们定义的依赖项与所属分发包的依赖项合并在一起。上面的例子会安装 " +"requests,以及 requests 自身的依赖项,还有 requests 的 \"security\" 附加功能" +"中列出的所有依赖项。" #: ../source/specifications/dependency-specifiers.rst:165 msgid "" "If multiple extras are listed, all the dependencies are unioned together." -msgstr "" +msgstr "如果列出了多个附加功能,所有这些依赖项都会被合并在一起。" #: ../source/specifications/dependency-specifiers.rst:167 msgid "" @@ -16861,6 +19208,9 @@ msgid "" "installation tools MAY normalize invalid extra names in order to accept " "published metadata using core metadata versions prior to 2.3." msgstr "" +"附加功能名称的限制在 :ref:`核心元数据规范 ` 中" +"定义。发布工具应该在依赖说明符中强制执行这些限制,而锁定工具和安装工具可以规" +"范化无效的附加功能名称,以便接受使用 2.3 之前核心元数据版本的已发布元数据。" #: ../source/specifications/dependency-specifiers.rst:176 msgid "Versions" @@ -16876,10 +19226,14 @@ msgid "" "brackets around a version are present for compatibility with :pep:`345` but " "should not be generated, only accepted." msgstr "" +"关于版本号和版本比较的更多细节,请参见 :ref:`版本说明符规范 `。版本说明符会限制一个分发包可使用的版本。它们只适用于按名称查找" +"的分发包,而不适用于通过 URL 查找的分发包。版本比较同样会用于环境标记。版本两" +"侧的可选括号是为了与 :pep:`345` 兼容而保留的,但不应被生成,只需被接受。" #: ../source/specifications/dependency-specifiers.rst:189 msgid "Environment Markers" -msgstr "" +msgstr "环境标记" #: ../source/specifications/dependency-specifiers.rst:191 msgid "" @@ -16888,12 +19242,16 @@ msgid "" "package that needs ``pywin32`` when running on Windows. This can be " "expressed as::" msgstr "" +"环境标记允许依赖说明符提供一条描述该依赖项何时应被使用的规则。例如,假设有一" +"个软件包在 Windows 上运行时需要 ``pywin32``。这可以表达为::" #: ../source/specifications/dependency-specifiers.rst:197 msgid "" "A marker expression evaluates to either True or False for a given deployment " "environment. When it evaluates to False, the dependency should be ignored." msgstr "" +"对于给定的部署环境,标记表达式的求值结果为 True 或 False。当求值结果为 False " +"时,该依赖项应被忽略。" #: ../source/specifications/dependency-specifiers.rst:200 msgid "" @@ -16901,6 +19259,8 @@ msgid "" "safely evaluate it without running arbitrary code that could become a " "security vulnerability." msgstr "" +"标记语言借鉴了 Python 本身,这样既能安全地对其求值,又不必运行可能构成安全漏" +"洞的任意代码。" #: ../source/specifications/dependency-specifiers.rst:204 msgid "" @@ -16909,20 +19269,23 @@ msgid "" "recorded :ref:`at the end of this specification `)." msgstr "" +"标记最初在 :pep:`345` 中定义,后在 :pep:`508` 中正式规范化,此后又随时间推移" +"陆续修订(:pep:`508` 之后的修订记录在 :ref:`本规范末尾 `)。" #: ../source/specifications/dependency-specifiers.rst:209 msgid "Marker field types" -msgstr "" +msgstr "标记字段类型" #: ../source/specifications/dependency-specifiers.rst:211 msgid "" "Environment marker fields are each defined as one of the following types:" -msgstr "" +msgstr "各个环境标记字段分别定义为以下类型之一:" #: ../source/specifications/dependency-specifiers.rst:213 msgid "" "``String``: the contents of the field are always treated as an opaque string." -msgstr "" +msgstr "``String``:字段内容始终会被视为不透明的字符串。" #: ../source/specifications/dependency-specifiers.rst:214 msgid "" @@ -16930,6 +19293,8 @@ msgid "" "containing opaque strings. In comparisons, the user supplied constant MUST " "still be a single string (as set literals are not part of the marker syntax)." msgstr "" +"``Set of strings``:字段内容始终会被视为一个包含不透明字符串的集合。在比较中" +",用户提供的常量仍必须是单个字符串(因为集合字面量并不是标记语法的一部分)。" #: ../source/specifications/dependency-specifiers.rst:217 msgid "" @@ -16938,6 +19303,8 @@ msgid "" "emit an error if that is not the case, but installation tools MAY fall back " "to treating the field as a string field." msgstr "" +"``Version``:字段内容应始终是有效的 :ref:`版本说明符 `。" +"如果不是,发布工具应该报错,但安装工具可以退而将该字段当作字符串字段处理。" #: ../source/specifications/dependency-specifiers.rst:221 msgid "" @@ -16947,10 +19314,13 @@ msgid "" "dependent and whether or not tools actually make the distinction will be " "tool dependent." msgstr "" +"``Version | String``:字段内容在某些平台上应为有效的 :ref:`版本说明符 " +"`,而在其他平台上则是不透明的字符串。这种区分的具体细节取" +"决于具体字段,而工具是否真的做出这种区分则取决于具体工具。" #: ../source/specifications/dependency-specifiers.rst:227 msgid "Marker comparisons" -msgstr "" +msgstr "标记比较" #: ../source/specifications/dependency-specifiers.rst:229 msgid "" @@ -16961,54 +19331,58 @@ msgid "" "emit an error if no marker field is referenced in a comparison (that is, " "both operands are given as constants)." msgstr "" +"所有标记比较表达式都应将某个具名标记字段与用户提供的常量进行比较。比较的类型" +"由所用的比较运算符以及 :ref:`下表 ` 中给出的具名字" +"段类型决定。如果比较中没有引用任何标记字段(即两个操作数都以常量形式给出)," +"工具可以报错。" #: ../source/specifications/dependency-specifiers.rst:236 msgid "" "The follow comparison operations are defined in the marker expression " "grammar:" -msgstr "" +msgstr "标记表达式文法中定义了以下比较运算:" #: ../source/specifications/dependency-specifiers.rst:238 msgid "``==`` (for example, ``sys_platform == \"win32\"``)" -msgstr "" +msgstr "``==`` (例如 ``sys_platform == \"win32\"``)" #: ../source/specifications/dependency-specifiers.rst:239 msgid "``!=`` (for example, ``sys_platform != \"win32\"``)" -msgstr "" +msgstr "``!=`` (例如 ``sys_platform != \"win32\"``)" #: ../source/specifications/dependency-specifiers.rst:240 msgid "``>`` (for example, ``python_version > \"3.10\"``)" -msgstr "" +msgstr "``>`` (例如 ``python_version > \"3.10\"``)" #: ../source/specifications/dependency-specifiers.rst:241 msgid "``>=`` (for example, ``python_version >= \"3.10\"``)" -msgstr "" +msgstr "``>=`` (例如 ``python_version >= \"3.10\"``)" #: ../source/specifications/dependency-specifiers.rst:242 msgid "``<`` (for example, ``python_version < \"3.10\"``)" -msgstr "" +msgstr "``<`` (例如 ``python_version < \"3.10\"``)" #: ../source/specifications/dependency-specifiers.rst:243 msgid "``<=`` (for example, ``python_version <= \"3.10\"``)" -msgstr "" +msgstr "``<=`` (例如 ``python_version <= \"3.10\"``)" #: ../source/specifications/dependency-specifiers.rst:244 msgid "``~=`` (for example, ``python_version ~= \"3\"``)" -msgstr "" +msgstr "``~=`` (例如 ``python_version ~= \"3\"``)" #: ../source/specifications/dependency-specifiers.rst:245 msgid "" "``===`` (for example, ``implementation_version === \"not.a.valid.version\"``)" -msgstr "" +msgstr "``===`` (例如 ``implementation_version === \"not.a.valid.version\"``)" #: ../source/specifications/dependency-specifiers.rst:246 msgid "" "``in`` (for example, ``\"gui\" in extras``, ``\"SMP\" in platform_version``)" -msgstr "" +msgstr "``in`` (例如 ``\"gui\" in extras``、``\"SMP\" in platform_version``)" #: ../source/specifications/dependency-specifiers.rst:247 msgid "``not in`` (for example, ``\"dev\" not in dependency_groups``)" -msgstr "" +msgstr "``not in`` (例如 ``\"dev\" not in dependency_groups``)" #: ../source/specifications/dependency-specifiers.rst:249 msgid "" @@ -17024,14 +19398,21 @@ msgid "" "disallow uploads containing such environment markers, while locking and " "installation tools SHOULD implement the following behavior:" msgstr "" +"对于 ``String`` 字段,``==``、``!=``、``in`` 和 ``not in`` 的定义与 Python 字" +"符串中的相应操作一致(区分大小写,且不进行任何形式的值规范化)。明确不建议在" +"字符串字段中使用 ``~=`` 或 ``===``:发布工具应该报错,索引服务器可以拒绝包含" +"此类环境标记的上传,而锁定工具和安装工具则可以将其解释为等价于 ``==``。同样明" +"确不建议在字符串字段中使用有序比较(``<``、``<=``、``>``、``>=``),因为这在" +"打包语境中没有任何语义意义;此时发布工具应该报错,索引服务器可以拒绝包含此类" +"环境标记的上传,而锁定工具和安装工具应该实现以下行为:" #: ../source/specifications/dependency-specifiers.rst:261 msgid "treat ``>=`` and ``<=`` as equivalent to ``==``" -msgstr "" +msgstr "将 ``>=`` 和 ``<=`` 视为等价于 ``==``" #: ../source/specifications/dependency-specifiers.rst:262 msgid "treat ``>`` and ``<`` as always being False" -msgstr "" +msgstr "将 ``>`` 和 ``<`` 视为始终为 False" #: ../source/specifications/dependency-specifiers.rst:264 msgid "" @@ -17043,6 +19424,10 @@ msgid "" "environment markers, while locking and installation tools SHOULD treat such " "operations as always being False." msgstr "" +"对于 ``Set of String`` 字段,由于标记语法中没有集合字面量,唯一有效的操作是以" +"用户提供的字符串字面量作为左操作数的 ``in`` 和 ``not in`` 比较。如果环境标记" +"试图在这些字段上使用任何其他比较运算,发布工具应该报错,索引服务器可以拒绝包" +"含此类环境标记的上传,而锁定工具和安装工具应该将此类操作视为始终为 False。" #: ../source/specifications/dependency-specifiers.rst:272 msgid "" @@ -17062,6 +19447,15 @@ msgid "" "markers, while locking and installation tools MAY treat them as always being " "False." msgstr "" +"对于 ``Version`` 字段,当标记字段值和用户提供的常量都能被解析为有效的版本说明" +"符,或者使用 ``===`` 任意等价比较运算符时,比较运算由 :ref:`版本说明符规范 " +"` 定义。当使用 ``===`` 以外的运算符时,如果用户提供的常量" +"无法被解析为有效的版本说明符,发布工具应该报错,索引服务器可以拒绝包含此类环" +"境标记的上传,而锁定工具和安装工具在标记字段值或用户提供的常量无法被解析为有" +"效的版本说明符时,既可以报错,也可以退而采用 ``String`` 字段的比较逻辑。请注" +"意,``in`` 和 ``not in`` 成员检查对 ``Version`` 字段并非有效,发布工具应该报" +"错,索引服务器可以拒绝包含此类环境标记的上传,而锁定工具和安装工具可以将其视" +"为始终为 False。" #: ../source/specifications/dependency-specifiers.rst:287 msgid "" @@ -17078,10 +19472,17 @@ msgid "" "markers that are appropriately scoped to the relevant platforms before " "performing a version based comparison." msgstr "" +"对于 ``Version | String`` 字段,比较运算的定义与 ``Version`` 字段相同,而 " +"``in`` 和 ``not in`` 成员检查的定义与 ``String`` 字段相同。然而,标记字段值或" +"用户提供的常量能否被解析为有效版本,在跨平台层面没有一致的预期,因此如果将任" +"一值解析为版本失败,工具应该退而将该字段当作 ``String`` 字段处理。如果某字段" +"在给定平台上本应包含有效的版本但实际上并没有,工具可以发出警告。工具不应该无" +"条件地将此类字段当作 ``String`` 字段处理,因为对于已在执行基于版本的比较之前" +"适当限定到相关平台的环境标记,这样做可能给出不正确的答案。" #: ../source/specifications/dependency-specifiers.rst:301 msgid "Composing marker expressions" -msgstr "" +msgstr "组合标记表达式" #: ../source/specifications/dependency-specifiers.rst:303 msgid "" @@ -17089,11 +19490,13 @@ msgid "" "logical operators. Parentheses may be used as necessary to control operand " "precedence (with all comparison operations having a higher precedence)." msgstr "" +"可以使用 ``and`` 和 ``or`` 逻辑运算符来组合出更复杂的标记表达式。必要时可以使" +"用括号来控制操作数优先级(所有比较运算都具有更高的优先级)。" #: ../source/specifications/dependency-specifiers.rst:307 #: ../source/specifications/version-specifiers.rst:200 msgid "For example::" -msgstr "" +msgstr "例如::" #: ../source/specifications/dependency-specifiers.rst:313 msgid "" @@ -17101,16 +19504,20 @@ msgid "" "supported in environment markers (such expressions must instead be written " "out as two separate comparisons joined by ``and``)." msgstr "" +"环境标记不支持 Python 的比较链式写法(例如 ``3.4 < python_version < 3.9``)," +"此类表达式必须改写为由 ``and`` 连接的两个独立比较。" #: ../source/specifications/dependency-specifiers.rst:318 msgid "User supplied constants" -msgstr "" +msgstr "用户提供的常量" #: ../source/specifications/dependency-specifiers.rst:320 msgid "" "User supplied constants are always given as strings within either ``'`` or " "``\"`` quote marks. Triple-quoted multi-line strings are NOT permitted." msgstr "" +"用户提供的常量总是以字符串形式给出,使用 ``'`` 或 ``\"`` 引号括起。不允许使用" +"三引号多行字符串。" #: ../source/specifications/dependency-specifiers.rst:323 msgid "" @@ -17119,6 +19526,9 @@ msgid "" "is currently no known need for treating user supplied constants as anything " "other than either opaque strings or valid version specifiers." msgstr "" +"规范并未定义反斜杠转义,但工具可以支持它们。之所以没有把它们纳入规范,是因为" +"它们会增加复杂性,而且目前尚无已知的需求需要把用户提供的常量当作不透明的字符" +"串或有效的版本说明符以外的任何东西来处理。" #: ../source/specifications/dependency-specifiers.rst:328 msgid "" @@ -17129,10 +19539,13 @@ msgid "" "environment markers to contain non-ASCII text that users wish to perform " "comparisons against." msgstr "" +"类似地,规范并未定义对非 ASCII 字符的支持,但工具可以接受它们(通常依据包含该" +"依赖说明符的文件或流的文本编码)。如果环境标记中通常引用的运行时变量更常包含" +"用户希望与之比较的非 ASCII 文本,将来可能会重新考虑这一点。" #: ../source/specifications/dependency-specifiers.rst:335 msgid "Unknown marker fields" -msgstr "" +msgstr "未知标记字段" #: ../source/specifications/dependency-specifiers.rst:337 msgid "" @@ -17147,6 +19560,12 @@ msgid "" "dependency that is not valid for the current platform (if the unknown marker " "is treated as True)." msgstr "" +"对未知标记字段的引用应该使相应的软件包版本不符合安装条件,也不符合纳入锁定依" +"赖树的条件,而不是得到一个求值为 True 或 False 的比较结果。这样做的目的是:带" +"有未知标记字段的已发布软件包版本,要么在解析依赖项时被忽略,要么发出描述性的" +"安装失败信息,而不是产生表面上成功、随后却因缺少依赖项而在运行时失败的安装(" +"当未知标记被视为 False 时),也不是导致对当前平台无效的依赖项出现可能令人费解" +"的安装失败(当未知标记被视为 True 时)。" #: ../source/specifications/dependency-specifiers.rst:347 msgid "" @@ -17154,20 +19573,23 @@ msgid "" "should evaluate to ``0`` for ``Version`` fields, and an empty string for all " "other variables (including ``Version | String`` fields)." msgstr "" +"在给定 Python 实现上无法计算取值的变量,对于 ``Version`` 字段应该求值为 " +"``0``,对于所有其他变量(包括 ``Version | String`` 字段)则应该求值为空字符串" +"。" #: ../source/specifications/dependency-specifiers.rst:355 msgid "Defined environment marker fields" -msgstr "" +msgstr "已定义的环境标记字段" #: ../source/specifications/dependency-specifiers.rst:357 msgid "" "Unless otherwise noted below, marker evaluation environments MUST support " "all of the following marker fields:" -msgstr "" +msgstr "除非下文另有说明,标记求值环境必须支持以下所有标记字段:" #: ../source/specifications/dependency-specifiers.rst:363 msgid "Marker" -msgstr "" +msgstr "标记" #: ../source/specifications/dependency-specifiers.rst:364 msgid "Python equivalent" @@ -17179,7 +19601,7 @@ msgstr "类型" #: ../source/specifications/dependency-specifiers.rst:366 msgid "Sample values & notes" -msgstr "" +msgstr "示例值与说明" #: ../source/specifications/dependency-specifiers.rst:367 msgid "``os_name``" @@ -17196,7 +19618,7 @@ msgstr ":py:data:`os.name`" #: ../source/specifications/dependency-specifiers.rst:394 #: ../source/specifications/dependency-specifiers.rst:414 msgid "String" -msgstr "" +msgstr "字符串" #: ../source/specifications/dependency-specifiers.rst:370 msgid "``posix``, ``java``" @@ -17204,11 +19626,11 @@ msgstr "``posix``, ``java``" #: ../source/specifications/dependency-specifiers.rst:371 msgid "``sys_platform``" -msgstr "" +msgstr "``sys_platform``" #: ../source/specifications/dependency-specifiers.rst:372 msgid ":py:data:`sys.platform`" -msgstr "" +msgstr ":py:data:`sys.platform`" #: ../source/specifications/dependency-specifiers.rst:374 msgid "" @@ -17216,14 +19638,16 @@ msgid "" "most well defined field for use when declaring platform specific " "dependencies)" msgstr "" +"``linux``、``win32``、``darwin``、``java1.8.0_51`` (注意,这是声明平台特定依" +"赖项时定义最完善的字段)" #: ../source/specifications/dependency-specifiers.rst:377 msgid "``platform_machine``" -msgstr "" +msgstr "``platform_machine``" #: ../source/specifications/dependency-specifiers.rst:378 msgid ":py:func:`platform.machine()`" -msgstr "" +msgstr ":py:func:`platform.machine()`" #: ../source/specifications/dependency-specifiers.rst:380 msgid "" @@ -17231,26 +19655,28 @@ msgid "" "provided by the operating system, so the same CPU architecture may use " "different strings on different platforms)" msgstr "" +"``x86_64``、``aarch64``、``AMD64``、``arm64`` (注意,该值由操作系统提供,因" +"此同一 CPU 架构在不同平台上可能使用不同的字符串)" #: ../source/specifications/dependency-specifiers.rst:383 msgid "``platform_python_implementation``" -msgstr "" +msgstr "``platform_python_implementation``" #: ../source/specifications/dependency-specifiers.rst:384 msgid ":py:func:`platform.python_implementation()`" -msgstr "" +msgstr ":py:func:`platform.python_implementation()`" #: ../source/specifications/dependency-specifiers.rst:386 msgid "``CPython``, ``PyPy``" -msgstr "" +msgstr "``CPython``、``PyPy``" #: ../source/specifications/dependency-specifiers.rst:387 msgid "``platform_release``" -msgstr "" +msgstr "``platform_release``" #: ../source/specifications/dependency-specifiers.rst:388 msgid ":py:func:`platform.release()`" -msgstr "" +msgstr ":py:func:`platform.release()`" #: ../source/specifications/dependency-specifiers.rst:389 #: ../source/specifications/dependency-specifiers.rst:398 @@ -17262,26 +19688,28 @@ msgid "" "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51`` (may be a valid version " "field, for example on macOS/darwin)" msgstr "" +"``3.14.1-x86_64-linode39``、``14.5.0``、``1.8.0_51`` (可能是有效的版本字段," +"例如在 macOS/darwin 上)" #: ../source/specifications/dependency-specifiers.rst:392 msgid "``platform_system``" -msgstr "" +msgstr "``platform_system``" #: ../source/specifications/dependency-specifiers.rst:393 msgid ":py:func:`platform.system()`" -msgstr "" +msgstr ":py:func:`platform.system()`" #: ../source/specifications/dependency-specifiers.rst:395 msgid "``Linux``, ``Windows``, ``Java``" -msgstr "" +msgstr "``Linux``、``Windows``、``Java``" #: ../source/specifications/dependency-specifiers.rst:396 msgid "``platform_version``" -msgstr "" +msgstr "``platform_version``" #: ../source/specifications/dependency-specifiers.rst:397 msgid ":py:func:`platform.version()`" -msgstr "" +msgstr ":py:func:`platform.version()`" #: ../source/specifications/dependency-specifiers.rst:399 msgid "" @@ -17301,7 +19729,7 @@ msgstr "``python_version``" #: ../source/specifications/dependency-specifiers.rst:405 msgid "``'.'.join(platform.python_version_tuple()[:2])``" -msgstr "" +msgstr "``'.'.join(platform.python_version_tuple()[:2])``" #: ../source/specifications/dependency-specifiers.rst:406 #: ../source/specifications/dependency-specifiers.rst:410 @@ -17319,7 +19747,7 @@ msgstr "``python_full_version``" #: ../source/specifications/dependency-specifiers.rst:409 msgid ":py:func:`platform.python_version()`" -msgstr "" +msgstr ":py:func:`platform.python_version()`" #: ../source/specifications/dependency-specifiers.rst:411 msgid "``3.10.12``, ``3.15.0a1``" @@ -17327,11 +19755,11 @@ msgstr "``3.10.12``, ``3.15.0a1``" #: ../source/specifications/dependency-specifiers.rst:412 msgid "``implementation_name``" -msgstr "" +msgstr "``implementation_name``" #: ../source/specifications/dependency-specifiers.rst:413 msgid ":py:data:`sys.implementation.name `" -msgstr "" +msgstr ":py:data:`sys.implementation.name `" #: ../source/specifications/dependency-specifiers.rst:415 msgid "``cpython``, ``pypy``" @@ -17339,34 +19767,36 @@ msgstr "``cpython``, ``pypy``" #: ../source/specifications/dependency-specifiers.rst:416 msgid "``implementation_version``" -msgstr "" +msgstr "``implementation_version``" #: ../source/specifications/dependency-specifiers.rst:417 msgid "see definition below" -msgstr "" +msgstr "见下文定义" #: ../source/specifications/dependency-specifiers.rst:419 msgid "" "``3.10.12``, ``7.3.17`` (examples are for CPython and PyPy respectively)" -msgstr "" +msgstr "``3.10.12``、``7.3.17`` (示例分别对应 CPython 和 PyPy)" #: ../source/specifications/dependency-specifiers.rst:421 msgid "``extra``" -msgstr "" +msgstr "``extra``" #: ../source/specifications/dependency-specifiers.rst:422 msgid "" "Used to indicate optional dependencies in project dependency metadata. An " "error except when defined by the context interpreting the specifier." msgstr "" +"用于在项目依赖元数据中指示可选依赖项。除非由解释该说明符的上下文定义,否则即" +"为错误。" #: ../source/specifications/dependency-specifiers.rst:425 msgid "Special (see below)" -msgstr "" +msgstr "特殊(见下文)" #: ../source/specifications/dependency-specifiers.rst:426 msgid "``toml`` (publishing tools SHOULD permit use of this field)" -msgstr "" +msgstr "``toml`` (发布工具应该允许使用该字段)" #: ../source/specifications/dependency-specifiers.rst:428 #: ../source/specifications/pylock-toml.rst:108 @@ -17378,17 +19808,21 @@ msgid "" "Used to indicate optional public dependencies in lock files. An error except " "when defined by the context interpreting the specifier." msgstr "" +"用于在锁定文件中指示公开的可选依赖项。除非由解释该说明符的上下文定义,否则即" +"为错误。" #: ../source/specifications/dependency-specifiers.rst:431 #: ../source/specifications/dependency-specifiers.rst:439 msgid "Set of strings" -msgstr "" +msgstr "字符串集合" #: ../source/specifications/dependency-specifiers.rst:432 msgid "" "``{\"toml\"}`` (publishing tools SHOULD NOT permit use of this field and " "index servers SHOULD NOT accept uploads containing such environment markers)" msgstr "" +"``{\"toml\"}`` (发布工具不应该允许使用该字段,索引服务器不应该接受包含此类环" +"境标记的上传)" #: ../source/specifications/dependency-specifiers.rst:435 msgid "``dependency_groups``" @@ -17399,12 +19833,16 @@ msgid "" "Used to indicate optional project internal dependencies in lock files. An " "error except when defined by the context interpreting the specifier." msgstr "" +"用于在锁定文件中指示项目内部的可选依赖项。除非由解释该说明符的上下文定义,否" +"则即为错误。" #: ../source/specifications/dependency-specifiers.rst:440 msgid "" "``{\"test\"}`` (publishing tools SHOULD NOT permit use of this field and " "index servers SHOULD NOT accept uploads containing such environment markers)" msgstr "" +"``{\"test\"}`` (发布工具不应该允许使用该字段,索引服务器不应该接受包含此类环" +"境标记的上传)" #: ../source/specifications/dependency-specifiers.rst:444 msgid "" @@ -17423,24 +19861,41 @@ msgid "" "processing, marker evaluation environments DO NOT need to define these " "fields." msgstr "" +"为了与较旧的锁定工具和安装工具保持向后兼容,``extras`` 和 " +"``dependency_groups`` 字段目前仅在 :ref:`锁定文件 ` 的 " +"``packages.marker`` 字段中有效。对于这些比较,标记求值所用的 ``extras`` 和 " +"``dependency_groups`` 集合,指的是从锁定文件安装时 *当前选定的* 附加功能(" +"extras)和依赖群,而不是锁定文件相应顶层字段中列出的全部已定义附加功能(" +"extras)和依赖群。选择安装哪些附加功能(extras)和依赖群的接口因工具而异。如" +"果项目试图在其发布的依赖声明元数据中引用 ``extras`` 或 ``dependency_groups`` " +"字段,发布工具应该报错,索引服务器不应该接受引用这些字段的上传。在锁定文件处" +"理之外,标记求值环境不需要定义这些字段。" #: ../source/specifications/dependency-specifiers.rst:458 msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" +"``extra`` 字段也很特殊:它期望类似集合的行为,但其出现早于 ``Set of " +"strings`` 作为一种已定义的标记字段类型被加入的时间。它只支持一种操作,即 " +"``extra == \"name\"``,类似于 ``\"name\" in extras``。``extra != \"name\"`` " +"不应该再被使用,工具可以拒绝它,也可以将其求值为 false。对于依赖项标记求值," +"这些比较所用的附加功能名称集合,是 *该特定软件包* 所请求的附加功能(extras)" +"的完整集合,无论这些附加功能是在顶层依赖声明中直接请求的,还是在传递依赖声明" +"中间接请求的。对 ``extra`` 的其他比较操作均未定义,发布工具应该报错,索引服务" +"器可以拒绝包含此类环境标记的上传,而锁定工具和安装工具应该将其求值为 False。" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -17451,30 +19906,37 @@ msgid "" "``packages.marker`` fields, and installation tools SHOULD reject lock files " "containing such comparisons as invalid." msgstr "" +"与较新的 ``extras`` 字段不同,使用该字段的环境标记应该同时被发布工具和索引服" +"务器接受。面向项目依赖声明的标记求值环境通常需要处理 ``extra`` 字段比较的求值" +",而其他环境标记求值一般不需要这样做。旧式的 ``extra`` 比较语法不得用于锁定文" +"件的 ``packages.marker`` 字段,安装工具应该将包含此类比较的锁定文件视为无效并" +"予以拒绝。" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" +"``implementation_version`` 标记变量派生自 " +":py:data:`sys.implementation.version `:" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" -msgstr "" +msgstr "完整语法" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" -msgstr "" +msgstr "完整的 parsley 语法::" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" -msgstr "" +msgstr "一个测试程序,前提是该语法保存在字符串 ``grammar`` 中:" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." -msgstr "" +msgstr "2015 年 11 月:本规范通过 :pep:`508` 获得批准。" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -17482,41 +19944,55 @@ msgid "" "future versions of Python with 2-digit major and minor versions (e.g. 3.10). " "[#future_versions]_" msgstr "" +"2019 年 7 月:``python_version`` 的定义从 ``platform.python_version()[:3]`` " +"`更改 `_ 为 ``'.'.join(platform.python_version_tuple" +"()[:2])`` 以适应将来可能出现的主版本号和次版本号为两位数的 Python 版本(例如 " +"3.10)。 [#future_versions]_" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" +"2022 年 3 月:通过 :pep:`685` 标准化了发布时附加功能名称的规范化处理(适用于" +"核心元数据 2.3 及更高版本)" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" +"2024 年 6 月:``version_many`` 的定义已更改为允许末尾逗号,与自 2022 年末以来" +"一直沿用的 Python 实现的行为保持一致。" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" +"2025 年 4 月:为 :ref:`lock-file-spec` 添加了 ``extras`` 和 " +"``dependency_groups`` 标记字段,经 :pep:`751` 批准。" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " "field specification (it previously finished with ``$`` instead of ``\\Z``, " "incorrectly permitting trailing newlines)" msgstr "" +"2025 年 8 月:修正了建议的名称验证正则表达式,使其与字段规范相符(此前该表达" +"式以 ``$`` 结尾而非 ``\\Z``,会错误地允许尾部换行符)" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" +"2025 年 12 月:确保文法中 ``===`` 位于 ``==`` 之前,以允许解析任意相等性比较" +"。" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -17528,41 +20004,60 @@ msgid "" "specification into line with the way tools actually work. " "[#marker_comparison_logic]_" msgstr "" +"2026 年 1 月:修订了环境标记比较操作的定义,将版本比较语义限制在其有意义的字" +"段上,使 extra 名称限制更加明确,调整了字符串有序比较的定义方式,并将版本解析" +"失败时从版本比较回退到字符串比较的行为改为可选。此外,还针对发布工具与安装工" +"具分别给出了不同的工具行为建议。这使名义规范与工具的实际工作方式保持一致。 " +"[#marker_comparison_logic]_" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" +msgstr "2026 年 1 月:修复了从 :pep:`508` 中无意遗留的指向其他文档的过时引用" + +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" msgstr "" +"2026 年 7 月:说明了 ``extra != \"name\"`` 未(正式)得到支持(https://" +"discuss.python.org/t/ban-negative-extras-for-extras-marker/108022/24)" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" -msgstr "" +msgstr "pip,推荐的 Python 软件包安装工具(http://pip.readthedocs.org/en/stable/)" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" -msgstr "" +msgstr "parsley PEG 库(https://pypi.python.org/pypi/parsley/)" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" +"未来的 Python 版本可能会与环境标记变量 ``python_version`` 的定义产生问题(" +"https://github.com/python/peps/issues/560)" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" "discuss.python.org/t/spec-change-bugfix-dependency-specifiers-simplification-" "pep-508/105203)" msgstr "" +"解决工具实际行为与环境标记字段比较名义定义之间的不一致(https://" +"discuss.python.org/t/spec-change-bugfix-dependency-specifiers-simplification-" +"pep-508/105203)" #: ../source/specifications/direct-url.rst:6 msgid "Recording the Direct URL Origin of installed distributions" -msgstr "" +msgstr "记录已安装分发包的直接 URL 来源" #: ../source/specifications/direct-url.rst:8 msgid "" @@ -17571,6 +20066,10 @@ msgid "" "Origin of the distribution. The general structure and usage of ``*.dist-" "info`` directories is described in :ref:`recording-installed-packages`." msgstr "" +"本文档规定了已安装分发包的 ``*.dist-info`` 目录中的一个 " +":file:`direct_url.json` 文件,用于记录该分发包的直接 URL 来源。 ``*.dist-" +"info`` 目录的一般结构和用法在 :ref:`recording-installed-packages` 中有所描述" +"。" #: ../source/specifications/direct-url.rst:17 msgid "" @@ -17578,19 +20077,23 @@ msgid "" "directory by installers when installing a distribution from a requirement " "specifying a direct URL reference (including a VCS URL)." msgstr "" +"当安装工具根据指定了直接 URL 引用(包括 VCS URL)的需求安装分发包时,必须在 " +":file:`*.dist-info` 目录中创建 :file:`direct_url.json` 文件。" #: ../source/specifications/direct-url.rst:21 #: ../source/specifications/recording-installed-packages.rst:222 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." -msgstr "" +msgstr "当根据其他类型的需求(即名称加版本说明符)安装分发包时,不得创建此文件。" #: ../source/specifications/direct-url.rst:24 msgid "" "This JSON file MUST be a UTF-8 encoded, :rfc:`8259` compliant, serialization " "of the :doc:`direct-url-data-structure`." msgstr "" +"此 JSON 文件必须是 :doc:`direct-url-data-structure` 的序列化形式,采用 UTF-8 " +"编码并符合 :rfc:`8259`。" #: ../source/specifications/direct-url.rst:29 msgid "" @@ -17599,6 +20102,9 @@ msgid "" "attempt to infer any VCS information and therefore MUST NOT output any VCS " "related information (such as ``vcs_info``) in :file:`direct_url.json`." msgstr "" +"当请求的 URL 使用 file:// 方案并指向恰好包含 VCS 检出(checkout)的本地目录时" +",安装工具不得尝试推断任何 VCS 信息,因此也不得在 :file:`direct_url.json` 中" +"输出任何 VCS 相关信息(如 ``vcs_info``)。" #: ../source/specifications/direct-url.rst:36 msgid "" @@ -17610,14 +20116,18 @@ msgid "" "This information is however *enriched* with more precise data, such as " "``commit_id``." msgstr "" +"作为一般规则,安装工具在生成 :file:`direct_url.json` 时,应尽可能保留请求的 " +"URL 中所提供的信息。例如,应保留 user:password 环境变量,并且 " +"``requested_revision`` 应尽可能忠实地反映请求的 URL 中提供的修订版本。不过," +"这些信息会借助更精确的数据(如 ``commit_id``)得到 *增强*。" #: ../source/specifications/direct-url.rst:45 msgid "Example pip commands and their effect on direct_url.json" -msgstr "" +msgstr "pip 命令示例及其对 direct_url.json 的影响" #: ../source/specifications/direct-url.rst:47 msgid "Commands that generate a ``direct_url.json``:" -msgstr "" +msgstr "会生成 ``direct_url.json`` 的命令:" #: ../source/specifications/direct-url.rst:49 msgid "``pip install https://example.com/app-1.0.tgz``" @@ -17632,6 +20142,8 @@ msgid "" "``pip install \"app @ git+https://example.com/repo/" "app.git#subdirectory=setup\"``" msgstr "" +"``pip install \"app @ git+https://example.com/repo/" +"app.git#subdirectory=setup\"``" #: ../source/specifications/direct-url.rst:52 #, fuzzy @@ -17649,6 +20161,10 @@ msgid "" "directory where the git repository has been cloned to, and ``dir_info`` will " "be present with ``\"editable\": true`` and no ``vcs_info`` will be set)" msgstr "" +"``pip install --editable \"app @ git+https://example.com/repo/" +"app.git#subdirectory=setup\"`` (此时 ``url`` 将是 git 仓库被克隆到的本地目录" +", ``dir_info`` 将存在并带有 ``\"editable\": true``,且不会设置 " +"``vcs_info``)" #: ../source/specifications/direct-url.rst:58 #, fuzzy @@ -17657,7 +20173,7 @@ msgstr "``pipx`` 是用 ``pip`` 安装的:" #: ../source/specifications/direct-url.rst:60 msgid "Commands that *do not* generate a ``direct_url.json``" -msgstr "" +msgstr "*不会* 生成 ``direct_url.json`` 的命令" #: ../source/specifications/direct-url.rst:62 #, fuzzy @@ -17670,11 +20186,11 @@ msgstr "" #: ../source/specifications/direct-url.rst:69 msgid "March 2020: This specification was approved through :pep:`610`." -msgstr "" +msgstr "2020 年 3 月:本规范通过 :pep:`610` 获得批准。" #: ../source/specifications/direct-url-data-structure.rst:7 msgid "Direct URL Data Structure" -msgstr "" +msgstr "直接 URL 数据结构" #: ../source/specifications/direct-url-data-structure.rst:9 msgid "" @@ -17682,6 +20198,8 @@ msgid "" "represent URLs to python projects and distribution artifacts such as VCS " "source trees, local source trees, source distributions and wheels." msgstr "" +"本文档规定了一种可序列化为 JSON 的抽象数据结构,用于表示指向 python 项目和分" +"发制品的 URL,例如 VCS 源码树、本地源码树、源分发和 wheel 包。" #: ../source/specifications/direct-url-data-structure.rst:13 msgid "" @@ -17691,12 +20209,15 @@ msgid "" "other examples are provided in the :ref:`Version specifier specification " "`." msgstr "" +"截至撰写本文时,尚未正式规定如何将此数据结构的各个部分合并为一个可传递给工具" +"的单一 URL。一种常见的表示形式是 pip 的 URL 格式(参见 `VCS 支持 `_),其他示例见 :ref:`版本说明符规范 `。" #: ../source/specifications/direct-url-data-structure.rst:21 msgid "" "The Direct URL Data Structure MUST be a dictionary, serializable to JSON " "according to :rfc:`8259`." -msgstr "" +msgstr "直接 URL 数据结构必须是一个字典,并且能够按照 :rfc:`8259` 序列化为 JSON。" #: ../source/specifications/direct-url-data-structure.rst:24 msgid "" @@ -17704,6 +20225,8 @@ msgid "" "``string``. Its content must be a valid URL according to the `WHATWG URL " "Standard `_." msgstr "" +"它必须包含至少两个字段。第一个字段是 ``url``,类型为 ``string``。其内容必须是" +"符合 `WHATWG URL 标准 `_ 的有效 URL。" #: ../source/specifications/direct-url-data-structure.rst:28 msgid "" @@ -17713,22 +20236,26 @@ msgid "" "directory). These info fields have a (possibly empty) subdictionary as " "value, with the possible keys defined below." msgstr "" +"根据 ``url`` 所指向的内容,第二个字段必须是 ``vcs_info`` (如果 ``url`` 是 " +"VCS 引用)、``archive_info`` (如果 ``url`` 是源归档文件或 wheel 包)或 " +"``dir_info`` (如果 ``url`` 是本地目录)三者之一。这些信息字段的值为一个子字" +"典(可能为空),其中可以包含的各个键定义如下。" #: ../source/specifications/direct-url-data-structure.rst:35 msgid "Security Considerations" -msgstr "" +msgstr "安全注意事项" #: ../source/specifications/direct-url-data-structure.rst:37 msgid "" "When persisted, ``url`` MUST be stripped of any sensitive authentication " "information, for security reasons." -msgstr "" +msgstr "出于安全原因,在持久化时必须去除 ``url`` 中的任何敏感身份验证信息。" #: ../source/specifications/direct-url-data-structure.rst:40 msgid "" "The user:password section of the URL MAY however be composed of environment " "variables, matching the following regular expression:" -msgstr "" +msgstr "不过,URL 的 user:password 部分可以由环境变量组成,并匹配以下正则表达式:" #: ../source/specifications/direct-url-data-structure.rst:48 msgid "" @@ -17736,16 +20263,21 @@ msgid "" "security sensitive string. A typical example is ``git`` in the case of a URL " "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" +"此外,URL 的 user:password 部分也可以是一个广为人知且不含安全敏感信息的字符串" +"。一个典型的例子是,在形如 ``ssh://git@gitlab.com/user/repo`` 的 URL 中,该部" +"分为 ``git``。" #: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" -msgstr "" +msgstr "VCS URL" #: ../source/specifications/direct-url-data-structure.rst:57 msgid "" "When ``url`` refers to a VCS repository, the ``vcs_info`` key MUST be " "present as a dictionary with the following keys:" msgstr "" +"当 ``url`` 指向 VCS 仓库时,``vcs_info`` 键必须存在,并且是一个包含以下键的字" +"典:" #: ../source/specifications/direct-url-data-structure.rst:60 msgid "" @@ -17755,6 +20287,10 @@ msgid "" "MUST be compatible with the corresponding VCS, so an installer can hand it " "off without transformation to a checkout/download command of the VCS." msgstr "" +"必须存在 ``vcs`` 键(类型为 ``string``),其中包含 VCS 的名称(即 " +"``git``、``hg``、``bzr``、``svn`` 之一)。对于其他 VCS,应该通过撰写 PEP 修订" +"本规范的方式来注册。``url`` 的值必须与相应的 VCS 兼容,以便安装器可以将其不经" +"转换地直接移交给该 VCS 的检出/下载命令。" #: ../source/specifications/direct-url-data-structure.rst:66 msgid "" @@ -17763,6 +20299,9 @@ msgid "" "This field MUST match the revision requested by the user and MUST NOT exist " "when the user did not select a specific revision." msgstr "" +"可以存在 ``requested_revision`` 键(类型为 ``string``),用于指明分支/标签/引" +"用/提交/修订版本等(格式与相应的 VCS 兼容)。此字段必须与用户请求的修订版本一" +"致,并且在用户未选择特定修订版本时不得存在。" #: ../source/specifications/direct-url-data-structure.rst:70 msgid "" @@ -17771,22 +20310,29 @@ msgid "" "commit-hash based revision identifiers, such commit-hash MUST be used as " "``commit_id`` in order to reference an immutable version of the source code." msgstr "" +"必须存在 ``commit_id`` 键(类型为 ``string``),其中包含已安装或将要安装的确" +"切提交/修订版本号。如果 VCS 支持基于提交哈希的修订版本标识符,则必须将该提交" +"哈希用作 ``commit_id``,以便引用源代码的一个不可变版本。" #: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" -msgstr "" +msgstr "归档文件 URL" #: ../source/specifications/direct-url-data-structure.rst:82 msgid "" "When ``url`` refers to a source archive or a wheel, the ``archive_info`` key " "MUST be present as a dictionary with the following keys:" msgstr "" +"当 ``url`` 指向源归档文件或 wheel 包时,``archive_info`` 键必须存在,并且是一" +"个包含以下键的字典:" #: ../source/specifications/direct-url-data-structure.rst:85 msgid "" "A ``hashes`` key SHOULD be present as a dictionary mapping a hash name to a " "hex encoded digest of the file." msgstr "" +"应该存在 ``hashes`` 键,其值为一个字典,将哈希名称映射到该文件的十六进制编码" +"摘要。" #: ../source/specifications/direct-url-data-structure.rst:88 msgid "" @@ -17794,10 +20340,12 @@ msgid "" "to do with multiple hashes (it may validate all of them or a subset of them, " "or nothing at all)." msgstr "" +"可以包含多个哈希值,至于如何处理这些哈希值则由消费者自行决定(可以校验全部或" +"其中一部分,也可以完全不校验)。" #: ../source/specifications/direct-url-data-structure.rst:92 msgid "These hash names SHOULD always be normalized to be lowercase." -msgstr "" +msgstr "这些哈希名称应该始终规范化为小写。" #: ../source/specifications/direct-url-data-structure.rst:94 msgid "" @@ -17807,12 +20355,18 @@ msgid "" "secure algorithm from :py:data:`hashlib.algorithms_guaranteed` SHOULD always " "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" +"任何可以通过 :py:mod:`hashlib` 获取的哈希算法(具体而言,即任何可以传递给 " +":py:func:`hashlib.new()` 且不需要额外参数的算法)都可以用作哈希字典的键。应该" +"始终包含至少一种来自 :py:data:`hashlib.algorithms_guaranteed` 的安全算法。截" +"至撰写本文时,特别推荐使用 ``sha256``。" #: ../source/specifications/direct-url-data-structure.rst:100 msgid "" "A deprecated ``hash`` key (type ``string``) MAY be present for backwards " "compatibility purposes, with value ``=``." msgstr "" +"为了向后兼容,可以存在已弃用的 ``hash`` 键(类型为 ``string``),其值为 " +"``=``。" #: ../source/specifications/direct-url-data-structure.rst:103 msgid "" @@ -17821,6 +20375,9 @@ msgid "" "``hash`` key in contexts where they did so before, so as to keep backwards " "compatibility for existing clients." msgstr "" +"无论可用的哈希值是单个还是多个,该数据结构的生产者都应该输出 ``hashes`` 键。" +"在以前曾经输出 ``hash`` 键的场合,生产者应该继续输出该键,以便为现有客户端保" +"持向后兼容。" #: ../source/specifications/direct-url-data-structure.rst:107 msgid "" @@ -17829,16 +20386,21 @@ msgid "" "consumers can consider the ``hashes`` key only if it is present, and fall " "back to ``hash`` otherwise." msgstr "" +"当 ``hash`` 和 ``hashes`` 两个键同时存在时,``hash`` 键所表示的哈希值必须也存" +"在于 ``hashes`` 字典中,这样消费者就可以只在 ``hashes`` 键存在时考虑使用它," +"否则回退到 ``hash``。" #: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" -msgstr "" +msgstr "本地目录" #: ../source/specifications/direct-url-data-structure.rst:116 msgid "" "When ``url`` refers to a local directory, the ``dir_info`` key MUST be " "present as a dictionary with the following key:" msgstr "" +"当 ``url`` 指向本地目录时,``dir_info`` 键必须存在,并且是一个包含以下键的字" +"典:" #: ../source/specifications/direct-url-data-structure.rst:119 msgid "" @@ -17846,6 +20408,8 @@ msgid "" "installed in editable mode, ``false`` otherwise. If absent, default to " "``false``." msgstr "" +"``editable`` (类型为 ``boolean``):如果分发包已经或将要以可编辑模式安装,则" +"为 ``true``,否则为 ``false``。如果此键缺失,则默认为 ``false``。" #: ../source/specifications/direct-url-data-structure.rst:122 msgid "" @@ -17854,6 +20418,9 @@ msgid "" "absolute. Symbolic links SHOULD be preserved when making relative paths " "absolute." msgstr "" +"当 ``url`` 指向本地目录时,它必须使用 ``file`` 方案(scheme),并符合 " +":rfc:`8089`。特别是,其中的路径部分必须是绝对路径。在将相对路径转换为绝对路径" +"时,应该保留符号链接。" #: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" @@ -17865,10 +20432,13 @@ msgid "" "path, relative to the root of the VCS repository, source archive or local " "directory, to specify where ``pyproject.toml`` or ``setup.py`` is located." msgstr "" +"可以存在一个顶层的 ``subdirectory`` 字段,其值为一个目录路径,相对于 VCS 仓库" +"、源归档文件或本地目录的根目录,用于指明 ``pyproject.toml`` 或 ``setup.py`` " +"所在的位置。" #: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" -msgstr "" +msgstr "已注册的 VCS" #: ../source/specifications/direct-url-data-structure.rst:141 msgid "" @@ -17880,64 +20450,71 @@ msgid "" "name (lowercased). Additional fields that would be necessary to support such " "VCS SHOULD be prefixed with the VCS command name." msgstr "" +"本节列出了已注册的 VCS;针对各个 VCS 的具体信息,说明如何使用 " +"``vcs``、``requested_revision`` 以及 ``vcs_info`` 的其他字段;在某些情况下还" +"列出了额外的 VCS 特有字段。工具可以支持其他 VCS,不过建议通过撰写 PEP 修订本" +"规范的方式来注册它们。``vcs`` 字段应该为命令名称(小写形式)。为支持此类 VCS " +"所需的附加字段应该以该 VCS 的命令名称作为前缀。" #: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" -msgstr "" +msgstr "Git" #: ../source/specifications/direct-url-data-structure.rst:154 #: ../source/specifications/direct-url-data-structure.rst:181 #: ../source/specifications/direct-url-data-structure.rst:199 #: ../source/specifications/direct-url-data-structure.rst:217 msgid "Home page" -msgstr "" +msgstr "主页" #: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" -msgstr "" +msgstr "https://git-scm.com/" #: ../source/specifications/direct-url-data-structure.rst:157 #: ../source/specifications/direct-url-data-structure.rst:184 #: ../source/specifications/direct-url-data-structure.rst:202 #: ../source/specifications/direct-url-data-structure.rst:220 msgid "vcs command" -msgstr "" +msgstr "vcs 命令" #: ../source/specifications/direct-url-data-structure.rst:157 #: ../source/specifications/direct-url-data-structure.rst:160 msgid "git" -msgstr "" +msgstr "git" #: ../source/specifications/direct-url-data-structure.rst:160 #: ../source/specifications/direct-url-data-structure.rst:187 #: ../source/specifications/direct-url-data-structure.rst:205 #: ../source/specifications/direct-url-data-structure.rst:223 msgid "``vcs`` field" -msgstr "" +msgstr "``vcs`` 字段" #: ../source/specifications/direct-url-data-structure.rst:164 #: ../source/specifications/direct-url-data-structure.rst:190 #: ../source/specifications/direct-url-data-structure.rst:208 #: ../source/specifications/direct-url-data-structure.rst:227 msgid "``requested_revision`` field" -msgstr "" +msgstr "``requested_revision`` 字段" #: ../source/specifications/direct-url-data-structure.rst:163 msgid "" "A tag name, branch name, Git ref, commit hash, shortened commit hash, or " "other commit-ish." msgstr "" +"标签名、分支名、Git 引用(ref)、提交哈希、缩短的提交哈希,或其他可解析为提交" +"的标识(commit-ish)。" #: ../source/specifications/direct-url-data-structure.rst:167 #: ../source/specifications/direct-url-data-structure.rst:193 #: ../source/specifications/direct-url-data-structure.rst:211 #: ../source/specifications/direct-url-data-structure.rst:232 msgid "``commit_id`` field" -msgstr "" +msgstr "``commit_id`` 字段" #: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." -msgstr "" +msgstr "提交哈希(40 个十六进制字符的 sha1)。" #: ../source/specifications/direct-url-data-structure.rst:171 msgid "" @@ -17946,48 +20523,51 @@ msgid "" "ref beginning with ``refs/tags/`` corresponds to a tag, and a ref beginning " "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" +"工具可以使用 ``git show-ref`` 和 ``git symbolic-ref`` 命令来判断 " +"``requested_revision`` 是否对应某个 Git 引用(ref)。而以 ``refs/tags/`` 开头" +"的引用对应标签,克隆之后以 ``refs/remotes/origin/`` 开头的引用则对应分支。" #: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" -msgstr "" +msgstr "Mercurial" #: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" -msgstr "" +msgstr "https://www.mercurial-scm.org/" #: ../source/specifications/direct-url-data-structure.rst:184 #: ../source/specifications/direct-url-data-structure.rst:187 msgid "hg" -msgstr "" +msgstr "hg" #: ../source/specifications/direct-url-data-structure.rst:190 msgid "A tag name, branch name, changeset ID, shortened changeset ID." -msgstr "" +msgstr "标签名、分支名、变更集 ID、缩短的变更集 ID。" #: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." -msgstr "" +msgstr "变更集 ID(40 个十六进制字符)。" #: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" -msgstr "" +msgstr "Bazaar" #: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" -msgstr "" +msgstr "https://www.breezy-vcs.org/" #: ../source/specifications/direct-url-data-structure.rst:202 #: ../source/specifications/direct-url-data-structure.rst:205 msgid "bzr" -msgstr "" +msgstr "bzr" #: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." -msgstr "" +msgstr "标签名、分支名、修订版本 ID。" #: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." -msgstr "" +msgstr "修订版本 ID。" #: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" @@ -18000,67 +20580,77 @@ msgstr "" #: ../source/specifications/direct-url-data-structure.rst:220 #: ../source/specifications/direct-url-data-structure.rst:223 msgid "svn" -msgstr "" +msgstr "svn" #: ../source/specifications/direct-url-data-structure.rst:226 msgid "" "``requested_revision`` must be compatible with ``svn checkout`` ``--" "revision`` option. In Subversion, branch or tag is part of ``url``." msgstr "" +"``requested_revision`` 必须与 ``svn checkout`` 的 ``--revision`` 选项兼容。" +"在 Subversion 中,分支或标签是 ``url`` 的一部分。" #: ../source/specifications/direct-url-data-structure.rst:230 msgid "" "Since Subversion does not support globally unique identifiers, this field is " "the Subversion revision number in the corresponding repository." msgstr "" +"由于 Subversion 不支持全局唯一标识符,该字段为对应仓库中的 Subversion 修订版" +"本号。" #: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" -msgstr "" +msgstr "JSON Schema" #: ../source/specifications/direct-url-data-structure.rst:237 msgid "" "The following JSON Schema can be used to validate the contents of " "``direct_url.json``:" -msgstr "" +msgstr "可以使用下面的 JSON Schema 来验证 ``direct_url.json`` 的内容:" #: ../source/specifications/direct-url-data-structure.rst:244 msgid "Source archive:" -msgstr "" +msgstr "源归档文件:" #: ../source/specifications/direct-url-data-structure.rst:257 msgid "Git URL with tag and commit-hash:" -msgstr "" +msgstr "带标签和提交哈希的 Git URL:" #: ../source/specifications/direct-url-data-structure.rst:270 msgid "Local directory:" -msgstr "" +msgstr "本地目录:" #: ../source/specifications/direct-url-data-structure.rst:279 msgid "Local directory in editable mode:" -msgstr "" +msgstr "可编辑模式下的本地目录:" #: ../source/specifications/direct-url-data-structure.rst:294 msgid "" "March 2020: This specification was approved through :pep:`610`, defining the " "``direct_url.json`` metadata file." msgstr "" +"2020 年 3 月:本规范通过 :pep:`610` 获得批准,定义了 ``direct_url.json`` 元数" +"据文件。" #: ../source/specifications/direct-url-data-structure.rst:296 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." msgstr "" +"2023 年 1 月:新增了 ``archive_info.hashes`` 键(参见 `讨论 `_)。" #: ../source/specifications/entry-points.rst:5 msgid "Entry points specification" -msgstr "" +msgstr "入口点规范" #: ../source/specifications/entry-points.rst:7 msgid "" "*Entry points* are a mechanism for an installed distribution to advertise " "components it provides to be discovered and used by other code. For example:" msgstr "" +"*入口点* 是一种机制,已安装的分发包可以借助它公布自己提供的组件,供其他代码发" +"现和使用。例如:" #: ../source/specifications/entry-points.rst:11 msgid "" @@ -18069,6 +20659,9 @@ msgid "" "installs the distribution, it will create a command-line wrapper for each " "entry point." msgstr "" +"分发包可以指定 ``console_scripts`` 入口点,其中每个入口点都指向一个函数。当 " +"*pip* (或其他能识别 console_scripts 的安装器)安装该分发包时,会为每个入口点" +"创建一个命令行包装器。" #: ../source/specifications/entry-points.rst:14 msgid "" @@ -18077,6 +20670,9 @@ msgid "" "installed packages. For more about this, see :doc:`/guides/creating-and-" "discovering-plugins`." msgstr "" +"应用程序可以利用入口点来加载插件;例如,Pygments(一个语法高亮工具)可以使用" +"单独安装的软件包所提供的更多词法分析器和样式。更多信息请参阅 :doc:`/guides/" +"creating-and-discovering-plugins`。" #: ../source/specifications/entry-points.rst:19 msgid "" @@ -18090,14 +20686,20 @@ msgid "" "metadata (potentially with different caching and conflict resolution " "strategies)." msgstr "" +"入口点文件格式最初是为了让使用 setuptools 构建的软件包能够提供可在运行时通过 " +":py:mod:`importlib.metadata` 读取的集成点元数据。如今,它已被定义为一项 PyPA " +"互操作性规范,以便让 ``setuptools`` 之外的构建工具能够发布与 " +":py:mod:`importlib.metadata` 兼容的入口点元数据,也让 " +":py:mod:`importlib.metadata` 之外的运行时库能够以可移植的方式读取已发布的入口" +"点元数据(可能采用不同的缓存和冲突解决策略)。" #: ../source/specifications/entry-points.rst:28 msgid "Data model" -msgstr "" +msgstr "数据模型" #: ../source/specifications/entry-points.rst:30 msgid "Conceptually, an entry point is defined by three required properties:" -msgstr "" +msgstr "从概念上讲,入口点由三个必需属性来定义:" #: ../source/specifications/entry-points.rst:32 msgid "" @@ -18111,6 +20713,12 @@ msgid "" "more groups of letters, numbers and underscores, separated by dots (regex " "``^\\w+(\\.\\w+)*$``)." msgstr "" +"入口点所属的 **组** 表明该入口点提供的是什么类型的对象。例如" +",``console_scripts`` 组用于指向可当作命令使用的函数的入口点,而 " +"``pygments.styles`` 则是针对定义 pygments 样式的类的组。消费者通常会定义所期" +"望的接口。为避免冲突,定义新组的消费者应该让组名以该消费者项目所拥有的某个 " +"PyPI 名称开头,后面跟着 ``.``。组名必须是一个或多个由字母、数字和下划线组成的" +"组,组之间以点分隔(正则表达式 ``^\\w+(\\.\\w+)*$``)。" #: ../source/specifications/entry-points.rst:42 msgid "" @@ -18124,6 +20732,12 @@ msgid "" "is recommended to use only letters, numbers, underscores, dots and dashes " "(regex ``[\\w.-]+``)." msgstr "" +"**名称** 在其组内标识该入口点。其确切含义由消费者决定。对于控制台脚本,入口点" +"的名称就是用于启动它的命令。在同一个分发包内,入口点名称应该是唯一的。如果不" +"同的分发包提供了相同的名称,则由消费者决定如何处理此类冲突。名称可以包含除 " +"``=`` 之外的任何字符,但不能以任何空白字符开头或结尾,也不能以 ``[`` 开头。对" +"于新的入口点,建议仅使用字母、数字、下划线、点和连字符(正则表达式 ``[\\w.-" +"]+``)。" #: ../source/specifications/entry-points.rst:51 msgid "" @@ -18132,6 +20746,9 @@ msgid "" "parts delimited by dots and the colon is a valid Python identifier. It is " "intended to be looked up like this::" msgstr "" +"**对象引用** 指向一个 Python 对象。它的形式为 ``importable.module`` 或 " +"``importable.module:object.attr``。以点和冒号分隔的每个部分都是一个有效的 " +"Python 标识符。其预期的查找方式如下:::" #: ../source/specifications/entry-points.rst:64 msgid "" @@ -18139,6 +20756,8 @@ msgid "" "for want of a better term, especially where it points to a function to " "launch a program." msgstr "" +"由于缺乏更合适的术语,一些工具会把这种对象引用本身称为“入口点”,尤其是当它指" +"向一个用于启动程序的函数时。" #: ../source/specifications/entry-points.rst:68 msgid "" @@ -18147,6 +20766,9 @@ msgid "" "If these are specified, the entry point requires the dependencies of those " "'extras'. See the metadata field :ref:`metadata_provides_extra`." msgstr "" +"此外还有一个可选属性,即 **附加功能(extras)**:这是一组字符串,用于标识提供" +"该入口点的分发包的可选特性。如果指定了这些附加功能,该入口点就需要这些附加功" +"能的依赖项。参见元数据字段 :ref:`metadata_provides_extra`。" #: ../source/specifications/entry-points.rst:73 msgid "" @@ -18156,10 +20778,14 @@ msgid "" "of handling extras was tied to setuptools' model of managing 'egg' packages, " "but newer tools such as pip and virtualenv use a different model." msgstr "" +"不再推荐为入口点使用附加功能(extras)。消费者应该支持从现有分发包中解析它们" +",但随后可以将其忽略。新的发布工具无需支持指定附加功能。处理附加功能的机制原" +"本与 setuptools 管理“egg”软件包的模型相绑定,但 pip 和 virtualenv 等较新的工" +"具采用了不同的模型。" #: ../source/specifications/entry-points.rst:80 msgid "File format" -msgstr "" +msgstr "文件格式" #: ../source/specifications/entry-points.rst:82 msgid "" @@ -18169,6 +20795,10 @@ msgid "" "distributions, and in :ref:`binary-distribution-format` for wheels. The file " "uses the UTF-8 character encoding." msgstr "" +"入口点在分发包的 :file:`*.dist-info` 目录下一个名为 :file:`entry_points.txt` " +"的文件中定义。对于已安装的分发包,该目录就是在 :ref:`recording-installed-" +"packages` 中描述的目录;对于 wheel 包,就是在 :ref:`binary-distribution-" +"format` 中描述的目录。该文件使用 UTF-8 字符编码。" #: ../source/specifications/entry-points.rst:88 msgid "" @@ -18177,12 +20807,17 @@ msgid "" "whereas entry point names are case sensitive. A case-sensitive config parser " "can be made like this::" msgstr "" +"文件内容为 INI 格式,和 Python 的 :mod:`configparser` 模块读取的格式一样。不" +"过,configparser 默认不区分名称大小写,而入口点名称是区分大小写的。可以这样构" +"造一个区分大小写的配置解析器:::" #: ../source/specifications/entry-points.rst:98 msgid "" "The entry points file must always use ``=`` to delimit names from values " "(whereas configparser also allows using ``:``)." msgstr "" +"入口点文件必须始终使用 ``=`` 来分隔名称与值(而 configparser 还允许使用 " +"``:``)。" #: ../source/specifications/entry-points.rst:101 msgid "" @@ -18191,6 +20826,8 @@ msgid "" "extras. If extras are used, they are a comma-separated list inside square " "brackets." msgstr "" +"配置文件中的各个节表示入口点组,名称就是名称,值则同时编码了对象引用和可选的" +"附加功能。如果使用了附加功能,它们就是方括号内以逗号分隔的列表。" #: ../source/specifications/entry-points.rst:105 msgid "" @@ -18202,10 +20839,14 @@ msgid "" "writing the file, it is recommended only to insert a space between the " "object reference and the left square bracket." msgstr "" +"在值内部,读取器必须接受并忽略以下位置的空格(包括多个连续的空格):冒号之前" +"或之后、对象引用与左方括号之间、附加功能名称与分隔它们的方括号和冒号之间,以" +"及右方括号之后。附加功能的语法在 :ref:`dependency-specifiers` 中有正式规定。" +"对于写入该文件的工具,建议只在对象引用与左方括号之间插入一个空格。" #: ../source/specifications/entry-points.rst:127 msgid "Use for scripts" -msgstr "" +msgstr "用于脚本" #: ../source/specifications/entry-points.rst:129 msgid "" @@ -18217,12 +20858,18 @@ msgid "" "return an integer to be used as a process exit code, and returning ``None`` " "is equivalent to returning ``0``." msgstr "" +"在打包领域中,有两个入口点组具有特殊意义:``console_scripts`` 和 " +"``gui_scripts``。在这两个组中,软件包安装后,入口点的名称应该可以用作系统 " +"shell 中的命令。对象引用指向一个函数;当该命令运行时,会不带参数地调用这个函" +"数。该函数可以返回一个整数用作进程退出码,而返回 ``None`` 等价于返回 ``0``。" #: ../source/specifications/entry-points.rst:137 msgid "" "For instance, the entry point ``mycmd = mymod:main`` would create a command " "``mycmd`` launching a script like this::" msgstr "" +"例如,入口点 ``mycmd = mymod:main`` 将创建一条像这样启动脚本的 ``mycmd`` 命" +"令::" #: ../source/specifications/entry-points.rst:144 msgid "" @@ -18235,6 +20882,12 @@ msgid "" "unless application code redirects them. Other platforms do not have the same " "distinction." msgstr "" +"``console_scripts`` 与 ``gui_scripts`` 之间的差异仅影响 Windows 系统" +"。``console_scripts`` 会被包装在控制台可执行文件中,因此它们附着在控制台上," +"可以使用 :py:data:`sys.stdin`、:py:data:`sys.stdout` 和 " +":py:data:`sys.stderr` 进行输入和输出。``gui_scripts`` 会被包装在 GUI 可执行文" +"件中,因此可以在没有控制台的情况下启动,但除非应用程序代码重定向了标准流,否" +"则无法使用标准流。其他平台没有这种区别。" #: ../source/specifications/entry-points.rst:152 msgid "" @@ -18243,6 +20896,9 @@ msgid "" "not responsible for putting this directory in the ``PATH`` environment " "variable which defines where command-line tools are found." msgstr "" +"安装工具应当在安装方案的 scripts 目录中为 ``console_scripts`` 和 " +"``gui_scripts`` 都创建包装器。它们不负责将该目录放入定义命令行工具查找位置的 " +"``PATH`` 环境变量。" #: ../source/specifications/entry-points.rst:157 msgid "" @@ -18251,18 +20907,25 @@ msgid "" "only in case. The behaviour of install tools when names differ only in case " "is undefined." msgstr "" +"由于文件是根据名称创建的,而某些文件系统不区分大小写,因此软件包应该避免在这" +"些组中使用仅大小写不同的名称。当名称仅大小写不同时,安装工具的行为是未定义的" +"。" #: ../source/specifications/entry-points.rst:165 msgid "" "October 2017: This specification was written to formalize the existing entry " "points feature of setuptools (discussion_)." msgstr "" +"2017 年 10 月:编写本规范是为了将 setuptools 既有的入口点特性正式化(" +"discussion_)。" #: ../source/specifications/entry-points.rst:168 msgid "" "January 2026: Replaced outdated direct references to :pep:`508` " "and :pep:`685` with a reference to :ref:`dependency-specifiers`." msgstr "" +"2026 年 1 月:将对 :pep:`508` 和 :pep:`685` 的过时的直接引用替换为对 " +":ref:`dependency-specifiers` 的引用。" #: ../source/specifications/externally-managed-environments.rst:6 msgid "Externally Managed Environments" @@ -18275,6 +20938,9 @@ msgid "" "as the operating system package manager in a Linux distribution, or as a " "bundled Python environment in an application with a dedicated installer)." msgstr "" +"有些 Python 安装环境完全由安装 Python 的用户自行管理,另一些则可能通过其他途" +"径提供和管理(例如由 Linux 发行版中的操作系统软件包管理器管理,或是作为某个自" +"带专用安装程序的应用程序中捆绑的 Python 环境)。" #: ../source/specifications/externally-managed-environments.rst:13 msgid "" @@ -18283,6 +20949,8 @@ msgid "" "underlying operating system at worst. Documentation and interoperability " "guides only go so far in resolving such problems." msgstr "" +"试图用常规的 Python 打包工具去操纵这类环境,轻则令人困惑,重则彻底破坏整个底" +"层操作系统。文档和互操作性指南在解决此类问题方面作用有限。" #: ../source/specifications/externally-managed-environments.rst:18 msgid "" @@ -18292,6 +20960,9 @@ msgid "" "installation environment, and should instead guide the end user towards " "using :ref:`virtual-environments`." msgstr "" +"本规范定义了一种 ``EXTERNALLY-MANAGED`` 标记文件,让某个 Python 安装环境可以" +"向 ``pip`` 等 Python 专用工具表明:既不要在解释器的默认安装环境中安装软件包," +"也不要从中移除软件包,而应该引导最终用户去使用 :ref:`virtual-environments`。" #: ../source/specifications/externally-managed-environments.rst:24 msgid "" @@ -18301,10 +20972,13 @@ msgid "" "conflicting with the external package manager and reduces the risk of " "breaking software shipped by the external package manager." msgstr "" +"本规范还标准化了对 ``sysconfig`` 方案的一种解释:当某个 Python 软件包管理器要" +"在解释器全局范围内安装软件包时,它可以按一种避免与外部软件包管理器冲突的方式" +"进行,从而降低破坏外部软件包管理器所发布软件的风险。" #: ../source/specifications/externally-managed-environments.rst:32 msgid "Terminology" -msgstr "" +msgstr "术语" #: ../source/specifications/externally-managed-environments.rst:34 msgid "" @@ -18312,6 +20986,8 @@ msgid "" "contexts that it spans. For clarity, this specification uses the following " "terms in specific ways:" msgstr "" +"本规范中使用的少数术语,在其所涉及的语境里存在多重含义。为清晰起见,本规范按" +"特定的方式使用以下术语:" #: ../source/specifications/externally-managed-environments.rst:61 msgid "distro" @@ -18325,6 +21001,10 @@ msgid "" "and software written in other languages. That is, this is the sense used in " "phrases such as \"Linux distro\" or \"Berkeley Software Distribution.\"" msgstr "" +"“distribution” 的简称,指各类软件的集合,理想情况下这些软件被设计为能够正确地" +"协同工作,其中(就与本文档相关的语境而言)包括 Python 解释器本身、用 Python " +"编写的软件,以及用其他语言编写的软件。也就是说,这是 “Linux distro” 或 “" +"Berkeley Software Distribution” 等短语中 distribution 的含义。" #: ../source/specifications/externally-managed-environments.rst:46 msgid "" @@ -18332,6 +21012,9 @@ msgid "" "or FreeBSD. It can also be an overlay distribution that installs on top of " "an existing OS, such as Homebrew or MacPorts." msgstr "" +"发行版可以是一个独立的操作系统(OS),例如 Debian、Fedora 或 FreeBSD;也可以" +"是一种叠加安装在现有操作系统之上的发行版(overlay distribution),例如 " +"Homebrew 或 MacPorts。" #: ../source/specifications/externally-managed-environments.rst:51 msgid "" @@ -18343,12 +21026,19 @@ msgid "" "\"distribution\" at all. In the Python packaging sense, it uses the full " "phrase \"distribution package\" or just \"package\" (see below)." msgstr "" +"本文档使用 “distro” 这一简称,是因为 “distribution” 一词在 Python 打包语境中" +"另有所指:某个 Python 语言软件的源码或二进制分发包,即 " +"``setuptools.dist.Distribution`` 或 “sdist” 意义上的分发包。为避免混淆,本文" +"档完全不使用 “distribution” 这个泛称。在 Python 打包意义上,本文档使用完整短" +"语 “distribution package”(分发包)或简称 “package”(软件包,见下文)。" #: ../source/specifications/externally-managed-environments.rst:60 msgid "" "The provider of a distro - the team or company that collects and publishes " "the software and makes any needed modifications - is its **distributor**." msgstr "" +"发行版的提供者,即收集并发布软件、进行一切必要修改的团队或公司,就是该发行版" +"的 **发行商(distributor)**。" #: ../source/specifications/externally-managed-environments.rst:79 msgid "package" @@ -18361,6 +21051,10 @@ msgid "" "a :term:`distribution package` or simply a \"distribution\"; the colloquial " "abbreviation \"package\" is used in the sense of the Python Package Index." msgstr "" +"一个可以在 Python 中安装和使用的软件单元。也就是说,这里指的是 Python 专用打" +"包工具通常所称的 :term:`distribution package`,或者简称 “distribution”;而口" +"语化的简称 “package”(软件包)取的是 Python 包索引(Python Package Index)意" +"义上的用法。" #: ../source/specifications/externally-managed-environments.rst:70 msgid "" @@ -18368,6 +21062,8 @@ msgid "" "that contains Python modules, though in many cases, a distribution package " "consists of a single importable package of the same name." msgstr "" +"本文档不在“包含 Python 模块的可导入名称”(即导入包)的意义上使用 “package” 一" +"词,不过在许多情况下,一个分发包恰好由单个同名的可导入包组成。" #: ../source/specifications/externally-managed-environments.rst:75 msgid "" @@ -18377,6 +21073,10 @@ msgid "" "(Again, in many cases, a Python package is shipped inside a distro's package " "named something like ``python-`` plus the Python package name.)" msgstr "" +"本文档一般不使用 “package” 一词来指代发行版软件包管理器所安装的单元(例如 " +"``.deb`` 或 ``.rpm`` 文件)。确有需要时,本文档会使用诸如 “发行版的软件包” 的" +"表述。(同样,在许多情况下,Python 软件包是随某个发行版软件包一起提供的,该软" +"件包的名称类似于 ``python-`` 加上 Python 软件包名。)" #: ../source/specifications/externally-managed-environments.rst:102 msgid "Python-specific package manager" @@ -18390,12 +21090,17 @@ msgid "" "Install command `_ as well as direct usage of a ``setup.py`` " "command." msgstr "" +"以遵守 Python 打包标准的方式安装、升级和/或移除 Python 软件包的一个工具。最流" +"行的 Python 专用软件包管理器是 pip_;其他例子还包括旧的 `Easy Install 命令 " +"`_ 以及直接使用 ``setup.py`` 命令。" #: ../source/specifications/externally-managed-environments.rst:92 msgid "" "(Note that the ``easy_install`` command was removed in setuptools version " "52, released 23 January 2021.)" msgstr "" +"(请注意,``easy_install`` 命令已在 2021 年 1 月 23 日发布的 setuptools 52 版" +"本中被移除。)" #: ../source/specifications/externally-managed-environments.rst:96 msgid "" @@ -18405,6 +21110,10 @@ msgid "" "on Conda-created environments, most of the concerns in this document do not " "apply to ``conda`` when acting as a Python-specific package manager.)" msgstr "" +"(Conda_ 算是个特例,因为 ``conda`` 命令所能安装的远不止 Python 软件包,从某" +"些方面看,它更像是发行版软件包管理器。由于 ``conda`` 命令通常只在 Conda 创建" +"的环境中操作,当其充当 Python 专用软件包管理器时,本文档中的大部分顾虑并不适" +"用于 ``conda``。)" #: ../source/specifications/externally-managed-environments.rst:118 msgid "distro package manager" @@ -18422,6 +21131,13 @@ msgid "" "upgrading it in a way that would satisfy a Python-specific package manager " "will generally leave a distro package manager in an inconsistent state." msgstr "" +"一种用于在某个发行版的已安装实例中安装、升级和/或移除该发行版软件包的工具,它" +"既能安装 Python 软件包,也能安装非 Python 软件包,因此通常拥有自己独立的已安" +"装软件数据库,与 :ref:`已安装分发包的数据库 ` " +"并不相关。例子包括 ``apt``、``dpkg``、``dnf``、``rpm``、``pacman`` 和 " +"``brew``。其显著特征在于:如果某个软件包是由发行版软件包管理器安装的,那么以" +"满足 Python 专用软件包管理器要求的方式移除或升级它,通常会使发行版软件包管理" +"器陷入不一致的状态。" #: ../source/specifications/externally-managed-environments.rst:117 msgid "" @@ -18429,10 +21145,12 @@ msgid "" "\"system's package manager\" to refer to a distro package manager in certain " "contexts." msgstr "" +"在某些语境下,本文档也会使用 “外部软件包管理器” 或 “系统软件包管理器” 等说法" +"来指代发行版软件包管理器。" #: ../source/specifications/externally-managed-environments.rst:127 msgid "shadow" -msgstr "" +msgstr "遮蔽(shadow)" #: ../source/specifications/externally-managed-environments.rst:121 msgid "" @@ -18443,10 +21161,15 @@ msgid "" "``a.py`` in a later ``sys.path`` entry, then ``import a`` returns the module " "from the former, and we say that A 2.0 shadows A 1.0." msgstr "" +"遮蔽(shadow)一个已安装的 Python 软件包,是指让其他某个软件包在导入时被优先" +"选用,而不移除被遮蔽软件包中的任何文件。这要求 ``sys.path`` 上有多个条目:如" +"果软件包 A 2.0 在某个 ``sys.path`` 条目中安装了模块 ``a.py``,而软件包 A 1.0 " +"在更靠后的某个 ``sys.path`` 条目中安装了模块 ``a.py``,那么 ``import a`` 返回" +"的是前者的模块,此时我们就说 A 2.0 遮蔽了 A 1.0。" #: ../source/specifications/externally-managed-environments.rst:132 msgid "This specification is twofold." -msgstr "" +msgstr "本规范包含两部分内容。" #: ../source/specifications/externally-managed-environments.rst:134 msgid "" @@ -18458,6 +21181,10 @@ msgid "" "provides a means for the distributor to indicate how to use a virtual " "environment as an alternative." msgstr "" +"首先,它描述了 **一种供 Python 解释器发行商将解释器标记为“其软件包由 Python " +"之外的手段管理”的方法**,如此一来,除非被明确覆盖,pip 之类的 Python 专用工具" +"就不应该以任何方式(添加、升级/降级或移除)更改解释器全局 ``sys.path`` 中已安" +"装的软件包。它还为发行商提供了一种途径,用以说明如何以虚拟环境作为替代方案。" #: ../source/specifications/externally-managed-environments.rst:142 msgid "" @@ -18466,6 +21193,9 @@ msgid "" "with a self-compiled interpreter, or with a distro that has not explicitly " "marked its interpreter, will work as it always has worked." msgstr "" +"这是一种选择性启用(opt-in)的机制:默认情况下,从上游源代码编译的 Python 解" +"释器不会被如此标记,因此,使用自行编译的解释器,或使用未显式标记其解释器的发" +"行版时,运行 ``pip install`` 会一如既往地正常工作。" #: ../source/specifications/externally-managed-environments.rst:148 msgid "" @@ -18479,10 +21209,16 @@ msgid "" "packages will not delete (or overwrite) files owned by the external package " "manager." msgstr "" +"其次,它确立了这样一条规则:若向解释器的全局环境安装软件包(无论是向未加标记" +"的解释器安装,还是在覆盖该标记的情况下安装),则 **Python 专用软件包管理器应" +"该只在其本来会创建文件的那部分 sysconfig 方案目录之内修改或删除文件**。这允" +"许 Python 解释器的发行商设置两个目录:一个用于其自行管理的软件包,另一个用于" +"最终用户安装的非托管软件包,并确保安装非托管软件包不会删除(或覆盖)外部软件" +"包管理器所拥有的文件。" #: ../source/specifications/externally-managed-environments.rst:160 msgid "Marking an interpreter as using an external package manager" -msgstr "" +msgstr "将解释器标记为使用外部软件包管理器" #: ../source/specifications/externally-managed-environments.rst:162 msgid "" @@ -18490,18 +21226,24 @@ msgid "" "not an external tool such as apt) installs a package into a certain Python " "context, it should make the following checks by default:" msgstr "" +"在 Python 专用软件包安装程序(也就是 pip 之类的工具,而不是 apt 之类的外部工" +"具)将软件包安装到某个 Python 环境之前,它默认应该进行以下检查:" #: ../source/specifications/externally-managed-environments.rst:167 msgid "" "Is it running outside of a virtual environment? It can determine this by " "whether ``sys.prefix == sys.base_prefix``." msgstr "" +"它是否运行在虚拟环境之外?它可以通过 ``sys.prefix == sys.base_prefix`` 是否成" +"立来确定这一点。" #: ../source/specifications/externally-managed-environments.rst:170 msgid "" "Is there an ``EXTERNALLY-MANAGED`` file in the directory identified by " "``sysconfig.get_path(\"stdlib\", sysconfig.get_default_scheme())``?" msgstr "" +"在由 ``sysconfig.get_path(\"stdlib\", sysconfig.get_default_scheme())`` 标识" +"的目录中,是否存在 ``EXTERNALLY-MANAGED`` 文件?" #: ../source/specifications/externally-managed-environments.rst:173 msgid "" @@ -18509,6 +21251,8 @@ msgid "" "error message indicating that package installation into this Python " "interpreter's directory are disabled outside of a virtual environment." msgstr "" +"如果这两个条件都成立,安装程序就应该退出并输出一条错误消息,指出在虚拟环境之" +"外已禁止向此 Python 解释器的目录安装软件包。" #: ../source/specifications/externally-managed-environments.rst:177 msgid "" @@ -18517,6 +21261,9 @@ msgid "" "be enabled by default and should carry some connotation that its use is " "risky." msgstr "" +"安装程序应该提供让用户覆盖这些规则的方法,例如一个命令行标志 ``--break-" +"system-packages``。这个选项不应该默认启用,并且应该在一定程度上暗示使用它是有" +"风险的。" #: ../source/specifications/externally-managed-environments.rst:182 msgid "" @@ -18534,6 +21281,16 @@ msgid "" "underscore or hyphen. If it cannot find either of those, or if the language " "code is ``None``, it should look for a key simply named ``Error``." msgstr "" +"``EXTERNALLY-MANAGED`` 文件是一种 INI 风格的元数据文件,旨在让标准库的 " +"configparser_ 模块能够解析。如果该文件能够以 UTF-8 编码被 " +"``configparser.ConfigParser(interpolation=None)`` 解析,并且包含一个 " +"``[externally-managed]`` 节,那么安装程序就应该在文件中查找其中指定的错误消息" +",并将其作为错误输出的一部分。如果 ``locale.getlocale(locale.LC_MESSAGES)`` " +"返回的元组的第一个元素(即语言代码)不是 ``None``,它就应该查找一个名为 " +"``Error-`` 加语言代码的键,并把该键的值作为错误消息。如果这个键不存在,而且语" +"言代码中包含下划线或连字符,它就应该查找一个名为 ``Error-`` 加语言代码中下划" +"线或连字符之前部分的键。如果这两者都找不到,或者语言代码为 ``None``,它就应该" +"查找一个仅名为 ``Error`` 的键。" #: ../source/specifications/externally-managed-environments.rst:200 msgid "" @@ -18543,6 +21300,9 @@ msgid "" "should suggest that the user create a virtual environment to install " "packages." msgstr "" +"如果安装程序无法在文件中找到错误消息(要么是因为文件无法解析,要么是因为不存" +"在合适的错误键),那么它就应该直接使用自己预定义的错误消息,而这条消息应该建" +"议用户创建虚拟环境来安装软件包。" #: ../source/specifications/externally-managed-environments.rst:206 msgid "" @@ -18552,12 +21312,18 @@ msgid "" "directory. For instance, Debian may ship a file in ``/usr/lib/python3.9/" "EXTERNALLY-MANAGED`` consisting of something like" msgstr "" +"如果软件发行商拥有一个非 Python 专用的软件包管理器,并且该管理器会管理其 " +"Python 软件包 ``sys.path`` 中的库,那么这些发行商通常应该在自己的标准库目录中" +"提供一个 ``EXTERNALLY-MANAGED`` 文件。例如,Debian 可以在 ``/usr/lib/" +"python3.9/EXTERNALLY-MANAGED`` 中提供一个内容大致如下的文件" #: ../source/specifications/externally-managed-environments.rst:230 msgid "" "which provides useful and distro-relevant information to a user trying to " "install a package. Optionally, translations can be provided in the same file:" msgstr "" +"它能为试图安装软件包的用户提供有用且与发行版相关的信息。此外,还可以选择在同" +"一文件中提供译文:" #: ../source/specifications/externally-managed-environments.rst:240 msgid "" @@ -18566,10 +21332,13 @@ msgid "" "MANAGED`` file, so that users can install whatever they like (as they can " "today) without having to manually override this rule." msgstr "" +"在某些场景下,例如创建之后不再更新的单应用程序容器镜像,发行商可以选择不提供 " +"``EXTERNALLY-MANAGED`` 文件,这样用户无需手动覆盖这条规则即可安装任何想要的软" +"件包(一如现状)。" #: ../source/specifications/externally-managed-environments.rst:247 msgid "Writing to only the target ``sysconfig`` scheme" -msgstr "" +msgstr "只写入目标 ``sysconfig`` 方案" #: ../source/specifications/externally-managed-environments.rst:249 msgid "" @@ -18578,6 +21347,10 @@ msgid "" "the scheme returned by ``sysconfig.get_default_scheme()``, but based on " "configuration (e.g. ``pip install --user``), it may use a different scheme." msgstr "" +"通常,Python 软件包安装程序会安装到由 ``sysconfig`` 标准库软件包返回的某个方" +"案中的目录。一般情况下,这个方案就是 ``sysconfig.get_default_scheme()`` 所返" +"回的方案,但根据配置的不同(例如 ``pip install --user``),它也可能使用别的方" +"案。" #: ../source/specifications/externally-managed-environments.rst:255 msgid "" @@ -18588,38 +21361,48 @@ msgid "" "in a directory from another scheme), it should leave the existing files " "alone." msgstr "" +"每当安装程序向某个 ``sysconfig`` 方案安装时,本规范都声明:安装程序绝不应该修" +"改或删除该方案之外的文件。举例来说,假如它正在升级某个软件包,而该软件包已经" +"安装在方案之外的某个目录里(也许属于另一个方案),那么它就应该不去动那些现有" +"的文件。" #: ../source/specifications/externally-managed-environments.rst:262 msgid "" "If the installer does end up shadowing an existing installation during an " "upgrade, we recommend that it produces a warning at the end of its run." msgstr "" +"如果安装程序在升级过程中最终确实遮蔽了现有的安装,我们建议它在运行结束时给出" +"一条警告。" #: ../source/specifications/externally-managed-environments.rst:266 msgid "" "If the installer is installing to a location outside of a ``sysconfig`` " "scheme (e.g., ``pip install --target``), then this subsection does not apply." msgstr "" +"如果安装程序正在安装到 ``sysconfig`` 方案之外的位置(例如 ``pip install --" +"target``),那么本小节并不适用。" #: ../source/specifications/externally-managed-environments.rst:271 msgid "Recommendations for distros" -msgstr "" +msgstr "对发行版的建议" #: ../source/specifications/externally-managed-environments.rst:273 msgid "" "This section is non-normative. It provides best practices we believe distros " "should follow unless they have a specific reason otherwise." msgstr "" +"本节是非规范性的。其中给出的是我们认为发行版应该遵循的最佳实践,除非发行版有" +"特定的理由另作处理。" #: ../source/specifications/externally-managed-environments.rst:277 msgid "Mark the installation as externally managed" -msgstr "" +msgstr "将安装环境标记为外部管理" #: ../source/specifications/externally-managed-environments.rst:279 msgid "" "Distros should create an ``EXTERNALLY-MANAGED`` file in their ``stdlib`` " "directory." -msgstr "" +msgstr "发行版应该在其 ``stdlib`` 目录中创建一个 ``EXTERNALLY-MANAGED`` 文件。" #: ../source/specifications/externally-managed-environments.rst:283 msgid "Guide users towards virtual environments" @@ -18635,6 +21418,11 @@ msgid "" "venv`` does not work, the message should indicate clearly how to make " "``python3 -m venv`` work properly." msgstr "" +"该文件应该包含一条有用且与发行版相关的错误消息,既说明如何通过发行版的软件包" +"管理器安装系统级软件包,也说明如何建立虚拟环境。如果你的发行版经常被用户在 " +"``python3`` 命令可用(尤其是 ``pip`` 或 ``get-pip`` 可用)而 ``python3 -m " +"venv`` 无法工作的状态下使用,那么该消息就应该清楚地说明如何让 ``python3 -m " +"venv`` 正常工作。" #: ../source/specifications/externally-managed-environments.rst:293 msgid "" @@ -18649,10 +21437,17 @@ msgid "" "for Python for end users (e.g., ``python3`` on Fedora or ``python3-full`` on " "Debian) depends on pipx." msgstr "" +"可以考虑打包 pipx_,并在错误消息中推荐这款用于安装 Python 语言应用程序的工具" +"。pipx 会自动为对应的应用程序单独创建一个虚拟环境,对于想要安装某些 Python 语" +"言软件(发行版中未提供)但自己并非 Python 用户的最终用户来说,这是好得多的默" +"认选择。在发行版中打包 pipx 可以避免这样的讽刺局面:为了 *避免* 破坏系统软件" +"包,却要指导用户去执行 ``pip install --user --break-system-packages pipx``。" +"你还可以考虑作出安排,让你的发行版面向最终用户的 Python 软件包/环境(例如 " +"Fedora 上的 ``python3`` 或 Debian 上的 ``python3-full``)依赖 pipx。" #: ../source/specifications/externally-managed-environments.rst:308 msgid "Keep the marker file in container images" -msgstr "" +msgstr "在容器镜像中保留标记文件" #: ../source/specifications/externally-managed-environments.rst:310 msgid "" @@ -18662,10 +21457,13 @@ msgid "" "installs package updates inside their image (think ``RUN apt-get dist-" "upgrade``)." msgstr "" +"为单应用程序容器(例如 Docker 容器镜像)制作官方镜像的发行版,应该保留 " +"``EXTERNALLY-MANAGED`` 文件,最好采用这样的方式:即使镜像的用户在镜像内部安装" +"软件包更新(想想 ``RUN apt-get dist-upgrade``),该文件也不会消失。" #: ../source/specifications/externally-managed-environments.rst:317 msgid "Create separate distro and local directories" -msgstr "" +msgstr "创建相互独立的发行版目录和本地目录" #: ../source/specifications/externally-managed-environments.rst:319 msgid "" @@ -18677,6 +21475,11 @@ msgid "" "the local system administrator should come before the distro path on " "``sys.path`` so that local installs take preference over distro packages." msgstr "" +"各发行版应该在系统解释器的 ``sys.path`` 上放置两条相互独立的路径,一条用于发" +"行版安装的软件包,另一条用于本地系统管理员安装的软件包,并把 " +"``sysconfig.get_default_scheme()`` 配置为指向后一条路径。这样可以确保 pip 之" +"类的工具不会修改发行版安装的软件包。本地系统管理员的路径在 ``sys.path`` 上应" +"该排在发行版路径之前,使本地安装的软件包优先于发行版软件包。" #: ../source/specifications/externally-managed-environments.rst:328 msgid "" @@ -18691,6 +21494,14 @@ msgid "" "wishes to make sure that packages installed via the locally-built " "interpreter don't show up on ``sys.path`` for the distro interpreter.)" msgstr "" +"举例来说,Fedora 和 Debian(以及它们的衍生版)都实现了这种划分:本地安装的软" +"件包使用 ``/usr/local``,发行版安装的软件包使用 ``/usr``。Fedora 使用 ``/usr/" +"local/lib/python3.x/site-packages`` 与 ``/usr/lib/python3.x/site-packages``。" +"(Debian 则使用 ``/usr/local/lib/python3/dist-packages`` 与 ``/usr/lib/" +"python3/dist-packages``,作为与本地编译的 Python 解释器之间的又一层隔离:如果" +"你把上游 CPython 构建并安装到 ``/usr/local/bin``,它会去查看 ``/usr/local/" +"lib/python3/site-packages``,而 Debian 希望确保通过本地构建的解释器安装的软件" +"包不会出现在发行版解释器的 ``sys.path`` 上。)" #: ../source/specifications/externally-managed-environments.rst:341 msgid "" @@ -18699,6 +21510,9 @@ msgid "" "and non-distro software installs to ``/usr/local`` by default. This split is " "`recommended by the Filesystem Hierarchy Standard`__." msgstr "" +"请注意,``/usr/local`` 与 ``/usr`` 的划分与此类似:``PATH`` 环境变量通常包含 " +"``/usr/local/bin:/usr/bin``,非发行版软件默认也安装到 ``/usr/local``。这种划" +"分方式为 `文件系统层次结构标准`__ 所推荐。" #: ../source/specifications/externally-managed-environments.rst:349 msgid "" @@ -18707,6 +21521,9 @@ msgid "" "wheel or call ``setup.py install``), arrange for those tools to use a " "directory that is not in a ``sysconfig`` scheme but is still on ``sys.path``." msgstr "" +"有两种方法可以做到这一点。其一:如果你在直接构建和打包 Python 库(例如你的打" +"包辅助工具会解包 wheel 或调用 ``setup.py install``),可以让这些工具使用一个" +"不在某个 ``sysconfig`` 方案中、但仍在 ``sys.path`` 上的目录。" #: ../source/specifications/externally-managed-environments.rst:355 msgid "" @@ -18719,6 +21536,11 @@ msgid "" "from inside a package build. Then you can use ``pip install`` as part of " "your distro packaging." msgstr "" +"另一种方法是让默认的 ``sysconfig`` 方案在软件包构建内部运行时与在已安装的系统" +"上运行时有所不同。来自 bpo-43976_ 的 ``sysconfig`` 定制钩子应该能让这件事变得" +"容易(在被接受和实现之后):让你的打包工具设置一个环境变量或其他某种可检测的" +"配置,并定义一个 ``get_preferred_schemes`` 函数,使其在从软件包构建内部被调用" +"时返回不同的方案。这样你就可以在发行版打包过程中使用 ``pip install`` 了。" #: ../source/specifications/externally-managed-environments.rst:367 msgid "" @@ -18731,6 +21553,12 @@ msgid "" "absolutely needed, use ``pip uninstall --scheme=posix_distro`` to use pip to " "remove packages from the system-managed directory." msgstr "" +"我们提议为 pip 增加一个 ``--scheme=...`` 选项,指示 pip 针对特定方案运行。(" +"关于 pip 目前如何确定方案,请参见下文的 `实现注意事项`_ 一节。)一旦该选项可" +"用,出于本地测试的目的(也可能包括实际的打包),你就可以运行类似 ``pip " +"install --scheme=posix_distro`` 的命令,把软件包显式安装到你发行版的位置(绕" +"过 ``get_preferred_schemes``)。如果确有必要,也可以使用 ``pip uninstall --" +"scheme=posix_distro`` 来让 pip 从系统管理的目录中移除软件包。" #: ../source/specifications/externally-managed-environments.rst:377 msgid "" @@ -18739,6 +21567,9 @@ msgid "" "the command line. You may want to use the same means for suppressing the " "marker file in build chroots as you do in container images." msgstr "" +"要用 pip 安装软件包,你还需要屏蔽 ``EXTERNALLY-MANAGED`` 标记文件以便允许 " +"pip 运行,或者在命令行上覆盖它。你可能希望像在容器镜像中那样,在构建 chroot " +"环境中使用同样的方式来屏蔽标记文件。" #: ../source/specifications/externally-managed-environments.rst:383 msgid "" @@ -18751,12 +21582,18 @@ msgid "" "packaging process always calls ``pip install --scheme=posix_distro --break-" "system-packages``, which would work too." msgstr "" +"把这些设置做成自动的(在你的构建环境中屏蔽标记文件,并让 " +"``get_preferred_schemes`` 自动返回你发行版的方案)好处在于:直接运行 ``pip " +"install`` 也能在软件包构建内部正常工作,这通常意味着,某个碰巧在内部调用了 " +"``pip install`` 的未经修改的上游构建脚本也会做正确的事。当然,你也可以只是确" +"保你的打包流程始终调用 ``pip install --scheme=posix_distro --break-system-" +"packages``,这同样可行。" #: ../source/specifications/externally-managed-environments.rst:393 msgid "" "The best approach here depends a lot on your distro's conventions and " "mechanisms for packaging." -msgstr "" +msgstr "这里的最佳做法在很大程度上取决于你的发行版在打包方面的惯例和机制。" #: ../source/specifications/externally-managed-environments.rst:396 msgid "" @@ -18771,6 +21608,14 @@ msgid "" "``scripts`` and ``/usr/bin`` for distro-packaged entry points and place both " "on ``$PATH``." msgstr "" +"类似地,不用于可导入 Python 代码的那些 ``sysconfig`` 路径(即 " +"``include``、``platinclude``、``scripts`` 和 ``data``)也应该有两种变体:一种" +"供发行版打包的软件使用,另一种供本地安装的软件使用,并且发行版应该做好设置," +"让两者都可用。例如,一个遵循 FHS 的典型发行版会把 ``/usr/local/include`` 用作" +"默认方案的 ``include`` 路径,把 ``/usr/include`` 用作发行版打包的头文件所在路" +"径,并把两者都放到编译器的搜索路径上;它会把 ``/usr/local/bin`` 用作默认方案" +"的 ``scripts`` 路径,把 ``/usr/bin`` 用作发行版打包的入口点所在路径,并把两者" +"都放到 ``$PATH`` 上。" #: ../source/specifications/externally-managed-environments.rst:410 msgid "Implementation Notes" @@ -18780,7 +21625,7 @@ msgstr "实现注意事项" msgid "" "This section is non-normative and contains notes relevant to both the " "specification and potential implementations." -msgstr "" +msgstr "本节是非规范性的,包含与本规范和潜在实现都相关的注意事项。" #: ../source/specifications/externally-managed-environments.rst:415 msgid "" @@ -18788,6 +21633,8 @@ msgid "" "target ``sysconfig`` scheme, but it has three ways of looking up schemes " "when installing:" msgstr "" +"目前(截至 2021 年 5 月),pip 并没有直接提供选择目标 ``sysconfig`` 方案的途" +"径,但它在安装时有三种查找方案的方式:" #: ../source/specifications/externally-managed-environments.rst:422 msgid "``pip install``" @@ -18799,6 +21646,8 @@ msgid "" "CPython and most current distros) the same as " "``get_preferred_scheme('prefix')``." msgstr "" +"调用 ``sysconfig.get_default_scheme()``,它通常(在上游 CPython 和大多数当前" +"的发行版中)与 ``get_preferred_scheme('prefix')`` 相同。" #: ../source/specifications/externally-managed-environments.rst:425 msgid "``pip install --prefix=/some/path``" @@ -18806,7 +21655,7 @@ msgstr "``pip install --prefix=/some/path``" #: ../source/specifications/externally-managed-environments.rst:425 msgid "Calls ``sysconfig.get_preferred_scheme('prefix')``." -msgstr "" +msgstr "调用 ``sysconfig.get_preferred_scheme('prefix')``。" #: ../source/specifications/externally-managed-environments.rst:428 msgid "``pip install --user``" @@ -18814,13 +21663,15 @@ msgstr "``pip install --user``" #: ../source/specifications/externally-managed-environments.rst:428 msgid "Calls ``sysconfig.get_preferred_scheme('user')``." -msgstr "" +msgstr "调用 ``sysconfig.get_preferred_scheme('user')``。" #: ../source/specifications/externally-managed-environments.rst:430 msgid "" "Finally, ``pip install --target=/some/path`` writes directly to ``/some/" "path`` without looking up any schemes." msgstr "" +"最后,``pip install --target=/some/path`` 会直接写入 ``/some/path``,而不查找" +"任何方案。" #: ../source/specifications/externally-managed-environments.rst:433 msgid "" @@ -18833,6 +21684,11 @@ msgid "" "``sysconfig`` scheme, and notably does not change the result of " "``sysconfig.get_path(\"stdlib\")``." msgstr "" +"Debian 目前携带了一个 `用于更改虚拟环境内默认安装位置的补丁`__ ,它使用了一些" +"启发式规则(包括检查 ``VIRTUAL_ENV`` 环境变量),主要是为了让虚拟环境中使用的" +"目录保持为 ``site-packages`` 而不是 ``dist-packages`` 。这对本提案并没有特别" +"的影响,因为该补丁的实现实际上并没有更改默认的 ``sysconfig`` 方案,尤其没有更" +"改 ``sysconfig.get_path(\"stdlib\")`` 的结果。" #: ../source/specifications/externally-managed-environments.rst:445 msgid "" @@ -18842,6 +21698,10 @@ msgid "" "envisioned by bpo-43976_, except implemented as a code patch to " "``distutils`` instead of as a changed ``sysconfig`` scheme." msgstr "" +"Fedora 目前携带了一个 `用于未在 rpmbuild 内运行时更改默认安装位置的补丁`__ ," +"他们用它来实现采用两个系统级目录的做法。从概念上讲,这正是 bpo-43976_ 所设想" +"的那类钩子,只不过以 ``distutils`` 的代码补丁形式实现,而不是作为更改的 " +"``sysconfig`` 方案来实现。" #: ../source/specifications/externally-managed-environments.rst:454 msgid "" @@ -18851,28 +21711,33 @@ msgid "" "respectively), to centralize their implementations, but they don't need to " "be added yet." msgstr "" +"上文 ``is_virtual_environment`` 的实现,以及加载 ``EXTERNALLY-MANAGED`` 文件" +"并从中找出错误消息的逻辑,不妨也加入标准库(分别加入 ``sys`` 和 " +"``sysconfig``)以便集中它们的实现,不过目前还没有必要加入。" #: ../source/specifications/externally-managed-environments.rst:464 msgid "Copyright" -msgstr "" +msgstr "版权" #: ../source/specifications/externally-managed-environments.rst:466 msgid "" "This document is placed in the public domain or under the CC0-1.0-Universal " "license, whichever is more permissive." msgstr "" +"本文档被置于公共领域,或在 CC0-1.0-Universal 许可证下发布,以两者中更宽松者为" +"准。" #: ../source/specifications/externally-managed-environments.rst:474 msgid "June 2022: This specification was approved through :pep:`668`." -msgstr "" +msgstr "2022 年 6 月:本规范通过 :pep:`668` 获得批准。" #: ../source/specifications/file-yanking.rst:5 msgid "File Yanking" -msgstr "" +msgstr "文件撤回" #: ../source/specifications/file-yanking.rst:9 msgid "This specification was originally defined in :pep:`592`." -msgstr "" +msgstr "本规范最初定义于 :pep:`592`。" #: ../source/specifications/file-yanking.rst:14 msgid "" @@ -18881,6 +21746,10 @@ msgid "" "Project Detail ` and :ref:`JSON - " "Project Detail `." msgstr "" +":pep:`592` 包含对 HTML 和 JSON 索引 API 的更改。这些更改记录在 :ref:`simple-" +"repository-api` 的 :ref:`HTML - 项目详情 ` 和 :ref:`JSON - 项目详情 ` 两" +"节中。" #: ../source/specifications/file-yanking.rst:22 msgid "" @@ -18891,6 +21760,9 @@ msgid "" "\"Yanked\", and should not generally be selected by an installer, except " "under specific scenarios." msgstr "" +"简单仓库中的链接 **可以** 带有 ``data-yanked`` 属性,该属性可以没有值,也可以" +"将任意字符串作为值。如果存在 ``data-yanked`` 属性,则 **应该** 将其存在解释为" +":该特定链接指向的文件已被“撤回”,除特定场景外,安装程序一般不应选择该文件。" #: ../source/specifications/file-yanking.rst:29 msgid "" @@ -18899,6 +21771,8 @@ msgid "" "that process the simple repository API **MAY** surface this string to end " "users." msgstr "" +"``data-yanked`` 属性的值(如果存在)是一个任意字符串,表示该文件被撤回的原因" +"。处理简单仓库 API 的工具 **可以** 将该字符串呈现给最终用户。" #: ../source/specifications/file-yanking.rst:34 msgid "" @@ -18907,6 +21781,9 @@ msgid "" "be able to cope with a yanked file being \"unyanked\" (and even yanked " "again)." msgstr "" +"撤回属性一旦设置就并非不可变,将来可能被撤销(而一旦撤销,也可能被重新设置)" +"。因此,API 用户 **必须** 能够应对已撤回的文件被“取消撤回”(甚至再次被撤回)" +"的情形。" #: ../source/specifications/file-yanking.rst:40 msgid "Installers" @@ -18921,6 +21798,10 @@ msgid "" "original order to install the now yanked file, then it acts as if it had not " "been yanked." msgstr "" +"理想的用户体验是:一旦文件被撤回,如果此刻有人正试图直接安装该已撤回的文件," +"安装就应当像该文件已被删除一样失败。然而,如果是某人先前发出的请求,现在只是" +"计算机在机械地继续执行原始指令来安装这个如今已被撤回的文件,那么就应当表现得" +"如同该文件未被撤回一样。" #: ../source/specifications/file-yanking.rst:49 msgid "" @@ -18931,6 +21812,10 @@ msgid "" "intention above, and that prevents \"new\" dependencies on yanked releases/" "files." msgstr "" +"如果选择约束可以由某个未撤回的版本来满足,安装程序就 **必须** 忽略已撤回的版" +"本;而且即使这意味着请求完全无法满足,安装程序也 **可以** 拒绝使用已撤回的版" +"本。实现 **应该** 选择一种既遵循上述意图的精神、又能防止对已撤回的版本/文件产" +"生“新”依赖的策略。" #: ../source/specifications/file-yanking.rst:56 msgid "" @@ -18938,6 +21823,8 @@ msgid "" "fit into the overall usage of their installer. However, there are two " "suggested approaches to take:" msgstr "" +"其中的具体含义由各个安装程序自行决定,以最契合该安装程序的整体使用方式。不过" +",有两种建议的做法:" #: ../source/specifications/file-yanking.rst:60 msgid "" @@ -18948,6 +21835,10 @@ msgid "" "version specifiers specification ` for things like local " "versions, zero padding, etc." msgstr "" +"已撤回的文件总是被忽略,除非它们是唯一匹配某个版本说明符的文件,而该版本说明" +"符使用 ``==`` (不带任何会使其变成范围匹配的修饰符,例如 ``.*``)或 ``===`` " +"将版本“锁定”到确切版本。除此之外,对该版本说明符的匹配应按照 :ref:`版本说明符" +"规范 ` 处理,包括本地版本、零填充等情况。" #: ../source/specifications/file-yanking.rst:67 msgid "" @@ -18956,6 +21847,9 @@ msgid "" "be installed. In this case, a yanked file **SHOULD** not be used when " "creating or updating a lock file from some input file or command." msgstr "" +"已撤回的文件总是被忽略,除非它们是唯一一个与某个锁定文件(例如 " +"``Pipfile.lock`` 或 ``poetry.lock``)所指定要安装的内容相匹配的文件。在这种情" +"况下,从某个输入文件或命令创建或更新锁定文件时,**应该** 不使用已撤回的文件。" #: ../source/specifications/file-yanking.rst:73 msgid "" @@ -18965,14 +21859,17 @@ msgid "" "of the ``data-yanked`` attribute (if it has a value) to provide more " "specific feedback to the user about why that file had been yanked." msgstr "" +"无论安装程序选择何种策略来决定何时安装已撤回的文件,当它确实决定安装某个已撤" +"回的文件时,都 **应该** 发出警告。该警告 **可以** 利用 ``data-yanked`` 属性的" +"值(如果该属性有值),就文件被撤回的原因向用户提供更具体的反馈。" #: ../source/specifications/file-yanking.rst:81 msgid "Mirrors" -msgstr "" +msgstr "镜像" #: ../source/specifications/file-yanking.rst:83 msgid "Mirrors can generally treat yanked files one of two ways:" -msgstr "" +msgstr "镜像通常可以用以下两种方式之一来处理已撤回的文件:" #: ../source/specifications/file-yanking.rst:85 msgid "" @@ -18980,22 +21877,24 @@ msgid "" "providing a view over the repository that shows only \"active\", unyanked " "files." msgstr "" +"它们可以选择在其简单仓库 API 中完全省略已撤回的文件,从而提供一个仅显示“活跃”" +"的未撤回文件的仓库视图。" #: ../source/specifications/file-yanking.rst:88 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." -msgstr "" +msgstr "它们也可以选择包含已撤回的文件,并同时镜像 ``data-yanked`` 属性。" #: ../source/specifications/file-yanking.rst:91 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." -msgstr "" +msgstr "镜像 **不得** 镜像某个已撤回的文件而不一并镜像其 ``data-yanked`` 属性。" #: ../source/specifications/glob-patterns.rst:3 msgid "``glob`` patterns" -msgstr "" +msgstr "``glob`` 模式" #: ../source/specifications/glob-patterns.rst:5 msgid "" @@ -19005,22 +21904,30 @@ msgid "" "and directories. This specification defines which patterns are acceptable " "and how they should be handled." msgstr "" +"某些 PyPA 规范(例如 :ref:`pyproject.toml 的 license-files `)会接受特定类型的 *glob 模式*,用包含通配符和字符范围的给定字" +"符串去匹配文件和目录。本规范定义了哪些模式是可以接受的,以及应该如何处理这些" +"模式。" #: ../source/specifications/glob-patterns.rst:13 msgid "Valid glob patterns" -msgstr "" +msgstr "有效的 glob 模式" #: ../source/specifications/glob-patterns.rst:15 msgid "" "For PyPA purposes, a *valid glob pattern* MUST be a string matched against " "filesystem entries as specified below:" msgstr "" +"就 PyPA 而言,*有效的 glob 模式* 必须是按下述规定与文件系统条目相匹配的字符串" +":" #: ../source/specifications/glob-patterns.rst:18 msgid "" "Alphanumeric characters, spaces (`` ``), underscores (``_``), hyphens (``-" "``), and dots (``.``) MUST be matched verbatim." msgstr "" +"字母数字字符,空格 (`` ``), 下划线 (``_``), 连字符 (``-``), 和点 (``.``) 必须" +"逐字匹配。" #: ../source/specifications/glob-patterns.rst:21 msgid "" @@ -19030,10 +21937,13 @@ msgid "" "based on Unicode code points). Hyphens at the start or end are matched " "literally." msgstr "" +"必须支持特殊 glob 字符 ``*``、``?``、``**`` 以及字符范围 ``[]``,其中仅包含按" +"原样匹配的字符。在 ``[...]`` 中,连字符表示与区域设置无关的范围(例如 ``a-" +"z``,顺序基于 Unicode 码点)。位于开头或结尾的连字符按字面值匹配。" #: ../source/specifications/glob-patterns.rst:27 msgid "Path delimiters MUST be the forward slash character (``/``)." -msgstr "" +msgstr "路径分隔符必须是正斜杠字符(``/``)。" #: ../source/specifications/glob-patterns.rst:29 msgid "" @@ -19042,10 +21952,12 @@ msgid "" "directory containing that file. Therefore the leading slash character MUST " "NOT be used." msgstr "" +"模式总是指 *相对路径*,例如在 :file:`pyproject.toml` 中使用时,模式应该始终相" +"对于包含该文件的目录。因此,不得使用前导斜杠字符。" #: ../source/specifications/glob-patterns.rst:34 msgid "Parent directory indicators (``..``) MUST NOT be used." -msgstr "" +msgstr "不得使用父目录指示符(``..``)。" #: ../source/specifications/glob-patterns.rst:36 msgid "" @@ -19053,36 +21965,38 @@ msgid "" "invalid. Projects MUST NOT use such values. Tools consuming glob patterns " "SHOULD reject invalid values with an error." msgstr "" +"本规范未涵盖的任何字符或字符序列均无效。项目不得使用此类值。使用 glob 模式的" +"工具应该拒绝无效的值并报错。" #: ../source/specifications/glob-patterns.rst:40 msgid "" "Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " "also be defined." -msgstr "" +msgstr "字面路径(例如 :file:`LICENSE`)是有效的 glob,这意味着它们也可以被定义。" #: ../source/specifications/glob-patterns.rst:43 msgid "Tools consuming glob patterns:" -msgstr "" +msgstr "使用 glob 模式的工具:" #: ../source/specifications/glob-patterns.rst:45 msgid "" "MUST treat each value as a glob pattern, and MUST raise an error if the " "pattern contains invalid glob syntax." -msgstr "" +msgstr "必须将每个值都视为 glob 模式,并且当模式包含无效的 glob 语法时,必须报错。" #: ../source/specifications/glob-patterns.rst:47 msgid "" "MUST raise an error if any individual user-specified pattern does not match " "at least one file." -msgstr "" +msgstr "如果用户指定的任意单个模式未能匹配至少一个文件,则必须报错。" #: ../source/specifications/glob-patterns.rst:50 msgid "Examples of valid glob patterns:" -msgstr "" +msgstr "有效的 glob 模式示例:" #: ../source/specifications/glob-patterns.rst:61 msgid "Examples of invalid glob patterns:" -msgstr "" +msgstr "无效的 glob 模式示例:" #: ../source/specifications/glob-patterns.rst:74 msgid "Reference implementation in Python" @@ -19094,22 +22008,24 @@ msgid "" "file system to the :mod:`glob` module in Python's standard library. It is " "necessary however to perform additional validations." msgstr "" +"可以把大部分针对文件系统的模式匹配工作交给 Python 标准库中的 :mod:`glob` 模块" +"来完成。不过,仍然有必要执行额外的校验。" #: ../source/specifications/glob-patterns.rst:80 msgid "The code below is as a simple reference implementation:" -msgstr "" +msgstr "下面的代码是一个简单的参考实现:" #: ../source/specifications/glob-patterns.rst:120 msgid "January 2025: Initial version" -msgstr "" +msgstr "2025 年 1 月:初始版本" #: ../source/specifications/glob-patterns.rst:121 msgid "March 2026: Treat spaces as a verbatim character" -msgstr "" +msgstr "2026 年 3 月:将空格视为按原样匹配的字符" #: ../source/specifications/index.rst:4 msgid "PyPA specifications" -msgstr "" +msgstr "PyPA 规范" #: ../source/specifications/index.rst:6 msgid "" @@ -19118,14 +22034,17 @@ msgid "" "standards, and for proposing new ones, is documented on `pypa.io `__." msgstr "" +"这是由 Python Packaging Authority 维护的当前有效的互操作性规范列表。更新这些" +"标准以及提出新标准的流程记录在 `pypa.io `__ 上。" #: ../source/specifications/index-hosted-attestations.rst:6 msgid "Index hosted attestations" -msgstr "" +msgstr "索引托管的证明" #: ../source/specifications/index-hosted-attestations.rst:8 msgid "This specification was originally defined in :pep:`740`." -msgstr "" +msgstr "本规范最初定义于 :pep:`740`。" #: ../source/specifications/index-hosted-attestations.rst:12 msgid "" @@ -19133,10 +22052,13 @@ msgid "" "are documented in the :ref:`simple-repository-api` under :ref:`simple-" "repository-api-base` and :ref:`json-serialization`." msgstr "" +":pep:`740` 包含对 HTML 和 JSON 索引 API 的更改。这些更改记录在 :ref:`simple-" +"repository-api` 中的 :ref:`simple-repository-api-base` 和 :ref:`json-" +"serialization` 部分。" #: ../source/specifications/index-hosted-attestations.rst:22 msgid "Upload endpoint changes" -msgstr "" +msgstr "上传端点的更改" #: ../source/specifications/index-hosted-attestations.rst:26 msgid "" @@ -19144,10 +22066,12 @@ msgid "" "documentation `_ for how attestations are " "uploaded." msgstr "" +"“旧式”(legacy)上传 API 未被标准化。请参见 `PyPI 上传 API 文档 `_,了解证明如何上传。" #: ../source/specifications/index-hosted-attestations.rst:33 msgid "Attestation objects" -msgstr "" +msgstr "证明对象" #: ../source/specifications/index-hosted-attestations.rst:35 msgid "" @@ -19156,6 +22080,8 @@ msgid "" "explicitly listed keys are provided. The required layout of an attestation " "object is provided as pseudocode below." msgstr "" +"证明对象是一个包含若干必需键的 JSON 对象;只要提供了所有显式列出的键,应用程" +"序或签名者就可以包含额外的键。证明对象的必需布局以下面的伪代码形式给出。" #: ../source/specifications/index-hosted-attestations.rst:88 msgid "" @@ -19165,6 +22091,10 @@ msgid "" "sources of signed time (such as an :rfc:`3161` Time Stamping Authority or a " "`Roughtime `__ server)." msgstr "" +"``transparency_entries`` 中每个对象的完整数据模型在 :ref:`appendix` 中给出。" +"证明对象 **应该** 包含一个或多个透明日志条目,并 **可以** 包含用于其他签名时" +"间来源的额外键(例如 :rfc:`3161` 时间戳颁发机构或 `Roughtime `__ 服务器)。" #: ../source/specifications/index-hosted-attestations.rst:94 msgid "" @@ -19172,34 +22102,38 @@ msgid "" "version is tied to a single cryptographic suite to minimize unnecessary " "cryptographic agility. In version 1, the suite is as follows:" msgstr "" +"证明对象带有版本号;本 PEP 指定了版本 1。每个版本都绑定到单一的加密套件,以尽" +"量减少不必要的密码敏捷性。在版本 1 中,该套件如下:" #: ../source/specifications/index-hosted-attestations.rst:98 msgid "" "Certificates are specified as X.509 certificates, and comply with the " "profile in :rfc:`5280`." -msgstr "" +msgstr "证书规定为 X.509 证书,并符合 :rfc:`5280` 中定义的 profile。" #: ../source/specifications/index-hosted-attestations.rst:100 msgid "" "The message signature algorithm is ECDSA, with the P-256 curve for public " "keys and SHA-256 as the cryptographic digest function." -msgstr "" +msgstr "消息签名算法为 ECDSA,公钥采用 P-256 曲线,加密摘要函数采用 SHA-256。" #: ../source/specifications/index-hosted-attestations.rst:103 msgid "" "Future PEPs may change this suite (and the overall shape of the attestation " "object) by selecting a new version number." -msgstr "" +msgstr "未来的 PEP 可能会通过选择新的版本号来更改此套件(以及证明对象的整体形态)。" #: ../source/specifications/index-hosted-attestations.rst:109 msgid "Attestation statement and signature generation" -msgstr "" +msgstr "证明声明与签名的生成" #: ../source/specifications/index-hosted-attestations.rst:111 msgid "" "The *attestation statement* is the actual claim that is cryptographically " "signed over within the attestation object (i.e., the ``envelope.statement``)." msgstr "" +"证明声明(*attestation statement*)是证明对象中实际以密码学方式签名的断言(" +"即 ``envelope.statement``)。" #: ../source/specifications/index-hosted-attestations.rst:114 msgid "" @@ -19208,16 +22142,19 @@ msgid "" "statement.md>`__, in JSON form. When serialized the statement is treated as " "an opaque binary blob, avoiding the need for canonicalization." msgstr "" +"证明声明以 JSON 形式编码为 `v1 in-toto Statement 对象 `__。序列化时,该声明被视为" +"不透明的二进制数据块(blob),从而无需规范化。" #: ../source/specifications/index-hosted-attestations.rst:119 msgid "" "In addition to being a v1 in-toto Statement, the attestation statement is " "constrained in the following ways:" -msgstr "" +msgstr "除了作为 v1 in-toto Statement 之外,证明声明还受到以下约束:" #: ../source/specifications/index-hosted-attestations.rst:122 msgid "The in-toto ``subject`` **MUST** contain only a single subject." -msgstr "" +msgstr "in-toto 的 ``subject`` **必须** 只包含单个主体。" #: ../source/specifications/index-hosted-attestations.rst:123 msgid "" @@ -19225,6 +22162,9 @@ msgid "" "valid :ref:`source distribution ` or :ref:`wheel " "distribution ` filename." msgstr "" +"``subject[0].name`` 是分发包的文件名,它 **必须** 是有效的 :ref:`源分发 " +"` 或 :ref:`wheel 分发 ` 文件名。" #: ../source/specifications/index-hosted-attestations.rst:126 msgid "" @@ -19232,22 +22172,28 @@ msgid "" "**MAY** be present. The digests **MUST** be represented as hexadecimal " "strings." msgstr "" +"``subject[0].digest`` **必须** 包含 SHA-256 摘要。**可以** 存在其他摘要。这些" +"摘要 **必须** 表示为十六进制字符串。" #: ../source/specifications/index-hosted-attestations.rst:128 msgid "The following ``predicateType`` values are supported:" -msgstr "" +msgstr "支持以下 ``predicateType`` 取值:" #: ../source/specifications/index-hosted-attestations.rst:130 msgid "" "`SLSA Provenance `__: ``https://slsa.dev/" "provenance/v1``" msgstr "" +"`SLSA 来源 `__:``https://slsa.dev/" +"provenance/v1``" #: ../source/specifications/index-hosted-attestations.rst:131 msgid "" "`PyPI Publish Attestation `__: ``https://docs.pypi.org/attestations/publish/v1``" msgstr "" +"`PyPI 发布证明 `__:``https://" +"docs.pypi.org/attestations/publish/v1``" #: ../source/specifications/index-hosted-attestations.rst:133 msgid "" @@ -19257,32 +22203,42 @@ msgid "" "and a ``PAYLOAD_BODY`` of the JSON-encoded statement above. No other " "``PAYLOAD_TYPE`` is permitted." msgstr "" +"该声明的签名使用 `v1 DSSE 签名协议 `__ 构造,其 ``PAYLOAD_TYPE`` 为 ``application/" +"vnd.in-toto+json``,``PAYLOAD_BODY`` 为上述经过 JSON 编码的声明。不允许使用其" +"他 ``PAYLOAD_TYPE``。" #: ../source/specifications/index-hosted-attestations.rst:141 msgid "Provenance objects" -msgstr "" +msgstr "来源对象" #: ../source/specifications/index-hosted-attestations.rst:143 msgid "" "The index will serve uploaded attestations along with metadata that can " "assist in verifying them in the form of JSON serialized objects." msgstr "" +"索引将以 JSON 序列化对象的形式提供已上传的证明,以及可协助验证这些证明的元数" +"据。" #: ../source/specifications/index-hosted-attestations.rst:146 msgid "" "These *provenance objects* will be available via both the Simple Index and " "JSON-based Simple API as described above, and will have the following layout:" msgstr "" +"如上文所述,这些来源对象(*provenance objects*)将通过 Simple Index 和基于 " +"JSON 的 Simple API 提供,并具有以下布局:" #: ../source/specifications/index-hosted-attestations.rst:169 msgid "or, as pseudocode:" -msgstr "" +msgstr "或者,以伪代码表示:" #: ../source/specifications/index-hosted-attestations.rst:217 msgid "" "``version`` is ``1``. Like attestation objects, provenance objects are " "versioned, and this PEP only defines version ``1``." msgstr "" +"``version`` 为 ``1``。与证明对象类似,来源对象也带有版本号,且本 PEP 只定义了" +"版本 ``1``。" #: ../source/specifications/index-hosted-attestations.rst:219 msgid "" @@ -19291,18 +22247,23 @@ msgid "" "(such as a Trusted Publishing identity), and contains one or more " "attestation objects." msgstr "" +"``attestation_bundles`` 是一个 **必需的** JSON 数组,包含一个或多个证明“捆绑" +"包”。每个捆绑包对应一个签名身份(例如可信发布身份),并包含一个或多个证明对象" +"。" #: ../source/specifications/index-hosted-attestations.rst:224 msgid "" "As noted in the ``Publisher`` model, each ``AttestationBundle.publisher`` " "object is specific to its Trusted Publisher but must include at minimum:" msgstr "" +"如 ``Publisher`` 模型中所述,每个 ``AttestationBundle.publisher`` 对象都特定" +"于其可信发布者,但至少必须包含:" #: ../source/specifications/index-hosted-attestations.rst:228 msgid "" "A ``kind`` key, which **MUST** be a JSON string that uniquely identifies the " "kind of Trusted Publisher." -msgstr "" +msgstr "一个 ``kind`` 键,它 **必须** 是唯一标识可信发布者种类的 JSON 字符串。" #: ../source/specifications/index-hosted-attestations.rst:230 msgid "" @@ -19310,10 +22271,12 @@ msgid "" "specific claims retained by the index during Trusted Publisher " "authentication." msgstr "" +"一个 ``claims`` 键,它 **必须** 是一个 JSON 对象,包含索引在可信发布者认证期" +"间保留的任何与上下文相关的声明。" #: ../source/specifications/index-hosted-attestations.rst:233 msgid "All other keys in the publisher object are publisher-specific." -msgstr "" +msgstr "发布者对象中的所有其他键都是特定于发布者的。" #: ../source/specifications/index-hosted-attestations.rst:235 msgid "" @@ -19322,16 +22285,21 @@ msgid "" "time, as described in :ref:`upload-endpoint` and :ref:`changes-to-provenance-" "objects`." msgstr "" +"每个证明对象数组都是上传者在上传时通过 ``attestations`` 字段所提供的 " +"``attestations`` 数组的超集,如 :ref:`upload-endpoint` 和 :ref:`changes-to-" +"provenance-objects` 中所述。" #: ../source/specifications/index-hosted-attestations.rst:243 msgid "Changes to provenance objects" -msgstr "" +msgstr "对来源对象的更改" #: ../source/specifications/index-hosted-attestations.rst:245 msgid "" "Provenance objects are *not* immutable, and may change over time. Reasons " "for changes to the provenance object include but are not limited to:" msgstr "" +"来源对象 *并非* 不可变,并且可能随时间变化。来源对象发生更改的原因包括但不限" +"于:" #: ../source/specifications/index-hosted-attestations.rst:248 msgid "" @@ -19339,6 +22307,8 @@ msgid "" "**MAY** choose to allow additional attestations by pre-existing signing " "identities, such as newer attestation versions for already uploaded files." msgstr "" +"为既有签名身份添加新的证明:索引 **可以** 选择允许既有签名身份添加额外的证明" +",例如已上传文件的较新版本证明。" #: ../source/specifications/index-hosted-attestations.rst:253 msgid "" @@ -19348,20 +22318,23 @@ msgid "" "attestations may be performed asynchronously, requiring the index to insert " "them into the provenance object *post facto*." msgstr "" +"添加新的签名身份及相关证明:索引 **可以** 选择支持来自文件上传者之外的其他来" +"源(例如第三方审计者或索引本身)的证明。这些证明可能异步进行,因此需要索引在" +"事后(*post facto*)将其插入来源对象。" #: ../source/specifications/index-hosted-attestations.rst:262 msgid "Attestation verification" -msgstr "" +msgstr "证明验证" #: ../source/specifications/index-hosted-attestations.rst:264 msgid "" "Verifying an attestation object against a distribution file requires " "verification of each of the following:" -msgstr "" +msgstr "针对分发文件验证证明对象时,需要验证以下每一项:" #: ../source/specifications/index-hosted-attestations.rst:267 msgid "``version`` is ``1``. The verifier **MUST** reject any other version." -msgstr "" +msgstr "``version`` 为 ``1``。验证者 **必须** 拒绝任何其他版本。" #: ../source/specifications/index-hosted-attestations.rst:268 msgid "" @@ -19369,6 +22342,8 @@ msgid "" "issued by an *a priori* trusted authority (such as a root of trust already " "present within the verifying client)." msgstr "" +"``verification_material.certificate`` 是有效的签名证书,由事先(*a priori*)" +"受信任的颁发机构(例如验证客户端中已存在的信任根)颁发。" #: ../source/specifications/index-hosted-attestations.rst:271 msgid "" @@ -19376,6 +22351,8 @@ msgid "" "subject, such as the machine identity of the Trusted Publisher that " "published the package." msgstr "" +"``verification_material.certificate`` 标识了适当的签名主体,例如发布该软件包" +"的可信发布者的机器身份。" #: ../source/specifications/index-hosted-attestations.rst:274 msgid "" @@ -19385,6 +22362,10 @@ msgid "" "appropriate source distribution or wheel filename format, as the statement's " "subject may be equivalent but normalized." msgstr "" +"``envelope.statement`` 是有效的 in-toto v1 Statement,其主体和摘要 **必须** " +"与分发包的文件名和内容相匹配。对于分发包的文件名,匹配 **必须** 通过使用适当" +"的源分发或 wheel 文件名格式进行解析来完成,因为声明中的主体可能是等价但经过规" +"范化处理的。" #: ../source/specifications/index-hosted-attestations.rst:279 msgid "" @@ -19393,6 +22374,10 @@ msgid "" "the `v1 DSSE signature protocol `__." msgstr "" +"``envelope.signature`` 是 ``envelope.statement`` 的有效签名,与 " +"``verification_material.certificate`` 相对应,并经由 `v1 DSSE 签名协议 " +"`__ 重建" +"。" #: ../source/specifications/index-hosted-attestations.rst:284 msgid "" @@ -19403,10 +22388,14 @@ msgid "" "that the inclusion time for each entry lies within the signing certificate's " "validity period." msgstr "" +"除上述必需步骤外,验证者 **可以** 基于策略额外验证 " +"``verification_material.transparency_entries``,例如要求至少一个透明日志条目" +"或达到一定的条目数量阈值。在验证透明日志条目时,验证者 **必须** 确认每个条目" +"的包含时间都处于签名证书的有效期内。" #: ../source/specifications/index-hosted-attestations.rst:293 msgid "Appendix: Data models for Transparency Log Entries" -msgstr "" +msgstr "附录:透明日志条目的数据模型" #: ../source/specifications/index-hosted-attestations.rst:295 msgid "" @@ -19414,10 +22403,12 @@ msgid "" "in attestation objects. Each transparency log entry serves as a source of " "signed inclusion time, and can be verified either online or offline." msgstr "" +"本附录包含证明对象中透明日志条目的伪代码数据模型。每个透明日志条目都可作为已" +"签名包含时间的来源,并且可以在线或离线验证。" #: ../source/specifications/inline-script-metadata.rst:5 msgid "Inline script metadata" -msgstr "" +msgstr "内联脚本元数据" #: ../source/specifications/inline-script-metadata.rst:7 msgid "" @@ -19425,12 +22416,16 @@ msgid "" "file Python scripts to assist launchers, IDEs and other external tools which " "may need to interact with such scripts." msgstr "" +"本规范定义了一种可嵌入单文件 Python 脚本的元数据格式,用于为可能需要与此类脚" +"本交互的启动器、IDE 及其他外部工具提供协助。" #: ../source/specifications/inline-script-metadata.rst:15 msgid "" "This specification defines a metadata comment block format (loosely inspired " "by `reStructuredText Directives`__)." msgstr "" +"本规范定义了一种元数据注释块格式(其灵感大致来源于 `reStructuredText " +"Directives`__)。" #: ../source/specifications/inline-script-metadata.rst:20 msgid "" @@ -19442,6 +22437,11 @@ msgid "" "followed by a single space, followed by three forward slashes. The ``TYPE`` " "MUST only consist of ASCII letters, numbers and hyphens." msgstr "" +"任何 Python 脚本都可以包含顶层注释块,这些块必须以 ``# /// TYPE`` 行开始,其" +"中 ``TYPE`` 决定如何处理相应内容。即:单个 ``#``,后跟一个空格,再后跟三个正" +"斜杠,再后跟一个空格,最后是元数据的类型。块必须以 ``# ///`` 行结束。即:单" +"个 ``#``,后跟一个空格,再后跟三个正斜杠。``TYPE`` 必须只由 ASCII 字母、数字" +"和连字符组成。" #: ../source/specifications/inline-script-metadata.rst:28 msgid "" @@ -19452,6 +22452,10 @@ msgid "" "a space, otherwise just the first character (which means the line consists " "of only a single ``#``)." msgstr "" +"这两行(``# /// TYPE`` 和 ``# ///``)之间的每一行都必须是以 ``#`` 开头的注释" +"。如果 ``#`` 后面还有字符,那么第一个字符必须是空格。嵌入内容的形成方式为:若" +"某行的第二个字符是空格,则去掉该行的前两个字符,否则只去掉第一个字符(这意味" +"着该行仅由单个 ``#`` 组成)。" #: ../source/specifications/inline-script-metadata.rst:35 msgid "" @@ -19459,6 +22463,8 @@ msgid "" "valid embedded content line as described above. For example, the following " "is a single fully valid block:" msgstr "" +"如果下一行不是如上文所述的有效嵌入内容行,则 ``# ///`` 会被优先判定为结束行。" +"例如,下面整个就是一个完全有效的块:" #: ../source/specifications/inline-script-metadata.rst:51 msgid "" @@ -19466,12 +22472,14 @@ msgid "" "ending line. In such cases tools MAY produce an error. Unclosed blocks MUST " "be ignored." msgstr "" +"不得把起始行放在另一条起始行与其结束行之间。在这种情况下,工具可以报错。未闭" +"合的块必须被忽略。" #: ../source/specifications/inline-script-metadata.rst:54 msgid "" "When there are multiple comment blocks of the same ``TYPE`` defined, tools " "MUST produce an error." -msgstr "" +msgstr "当定义了多个具有相同 ``TYPE`` 的注释块时,工具必须报错。" #: ../source/specifications/inline-script-metadata.rst:57 msgid "" @@ -19479,24 +22487,26 @@ msgid "" "declaration. If they choose not to do so, they MUST process the file as " "UTF-8." msgstr "" +"读取嵌入元数据的工具可以遵循标准的 Python 编码声明。如果选择不遵循,则必须按 " +"UTF-8 处理该文件。" #: ../source/specifications/inline-script-metadata.rst:60 msgid "" "This is the canonical regular expression that MAY be used to parse the " "metadata:" -msgstr "" +msgstr "这是可用于解析元数据的规范正则表达式:" #: ../source/specifications/inline-script-metadata.rst:67 msgid "" "In circumstances where there is a discrepancy between the text specification " "and the regular expression, the text specification takes precedence." -msgstr "" +msgstr "在文本规范与正则表达式存在不一致的情况下,以文本规范为准。" #: ../source/specifications/inline-script-metadata.rst:70 msgid "" "Tools MUST NOT read from metadata blocks with types that have not been " "standardized by this specification." -msgstr "" +msgstr "工具不得读取那些类型尚未经本规范标准化的元数据块。" #: ../source/specifications/inline-script-metadata.rst:73 msgid "" @@ -19504,12 +22514,14 @@ msgid "" "are recognised as containing metadata. However, parsing Python code is non-" "trivial, and therefore:" msgstr "" +"注意,本规范只要求将 *顶层* 注释块识别为包含元数据。然而,解析 Python 代码并" +"非易事,因此:" #: ../source/specifications/inline-script-metadata.rst:77 msgid "" "Tools MAY choose to do a simple textual scan, rather than a full Python " "parse." -msgstr "" +msgstr "工具可以选择只做简单的文本扫描,而不做完整的 Python 解析。" #: ../source/specifications/inline-script-metadata.rst:78 msgid "" @@ -19517,28 +22529,32 @@ msgid "" "data that looks like metadata within another Python construct such as a " "multi-line string is tool-dependent and should not be relied on." msgstr "" +"由于上一点所述的原因,如果脚本在多行字符串等其他 Python 结构内包含了看起来像" +"元数据的数据,其行为将取决于所用的工具,不应该依赖这种行为。" #: ../source/specifications/inline-script-metadata.rst:81 msgid "" "The canonical regular expression provided above is an example of an " "implementation that does a simple textual scan." -msgstr "" +msgstr "上面给出的规范正则表达式就是简单文本扫描式实现的一个示例。" #: ../source/specifications/inline-script-metadata.rst:85 msgid "script type" -msgstr "" +msgstr "script 类型" #: ../source/specifications/inline-script-metadata.rst:87 msgid "" "The first type of metadata block is named ``script``, which contains script " "metadata (dependency data and tool configuration)." -msgstr "" +msgstr "第一种元数据块类型名为 ``script``,它包含脚本元数据(依赖数据和工具配置)。" #: ../source/specifications/inline-script-metadata.rst:90 msgid "" "This document MAY include the top-level fields ``dependencies`` and " "``requires-python``, and MAY optionally include a ``[tool]`` table." msgstr "" +"该文档可以包含顶层字段 ``dependencies`` 和 ``requires-python``,并且可以选择" +"性地包含 ``[tool]`` 表。" #: ../source/specifications/inline-script-metadata.rst:93 msgid "" @@ -19546,10 +22562,12 @@ msgid "" "configure behavior. It has the same semantics as the :ref:`[tool] table in " "pyproject.toml `." msgstr "" +"任何工具(脚本运行器或其他)都可以使用 ``[tool]`` 表来配置行为。它与 " +":ref:`pyproject.toml 中的 [tool] 表 ` 具有相同的语义。" #: ../source/specifications/inline-script-metadata.rst:97 msgid "The top-level fields are:" -msgstr "" +msgstr "顶层字段包括:" #: ../source/specifications/inline-script-metadata.rst:99 msgid "" @@ -19557,6 +22575,8 @@ msgid "" "of the script. Each entry MUST be a valid :ref:`dependency specifier " "`." msgstr "" +"``dependencies``:一个字符串列表,用于指定脚本的运行时依赖项。其中每个条目都" +"必须是有效的 :ref:`依赖说明符 `。" #: ../source/specifications/inline-script-metadata.rst:102 msgid "" @@ -19564,6 +22584,8 @@ msgid "" "which the script is compatible. The value of this field MUST be a " "valid :ref:`version specifier `." msgstr "" +"``requires-python``:一个字符串,用于指定脚本兼容的 Python 版本。该字段的值必" +"须是有效的 :ref:`版本说明符 `。" #: ../source/specifications/inline-script-metadata.rst:106 msgid "" @@ -19571,16 +22593,18 @@ msgid "" "provided. Script runners SHOULD error if no version of Python that satisfies " "the specified ``requires-python`` can be provided." msgstr "" +"如果无法提供指定的 ``dependencies``,脚本运行器必须报错。如果无法提供满足所指" +"定 ``requires-python`` 的 Python 版本,脚本运行器应该报错。" #: ../source/specifications/inline-script-metadata.rst:113 msgid "The following is an example of a script with embedded metadata:" -msgstr "" +msgstr "以下是一个带有嵌入元数据的脚本示例:" #: ../source/specifications/inline-script-metadata.rst:136 msgid "" "The following is an example of how to read the metadata on Python 3.11 or " "higher." -msgstr "" +msgstr "以下示例展示了如何使用 Python 3.11 或更高版本读取元数据。" #: ../source/specifications/inline-script-metadata.rst:162 msgid "" @@ -19588,6 +22612,8 @@ msgid "" "update automation in CI. The following is a crude example of modifying the " "content using the ``tomlkit`` library__." msgstr "" +"工具(例如包管理器或 CI 中的依赖项更新自动化工具)常常会编辑依赖项。下面是一" +"个修改内容的粗略示例,其中用到了 ``tomlkit`` 库__。" #: ../source/specifications/inline-script-metadata.rst:193 msgid "" @@ -19595,12 +22621,14 @@ msgid "" "is not a requirement for editing by any means but rather is a \"nice to " "have\" feature." msgstr "" +"请注意,这个示例使用了一个能保留 TOML 格式的库。这绝非编辑的硬性要求,而只是" +"一项“锦上添花”的特性。" #: ../source/specifications/inline-script-metadata.rst:197 msgid "" "The following is an example of how to read a stream of arbitrary metadata " "blocks." -msgstr "" +msgstr "以下示例展示了如何流式读取任意元数据块。" #: ../source/specifications/inline-script-metadata.rst:216 #: ../source/specifications/simple-repository-api.rst:925 @@ -19613,12 +22641,14 @@ msgid "" "use the highest available version of Python that is compatible with the " "script's ``requires-python`` metadata, if defined." msgstr "" +"支持管理多个 Python 版本的工具应该尝试使用与脚本 ``requires-python`` 元数据(" +"如果已定义)兼容的最高可用 Python 版本。" #: ../source/specifications/inline-script-metadata.rst:226 msgid "" "October 2023: This specification was conditionally approved " "through :pep:`723`." -msgstr "" +msgstr "2023 年 10 月:本规范通过 :pep:`723` 获得有条件批准。" #: ../source/specifications/inline-script-metadata.rst:227 msgid "" @@ -19627,6 +22657,9 @@ msgid "" "making the ``dependencies`` and ``requires-python`` keys top-level. " "Additionally, the specification is no longer provisional." msgstr "" +"2024 年 1 月:通过对 :pep:`723` 的修订,``pyproject`` 元数据块类型更名为 " +"``script``,``[run]`` 表被移除,``dependencies`` 和 ``requires-python`` 键因" +"此成为顶层键。此外,本规范不再是暂定规范。" #: ../source/specifications/license-expression.rst:5 msgid "" @@ -19635,6 +22668,10 @@ msgid "" "Expression field `. This specification " "defines which license expressions are acceptable." msgstr "" +":pep:`639` 定义了新的 :ref:`pyproject.toml 的 license ` 取值,并添加了相应的 :ref:`核心元数据 License-Expression 字段 " +"`。本规范定义了哪些许可证表达式是可以接受的" +"。" #: ../source/specifications/license-expression.rst:14 msgid "" @@ -19642,10 +22679,13 @@ msgid "" "expression `, as documented in the `SPDX specification " "`__, either Version 2.2 or a later compatible version." msgstr "" +"许可证可以定义为一个文本字符串,其值为有效的 SPDX :term:`许可证表达式 " +"`,如 `SPDX 规范 `__ (版本 2.2 或更高的兼" +"容版本)中所述。" #: ../source/specifications/license-expression.rst:19 msgid "A license expression can use the following license identifiers:" -msgstr "" +msgstr "许可证表达式可以使用以下许可证标识符:" #: ../source/specifications/license-expression.rst:21 msgid "" @@ -19653,6 +22693,8 @@ msgid "" "`SPDX License List `__, version 3.17 or any later compatible " "version." msgstr "" +"在 `SPDX 许可证列表 `__ (版本 3.17 或任何更高的兼容版本)中发布的" +"任何 SPDX 收录的许可证短格式标识符。" #: ../source/specifications/license-expression.rst:25 msgid "" @@ -19662,14 +22704,18 @@ msgid "" "identifiers must follow the SPDX specification, `clause 10.1 " "`__ of the given specification version." msgstr "" +"自定义 ``LicenseRef-[idstring]`` 字符串(可为一个或多个),其中 " +"``[idstring]`` 是一个由字母、数字、``.`` 和/或 ``-`` 组成的唯一字符串,用于标" +"识未收录在 SPDX 许可证列表中的许可证。自定义标识符必须遵循 SPDX 规范,即所给" +"规范版本的 `第 10.1 条 `__。" #: ../source/specifications/license-expression.rst:32 msgid "Examples of valid license expressions:" -msgstr "" +msgstr "有效许可证表达式的示例:" #: ../source/specifications/license-expression.rst:45 msgid "Examples of invalid license expressions:" -msgstr "" +msgstr "无效许可证表达式的示例:" #: ../source/specifications/name-normalization.rst:3 msgid "Names and normalization" @@ -19681,10 +22727,12 @@ msgid "" "required to follow. It also describes how to normalize them, which should be " "done before lookups and comparisons." msgstr "" +"本规范定义了分发包和附加功能(extras)的名称必须遵循的格式,还描述了如何对名" +"称进行规范化;规范化操作应该在查找和比较之前完成。" #: ../source/specifications/name-normalization.rst:13 msgid "Name format" -msgstr "" +msgstr "名称格式" #: ../source/specifications/name-normalization.rst:15 msgid "" @@ -19693,6 +22741,9 @@ msgid "" "valid project names are limited to those which match the following regex " "(run with :py:data:`re.IGNORECASE`)::" msgstr "" +"有效名称只能由 ASCII 字母和数字、句点、下划线和连字符组成,且必须以字母或数字" +"开头和结尾。这意味着,有效的项目名称仅限于匹配以下正则表达式(配合 " +":py:data:`re.IGNORECASE` 使用)::" #: ../source/specifications/name-normalization.rst:26 msgid "Name normalization" @@ -19704,55 +22755,57 @@ msgid "" "or ``_`` replaced with a single ``-`` character. This can be implemented in " "Python with the re module:" msgstr "" +"名称应该转换为小写,并将所有连续出现的 ``.``、``-`` 或 ``_`` 字符替换为单个 " +"``-`` 字符。这一点可以在 Python 中使用 re 模块实现:" #: ../source/specifications/name-normalization.rst:39 msgid "This means that the following names are all equivalent:" -msgstr "" +msgstr "这意味着以下名称全部等价:" #: ../source/specifications/name-normalization.rst:41 msgid "``friendly-bard`` (normalized form)" -msgstr "" +msgstr "``friendly-bard`` (规范化形式)" #: ../source/specifications/name-normalization.rst:42 msgid "``Friendly-Bard``" -msgstr "" +msgstr "``Friendly-Bard``" #: ../source/specifications/name-normalization.rst:43 msgid "``FRIENDLY-BARD``" -msgstr "" +msgstr "``FRIENDLY-BARD``" #: ../source/specifications/name-normalization.rst:44 msgid "``friendly.bard``" -msgstr "" +msgstr "``friendly.bard``" #: ../source/specifications/name-normalization.rst:45 msgid "``friendly_bard``" -msgstr "" +msgstr "``friendly_bard``" #: ../source/specifications/name-normalization.rst:46 msgid "``friendly--bard``" -msgstr "" +msgstr "``friendly--bard``" #: ../source/specifications/name-normalization.rst:47 msgid "" "``FrIeNdLy-._.-bArD`` (a *terrible* way to write a name, but it is valid)" -msgstr "" +msgstr "``FrIeNdLy-._.-bArD`` (一种 *糟糕透顶* 的名称写法,但它确实有效)" #: ../source/specifications/name-normalization.rst:52 msgid "" "September 2015: The specification of name normalized was approved " "through :pep:`503 <503#normalized-names>`." -msgstr "" +msgstr "2015 年 9 月:名称规范化规范通过 :pep:`503 <503#normalized-names>` 获得批准。" #: ../source/specifications/name-normalization.rst:54 msgid "" "November 2015: The specification of valid names was approved " "through :pep:`508 <508#names>`." -msgstr "" +msgstr "2015 年 11 月:有效名称规范通过 :pep:`508 <508#names>` 获得批准。" #: ../source/specifications/platform-compatibility-tags.rst:6 msgid "Platform compatibility tags" -msgstr "" +msgstr "平台兼容性标签" #: ../source/specifications/platform-compatibility-tags.rst:8 msgid "" @@ -19760,10 +22813,12 @@ msgid "" "compatible with specific platforms, and allows installers to understand " "which distributions are compatible with the system they are running on." msgstr "" +"平台兼容性标签让构建工具能够把分发包标记为与特定平台兼容,也让安装器能够判断" +"哪些分发包与其所运行的系统兼容。" #: ../source/specifications/platform-compatibility-tags.rst:16 msgid "The tag format is ``{python tag}-{abi tag}-{platform tag}``." -msgstr "" +msgstr "标签格式为 ``{python tag}-{abi tag}-{platform tag}``。" #: ../source/specifications/platform-compatibility-tags.rst:18 msgid "python tag" @@ -19771,21 +22826,23 @@ msgstr "python 标签" #: ../source/specifications/platform-compatibility-tags.rst:19 msgid "'py27', 'cp33'" -msgstr "" +msgstr "'py27', 'cp33'" #: ../source/specifications/platform-compatibility-tags.rst:21 msgid "'cp32dmu', 'none'" -msgstr "" +msgstr "'cp32dmu', 'none'" #: ../source/specifications/platform-compatibility-tags.rst:23 msgid "'linux_x86_64', 'any'" -msgstr "" +msgstr "'linux_x86_64', 'any'" #: ../source/specifications/platform-compatibility-tags.rst:25 msgid "" "For example, the tag ``py27-none-any`` indicates compatibility with Python " "2.7 (any Python 2.7 implementation) with no abi requirement, on any platform." msgstr "" +"例如,标签 ``py27-none-any`` 表示与 Python 2.7(任意 Python 2.7 实现)兼容、" +"没有 abi 要求,并且适用于任何平台。" #: ../source/specifications/platform-compatibility-tags.rst:28 msgid "" @@ -19793,10 +22850,13 @@ msgid "" "the form ``{distribution}-{version}(-{build tag})?-{python tag}-{abitag}-" "{platform tag}.whl``. Other package formats may have their own conventions." msgstr "" +"``wheel`` 构建的包格式会在文件名中包含这些标签,形式为 ``{distribution}-" +"{version}(-{build tag})?-{python tag}-{abitag}-{platform tag}.whl``。其他包格" +"式可以有自己的约定。" #: ../source/specifications/platform-compatibility-tags.rst:33 msgid "Any potential spaces in any tag should be replaced with ``_``." -msgstr "" +msgstr "任何标签中可能出现的空格都应该替换为 ``_``。" #: ../source/specifications/platform-compatibility-tags.rst:37 msgid "Python Tag" @@ -19806,11 +22866,11 @@ msgstr "Python 标签" msgid "" "The Python tag indicates the implementation and version required by a " "distribution. Major implementations have abbreviated codes, initially:" -msgstr "" +msgstr "Python 标签指明分发包所需的实现及版本。各主要实现都有缩写代码,最初如下:" #: ../source/specifications/platform-compatibility-tags.rst:42 msgid "py: Generic Python (does not require implementation-specific features)" -msgstr "" +msgstr "py:通用 Python(不要求实现特有的功能)" #: ../source/specifications/platform-compatibility-tags.rst:43 msgid "cp: CPython" @@ -19822,7 +22882,7 @@ msgstr "ip: IronPython" #: ../source/specifications/platform-compatibility-tags.rst:45 msgid "pp: PyPy" -msgstr "" +msgstr "pp: PyPy" #: ../source/specifications/platform-compatibility-tags.rst:46 msgid "jy: Jython" @@ -19833,6 +22893,8 @@ msgid "" "Other Python implementations should use :py:data:`sys.implementation.name " "`." msgstr "" +"其他 Python 实现应该使用 :py:data:`sys.implementation.name " +"`。" #: ../source/specifications/platform-compatibility-tags.rst:50 msgid "" @@ -19840,12 +22902,16 @@ msgid "" "one is needed the underscore ``_`` is used instead. PyPy should probably " "use its own versions here ``pp18``, ``pp19``." msgstr "" +"版本号为 ``py_version_nodot``。CPython 不带点也行得通,但如果确实需要点号,则" +"用下划线 ``_`` 代替。PyPy 在这里或许应该使用自己的版本号 ``pp18``、``pp19``。" #: ../source/specifications/platform-compatibility-tags.rst:54 msgid "" "The version can be just the major version ``2`` or ``3`` ``py2``, ``py3`` " "for many pure-Python distributions." msgstr "" +"对许多纯 Python 分发包而言,版本号可以只是主版本号 ``2`` 或 ``3``,即 " +"``py2``、``py3``。" #: ../source/specifications/platform-compatibility-tags.rst:57 msgid "" @@ -19853,16 +22919,20 @@ msgid "" "shorthand for ``py20`` and ``py30``. Instead, these tags mean the packager " "intentionally released a cross-version-compatible distribution." msgstr "" +"重要的是,像 ``py2`` 和 ``py3`` 这样仅含主版本的标签并不是 ``py20`` 和 " +"``py30`` 的简写。相反,这类标签表明打包者是有意发布跨版本兼容的分发包的。" #: ../source/specifications/platform-compatibility-tags.rst:61 msgid "" "A single-source Python 2/3 compatible distribution can use the compound tag " "``py2.py3``. See `Compressed Tag Sets`_, below." msgstr "" +"采用单一源代码、兼容 Python 2/3 的分发包可以使用复合标签 ``py2.py3``。参见下" +"文的 `Compressed Tag Sets`_ 一节。" #: ../source/specifications/platform-compatibility-tags.rst:66 msgid "ABI Tag" -msgstr "" +msgstr "ABI 标签" #: ../source/specifications/platform-compatibility-tags.rst:68 msgid "" @@ -19871,10 +22941,12 @@ msgid "" "abbreviated in the same way as the Python Tag, e.g. ``cp33d`` would be the " "CPython 3.3 ABI with debugging." msgstr "" +"ABI 标签指明所包含的扩展模块需要哪种 Python ABI。对于实现特定的 ABI,其缩写方" +"式与 Python 标签相同,例如 ``cp33d`` 表示带调试的 CPython 3.3 ABI。" #: ../source/specifications/platform-compatibility-tags.rst:73 msgid "The CPython stable ABI is ``abi3`` as in the shared library suffix." -msgstr "" +msgstr "CPython 的稳定 ABI 为 ``abi3``,与共享库后缀中的一致。" #: ../source/specifications/platform-compatibility-tags.rst:75 msgid "" @@ -19884,10 +22956,13 @@ msgid "" "distribute binary distributions. Each implementation's community may decide " "how to best use the ABI tag." msgstr "" +"ABI 极不稳定的实现可以使用其源代码版本及编译器标志等信息的 SHA-256 哈希的前 " +"6 个字节(即 8 个 base64 编码字符),但这类实现多半不太需要分发二进制分发包。" +"各实现的社区可以自行决定如何以最佳方式使用 ABI 标签。" #: ../source/specifications/platform-compatibility-tags.rst:83 msgid "Platform Tag" -msgstr "" +msgstr "平台标签" #: ../source/specifications/platform-compatibility-tags.rst:86 msgid "" @@ -19895,10 +22970,12 @@ msgid "" "platform they represent and may change over time as the underlying platform " "changes its versioning." msgstr "" +"平台标签依赖于其所代表的操作系统或平台的版本编号方式,并且可能随着底层平台版" +"本编号方式的改变而随时间变化。" #: ../source/specifications/platform-compatibility-tags.rst:91 msgid "Basic platform tags" -msgstr "" +msgstr "基本平台标签" #: ../source/specifications/platform-compatibility-tags.rst:93 msgid "" @@ -19907,18 +22984,22 @@ msgid "" "``.`` replaced with underscore ``_``. Until the removal of :ref:`distutils` " "in Python 3.12, this was ``distutils.util.get_platform()``. For example:" msgstr "" +"在最简单的形式下,平台标签就是 :py:func:`sysconfig.get_platform()` 的返回值," +"只是把其中所有的连字符 ``-`` 和句点 ``.`` 都替换成了下划线 ``_``。在 Python " +"3.12 移除 :ref:`distutils` 之前,这个函数是 ``distutils.util.get_platform()" +"``。例如:" #: ../source/specifications/platform-compatibility-tags.rst:98 msgid "win32" -msgstr "" +msgstr "win32" #: ../source/specifications/platform-compatibility-tags.rst:99 msgid "linux_i386" -msgstr "" +msgstr "linux_i386" #: ../source/specifications/platform-compatibility-tags.rst:100 msgid "linux_x86_64" -msgstr "" +msgstr "linux_x86_64" #: ../source/specifications/platform-compatibility-tags.rst:106 msgid "``manylinux``" @@ -19930,6 +23011,8 @@ msgid "" "files to Linux platforms, due to the large ecosystem of Linux platforms and " "subtle differences between them." msgstr "" +"由于 Linux 平台生态庞大且彼此之间存在细微差异,上述简单方案不足以支持面向 " +"Linux 平台公开分发 wheel 文件。" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" @@ -19938,6 +23021,9 @@ msgid "" "``manylinux`` platform tag which can be used across most common Linux " "distributions." msgstr "" +"取而代之的是针对这些平台的 ``manylinux`` 标准,它代表了 Linux 平台的一个公共" +"子集,允许构建带有 ``manylinux`` 平台标签的 wheel 包,这种 wheel 包可以在大多" +"数常见的 Linux 发行版上使用。" #: ../source/specifications/platform-compatibility-tags.rst:117 msgid "" @@ -19949,26 +23035,34 @@ msgid "" "of :py:func:`sysconfig.get_platform()` on the system as in the \"simple\" " "form above." msgstr "" +"当前的标准是面向未来的 :file:`manylinux_{x}_{y}` 标准。它定义了形如 " +":file:`manylinux_{x}_{y}_{arch}` 的标签,其中 ``x`` 和 ``y`` 表示所支持的 " +"glibc 主版本号和次版本号(例如 ``manylinux_2_24_xxx`` 应该能在任何使用 glibc " +"2.24+ 的发行版上工作),而 ``arch`` 是架构,与上述“简单”形式中系统上 " +":py:func:`sysconfig.get_platform()` 的返回值相匹配。" #: ../source/specifications/platform-compatibility-tags.rst:123 msgid "" "The following older tags are still supported for backward compatibility:" -msgstr "" +msgstr "为了向后兼容,仍支持以下较旧的标签:" #: ../source/specifications/platform-compatibility-tags.rst:125 msgid "" "``manylinux1`` supports glibc 2.5 on ``x86_64`` and ``i686`` architectures." -msgstr "" +msgstr "``manylinux1`` 在 ``x86_64`` 和 ``i686`` 架构上支持 glibc 2.5。" #: ../source/specifications/platform-compatibility-tags.rst:126 msgid "``manylinux2010`` supports glibc 2.12 on ``x86_64`` and ``i686``." -msgstr "" +msgstr "``manylinux2010`` 在 ``x86_64`` 和 ``i686`` 上支持 glibc 2.12。" #: ../source/specifications/platform-compatibility-tags.rst:127 msgid "" "``manylinux2014`` supports glibc 2.17 on ``x86_64``, ``i686``, ``aarch64``, " "``armv7l``, ``ppc64``, ``ppc64le``, and ``s390x``." msgstr "" +"``manylinux2014`` 在 " +"``x86_64``、``i686``、``aarch64``、``armv7l``、``ppc64``、``ppc64le`` 和 " +"``s390x`` 上支持 glibc 2.17。" #: ../source/specifications/platform-compatibility-tags.rst:130 msgid "" @@ -19978,6 +23072,9 @@ msgid "" "that ``manylinux2010`` distributions are not expected to work on platforms " "that existed before 2010)." msgstr "" +"一般而言,为旧版本规范构建的分发包是向前兼容的(即 ``manylinux1`` 分发包应该" +"能继续在现代系统上工作),但并不向后兼容(即 ``manylinux2010`` 分发包预计无法" +"在 2010 年之前就已存在的平台上工作)。" #: ../source/specifications/platform-compatibility-tags.rst:136 msgid "" @@ -19986,32 +23083,35 @@ msgid "" "for ``manylinux1`` and ``manylinux2010`` have reached end-of-life meaning " "that these images will no longer receive security updates." msgstr "" +"软件包维护者应该尽量以兼容性最强的规范为目标,但要注意,为 ``manylinux1`` 和 " +"``manylinux2010`` 提供的构建环境已经到达生命周期终点,这意味着这些镜像将不再" +"收到安全更新。" #: ../source/specifications/platform-compatibility-tags.rst:141 msgid "" "The following table shows the minimum versions of relevant projects to " "support the various ``manylinux`` standards:" -msgstr "" +msgstr "下表列出了支持各种 ``manylinux`` 标准所需的相关项目的最低版本:" #: ../source/specifications/platform-compatibility-tags.rst:145 msgid "Tool" -msgstr "" +msgstr "工具" #: ../source/specifications/platform-compatibility-tags.rst:145 msgid "``manylinux1``" -msgstr "" +msgstr "``manylinux1``" #: ../source/specifications/platform-compatibility-tags.rst:145 msgid "``manylinux2010``" -msgstr "" +msgstr "``manylinux2010``" #: ../source/specifications/platform-compatibility-tags.rst:145 msgid "``manylinux2014``" -msgstr "" +msgstr "``manylinux2014``" #: ../source/specifications/platform-compatibility-tags.rst:145 msgid "``manylinux_x_y``" -msgstr "" +msgstr "``manylinux_x_y``" #: ../source/specifications/platform-compatibility-tags.rst:147 msgid "``>=8.1.0``" @@ -20031,7 +23131,7 @@ msgstr "``>=20.3``" #: ../source/specifications/platform-compatibility-tags.rst:148 msgid "auditwheel" -msgstr "" +msgstr "auditwheel" #: ../source/specifications/platform-compatibility-tags.rst:148 msgid "``>=1.0.0``" @@ -20051,7 +23151,7 @@ msgstr "``>=3.3.0`` [#]_" #: ../source/specifications/platform-compatibility-tags.rst:151 msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" -msgstr "" +msgstr "在 auditwheel 3.3.0 中只加入了对 ``manylinux_2_24`` 的支持" #: ../source/specifications/platform-compatibility-tags.rst:155 msgid "``musllinux``" @@ -20064,6 +23164,9 @@ msgid "" "Alpine Linux). The schema is :file:`musllinux_{x}_{y}_{arch}`, supporting " "musl ``x.y`` and higher on the architecture ``arch``." msgstr "" +"``musllinux`` 系列标签与 ``manylinux`` 类似,但面向的是使用 musl_ libc 而非 " +"glibc 的 Linux 平台(典型例子是 Alpine Linux)。其模式为 :file:`musllinux_{x}" +"_{y}_{arch}`,表示在 ``arch`` 架构上支持 musl ``x.y`` 及更高版本。" #: ../source/specifications/platform-compatibility-tags.rst:162 msgid "" @@ -20071,6 +23174,8 @@ msgid "" "library the Python interpreter is currently running on, and parsing the " "output:" msgstr "" +"musl 的版本值可以通过执行 Python 解释器当前运行时所依赖的 musl libc 共享库并" +"解析其输出来获得:" #: ../source/specifications/platform-compatibility-tags.rst:193 msgid "" @@ -20079,6 +23184,8 @@ msgid "" "command, or by parsing the ``PT_INTERP`` section’s value from the " "executable’s ELF_ header." msgstr "" +"目前有两种方法可以找到 Python 解释器运行时所依赖的 musl 库的位置:一是使用系" +"统的 ldd_ 命令,二是从可执行文件的 ELF_ 头中解析 ``PT_INTERP`` 节的值。" #: ../source/specifications/platform-compatibility-tags.rst:202 msgid "" @@ -20087,6 +23194,9 @@ msgid "" "compatibility tags is :file:`macosx_{x}_{y}_{arch}`, indicating that the " "wheel is compatible with macOS ``x.y`` or later on the architecture ``arch``." msgstr "" +"macOS 使用 ``macosx`` 系列标签(其中的 ``x`` 后缀是 Apple 官方 macOS 命名方式" +"的历史遗留产物)。兼容性标签的模式为 :file:`macosx_{x}_{y}_{arch}`,表示 " +"wheel 包在 ``arch`` 架构上与 macOS ``x.y`` 或更高版本兼容。" #: ../source/specifications/platform-compatibility-tags.rst:207 msgid "" @@ -20098,6 +23208,11 @@ msgid "" "``>=26`` and corresponding to the year of the macOS release. For example, " "``macosx_11_0_arm64`` indicates compatibility with macOS 11 or later." msgstr "" +"对于 macOS 10,标签为 :file:`macosx_10_{y}_{arch}`,其中 ``y`` 对应 macOS 发" +"布版本的次版本号。对于 macOS 11 及更高版本,标签为 :file:`macosx_{x}_0_{arch}" +"`,其中 ``x`` 对应 macOS 发布版本的主版本号。按照已发布的 macOS 主版本" +",``x`` 的取值要么是 ``10 <= x <= 15``,要么是 ``>=26`` 且对应 macOS 发布的年" +"份。例如,``macosx_11_0_arm64`` 表示兼容 macOS 11 或更高版本。" #: ../source/specifications/platform-compatibility-tags.rst:215 msgid "" @@ -20109,30 +23224,34 @@ msgid "" "be an identifier from the following list that describes the set of supported " "architectures:" msgstr "" +"macOS 二进制文件可以针对单一架构编译,也可以在同一个二进制文件中包含对多种架" +"构的支持(有时称为 “fat” 二进制文件)。要表示支持单一架构,``arch`` 的值必须" +"与系统上 :py:func:`platform.machine()` 的返回值相匹配。要表示支持多种架构" +",``arch`` 标签应该取下表中某个标识符,该标识符描述了所支持的架构集合:" #: ../source/specifications/platform-compatibility-tags.rst:223 msgid "``arch``" -msgstr "" +msgstr "``arch``" #: ../source/specifications/platform-compatibility-tags.rst:223 msgid "Architectures supported" -msgstr "" +msgstr "所支持的架构" #: ../source/specifications/platform-compatibility-tags.rst:225 msgid "``universal2``" -msgstr "" +msgstr "``universal2``" #: ../source/specifications/platform-compatibility-tags.rst:225 msgid "``arm64``, ``x86_64``" -msgstr "" +msgstr "``arm64``, ``x86_64``" #: ../source/specifications/platform-compatibility-tags.rst:226 msgid "``universal``" -msgstr "" +msgstr "``universal``" #: ../source/specifications/platform-compatibility-tags.rst:226 msgid "``i386``, ``ppc``, ``ppc64``, ``x86_64``" -msgstr "" +msgstr "``i386``, ``ppc``, ``ppc64``, ``x86_64``" #: ../source/specifications/platform-compatibility-tags.rst:227 msgid "``intel``" @@ -20144,7 +23263,7 @@ msgstr "``i386``, ``x86_64``" #: ../source/specifications/platform-compatibility-tags.rst:228 msgid "``fat``" -msgstr "" +msgstr "``fat``" #: ../source/specifications/platform-compatibility-tags.rst:228 msgid "``i386``, ``ppc``" @@ -20152,19 +23271,19 @@ msgstr "``i386``, ``ppc``" #: ../source/specifications/platform-compatibility-tags.rst:229 msgid "``fat3``" -msgstr "" +msgstr "``fat3``" #: ../source/specifications/platform-compatibility-tags.rst:229 msgid "``i386``, ``ppc``, ``x86_64``" -msgstr "" +msgstr "``i386``, ``ppc``, ``x86_64``" #: ../source/specifications/platform-compatibility-tags.rst:230 msgid "``fat64``" -msgstr "" +msgstr "``fat64``" #: ../source/specifications/platform-compatibility-tags.rst:230 msgid "``ppc64``, ``x86_64``" -msgstr "" +msgstr "``ppc64``, ``x86_64``" #: ../source/specifications/platform-compatibility-tags.rst:233 msgid "" @@ -20174,10 +23293,13 @@ msgid "" "compilation toolchain when building binaries that support multiple " "architectures." msgstr "" +"所支持的最低 macOS 版本还可能受到架构的约束。例如,macOS 11(Big Sur)是第一" +"个支持 arm64 的版本。在构建支持多种架构的二进制文件时,macOS 编译工具链会透明" +"地强制执行这些额外的约束。" #: ../source/specifications/platform-compatibility-tags.rst:241 msgid "Android" -msgstr "" +msgstr "Android" #: ../source/specifications/platform-compatibility-tags.rst:243 msgid "" @@ -20187,6 +23309,10 @@ msgid "" "later, on ``arm64_v8a`` devices. Android makes no distinction between " "physical devices and emulated devices." msgstr "" +"Android 使用 :file:`android_{apilevel}_{abi}` 模式,表示在给定 ABI 上兼容给定" +"的 Android API 级别或更高级别。例如,``android_27_arm64_v8a`` 表示在 " +"``arm64_v8a`` 设备上支持 API 级别 27 或更高级别。Android 不区分物理设备和模拟" +"设备。" #: ../source/specifications/platform-compatibility-tags.rst:249 msgid "" @@ -20197,28 +23323,34 @@ msgid "" "the `full list of Android versions and their corresponding API levels " "`__." msgstr "" +"API 级别应该是一个正整数。它与面向用户的 Android 版本 *不是* 一回事。例如,名" +"为 Android 12(代号 “Snow Cone”)的发布版本使用 API 级别 31 或 32,具体取决于" +"所使用的 Android 版本。Android 的发布文档包含 `Android 版本及对应 API 级别的" +"完整列表 `__。" #: ../source/specifications/platform-compatibility-tags.rst:256 msgid "" "There are 4 `supported ABIs `__. Normalized according to the rules above, they are:" msgstr "" +"共有 4 种 `受支持的 ABI `__。" +"按照上述规则规范化后,它们是:" #: ../source/specifications/platform-compatibility-tags.rst:259 msgid "``armeabi_v7a``" -msgstr "" +msgstr "``armeabi_v7a``" #: ../source/specifications/platform-compatibility-tags.rst:260 msgid "``arm64_v8a``" -msgstr "" +msgstr "``arm64_v8a``" #: ../source/specifications/platform-compatibility-tags.rst:261 msgid "``x86``" -msgstr "" +msgstr "``x86``" #: ../source/specifications/platform-compatibility-tags.rst:262 msgid "``x86_64``" -msgstr "" +msgstr "``x86_64``" #: ../source/specifications/platform-compatibility-tags.rst:264 msgid "" @@ -20227,10 +23359,13 @@ msgid "" "not been supported as a development platform since 2020, and no new emulator " "images have been released since then." msgstr "" +"几乎所有当前的物理设备都使用某一种 ARM 架构。``x86`` 和 ``x86_64`` 支持在模拟" +"器中使用。``x86`` 自 2020 年起不再作为开发平台受到支持,此后也没有发布新的模" +"拟器镜像。" #: ../source/specifications/platform-compatibility-tags.rst:272 msgid "iOS" -msgstr "" +msgstr "iOS" #: ../source/specifications/platform-compatibility-tags.rst:274 msgid "" @@ -20238,6 +23373,8 @@ msgid "" "compatibility with iOS ``x.y`` or later, on the ``arch`` architecture, using " "the ``sdk`` SDK." msgstr "" +"iOS 使用 :file:`ios_{x}_{y}_{arch}_{sdk}` 模式,表示在 ``arch`` 架构上使用 " +"``sdk`` SDK 时,兼容 iOS ``x.y`` 或更高版本。" #: ../source/specifications/platform-compatibility-tags.rst:277 msgid "" @@ -20248,12 +23385,16 @@ msgid "" "For example, a ``ios_13_0_arm64_iphonesimulator`` indicates compatibility " "with iOS 13 or later." msgstr "" +"``x`` 和 ``y`` 的值分别对应 iOS 发布版本的主版本号和次版本号。两者必须都是正" +"整数。版本号总是同时包含主版本号 *和* 次版本号,即使 Apple 官方的版本编号只涉" +"及主版本号。例如,``ios_13_0_arm64_iphonesimulator`` 表示兼容 iOS 13 或更高版" +"本。" #: ../source/specifications/platform-compatibility-tags.rst:283 msgid "" "The value of ``arch`` must match the value of :py:func:`platform.machine()` " "on the system." -msgstr "" +msgstr "``arch`` 的值必须与系统上 :py:func:`platform.machine()` 的返回值相匹配。" #: ../source/specifications/platform-compatibility-tags.rst:286 msgid "" @@ -20263,28 +23404,36 @@ msgid "" "on the same CPU architecture. Code compiled for an arm64 simulator will not " "run on an arm64 device." msgstr "" +"``sdk`` 的值必须是 ``iphoneos`` 或 ``iphonesimulator``,前者用于物理设备,后" +"者用于设备模拟器。这两种 SDK 的 API 表面相同,但在二进制层面互不兼容,即使它" +"们运行在相同的 CPU 架构上也是如此。为 arm64 模拟器编译的代码无法在 arm64 设备" +"上运行。" #: ../source/specifications/platform-compatibility-tags.rst:292 msgid "" "The combination of :file:`{arch}_{sdk}` is referred to as the \"multiarch\". " "There are three possible values for multiarch:" -msgstr "" +msgstr ":file:`{arch}_{sdk}` 的组合称为 “multiarch”。multiarch 有三种可能的取值:" #: ../source/specifications/platform-compatibility-tags.rst:295 msgid "" "``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " "iOS device manufactured since ~2015;" msgstr "" +"``arm64_iphoneos``,用于 iPhone/iPad 物理设备。这包括自约 2015 年以来制造的所" +"有 iOS 设备;" #: ../source/specifications/platform-compatibility-tags.rst:297 msgid "" "``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " "hardware; and" msgstr "" +"``arm64_iphonesimulator``,用于在 Apple Silicon macOS 硬件上运行的模拟器;以" +"及" #: ../source/specifications/platform-compatibility-tags.rst:299 msgid "``x86_64_iphonesimulator``, for simulators running on x86_64 hardware." -msgstr "" +msgstr "``x86_64_iphonesimulator``,用于在 x86_64 硬件上运行的模拟器。" #: ../source/specifications/platform-compatibility-tags.rst:302 msgid "Use" @@ -20297,6 +23446,9 @@ msgid "" "maintains a list of (pyver, abi, arch) tuples that it will support. If the " "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" +"安装器使用这些标签来决定从候选构建分发列表中下载哪一个构建分发(如果有的话)" +"。安装器会维护一个自身将支持的 (pyver, abi, arch) 元组列表。如果构建分发的标" +"签存在于该列表中(``in``),那么它就可以被安装。" #: ../source/specifications/platform-compatibility-tags.rst:310 msgid "" @@ -20308,6 +23460,10 @@ msgid "" "tags; for example, a user might accept only the ``*-none-any`` tags to only " "download built packages that advertise themselves as being pure Python." msgstr "" +"建议安装器默认先尝试选择可用的功能最完整的构建分发(即对安装环境最具针对性的" +"那一个),再回退到为旧版 Python 发布的纯 Python 版本。此外还建议安装器提供配" +"置并重新排序所允许的兼容性标签列表的方法;例如,用户可以只接受 ``*-none-" +"any`` 标签,从而只下载那些声明自身为纯 Python 的构建分发。" #: ../source/specifications/platform-compatibility-tags.rst:318 msgid "" @@ -20315,6 +23471,8 @@ msgid "" "source if possible\" as more preferable than some of the compatible but " "legacy pre-built options." msgstr "" +"另一个可取的安装器特性可能是:把“尽可能从源码重新编译”列为比某些兼容但陈旧的" +"预构建选项更优先的选项。" #: ../source/specifications/platform-compatibility-tags.rst:322 msgid "" @@ -20324,68 +23482,73 @@ msgid "" "least-preferred (a pure-Python distribution built with an older version of " "Python):" msgstr "" +"这个示例列表适用于在 linux_x86_64 系统上、运行于 CPython 3.3 之下的安装器。列" +"表按从最优先(即包含已编译扩展模块、为当前 Python 版本构建的分发包)到最不优" +"先(即用较旧 Python 版本构建的纯 Python 分发包)的顺序排列:" #: ../source/specifications/platform-compatibility-tags.rst:328 msgid "cp33-cp33m-linux_x86_64" -msgstr "" +msgstr "cp33-cp33m-linux_x86_64" #: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-abi3-linux_x86_64" -msgstr "" +msgstr "cp33-abi3-linux_x86_64" #: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-abi3-linux_x86_64" -msgstr "" +msgstr "cp3-abi3-linux_x86_64" #: ../source/specifications/platform-compatibility-tags.rst:331 msgid "cp33-none-linux_x86_64*" -msgstr "" +msgstr "cp33-none-linux_x86_64*" #: ../source/specifications/platform-compatibility-tags.rst:332 msgid "cp3-none-linux_x86_64*" -msgstr "" +msgstr "cp3-none-linux_x86_64*" #: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py33-none-linux_x86_64*" -msgstr "" +msgstr "py33-none-linux_x86_64*" #: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py3-none-linux_x86_64*" -msgstr "" +msgstr "py3-none-linux_x86_64*" #: ../source/specifications/platform-compatibility-tags.rst:335 msgid "cp33-none-any" -msgstr "" +msgstr "cp33-none-any" #: ../source/specifications/platform-compatibility-tags.rst:336 msgid "cp3-none-any" -msgstr "" +msgstr "cp3-none-any" #: ../source/specifications/platform-compatibility-tags.rst:337 msgid "py33-none-any" -msgstr "" +msgstr "py33-none-any" #: ../source/specifications/platform-compatibility-tags.rst:338 msgid "py3-none-any" -msgstr "" +msgstr "py3-none-any" #: ../source/specifications/platform-compatibility-tags.rst:339 msgid "py32-none-any" -msgstr "" +msgstr "py32-none-any" #: ../source/specifications/platform-compatibility-tags.rst:340 msgid "py31-none-any" -msgstr "" +msgstr "py31-none-any" #: ../source/specifications/platform-compatibility-tags.rst:341 msgid "py30-none-any" -msgstr "" +msgstr "py30-none-any" #: ../source/specifications/platform-compatibility-tags.rst:343 msgid "" "Built distributions may be platform specific for reasons other than C " "extensions, such as by including a native executable invoked as a subprocess." msgstr "" +"构建分发可能出于 C 扩展以外的其他原因而与特定平台相关,例如其中包含了会被作为" +"子进程调用的原生可执行文件。" #: ../source/specifications/platform-compatibility-tags.rst:347 msgid "" @@ -20397,10 +23560,15 @@ msgid "" "package with the C extension is installed in preference to the package " "without because that tag appears first in the list." msgstr "" +"有时,某个软件包的特定版本会有不止一个受支持的构建分发。例如,打包者可以发布" +"一个标签为 ``cp33-abi3-linux_x86_64``、包含可选 C 扩展的软件包,同时发布同一" +"分发的不含 C 扩展、标签为 ``py3-none-any`` 的版本。此时由该标签在受支持标签列" +"表中的索引来打破平局;由于这个标签在列表中排在前面,含 C 扩展的软件包会优先于" +"不含 C 扩展的软件包被安装。" #: ../source/specifications/platform-compatibility-tags.rst:356 msgid "Compressed Tag Sets" -msgstr "" +msgstr "压缩标签集" #: ../source/specifications/platform-compatibility-tags.rst:358 msgid "" @@ -20411,6 +23579,10 @@ msgid "" "code, could distribute a bdist with the tag ``py2.py3-none-any``. The full " "list of simple tags is::" msgstr "" +"为了让兼容多个兼容性标签三元组的 bdist 保持文件名紧凑,文件名中的每个标签可以" +"改为一个以 '.' 分隔、经过排序的标签集合。例如,pip 是一个用同一份源代码编写、" +"可同时运行在 Python 2 和 3 下的纯 Python 软件包,它可以用标签 ``py2.py3-none-" +"any`` 来分发 bdist。简单标签的完整列表如下::" #: ../source/specifications/platform-compatibility-tags.rst:370 msgid "" @@ -20419,10 +23591,13 @@ msgid "" "numbers of unsupported tags and \"impossible\" tags that are supported by no " "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" +"实现此方案的 bdist 格式应该在 bdist 专用的元数据中包含展开后的标签。这种压缩" +"方案可能生成大量不受支持的标签,以及不被任何 Python 实现支持的“不可能”标签(" +"例如 “cp33-cp31u-win64”),因此请谨慎使用。" #: ../source/specifications/platform-compatibility-tags.rst:383 msgid "What tags are used by default?" -msgstr "" +msgstr "默认使用哪些标签?" #: ../source/specifications/platform-compatibility-tags.rst:379 msgid "" @@ -20431,12 +23606,15 @@ msgid "" "by default. If the packager overrides the default it indicates that they " "intended to provide cross-Python compatibility." msgstr "" +"工具默认应该使用最优先的依赖架构的标签,例如 ``cp33-cp33m-win32``,或者最优先" +"的纯 Python 标签,例如 ``py33-none-any``。如果打包者覆盖了默认设置,则表明其" +"有意提供跨 Python 的兼容性。" #: ../source/specifications/platform-compatibility-tags.rst:393 msgid "" "What tag do I use if my distribution uses a feature exclusive to the newest " "version of Python?" -msgstr "" +msgstr "如果我的分发包使用了最新版 Python 独有的特性,应该使用什么标签?" #: ../source/specifications/platform-compatibility-tags.rst:386 msgid "" @@ -20448,10 +23626,15 @@ msgid "" "as a requirement for the older release ``beaglevote-1.1.0`` that does not " "use the new feature, to get a compatible build." msgstr "" +"兼容性标签帮助安装器为某个分发包的 *单一版本* 选择 *兼容性最好* 的构建。例如" +",当 ``beaglevote-1.2.0`` 没有兼容 Python 3.3 的构建时(它使用了 Python 3.4 " +"独有的特性),该分发包仍可以使用 ``py3-none-any`` 标签而非 ``py34-none-any`` " +"标签。Python 3.3 的用户必须结合其他限定条件才能获得兼容的构建,例如改为要求使" +"用未采用该新特性的较旧版本 ``beaglevote-1.1.0``。" #: ../source/specifications/platform-compatibility-tags.rst:398 msgid "Why isn't there a ``.`` in the Python version number?" -msgstr "" +msgstr "为什么 Python 版本号中没有 ``.``?" #: ../source/specifications/platform-compatibility-tags.rst:396 msgid "" @@ -20459,11 +23642,14 @@ msgid "" "continue for some time. Other implementations may use _ as a delimiter, " "since both - and . delimit the surrounding filename." msgstr "" +"CPython 已经 20 多年没有出现过三位数的主版本号了,这种状况应该还会持续一段时" +"间。其他实现可以用 _ 作为分隔符,因为 - 和 . 都已经用于分隔文件名的各个组成部" +"分。" #: ../source/specifications/platform-compatibility-tags.rst:404 msgid "" "Why normalise hyphens and other non-alphanumeric characters to underscores?" -msgstr "" +msgstr "为什么要把连字符和其他非字母数字字符规范化为下划线?" #: ../source/specifications/platform-compatibility-tags.rst:401 msgid "" @@ -20472,10 +23658,12 @@ msgid "" "range of filesystem limitations for filenames (including being usable in URL " "paths without quoting)." msgstr "" +"为了避免与分隔文件名各组成部分的 ``.`` 和 ``-`` 字符冲突,并最大程度地兼容各" +"种文件系统对文件名的限制(包括无需转义即可用于 URL 路径)。" #: ../source/specifications/platform-compatibility-tags.rst:413 msgid "Why not use special character rather than ``.`` or ``-``?" -msgstr "" +msgstr "为什么不使用特殊字符 ,而要用 ``.`` 或 ``-``?" #: ../source/specifications/platform-compatibility-tags.rst:407 msgid "" @@ -20486,10 +23674,14 @@ msgid "" "implementation for the wheel format defined in :pep:`427` (for example, " "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" +"要么是因为该字符在某些情况下不便或容易造成混淆(例如 ``+`` 在 URL 中必须经过" +"转义,``~`` 在 POSIX 中用于表示用户的主目录),要么是因为其优势并不足以证明修" +"改 :pep:`427` 所定义的 wheel 格式的现有参考实现是合理的(例如在压缩标签中使" +"用 ``,`` 而非 ``.`` 来分隔各组成部分)。" #: ../source/specifications/platform-compatibility-tags.rst:418 msgid "Who will maintain the registry of abbreviated implementations?" -msgstr "" +msgstr "由谁来维护实现缩写的注册表?" #: ../source/specifications/platform-compatibility-tags.rst:416 msgid "" @@ -20497,10 +23689,12 @@ msgid "" "list. As a rule of thumb, abbreviations are reserved for the current 4 most " "prominent implementations." msgstr "" +"可以在 python-dev 邮件列表中申请新的两字母缩写。按照经验法则,这些缩写仅保留" +"给当前最主流的 4 种实现使用。" #: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Does the compatibility tag go into METADATA or PKG-INFO?" -msgstr "" +msgstr "兼容性标签会写入 METADATA 还是 PKG-INFO?" #: ../source/specifications/platform-compatibility-tags.rst:421 msgid "" @@ -20508,10 +23702,12 @@ msgid "" "METADATA / PKG-INFO should be valid for an entire distribution, not a single " "build of that distribution." msgstr "" +"不会。兼容性标签是构建分发元数据的一部分。METADATA / PKG-INFO 应该对整个分发" +"包有效,而不是仅对该分发包的某一次构建有效。" #: ../source/specifications/platform-compatibility-tags.rst:429 msgid "Why didn't you mention my favorite Python implementation?" -msgstr "" +msgstr "为什么没有提到我最喜欢的 Python 实现?" #: ../source/specifications/platform-compatibility-tags.rst:426 msgid "" @@ -20520,12 +23716,15 @@ msgid "" "longer tags. Recall that all \"pure Python\" built distributions just use " "``py``." msgstr "" +"缩写标签便于在公共索引中共享已编译的 Python 代码。你的 Python 实现也可以使用" +"本规范,只是标签会更长一些。请记住,所有“纯 Python”的构建分发都只使用 " +"``py``。" #: ../source/specifications/platform-compatibility-tags.rst:437 msgid "" "Why is the ABI tag (the second tag) sometimes \"none\" in the reference " "implementation?" -msgstr "" +msgstr "为什么参考实现中的 ABI 标签(第二个标签)有时会是 “none”?" #: ../source/specifications/platform-compatibility-tags.rst:432 msgid "" @@ -20535,42 +23734,46 @@ msgid "" "analogous to newer versions of Python, but in the meantime \"none\" is a " "good enough way to say \"don't know\"." msgstr "" +"由于 Python 2 没有简便的方法来处理 SOABI(这一概念来自较新版本的 Python 3)," +"因此在编写本规范时,参考实现会猜测其值为 “none”。理想情况下,它应当能像较新版" +"本的 Python 那样检测出 “py27(d|m|u)”,但在此之前,用 “none” 来表示“不知道”已" +"经够好了。" #: ../source/specifications/platform-compatibility-tags.rst:442 msgid "" "February 2013: The original version of this specification was approved " "through :pep:`425`." -msgstr "" +msgstr "2013 年 2 月:本规范的最初版本通过 :pep:`425` 获得批准。" #: ../source/specifications/platform-compatibility-tags.rst:444 msgid "January 2016: The ``manylinux1`` tag was approved through :pep:`513`." -msgstr "" +msgstr "2016 年 1 月:``manylinux1`` 标签通过 :pep:`513` 获得批准。" #: ../source/specifications/platform-compatibility-tags.rst:445 msgid "April 2018: The ``manylinux2010`` tag was approved through :pep:`571`." -msgstr "" +msgstr "2018 年 4 月:``manylinux2010`` 标签通过 :pep:`571` 获得批准。" #: ../source/specifications/platform-compatibility-tags.rst:446 msgid "July 2019: The ``manylinux2014`` tag was approved through :pep:`599`." -msgstr "" +msgstr "2019 年 7 月:``manylinux2014`` 标签通过 :pep:`599` 获得批准。" #: ../source/specifications/platform-compatibility-tags.rst:447 msgid "" "November 2019: The ``manylinux_x_y`` perennial tag was approved " "through :pep:`600`." -msgstr "" +msgstr "2019 年 11 月:长期有效的 ``manylinux_x_y`` 标签通过 :pep:`600` 获得批准。" #: ../source/specifications/platform-compatibility-tags.rst:449 msgid "April 2021: The ``musllinux_x_y`` tag was approved through :pep:`656`." -msgstr "" +msgstr "2021 年 4 月:``musllinux_x_y`` 标签通过 :pep:`656` 获得批准。" #: ../source/specifications/platform-compatibility-tags.rst:450 msgid "December 2023: The tags for iOS were approved through :pep:`730`." -msgstr "" +msgstr "2023 年 12 月:iOS 的相关标签通过 :pep:`730` 获得批准。" #: ../source/specifications/platform-compatibility-tags.rst:451 msgid "March 2024: The tags for Android were approved through :pep:`738`." -msgstr "" +msgstr "2024 年 3 月:针对 Android 的标签通过 :pep:`738` 获得批准。" #: ../source/specifications/project-status-markers.rst:5 msgid "Project Status Markers" @@ -20578,7 +23781,7 @@ msgstr "项目状态标记" #: ../source/specifications/project-status-markers.rst:9 msgid "This specification was originally defined in :pep:`792`." -msgstr "" +msgstr "本规范最初是在 :pep:`792` 中定义的。" #: ../source/specifications/project-status-markers.rst:14 msgid "" @@ -20587,18 +23790,24 @@ msgid "" "Project Detail ` and :ref:`JSON - " "Project Detail `." msgstr "" +":pep:`792` 包含对 HTML 和 JSON 索引 API 的更改。这些更改记录在 :ref:`simple-" +"repository-api` 的 :ref:`HTML - 项目详情 ` 和 :ref:`JSON - 项目详情 ` 小" +"节中。" #: ../source/specifications/project-status-markers.rst:22 msgid "" "A project always has exactly one status. If no status is explicitly noted, " "then the project is considered to be in the ``active`` state." msgstr "" +"项目始终只有一个状态。如果没有明确注明状态,则该项目被视为处于 ``active`` 状" +"态。" #: ../source/specifications/project-status-markers.rst:25 msgid "" "Indices **MAY** implement any subset of the status markers specified, as " "applicable to their needs." -msgstr "" +msgstr "各索引 **可以** 根据自身需要实现所指定状态标记的任意子集。" #: ../source/specifications/project-status-markers.rst:28 msgid "" @@ -20606,34 +23815,36 @@ msgid "" "maintainers, index administrators, etc.) are allowed to set and unset which " "statuses." msgstr "" +"本标准并未规定 *哪些* 主体(即项目维护者、索引管理员等)可以设置和取消哪些状" +"态。" #: ../source/specifications/project-status-markers.rst:32 msgid "``active``" -msgstr "" +msgstr "``active``" #: ../source/specifications/project-status-markers.rst:34 msgid "" "Description: The project is active. This is the default status for a project." -msgstr "" +msgstr "描述:项目处于活跃状态。这是项目的默认状态。" #: ../source/specifications/project-status-markers.rst:36 #: ../source/specifications/project-status-markers.rst:49 #: ../source/specifications/project-status-markers.rst:65 #: ../source/specifications/project-status-markers.rst:83 msgid "Index semantics:" -msgstr "" +msgstr "索引语义:" #: ../source/specifications/project-status-markers.rst:38 msgid "" "The index hosting the project **MUST** allow uploads of new distributions to " "the project." -msgstr "" +msgstr "托管该项目的索引 **必须** 允许向该项目上传新的分发包。" #: ../source/specifications/project-status-markers.rst:40 #: ../source/specifications/project-status-markers.rst:53 msgid "" "The index **MUST** offer existing distributions of the project for download." -msgstr "" +msgstr "该索引 **必须** 提供该项目的现有分发包供下载。" #: ../source/specifications/project-status-markers.rst:42 msgid "Installer semantics: none." @@ -20645,14 +23856,14 @@ msgstr "``已归档``" #: ../source/specifications/project-status-markers.rst:47 msgid "Description: The project does not expect to be updated in the future." -msgstr "" +msgstr "描述:项目预计今后不会再更新。" #: ../source/specifications/project-status-markers.rst:51 #: ../source/specifications/project-status-markers.rst:67 msgid "" "The index hosting the project **MUST NOT** allow uploads of new " "distributions to the project." -msgstr "" +msgstr "托管该项目的索引 **不得** 允许向该项目上传新的分发包。" #: ../source/specifications/project-status-markers.rst:55 #: ../source/specifications/project-status-markers.rst:71 @@ -20662,22 +23873,22 @@ msgstr "安装包语义:" #: ../source/specifications/project-status-markers.rst:57 msgid "Installers **MAY** produce warnings about a project's archival." -msgstr "" +msgstr "安装工具 **可以** 就项目的归档发出警告。" #: ../source/specifications/project-status-markers.rst:60 msgid "``quarantined``" -msgstr "" +msgstr "``quarantined``" #: ../source/specifications/project-status-markers.rst:62 msgid "" "Description: The project is considered generally unsafe for use, e.g. due to " "malware." -msgstr "" +msgstr "描述:该项目被认为总体上不安全而不宜使用,例如由于存在恶意软件。" #: ../source/specifications/project-status-markers.rst:69 msgid "" "The index **MUST NOT** offer any distributions of the project for download." -msgstr "" +msgstr "该索引 **不得** 提供该项目的任何分发包供下载。" #: ../source/specifications/project-status-markers.rst:73 msgid "" @@ -20685,6 +23896,8 @@ msgid "" "doing so is effectively moot (as the index will not offer any distributions " "for installation)." msgstr "" +"安装工具 **可以** 就项目的隔离发出警告,不过这样做实际上没有意义(因为该索引" +"不会提供任何供安装的分发包)。" #: ../source/specifications/project-status-markers.rst:78 msgid "``deprecated``" @@ -20694,15 +23907,15 @@ msgstr "``已启用``" msgid "" "Description: The project is considered obsolete, and may have been " "superseded by another project." -msgstr "" +msgstr "描述:该项目被认为已经过时,并且可能已被其他项目取代。" #: ../source/specifications/project-status-markers.rst:85 msgid "This status shares the same semantics as ``active``." -msgstr "" +msgstr "此状态与 ``active`` 具有相同的语义。" #: ../source/specifications/project-status-markers.rst:89 msgid "Installers **MAY** produce warnings about a project's deprecation." -msgstr "" +msgstr "安装工具 **可以** 就项目的弃用发出警告。" #: ../source/specifications/pylock-toml.rst:6 msgid "``pylock.toml`` Specification" @@ -20713,10 +23926,12 @@ msgid "" "The ``pylock.toml`` file format is for specifying dependencies to enable " "reproducible installation in a Python environment." msgstr "" +"``pylock.toml`` 文件格式用于指定依赖项,以便在 Python 环境中实现可重现的安装" +"。" #: ../source/specifications/pylock-toml.rst:11 msgid "This specification was originally defined in :pep:`751`." -msgstr "" +msgstr "本规范最初在 :pep:`751` 中定义。" #: ../source/specifications/pylock-toml.rst:16 msgid "File Name" @@ -20731,26 +23946,30 @@ msgid "" "suffix of a named file MUST be lowercase when possible, for easy detection " "and removal, e.g.:" msgstr "" +"锁定文件必须命名为 :file:`pylock.toml`,或者在希望为锁定文件指定名称、存在多" +"个锁定文件时,其名称必须匹配正则表达式 ``r\"^pylock\\.([^.]+)\\.toml$\"``,即" +"对任意文件名,须匹配正则表达式 ``r\"^pylock\\.([^.]+\\.)?toml$\"``。为了便于" +"检测和移除,带名称的文件在可能的情况下,其前缀和后缀必须为小写,例如:" #: ../source/specifications/pylock-toml.rst:30 msgid "" "The expectation is that services that automatically install from lock files " "will search for:" -msgstr "" +msgstr "预期从锁定文件自动安装的服务会查找:" #: ../source/specifications/pylock-toml.rst:33 msgid "The lock file with the service's name and doing the default install" -msgstr "" +msgstr "以服务名称命名的锁定文件,并执行默认安装" #: ../source/specifications/pylock-toml.rst:34 msgid "" "A multi-use :file:`pylock.toml` with a dependency group with the name of the " "service" -msgstr "" +msgstr "多用途的 :file:`pylock.toml`,其中带有以服务名称命名的依赖群" #: ../source/specifications/pylock-toml.rst:35 msgid "The default install of :file:`pylock.toml`" -msgstr "" +msgstr "对 :file:`pylock.toml` 执行默认安装" #: ../source/specifications/pylock-toml.rst:37 msgid "" @@ -20759,6 +23978,9 @@ msgid "" "then install from :file:`pylock.toml` and look for a dependency group named " "\"spam\" to use if present." msgstr "" +"例如,一个名为 \"spam\" 的云托管服务会首先查找 :file:`pylock.spam.toml` 以便" +"从中安装;如果该文件不存在,则从 :file:`pylock.toml` 安装,并查找名为 " +"\"spam\" 的依赖群(如果存在则使用)。" #: ../source/specifications/pylock-toml.rst:42 msgid "" @@ -20769,10 +23991,14 @@ msgid "" "the :file:`pylock.toml` file would be in the directory that held all the " "projects being locked." msgstr "" +"锁定文件应该位于与其作用范围相适应的目录中。例如,针对单个 " +":file:`pyproject.toml` 进行锁定时,会把 :file:`pylock.toml` 放在同一目录中。" +"如果锁定文件覆盖 monorepo 中的多个项目,则预期 :file:`pylock.toml` 文件会位于" +"容纳所有被锁定项目的目录中。" #: ../source/specifications/pylock-toml.rst:53 msgid "The format of the file is TOML_." -msgstr "" +msgstr "该文件的格式为 TOML_。" #: ../source/specifications/pylock-toml.rst:55 msgid "" @@ -20783,6 +24009,9 @@ msgid "" "tools SHOULD sort arrays in consistent order. Usage of inline tables SHOULD " "also be kept consistent." msgstr "" +"工具应该以一致的方式写出其锁定文件,以尽量减少 diff 输出中的噪声。表中的键(" +"包括顶层表)应该以一致的顺序记录(如果需要参考,本规范已尝试按逻辑顺序书写各" +"个键)。此外,工具应该以一致的顺序对数组排序。内联表的使用也应该保持一致。" #: ../source/specifications/pylock-toml.rst:65 msgid "``lock-version``" @@ -20790,7 +24019,7 @@ msgstr "``lock-version``" #: ../source/specifications/pylock-toml.rst:67 msgid "**Type**: string; value of ``\"1.0\"``" -msgstr "" +msgstr "**类型**: 字符串;值为 ``\"1.0\"``" #: ../source/specifications/pylock-toml.rst:68 #: ../source/specifications/pylock-toml.rst:174 @@ -20806,27 +24035,29 @@ msgstr "**必需吗?**: 是" #: ../source/specifications/pylock-toml.rst:69 msgid "**Inspiration**: :ref:`core-metadata-metadata-version`" -msgstr "" +msgstr "**灵感**: :ref:`core-metadata-metadata-version`" #: ../source/specifications/pylock-toml.rst:70 msgid "Record the file format version that the file adheres to." -msgstr "" +msgstr "记录该文件所遵循的文件格式版本。" #: ../source/specifications/pylock-toml.rst:71 msgid "" "This PEP specifies the initial version -- and only valid value until future " "updates to the standard change it -- as ``\"1.0\"``." msgstr "" +"该 PEP 将初始版本(在标准的未来更新对其加以更改之前,这是唯一有效的取值)指定" +"为 ``\"1.0\"``。" #: ../source/specifications/pylock-toml.rst:73 msgid "" "If a tool supports the major version but not the minor version, a tool " "SHOULD warn when an unknown key is seen." -msgstr "" +msgstr "如果工具支持主版本但不支持次版本,则在遇到未知键时,工具应该发出警告。" #: ../source/specifications/pylock-toml.rst:75 msgid "If a tool doesn't support a major version, it MUST raise an error." -msgstr "" +msgstr "如果工具不支持某个主版本,则必须引发错误。" #: ../source/specifications/pylock-toml.rst:81 msgid "``environments``" @@ -20837,7 +24068,7 @@ msgstr "``environments``" #: ../source/specifications/pylock-toml.rst:132 #: ../source/specifications/pylock-toml.rst:154 msgid "**Type**: Array of strings" -msgstr "" +msgstr "**类型**: 字符串数组" #: ../source/specifications/pylock-toml.rst:84 #: ../source/specifications/pylock-toml.rst:98 @@ -20855,25 +24086,27 @@ msgstr "" #: ../source/specifications/pylock-toml.rst:715 #: ../source/specifications/pylock-toml.rst:730 msgid "**Required?**: no" -msgstr "" +msgstr "**必需吗?**: 否" #: ../source/specifications/pylock-toml.rst:85 #: ../source/specifications/pylock-toml.rst:531 #: ../source/specifications/pylock-toml.rst:549 msgid "**Inspiration**: uv_" -msgstr "" +msgstr "**灵感**: uv_" #: ../source/specifications/pylock-toml.rst:86 msgid "" "A list of :ref:`dependency-specifiers-environment-markers` for which the " "lock file is considered compatible with." msgstr "" +"该锁定文件被视为与其兼容的 :ref:`dependency-specifiers-environment-markers` " +"列表。" #: ../source/specifications/pylock-toml.rst:88 msgid "" "Tools SHOULD write exclusive/non-overlapping environment markers to ease in " "understanding." -msgstr "" +msgstr "工具应该写出互斥/不重叠的环境标记,以便于理解。" #: ../source/specifications/pylock-toml.rst:97 #: ../source/specifications/pylock-toml.rst:173 @@ -20894,7 +24127,7 @@ msgstr "" #: ../source/specifications/pylock-toml.rst:633 #: ../source/specifications/pylock-toml.rst:703 msgid "**Type**: string" -msgstr "" +msgstr "**类型**: 字符串" #: ../source/specifications/pylock-toml.rst:99 #: ../source/specifications/pylock-toml.rst:190 @@ -20903,7 +24136,7 @@ msgstr "" #: ../source/specifications/pylock-toml.rst:621 #: ../source/specifications/pylock-toml.rst:637 msgid "**Inspiration**: PDM_, Poetry_, uv_" -msgstr "" +msgstr "**灵感**: PDM_, Poetry_, uv_" #: ../source/specifications/pylock-toml.rst:100 msgid "" @@ -20911,22 +24144,24 @@ msgid "" "version compatible for any environment supported by the lock file (i.e. the " "minimum viable Python version for the lock file)." msgstr "" +"指定 :ref:`core-metadata-requires-python`,表示锁定文件支持的任何环境都兼容的" +"最低 Python 版本(即该锁定文件最低可用的 Python 版本)。" #: ../source/specifications/pylock-toml.rst:111 #: ../source/specifications/pylock-toml.rst:133 #: ../source/specifications/pylock-toml.rst:155 msgid "**Required?**: no; defaults to ``[]``" -msgstr "" +msgstr "**必需吗?**: 否;默认值为 ``[]``" #: ../source/specifications/pylock-toml.rst:112 msgid "**Inspiration**: :ref:`core-metadata-provides-extra`" -msgstr "" +msgstr "**灵感**: :ref:`core-metadata-provides-extra`" #: ../source/specifications/pylock-toml.rst:113 msgid "" "The list of :ref:`extras ` supported by this " "lock file." -msgstr "" +msgstr "该锁定文件支持的 :ref:`附加功能 ` 列表。" #: ../source/specifications/pylock-toml.rst:115 #: ../source/specifications/pylock-toml.rst:138 @@ -20935,10 +24170,12 @@ msgid "" "dependency groups (i.e. tools may only support exporting a single-use lock " "file)." msgstr "" +"锁定工具可以选择不支持生成支持附加功能(extras)和依赖群的锁定文件(即工具可" +"以只支持导出单用途的锁定文件)。" #: ../source/specifications/pylock-toml.rst:118 msgid "Tools supporting extras MUST also support dependency groups." -msgstr "" +msgstr "支持附加功能(extras)的工具必须同时支持依赖群。" #: ../source/specifications/pylock-toml.rst:119 msgid "" @@ -20949,6 +24186,10 @@ msgid "" "dependencies>` table), signalling that the lock file is, in effect, multi-" "use even if it only looks to be single-use." msgstr "" +"工具应该显式地将此键设置为空数组,以表明生成锁定文件时所用的输入没有任何附加" +"功能(extras)(例如 :ref:`pyproject.toml ` 文件中没有 " +":ref:`[project.optional-dependencies] " +"` 表),从而表明该锁定文件实际上是多用途的,即使它看起来只是单用途的。" #: ../source/specifications/pylock-toml.rst:130 msgid "``dependency-groups``" @@ -20966,10 +24207,12 @@ msgid "" "(i.e. dependency groups users are expected to be able to specify via a " "tool's UI)." msgstr "" +"该锁定文件公开支持的 :ref:`dependency-groups` 列表(即预期用户能够通过工具 " +"UI 指定的依赖群)。" #: ../source/specifications/pylock-toml.rst:141 msgid "Tools supporting dependency groups MUST also support extras." -msgstr "" +msgstr "支持依赖群的工具必须同时支持附加功能(extras)。" #: ../source/specifications/pylock-toml.rst:142 msgid "" @@ -20979,14 +24222,18 @@ msgid "" "groups] ` table), signalling that the lock file is, in " "effect, multi-use even if it only looks to be single-use." msgstr "" +"工具应该显式地将此键设置为空数组,以表明生成锁定文件时所用的输入没有任何依赖" +"群(例如 :ref:`pyproject.toml ` 文件中没有 " +":ref:`[dependency-groups] ` 表),从而表明该锁定文件实际上" +"是多用途的,即使它看起来只是单用途的。" #: ../source/specifications/pylock-toml.rst:152 msgid "``default-groups``" -msgstr "" +msgstr "``default-groups``" #: ../source/specifications/pylock-toml.rst:156 msgid "**Inspiration**: Poetry_, PDM_" -msgstr "" +msgstr "**灵感**: Poetry_, PDM_" #: ../source/specifications/pylock-toml.rst:157 msgid "" @@ -20994,12 +24241,15 @@ msgid "" "installed by default (e.g. what :ref:`[project.dependencies] ` implicitly represents)." msgstr "" +"合成依赖群的名称,用于表示默认应安装的内容(例如 " +":ref:`[project.dependencies] ` 隐式表示的内容)" +"。" #: ../source/specifications/pylock-toml.rst:161 msgid "" "Meant to be used in situations where :ref:`pylock-packages-marker` " "necessitates such a group to exist." -msgstr "" +msgstr "适用于 :ref:`pylock-packages-marker` 要求此类群组存在的情形。" #: ../source/specifications/pylock-toml.rst:163 msgid "" @@ -21007,30 +24257,36 @@ msgid "" "dependency-groups` as the groups are not meant to be directly exposed to " "users by name but instead via an installer's UI." msgstr "" +"此键列出的群组不应该列在 :ref:`pylock-dependency-groups` 中,因为这些群组并不" +"打算按名称直接暴露给用户,而是通过安装器的 UI 暴露。" #: ../source/specifications/pylock-toml.rst:171 msgid "``created-by``" -msgstr "" +msgstr "``created-by``" #: ../source/specifications/pylock-toml.rst:175 msgid "**Inspiration**: Tools with their name in their lock file name" -msgstr "" +msgstr "**灵感**: 将自身名称包含在锁定文件名中的工具" #: ../source/specifications/pylock-toml.rst:176 msgid "Records the name of the tool used to create the lock file." -msgstr "" +msgstr "记录创建锁定文件所用工具的名称。" #: ../source/specifications/pylock-toml.rst:177 msgid "" "Tools MAY use the :ref:`pylock-tool` table to record enough details that it " "can be inferred what inputs were used to create the lock file." msgstr "" +"工具可以使用 :ref:`pylock-tool` 表记录足够的细节,以便能够推断出创建锁定文件" +"时使用了哪些输入。" #: ../source/specifications/pylock-toml.rst:179 msgid "" "Tools SHOULD record the normalized name of the tool if it is available as a " "Python package to facilitate finding the tool." msgstr "" +"如果该工具以 Python 软件包的形式提供,则应该记录其规范化名称,以便于查找该工" +"具。" #: ../source/specifications/pylock-toml.rst:186 msgid "``[[packages]]``" @@ -21041,17 +24297,19 @@ msgstr "``[[packages]]``" #: ../source/specifications/pylock-toml.rst:618 #: ../source/specifications/pylock-toml.rst:688 msgid "**Type**: array of tables" -msgstr "" +msgstr "**类型**: 表数组" #: ../source/specifications/pylock-toml.rst:191 msgid "An array containing all packages that *may* be installed." -msgstr "" +msgstr "包含所有 *可能* 被安装的软件包的数组。" #: ../source/specifications/pylock-toml.rst:192 msgid "" "Packages MAY be listed multiple times with varying data, but all packages to " "be installed MUST narrow down to a single entry at install time." msgstr "" +"软件包可以多次列出且数据各不相同,但在安装时,所有要安装的软件包必须收窄为单" +"个条目。" #: ../source/specifications/pylock-toml.rst:199 msgid "``packages.name``" @@ -21059,11 +24317,11 @@ msgstr "``packages.name``" #: ../source/specifications/pylock-toml.rst:203 msgid "**Inspiration**: :ref:`core-metadata-name`" -msgstr "" +msgstr "**灵感**: :ref:`core-metadata-name`" #: ../source/specifications/pylock-toml.rst:204 msgid "The name of the package :ref:`normalized `." -msgstr "" +msgstr "软件包的 :ref:`规范化 ` 名称。" #: ../source/specifications/pylock-toml.rst:210 msgid "``packages.version``" @@ -21071,7 +24329,7 @@ msgstr "``packages.version``" #: ../source/specifications/pylock-toml.rst:214 msgid "**Inspiration**: :ref:`core-metadata-version`" -msgstr "" +msgstr "**灵感**: :ref:`core-metadata-version`" #: ../source/specifications/pylock-toml.rst:215 msgid "The version of the package." @@ -21083,6 +24341,8 @@ msgid "" "when an :ref:`sdist ` or :ref:`wheels ` are specified)." msgstr "" +"在版本已知稳定时(即指定了 :ref:`sdist ` 或 " +":ref:`wheels ` 时),应该指定该版本。" #: ../source/specifications/pylock-toml.rst:219 msgid "" @@ -21090,6 +24350,8 @@ msgid "" "consistent with the code used (i.e. when a :ref:`source tree ` is used)." msgstr "" +"当无法保证版本与所用代码一致时(即使用 :ref:`源码树 ` 时),不得包含该版本。" #: ../source/specifications/pylock-toml.rst:227 msgid "``packages.marker``" @@ -21097,13 +24359,15 @@ msgstr "``packages.marker``" #: ../source/specifications/pylock-toml.rst:231 msgid "**Inspiration**: PDM_" -msgstr "" +msgstr "**灵感**: PDM_" #: ../source/specifications/pylock-toml.rst:232 msgid "" "The :ref:`environment marker ` " "which specify when the package should be installed." msgstr "" +"用于指定何时应安装该软件包的 :ref:`环境标记 `。" #: ../source/specifications/pylock-toml.rst:240 msgid "``packages.requires-python``" @@ -21111,13 +24375,13 @@ msgstr "``packages.requires-python``" #: ../source/specifications/pylock-toml.rst:244 msgid "**Inspiration**: :ref:`core-metadata-requires-python`" -msgstr "" +msgstr "**灵感**: :ref:`core-metadata-requires-python`" #: ../source/specifications/pylock-toml.rst:245 msgid "" "Holds the :ref:`version-specifiers` for Python version compatibility for the " "package." -msgstr "" +msgstr "保存该软件包用于 Python 版本兼容性的 :ref:`version-specifiers`。" #: ../source/specifications/pylock-toml.rst:252 msgid "``[[packages.dependencies]]``" @@ -21127,7 +24391,7 @@ msgstr "``[[packages.dependencies]]``" msgid "" "Records the other entries in :ref:`pylock-packages` which are direct " "dependencies of this package." -msgstr "" +msgstr "记录 :ref:`pylock-packages` 中作为该软件包直接依赖项的其他条目。" #: ../source/specifications/pylock-toml.rst:259 msgid "" @@ -21138,12 +24402,16 @@ msgid "" "version number like ``{name = \"spam\", version = \"1.0.0\"}``, or by source " "like ``{name = \"spam\", vcs = { url = \"...\"}``)." msgstr "" +"每个条目都是一个表,其中包含判断该条目对应哪个其他软件包条目所需的最少信息," +"使逐键比较能够毫无歧义地找到相应的软件包(例如,如果 ``spam`` 软件包有两个条" +"目,则可以像 ``{name = \"spam\", version = \"1.0.0\"}`` 那样包含版本号,或者" +"像 ``{name = \"spam\", vcs = { url = \"...\"}`` 那样按来源加以区分)。" #: ../source/specifications/pylock-toml.rst:265 msgid "" "Tools MUST NOT use this information when doing installation; it is purely " "informational for auditing purposes." -msgstr "" +msgstr "工具在执行安装时不得使用此信息;该信息仅用于审计。" #: ../source/specifications/pylock-toml.rst:272 msgid "``[packages.vcs]``" @@ -21156,7 +24424,7 @@ msgstr "``[packages.vcs]``" #: ../source/specifications/pylock-toml.rst:714 #: ../source/specifications/pylock-toml.rst:729 msgid "**Type**: table" -msgstr "" +msgstr "**类型**: 表" #: ../source/specifications/pylock-toml.rst:275 msgid "" @@ -21164,38 +24432,42 @@ msgid "" "directory`, :ref:`pylock-packages-archive`, :ref:`pylock-packages-sdist`, " "and :ref:`pylock-packages-wheels`" msgstr "" +"**必需吗?**: 否;与 :ref:`pylock-packages-directory`、:ref:`pylock-packages-" +"archive`、:ref:`pylock-packages-sdist` 和 :ref:`pylock-packages-wheels` 互斥" #: ../source/specifications/pylock-toml.rst:278 msgid "**Inspiration**: :ref:`direct-url-data-structure`" -msgstr "" +msgstr "**灵感**: :ref:`direct-url-data-structure`" #: ../source/specifications/pylock-toml.rst:279 msgid "" "Record the version control system details for the :ref:`source tree ` it contains." msgstr "" +"为其包含的 :ref:`源码树 ` 记录版本控" +"制系统详情。" #: ../source/specifications/pylock-toml.rst:282 msgid "" "Tools MAY choose to not support version control systems, both from a locking " "and/or installation perspective." -msgstr "" +msgstr "无论从锁定和/或安装的角度来看,工具都可以不支持版本控制系统。" #: ../source/specifications/pylock-toml.rst:284 msgid "Tools MAY choose to only support a subset of the available VCS types." -msgstr "" +msgstr "工具可以只支持可用 VCS 类型的一个子集。" #: ../source/specifications/pylock-toml.rst:285 msgid "" "Tools SHOULD provide a way for users to opt in/out of using version control " "systems." -msgstr "" +msgstr "工具应该为用户提供选择是否使用版本控制系统的方式。" #: ../source/specifications/pylock-toml.rst:287 msgid "" "Installation from a version control system is considered originating from " "a :ref:`direct URL reference `." -msgstr "" +msgstr "从版本控制系统安装被视为源自 :ref:`直接 URL 引用 `。" #: ../source/specifications/pylock-toml.rst:294 msgid "``packages.vcs.type``" @@ -21206,6 +24478,8 @@ msgid "" "**Type**: string; supported values specified in :ref:`direct-url-data-" "structure-registered-vcs`" msgstr "" +"**类型**: 字符串;支持的取值在 :ref:`direct-url-data-structure-registered-" +"vcs` 中规定" #: ../source/specifications/pylock-toml.rst:299 #: ../source/specifications/pylock-toml.rst:310 @@ -21213,7 +24487,7 @@ msgstr "" #: ../source/specifications/pylock-toml.rst:335 #: ../source/specifications/pylock-toml.rst:349 msgid "**Inspiration**: :ref:`direct-url-data-structure-vcs`" -msgstr "" +msgstr "**灵感**: :ref:`direct-url-data-structure-vcs`" #: ../source/specifications/pylock-toml.rst:300 msgid "The type of version control system used." @@ -21225,11 +24499,11 @@ msgstr "``packages.vcs.url``" #: ../source/specifications/pylock-toml.rst:309 msgid "**Required?**: if :ref:`pylock-packages-vcs-path` is not specified" -msgstr "" +msgstr "**必需吗?**: 如果未指定 :ref:`pylock-packages-vcs-path` 则为必需" #: ../source/specifications/pylock-toml.rst:311 msgid "The URL_ to the source tree." -msgstr "" +msgstr "源码树的 URL_。" #: ../source/specifications/pylock-toml.rst:317 msgid "``packages.vcs.path``" @@ -21237,38 +24511,40 @@ msgstr "``packages.vcs.path``" #: ../source/specifications/pylock-toml.rst:320 msgid "**Required?**: if :ref:`pylock-packages-vcs-url` is not specified" -msgstr "" +msgstr "**必需吗?**: 如果未指定 :ref:`pylock-packages-vcs-url` 则为必需" #: ../source/specifications/pylock-toml.rst:322 msgid "The path to the local directory of the source tree." -msgstr "" +msgstr "源码树本地目录的路径。" #: ../source/specifications/pylock-toml.rst:323 #: ../source/specifications/pylock-toml.rst:467 msgid "" "If a relative path is used it MUST be relative to the location of this file." -msgstr "" +msgstr "如果使用相对路径,则该路径必须相对于本文件所在的位置。" #: ../source/specifications/pylock-toml.rst:324 #: ../source/specifications/pylock-toml.rst:468 msgid "" "If the path is relative it MAY use POSIX-style path separators explicitly " "for portability." -msgstr "" +msgstr "如果路径是相对路径,则可以为了便于移植而显式使用 POSIX 风格的路径分隔符。" #: ../source/specifications/pylock-toml.rst:331 msgid "``packages.vcs.requested-revision``" -msgstr "" +msgstr "``packages.vcs.requested-revision``" #: ../source/specifications/pylock-toml.rst:336 msgid "The branch/tag/ref/commit/revision/etc. that the user requested." -msgstr "" +msgstr "用户请求的分支/标签/引用/提交/修订版本等。" #: ../source/specifications/pylock-toml.rst:337 msgid "" "This is purely informational and to facilitate writing the :ref:`direct-url-" "data-structure`; it MUST NOT be used to checkout the repository." msgstr "" +"此信息仅供参考,并用于方便编写 :ref:`direct-url-data-structure`;它不得用于检" +"出仓库。" #: ../source/specifications/pylock-toml.rst:345 msgid "``packages.vcs.commit-id``" @@ -21276,7 +24552,7 @@ msgstr "``packages.vcs.commit-id``" #: ../source/specifications/pylock-toml.rst:350 msgid "The exact commit/revision number that is to be installed." -msgstr "" +msgstr "将要安装的确切提交/修订版本号。" #: ../source/specifications/pylock-toml.rst:351 msgid "" @@ -21284,14 +24560,16 @@ msgid "" "hash, it MUST be used as the commit ID in order to reference an immutable " "version of the source code." msgstr "" +"如果 VCS 支持基于提交哈希的修订版本标识符,则必须将这样的提交哈希用作提交 ID" +",以便引用源代码的不可变版本。" #: ../source/specifications/pylock-toml.rst:359 msgid "``packages.vcs.subdirectory``" -msgstr "" +msgstr "``packages.vcs.subdirectory``" #: ../source/specifications/pylock-toml.rst:363 msgid "**Inspiration**: :ref:`direct-url-data-structure-subdirectories`" -msgstr "" +msgstr "**灵感**: :ref:`direct-url-data-structure-subdirectories`" #: ../source/specifications/pylock-toml.rst:364 msgid "" @@ -21299,10 +24577,12 @@ msgid "" "source-tree>` where the project root of the project is (e.g. the location of " "the :ref:`pyproject.toml ` file)." msgstr "" +":ref:`源码树 ` 中项目根目录所在的子目" +"录(例如 :ref:`pyproject.toml ` 文件的位置)。" #: ../source/specifications/pylock-toml.rst:368 msgid "The path MUST be relative to the root of the source tree structure." -msgstr "" +msgstr "该路径必须相对于源码树结构的根目录。" #: ../source/specifications/pylock-toml.rst:374 msgid "``[packages.directory]``" @@ -21314,36 +24594,40 @@ msgid "" "vcs`, :ref:`pylock-packages-archive`, :ref:`pylock-packages-sdist`, " "and :ref:`pylock-packages-wheels`" msgstr "" +"**必需吗?**: 否;与 :ref:`pylock-packages-vcs`、:ref:`pylock-packages-" +"archive`、:ref:`pylock-packages-sdist` 和 :ref:`pylock-packages-wheels` 互斥" #: ../source/specifications/pylock-toml.rst:380 #: ../source/specifications/pylock-toml.rst:398 #: ../source/specifications/pylock-toml.rst:412 msgid "**Inspiration**: :ref:`direct-url-data-structure-local-directory`" -msgstr "" +msgstr "**灵感**: :ref:`direct-url-data-structure-local-directory`" #: ../source/specifications/pylock-toml.rst:381 msgid "" "Record the local directory details for the :ref:`source tree ` it contains." msgstr "" +"为其包含的 :ref:`源码树 ` 记录本地目" +"录详情。" #: ../source/specifications/pylock-toml.rst:384 msgid "" "Tools MAY choose to not support local directories, both from a locking and/" "or installation perspective." -msgstr "" +msgstr "无论从锁定和/或安装的角度来看,工具都可以不支持本地目录。" #: ../source/specifications/pylock-toml.rst:386 msgid "" "Tools SHOULD provide a way for users to opt in/out of using local " "directories." -msgstr "" +msgstr "工具应该为用户提供选择是否使用本地目录的方式。" #: ../source/specifications/pylock-toml.rst:387 msgid "" "Installation from a directory is considered originating from a :ref:`direct " "URL reference `." -msgstr "" +msgstr "从目录安装被视为源自 :ref:`直接 URL 引用 `。" #: ../source/specifications/pylock-toml.rst:394 msgid "``packages.directory.path``" @@ -21351,36 +24635,36 @@ msgstr "``packages.directory.path``" #: ../source/specifications/pylock-toml.rst:399 msgid "The local directory where the source tree is." -msgstr "" +msgstr "源码树所在的本地目录。" #: ../source/specifications/pylock-toml.rst:400 msgid "" "If the path is relative it MUST be relative to the location of the lock file." -msgstr "" +msgstr "如果路径是相对路径,则该路径必须相对于锁定文件所在的位置。" #: ../source/specifications/pylock-toml.rst:401 msgid "" "If the path is relative it MAY use POSIX-style path separators for " "portability." -msgstr "" +msgstr "如果路径是相对路径,则可以使用 POSIX 风格的路径分隔符,以便于移植。" #: ../source/specifications/pylock-toml.rst:408 msgid "``packages.directory.editable``" -msgstr "" +msgstr "``packages.directory.editable``" #: ../source/specifications/pylock-toml.rst:410 msgid "**Type**: boolean" -msgstr "" +msgstr "**类型**: 布尔值" #: ../source/specifications/pylock-toml.rst:411 msgid "**Required?**: no; defaults to ``false``" -msgstr "" +msgstr "**必需吗?**: 否;默认值为 ``false``" #: ../source/specifications/pylock-toml.rst:413 msgid "" "A flag representing whether the source tree was an editable install at lock " "time." -msgstr "" +msgstr "一个标志,表示在锁定时该源码树是否为可编辑安装。" #: ../source/specifications/pylock-toml.rst:415 msgid "" @@ -21389,15 +24673,18 @@ msgid "" "that will not be mounted for development purposes but instead deployed to " "production where it would be treated at read-only)." msgstr "" +"如果用户的操作或使用场景会使可编辑安装变得不必要或不可取,安装器可以选择忽略" +"此标志(例如,某个容器镜像不会出于开发目的被挂载,而是被部署到生产环境并在那" +"里被当作只读对待)。" #: ../source/specifications/pylock-toml.rst:424 msgid "``packages.directory.subdirectory``" -msgstr "" +msgstr "``packages.directory.subdirectory``" #: ../source/specifications/pylock-toml.rst:426 #: ../source/specifications/pylock-toml.rst:521 msgid "See :ref:`pylock-packages-vcs-subdirectory`." -msgstr "" +msgstr "参见 :ref:`pylock-packages-vcs-subdirectory`。" #: ../source/specifications/pylock-toml.rst:432 msgid "``[packages.archive]``" @@ -21407,7 +24694,7 @@ msgstr "``[packages.archive]``" #: ../source/specifications/pylock-toml.rst:454 #: ../source/specifications/pylock-toml.rst:465 msgid "**Inspiration**: :ref:`direct-url-data-structure-archive`" -msgstr "" +msgstr "**灵感**: :ref:`direct-url-data-structure-archive`" #: ../source/specifications/pylock-toml.rst:437 msgid "" @@ -21415,23 +24702,25 @@ msgid "" "wheels and sdists, as well as other archive formats containing a source " "tree)." msgstr "" +"对要从中安装的归档文件的直接引用(这可以包括 wheel 包和 sdist,以及包含源码树" +"的其他归档格式)。" #: ../source/specifications/pylock-toml.rst:440 msgid "" "Tools MAY choose to not support archive files, both from a locking and/or " "installation perspective." -msgstr "" +msgstr "无论从锁定和/或安装的角度来看,工具都可以不支持归档文件。" #: ../source/specifications/pylock-toml.rst:442 msgid "" "Tools SHOULD provide a way for users to opt in/out of using archive files." -msgstr "" +msgstr "工具应该为用户提供选择是否使用归档文件的方式。" #: ../source/specifications/pylock-toml.rst:443 msgid "" "Installation from an archive file is considered originating from " "a :ref:`direct URL reference `." -msgstr "" +msgstr "从归档文件安装被视为源自 :ref:`直接 URL 引用 `。" #: ../source/specifications/pylock-toml.rst:450 msgid "``packages.archive.url``" @@ -21439,11 +24728,11 @@ msgstr "``packages.archive.url``" #: ../source/specifications/pylock-toml.rst:453 msgid "**Required?**: if :ref:`pylock-packages-archive-path` is not specified" -msgstr "" +msgstr "**必需吗?**: 如果未指定 :ref:`pylock-packages-archive-path` 则为必需" #: ../source/specifications/pylock-toml.rst:455 msgid "The URL_ to the archive." -msgstr "" +msgstr "归档文件的 URL_。" #: ../source/specifications/pylock-toml.rst:461 msgid "``packages.archive.path``" @@ -21451,17 +24740,17 @@ msgstr "``packages.archive.path``" #: ../source/specifications/pylock-toml.rst:464 msgid "**Required?**: if :ref:`pylock-packages-archive-url` is not specified" -msgstr "" +msgstr "**必需吗?**: 如果未指定 :ref:`pylock-packages-archive-url` 则为必需" #: ../source/specifications/pylock-toml.rst:466 msgid "The path to the archive." -msgstr "" +msgstr "归档文件的路径。" #: ../source/specifications/pylock-toml.rst:470 msgid "" "If :ref:`pylock-packages-archive-url` is also specified, the filename as " "specified by this key takes precedence." -msgstr "" +msgstr "如果同时指定了 :ref:`pylock-packages-archive-url`,则以此键指定的文件名为准。" #: ../source/specifications/pylock-toml.rst:477 msgid "``packages.archive.size``" @@ -21469,33 +24758,35 @@ msgstr "``packages.archive.size``" #: ../source/specifications/pylock-toml.rst:479 msgid "**Type**: integer" -msgstr "" +msgstr "**类型**: 整数" #: ../source/specifications/pylock-toml.rst:481 msgid "**Inspiration**: uv_, :ref:`simple-repository-api`" -msgstr "" +msgstr "**灵感**: uv_, :ref:`simple-repository-api`" #: ../source/specifications/pylock-toml.rst:482 msgid "The size of the archive file." -msgstr "" +msgstr "归档文件的大小。" #: ../source/specifications/pylock-toml.rst:483 msgid "" "Tools SHOULD provide the file size when reasonably possible (e.g. the file " "size is available via the Content-Length_ header from a HEAD_ HTTP request)." msgstr "" +"工具应该在合理可行的情况下提供文件大小(例如,文件大小可通过 HEAD_ HTTP 请求" +"的 Content-Length_ 响应头获取)。" #: ../source/specifications/pylock-toml.rst:490 msgid "``packages.archive.upload-time``" -msgstr "" +msgstr "``packages.archive.upload-time``" #: ../source/specifications/pylock-toml.rst:492 msgid "**Type**: datetime" -msgstr "" +msgstr "**类型**: 日期时间" #: ../source/specifications/pylock-toml.rst:494 msgid "**Inspiration**: :ref:`simple-repository-api`" -msgstr "" +msgstr "**灵感**: :ref:`simple-repository-api`" #: ../source/specifications/pylock-toml.rst:495 msgid "The time the file was uploaded." @@ -21503,33 +24794,33 @@ msgstr "文件上传时间。" #: ../source/specifications/pylock-toml.rst:496 msgid "The date and time MUST be recorded in UTC." -msgstr "" +msgstr "日期和时间必须以 UTC 记录。" #: ../source/specifications/pylock-toml.rst:502 msgid "``[packages.archive.hashes]``" -msgstr "" +msgstr "``[packages.archive.hashes]``" #: ../source/specifications/pylock-toml.rst:504 msgid "**Type**: Table of strings" -msgstr "" +msgstr "**类型**: 字符串表" #: ../source/specifications/pylock-toml.rst:506 msgid "**Inspiration**: PDM_, Poetry_, uv_, :ref:`simple-repository-api`" -msgstr "" +msgstr "**灵感**: PDM_, Poetry_, uv_, :ref:`simple-repository-api`" #: ../source/specifications/pylock-toml.rst:507 msgid "" "A table listing known hash values of the file where the key is the hash " "algorithm and the value is the hash value." -msgstr "" +msgstr "一个列出文件已知哈希值的表,其中键为哈希算法,值为哈希值。" #: ../source/specifications/pylock-toml.rst:509 msgid "The table MUST contain at least one entry." -msgstr "" +msgstr "该表必须包含至少一个条目。" #: ../source/specifications/pylock-toml.rst:510 msgid "Hash algorithm keys SHOULD be lowercase." -msgstr "" +msgstr "哈希算法键应该采用小写形式。" #: ../source/specifications/pylock-toml.rst:511 msgid "" @@ -21537,10 +24828,12 @@ msgid "" "SHOULD always be included (at time of writing, sha256 specifically is " "recommended." msgstr "" +"应该始终包含至少一种来自 :py:data:`hashlib.algorithms_guaranteed` 的安全算法" +"(在撰写本文时,特别推荐使用 sha256。" #: ../source/specifications/pylock-toml.rst:519 msgid "``packages.archive.subdirectory``" -msgstr "" +msgstr "``packages.archive.subdirectory``" #: ../source/specifications/pylock-toml.rst:527 msgid "``packages.index``" @@ -21551,6 +24844,8 @@ msgid "" "The base URL for the package index from :ref:`simple-repository-api` where " "the sdist and/or wheels were found (e.g. ``https://pypi.org/simple/``)." msgstr "" +"sdist 和/或 wheel 包所在的 :ref:`simple-repository-api` 包索引的基础 URL(例" +"如 ``https://pypi.org/simple/``)。" #: ../source/specifications/pylock-toml.rst:534 msgid "" @@ -21558,12 +24853,16 @@ msgid "" "bill of materials`_ -- aka SBOMs -- and to assist in finding a file if a URL " "ceases to be valid." msgstr "" +"在可能的情况下,应该指定此键,以协助生成 `software bill of materials`_,又称 " +"SBOM,并在 URL 失效时协助查找文件。" #: ../source/specifications/pylock-toml.rst:537 msgid "" "Tools MAY support installing from an index if the URL recorded for a " "specific file is no longer valid (e.g. returns a 404 HTTP error code)." msgstr "" +"如果为特定文件记录的 URL 不再有效(例如返回 404 HTTP 错误码),工具可以支持从" +"索引安装。" #: ../source/specifications/pylock-toml.rst:544 msgid "``[packages.sdist]``" @@ -21575,21 +24874,23 @@ msgid "" "**Required?**: no; mutually-exclusive with :ref:`pylock-packages-" "vcs`, :ref:`pylock-packages-directory`, and :ref:`pylock-packages-archive`" msgstr "" +"**必需吗?**: 否;与 :ref:`pylock-packages-vcs`、:ref:`pylock-packages-" +"directory` 和 :ref:`pylock-packages-archive` 互斥" #: ../source/specifications/pylock-toml.rst:550 msgid "Details of a :ref:`source-distribution-format-sdist` for the package." -msgstr "" +msgstr "该软件包的 :ref:`source-distribution-format-sdist` 详情。" #: ../source/specifications/pylock-toml.rst:552 msgid "" "Tools MAY choose to not support sdist files, both from a locking and/or " "installation perspective." -msgstr "" +msgstr "无论从锁定和/或安装的角度来看,工具都可以不支持 sdist 文件。" #: ../source/specifications/pylock-toml.rst:554 msgid "" "Tools SHOULD provide a way for users to opt in/out of using sdist files." -msgstr "" +msgstr "工具应该为用户提供选择是否使用 sdist 文件的方式。" #: ../source/specifications/pylock-toml.rst:560 msgid "``packages.sdist.name``" @@ -21600,16 +24901,20 @@ msgid "" "**Required?**: no, not when the last component of :ref:`pylock-packages-" "sdist-path`/ :ref:`pylock-packages-sdist-url` would be the same value" msgstr "" +"**必需吗?**: 否,除非 :ref:`pylock-packages-sdist-path`/ :ref:`pylock-" +"packages-sdist-url` 的最后一个组件会是相同的值" #: ../source/specifications/pylock-toml.rst:567 msgid "The file name of the :ref:`source-distribution-format-sdist` file." -msgstr "" +msgstr ":ref:`source-distribution-format-sdist` 文件的文件名。" #: ../source/specifications/pylock-toml.rst:568 msgid "" "If specified, this key's value takes precedence over the file name found in " "either :ref:`pylock-packages-sdist-url` or :ref:`pylock-packages-sdist-path`." msgstr "" +"如果指定了此键,其值将优先于在 :ref:`pylock-packages-sdist-url` 或 " +":ref:`pylock-packages-sdist-path` 中找到的文件名。" #: ../source/specifications/pylock-toml.rst:575 msgid "``packages.sdist.upload-time``" @@ -21618,7 +24923,7 @@ msgstr "``packages.sdist.upload-time``" #: ../source/specifications/pylock-toml.rst:577 #: ../source/specifications/pylock-toml.rst:648 msgid "See :ref:`pylock-packages-archive-upload-time`." -msgstr "" +msgstr "参见 :ref:`pylock-packages-archive-upload-time`。" #: ../source/specifications/pylock-toml.rst:583 msgid "``packages.sdist.url``" @@ -21627,7 +24932,7 @@ msgstr "``packages.sdist.url``" #: ../source/specifications/pylock-toml.rst:585 #: ../source/specifications/pylock-toml.rst:656 msgid "See :ref:`pylock-packages-archive-url`." -msgstr "" +msgstr "参见 :ref:`pylock-packages-archive-url`。" #: ../source/specifications/pylock-toml.rst:591 msgid "``packages.sdist.path``" @@ -21636,7 +24941,7 @@ msgstr "``packages.sdist.path``" #: ../source/specifications/pylock-toml.rst:593 #: ../source/specifications/pylock-toml.rst:664 msgid "See :ref:`pylock-packages-archive-path`." -msgstr "" +msgstr "参见 :ref:`pylock-packages-archive-path`。" #: ../source/specifications/pylock-toml.rst:599 msgid "``packages.sdist.size``" @@ -21645,7 +24950,7 @@ msgstr "``packages.sdist.size``" #: ../source/specifications/pylock-toml.rst:601 #: ../source/specifications/pylock-toml.rst:672 msgid "See :ref:`pylock-packages-archive-size`." -msgstr "" +msgstr "参见 :ref:`pylock-packages-archive-size`。" #: ../source/specifications/pylock-toml.rst:607 msgid "``packages.sdist.hashes``" @@ -21654,7 +24959,7 @@ msgstr "``packages.sdist.hashes``" #: ../source/specifications/pylock-toml.rst:609 #: ../source/specifications/pylock-toml.rst:680 msgid "See :ref:`pylock-packages-archive-hashes`." -msgstr "" +msgstr "参见 :ref:`pylock-packages-archive-hashes`。" #: ../source/specifications/pylock-toml.rst:616 msgid "``[[packages.wheels]]``" @@ -21664,13 +24969,13 @@ msgstr "``[[packages.wheels]]``" msgid "" "For recording the wheel files as specified by :ref:`binary-distribution-" "format` for the package." -msgstr "" +msgstr "用于为该软件包记录符合 :ref:`binary-distribution-format` 规定的 wheel 文件。" #: ../source/specifications/pylock-toml.rst:624 msgid "" "Tools MUST support wheel files, both from a locking and installation " "perspective." -msgstr "" +msgstr "无论从锁定还是安装的角度来看,工具都必须支持 wheel 文件。" #: ../source/specifications/pylock-toml.rst:631 msgid "``packages.wheels.name``" @@ -21681,10 +24986,12 @@ msgid "" "**Required?**: no, not when the last component of :ref:`pylock-packages-" "wheels-path`/ :ref:`pylock-packages-wheels-url` would be the same value" msgstr "" +"**必需吗?**: 否,除非 :ref:`pylock-packages-wheels-path`/ :ref:`pylock-" +"packages-wheels-url` 的最后一个组件会是相同的值" #: ../source/specifications/pylock-toml.rst:638 msgid "The file name of the :ref:`binary-distribution-format` file." -msgstr "" +msgstr ":ref:`binary-distribution-format` 文件的文件名。" #: ../source/specifications/pylock-toml.rst:639 msgid "" @@ -21692,10 +24999,12 @@ msgid "" "either :ref:`pylock-packages-wheels-url` or :ref:`pylock-packages-wheels-" "path`." msgstr "" +"如果指定了此键,其值将优先于在 :ref:`pylock-packages-wheels-url` 或 " +":ref:`pylock-packages-wheels-path` 中找到的文件名。" #: ../source/specifications/pylock-toml.rst:646 msgid "``packages.wheels.upload-time``" -msgstr "" +msgstr "``packages.wheels.upload-time``" #: ../source/specifications/pylock-toml.rst:654 msgid "``packages.wheels.url``" @@ -21715,7 +25024,7 @@ msgstr "``packages.wheels.hashes``" #: ../source/specifications/pylock-toml.rst:686 msgid "``[[packages.attestation-identities]]``" -msgstr "" +msgstr "``[[packages.attestation-identities]]``" #: ../source/specifications/pylock-toml.rst:690 #: ../source/specifications/pylock-toml.rst:705 @@ -21725,25 +25034,27 @@ msgstr "**灵感**: :ref:`provenance-object`" #: ../source/specifications/pylock-toml.rst:691 msgid "" "A recording of the attestations for **any** file recorded for this package." -msgstr "" +msgstr "对该软件包记录的 **任何** 文件的证明记录。" #: ../source/specifications/pylock-toml.rst:692 msgid "If available, tools SHOULD include the attestation identities found." -msgstr "" +msgstr "如果可用,工具应该包含所找到的证明身份。" #: ../source/specifications/pylock-toml.rst:693 msgid "" "Publisher-specific keys are to be included in the table as-is (i.e. top-" "level), following the spec at :ref:`index-hosted-attestations`." msgstr "" +"特定于发布者的键应原样包含在表中(即位于顶层),并遵循 :ref:`index-hosted-" +"attestations` 中的规范。" #: ../source/specifications/pylock-toml.rst:701 msgid "``packages.attestation-identities.kind``" -msgstr "" +msgstr "``packages.attestation-identities.kind``" #: ../source/specifications/pylock-toml.rst:706 msgid "The unique identity of the Trusted Publisher." -msgstr "" +msgstr "可信发布者的唯一身份。" #: ../source/specifications/pylock-toml.rst:712 msgid "``[packages.tool]``" @@ -21755,20 +25066,22 @@ msgid "" "the :ref:`pyproject-toml-spec`, but at the package version level instead of " "at the lock file level (which is also available via :ref:`pylock-tool`)." msgstr "" +"其用法与 :ref:`pyproject-toml-spec` 中 :ref:`pylock-tool` 表的用法类似,但作" +"用在软件包版本级别而非锁定文件级别(后者也可通过 :ref:`pylock-tool` 使用)。" #: ../source/specifications/pylock-toml.rst:720 msgid "" "Data recorded in the table MUST be disposable (i.e. it MUST NOT affect " "installation)." -msgstr "" +msgstr "表中记录的数据必须是可丢弃的(即它不得影响安装)。" #: ../source/specifications/pylock-toml.rst:727 msgid "``[tool]``" -msgstr "" +msgstr "``[tool]``" #: ../source/specifications/pylock-toml.rst:732 msgid "See :ref:`pylock-packages-tool`." -msgstr "" +msgstr "参见 :ref:`pylock-packages-tool`。" #: ../source/specifications/pylock-toml.rst:746 msgid "" @@ -21776,28 +25089,36 @@ msgid "" "(while the requirements are prescriptive, the general steps and order are a " "suggestion):" msgstr "" +"下面概述从锁定文件安装时要执行的步骤(虽然其中的各项要求是规范性的,但总体步" +"骤及其顺序只是建议):" #: ../source/specifications/pylock-toml.rst:750 msgid "" "Gather the extras and dependency groups to install and set ``extras`` and " "``dependency_groups`` for marker evaluation, respectively." msgstr "" +"收集要安装的附加功能(extras)和依赖群,并分别为标记求值设置 ``extras`` 和 " +"``dependency_groups``。" #: ../source/specifications/pylock-toml.rst:753 msgid "``extras`` SHOULD be set to the empty set by default." -msgstr "" +msgstr "默认情况下,``extras`` 应该被设置为空集。" #: ../source/specifications/pylock-toml.rst:754 msgid "" "``dependency_groups`` SHOULD be the set created from :ref:`pylock-default-" "groups` by default." msgstr "" +"默认情况下,``dependency_groups`` 应该是由 :ref:`pylock-default-groups` 创建" +"的集合。" #: ../source/specifications/pylock-toml.rst:757 msgid "" "Check if the metadata version specified by :ref:`pylock-lock-version` is " "supported; an error or warning MUST be raised as appropriate." msgstr "" +"检查是否支持 :ref:`pylock-lock-version` 所指定的元数据版本;必须酌情引发错误" +"或警告。" #: ../source/specifications/pylock-toml.rst:759 msgid "" @@ -21805,6 +25126,8 @@ msgid "" "being installed for meets the requirement; an error MUST be raised if it is " "not met." msgstr "" +"如果指定了 :ref:`pylock-requires-python`,请检查要安装到的环境是否满足该要求" +";如果不满足,必须引发错误。" #: ../source/specifications/pylock-toml.rst:762 msgid "" @@ -21812,28 +25135,36 @@ msgid "" "environment marker expressions is satisfied; an error MUST be raised if no " "expression is satisfied." msgstr "" +"如果指定了 :ref:`pylock-environments`,请检查是否至少有一个环境标记表达式得到" +"满足;如果没有任何表达式得到满足,必须引发错误。" #: ../source/specifications/pylock-toml.rst:765 msgid "For each package listed in :ref:`pylock-packages`:" -msgstr "" +msgstr "对于 :ref:`pylock-packages` 中列出的每个软件包:" #: ../source/specifications/pylock-toml.rst:767 msgid "" "If :ref:`pylock-packages-marker` is specified, check if it is satisfied; if " "it isn't, skip to the next package." msgstr "" +"如果指定了 :ref:`pylock-packages-marker`,请检查它是否得到满足;如果不满足," +"则跳到下一个软件包。" #: ../source/specifications/pylock-toml.rst:769 msgid "" "If :ref:`pylock-packages-requires-python` is specified, check if it is " "satisfied; an error MUST be raised if it isn't." msgstr "" +"如果指定了 :ref:`pylock-packages-requires-python`,请检查它是否得到满足;如果" +"不满足,必须引发错误。" #: ../source/specifications/pylock-toml.rst:771 msgid "" "Check that no other conflicting instance of the package has been slated to " "be installed; an error about the ambiguity MUST be raised otherwise." msgstr "" +"确认没有该软件包的其他冲突实例已被列入安装计划;否则必须引发关于这种歧义的错" +"误。" #: ../source/specifications/pylock-toml.rst:773 msgid "" @@ -21841,30 +25172,34 @@ msgid "" "are no conflicting sources in the package entry); an error MUST be raised if " "any issues are found." msgstr "" +"检查软件包的来源是否被恰当地指定(即软件包条目中不存在相互冲突的来源);如果" +"发现任何问题,必须引发错误。" #: ../source/specifications/pylock-toml.rst:776 msgid "Add the package to the set of packages to install." -msgstr "" +msgstr "将该软件包加入待安装软件包的集合中。" #: ../source/specifications/pylock-toml.rst:778 msgid "For each package to be installed:" -msgstr "" +msgstr "对于每个要安装的软件包:" #: ../source/specifications/pylock-toml.rst:780 msgid "If :ref:`pylock-packages-vcs` is set:" -msgstr "" +msgstr "如果设置了 :ref:`pylock-packages-vcs`:" #: ../source/specifications/pylock-toml.rst:782 msgid "" "Clone the repository to the commit ID specified in :ref:`pylock-packages-vcs-" "commit-id`." -msgstr "" +msgstr "将仓库克隆到 :ref:`pylock-packages-vcs-commit-id` 中指定的提交 ID。" #: ../source/specifications/pylock-toml.rst:784 msgid "" ":ref:`Build ` the package, " "respecting :ref:`pylock-packages-vcs-subdirectory`." msgstr "" +":ref:`构建 ` 该软件包,并遵循 " +":ref:`pylock-packages-vcs-subdirectory`。" #: ../source/specifications/pylock-toml.rst:786 #: ../source/specifications/pylock-toml.rst:792 @@ -21872,42 +25207,48 @@ msgstr "" #: ../source/specifications/pylock-toml.rst:821 #: ../source/specifications/pylock-toml.rst:836 msgid ":ref:`Install `." -msgstr "" +msgstr ":ref:`安装 `。" #: ../source/specifications/pylock-toml.rst:788 msgid "Else if :ref:`pylock-packages-directory` is set:" -msgstr "" +msgstr "否则,如果设置了 :ref:`pylock-packages-directory`:" #: ../source/specifications/pylock-toml.rst:790 msgid "" ":ref:`Build ` the package, " "respecting :ref:`pylock-packages-directory-subdirectory`." msgstr "" +":ref:`构建 ` 该软件包,并遵循 " +":ref:`pylock-packages-directory-subdirectory`。" #: ../source/specifications/pylock-toml.rst:794 msgid "Else if :ref:`pylock-packages-archive` is set:" -msgstr "" +msgstr "否则,如果设置了 :ref:`pylock-packages-archive`:" #: ../source/specifications/pylock-toml.rst:796 #: ../source/specifications/pylock-toml.rst:826 msgid "Get the file." -msgstr "" +msgstr "获取该文件。" #: ../source/specifications/pylock-toml.rst:797 msgid "" "Validate using :ref:`pylock-packages-archive-size` and :ref:`pylock-packages-" "archive-hashes`." msgstr "" +"使用 :ref:`pylock-packages-archive-size` 和 :ref:`pylock-packages-archive-" +"hashes` 进行验证。" #: ../source/specifications/pylock-toml.rst:799 msgid "" ":ref:`Build ` the package, " "respecting :ref:`pylock-packages-archive-subdirectory`." msgstr "" +":ref:`构建 ` 软件包,并遵循 " +":ref:`pylock-packages-archive-subdirectory`。" #: ../source/specifications/pylock-toml.rst:803 msgid "Else if there are entries for :ref:`pylock-packages-wheels`:" -msgstr "" +msgstr "否则,如果存在 :ref:`pylock-packages-wheels` 条目:" #: ../source/specifications/pylock-toml.rst:805 msgid "" @@ -21915,14 +25256,16 @@ msgid "" "name`; if one is not found then move on to :ref:`pylock-packages-sdist` or " "an error MUST be raised about a lack of source for the project." msgstr "" +"根据 :ref:`pylock-packages-wheels-name` 查找合适的 wheel 文件;如果未找到,则" +"转向 :ref:`pylock-packages-sdist`,否则必须抛出错误,指出该项目缺少源代码。" #: ../source/specifications/pylock-toml.rst:809 msgid "Get the file:" -msgstr "" +msgstr "获取该文件:" #: ../source/specifications/pylock-toml.rst:811 msgid "If :ref:`pylock-packages-wheels-path` is set, use it." -msgstr "" +msgstr "如果设置了 :ref:`pylock-packages-wheels-path`,则使用它。" #: ../source/specifications/pylock-toml.rst:812 msgid "" @@ -21932,22 +25275,30 @@ msgid "" "file to download based on what's available; what file to install should be " "determined in an offline fashion for reproducibility)." msgstr "" +"否则,如果设置了 :ref:`pylock-packages-wheels-url`,则尝试使用它;工具可以使" +"用 :ref:`pylock-packages-index` 或某种特定于工具的机制来下载所选的 wheel 文件" +"(工具不得尝试根据当前可用的文件来更改要下载的 wheel 文件;为了确保可复现性," +"应安装哪个文件应以离线方式确定)。" #: ../source/specifications/pylock-toml.rst:819 msgid "" "Validate using :ref:`pylock-packages-wheels-size` and :ref:`pylock-packages-" "wheels-hashes`." msgstr "" +"使用 :ref:`pylock-packages-wheels-size` 和 :ref:`pylock-packages-wheels-" +"hashes` 进行验证。" #: ../source/specifications/pylock-toml.rst:823 msgid "" "Else if no :ref:`pylock-packages-wheels` file is found or :ref:`pylock-" "packages-sdist` is solely set:" msgstr "" +"否则,如果未找到 :ref:`pylock-packages-wheels` 文件,或者仅设置了 " +":ref:`pylock-packages-sdist`:" #: ../source/specifications/pylock-toml.rst:828 msgid "If :ref:`pylock-packages-sdist-path` is set, use it." -msgstr "" +msgstr "如果设置了 :ref:`pylock-packages-sdist-path`,则使用它。" #: ../source/specifications/pylock-toml.rst:829 msgid "" @@ -21955,29 +25306,33 @@ msgid "" "use :ref:`pylock-packages-index` or some tool-specific mechanism to download " "the file." msgstr "" +"否则,如果设置了 :ref:`pylock-packages-sdist-url`,则尝试使用它;工具可以使" +"用 :ref:`pylock-packages-index` 或某种特定于工具的机制来下载该文件。" #: ../source/specifications/pylock-toml.rst:833 msgid "" "Validate using :ref:`pylock-packages-sdist-size` and :ref:`pylock-packages-" "sdist-hashes`." msgstr "" +"使用 :ref:`pylock-packages-sdist-size` 和 :ref:`pylock-packages-sdist-" +"hashes` 进行验证。" #: ../source/specifications/pylock-toml.rst:835 msgid ":ref:`Build ` the package." -msgstr "" +msgstr ":ref:`构建 ` 软件包。" #: ../source/specifications/pylock-toml.rst:843 msgid "April 2025: Initial version, approved via :pep:`751`." -msgstr "" +msgstr "2025 年 4 月:初始版本,通过 :pep:`751` 获得批准。" #: ../source/specifications/pylock-toml.rst:844 msgid "" "March 2026: Clarify file name precedence for archives, sdists, and wheels." -msgstr "" +msgstr "2026 年 3 月:澄清归档文件、源分发和 wheel 包的文件名优先级。" #: ../source/specifications/pypirc.rst:6 msgid "The :file:`.pypirc` file" -msgstr "" +msgstr ":file:`.pypirc` 文件" #: ../source/specifications/pypirc.rst:8 msgid "" @@ -21986,42 +25341,47 @@ msgid "" "\"repositories\"), so that you don't have to enter the URL, username, or " "password whenever you upload a package with :ref:`twine` or :ref:`flit`." msgstr "" +":file:`.pypirc` 文件让你可以为 :term:`包索引 ` 定义配置(下文" +"称之为“仓库”),这样你在使用 :ref:`twine` 或 :ref:`flit` 上传软件包时,就不必" +"每次都输入 URL、用户名或密码。" #: ../source/specifications/pypirc.rst:13 msgid "The :file:`.pypirc` file **SHOULD** be UTF-8 encoded." -msgstr "" +msgstr ":file:`.pypirc` 文件 **应该** 以 UTF-8 编码。" #: ../source/specifications/pypirc.rst:15 msgid "" "Tools that read or write :file:`.pypirc` files may not function correctly if " "another character encoding is used." -msgstr "" +msgstr "如果使用其他字符编码,读写 :file:`.pypirc` 文件的工具可能无法正常工作。" #: ../source/specifications/pypirc.rst:18 msgid "The format (originally defined by the :ref:`distutils` package) is:" -msgstr "" +msgstr "该格式(最初由 :ref:`distutils` 软件包定义)如下:" #: ../source/specifications/pypirc.rst:37 msgid "" "The ``distutils`` section defines an ``index-servers`` field that lists the " "name of all sections describing a repository." msgstr "" +"``distutils`` 节定义了一个 ``index-servers`` 字段,其中列出了描述仓库的各个节" +"的名称。" #: ../source/specifications/pypirc.rst:40 msgid "Each section describing a repository defines three fields:" -msgstr "" +msgstr "每个描述仓库的节都会定义三个字段:" #: ../source/specifications/pypirc.rst:42 msgid "``repository``: The URL of the repository." -msgstr "" +msgstr "``repository``:仓库的 URL。" #: ../source/specifications/pypirc.rst:43 msgid "``username``: The registered username on the repository." -msgstr "" +msgstr "``username``:在仓库上注册的用户名。" #: ../source/specifications/pypirc.rst:44 msgid "``password``: The password that will used to authenticate the username." -msgstr "" +msgstr "``password``:用于对该用户名进行身份验证的密码。" #: ../source/specifications/pypirc.rst:48 msgid "" @@ -22029,16 +25389,20 @@ msgid "" "consider an alternative like `keyring`_, setting environment variables, or " "providing the password on the command line." msgstr "" +"请注意,这会以明文形式存储你的密码。为了更好的安全性,可以考虑其他替代方式," +"例如使用 `keyring`_、设置环境变量,或在命令行上提供密码。" #: ../source/specifications/pypirc.rst:52 msgid "" "Otherwise, set the permissions on :file:`.pypirc` so that only you can view " "or modify it. For example, on Linux or macOS, run:" msgstr "" +"否则,请设置 :file:`.pypirc` 的权限,使得只有你才能查看或修改它。例如,在 " +"Linux 或 macOS 上运行:" #: ../source/specifications/pypirc.rst:62 msgid "Common configurations" -msgstr "" +msgstr "常用配置" #: ../source/specifications/pypirc.rst:66 msgid "" @@ -22046,38 +25410,47 @@ msgid "" "use :file:`.pypirc`, but with different defaults. Please refer to each " "project's documentation for more details and usage instructions." msgstr "" +"这些示例适用于 :ref:`twine`。其他项目(例如 :ref:`flit`)也会使用 " +":file:`.pypirc`,但默认值有所不同。有关更多详细信息和使用说明,请参阅各项目的" +"文档。" #: ../source/specifications/pypirc.rst:70 msgid "" "Twine's default configuration mimics a :file:`.pypirc` with repository " "sections for PyPI and TestPyPI:" -msgstr "" +msgstr "Twine 的默认配置相当于一个包含 PyPI 和 TestPyPI 仓库节的 :file:`.pypirc`:" #: ../source/specifications/pypirc.rst:86 msgid "" "Twine will add additional configuration from :file:`$HOME/.pypirc`, the " "command line, and environment variables to this default configuration." msgstr "" +"Twine 会将来自 :file:`$HOME/.pypirc`、命令行和环境变量的额外配置添加到此默认" +"配置中。" #: ../source/specifications/pypirc.rst:90 msgid "Using a PyPI token" -msgstr "" +msgstr "使用 PyPI 令牌" #: ../source/specifications/pypirc.rst:92 msgid "" "To set your `API token`_ for PyPI, you can create a :file:`$HOME/.pypirc` " "similar to:" msgstr "" +"要为 PyPI 设置你的 `API 令牌`_,可以创建一个类似如下的 :file:`$HOME/" +".pypirc`:" #: ../source/specifications/pypirc.rst:101 msgid "" "For :ref:`TestPyPI `, add a ``[testpypi]`` section, using " "the API token from your TestPyPI account." msgstr "" +"对于 :ref:`TestPyPI `,请添加一个 ``[testpypi]`` 节,并使用" +"你 TestPyPI 账户中的 API 令牌。" #: ../source/specifications/pypirc.rst:107 msgid "Using another package index" -msgstr "" +msgstr "使用其他包索引" #: ../source/specifications/pypirc.rst:109 msgid "" @@ -22085,12 +25458,17 @@ msgid "" "servers`` field to include the repository name. Here is a complete example " "of a :file:`$HOME/.pypirc` for PyPI, TestPyPI, and a private repository:" msgstr "" +"要配置一个额外的仓库,你需要重新定义 ``index-servers`` 字段以包含该仓库的名称" +"。下面是一个为 PyPI、TestPyPI 和私有仓库配置的完整 :file:`$HOME/.pypirc` 示例" +":" #: ../source/specifications/pypirc.rst:136 msgid "" "Instead of using the ``password`` field, consider saving your API tokens and " "passwords securely using `keyring`_ (which is installed by Twine):" msgstr "" +"与其使用 ``password`` 字段,不如考虑使用由 Twine 安装的 `keyring`_ 来安全地保" +"存你的 API 令牌和密码:" #: ../source/specifications/pyproject-toml.rst:6 msgid "``pyproject.toml`` specification" @@ -22101,12 +25479,14 @@ msgid "" "This is a **technical, formal specification**. For a gentle, user-friendly " "guide to ``pyproject.toml``, see :ref:`writing-pyproject-toml`." msgstr "" +"这是一份 **技术性正式规范**。如需 ``pyproject.toml`` 的通俗易读指南,请参阅 " +":ref:`writing-pyproject-toml`。" #: ../source/specifications/pyproject-toml.rst:14 msgid "" "The ``pyproject.toml`` file acts as a configuration file for packaging-" "related tools (as well as other tools)." -msgstr "" +msgstr "``pyproject.toml`` 文件充当打包相关工具(以及其他工具)的配置文件。" #: ../source/specifications/pyproject-toml.rst:17 msgid "" @@ -22116,16 +25496,22 @@ msgid "" "`. Other tables are reserved for future use (tool-" "specific configuration should use the ``[tool]`` table)." msgstr "" +"``pyproject.toml`` 文件以 `TOML `_ 格式编写。目前指定了三个" +"表,即 :ref:`[build-system] `、:ref:`[project] " +"` 和 :ref:`[tool] `。其他表保" +"留供将来使用(针对特定工具的配置应使用 ``[tool]`` 表)。" #: ../source/specifications/pyproject-toml.rst:27 msgid "Declaring build system dependencies: the ``[build-system]`` table" -msgstr "" +msgstr "声明构建系统依赖项:``[build-system]`` 表" #: ../source/specifications/pyproject-toml.rst:29 msgid "" "The ``[build-system]`` table declares any Python level dependencies that " "must be installed in order to run the project's build system successfully." msgstr "" +"``[build-system]`` 表声明为成功运行项目的构建系统而必须安装的任何 Python 级依" +"赖项。" #: ../source/specifications/pyproject-toml.rst:35 msgid "" @@ -22135,18 +25521,24 @@ msgid "" "dependencies required to execute the build system. The strings in this list " "follow the :ref:`version specifier specification `." msgstr "" +"``[build-system]`` 表用于存储与构建相关的数据。最初,该表只有一个有效的键,且" +"是该表的必填键:``requires``。此键的值必须是一个字符串列表,表示执行构建系统" +"所需的依赖项。该列表中的字符串遵循 :ref:`版本说明符规范 " +"`。" #: ../source/specifications/pyproject-toml.rst:42 msgid "" "An example ``[build-system]`` table for a project built with ``setuptools`` " "is:" -msgstr "" +msgstr "以下是一个使用 ``setuptools`` 构建的项目的 ``[build-system]`` 表示例:" #: ../source/specifications/pyproject-toml.rst:51 msgid "" "Build tools are expected to use the example configuration file above as " "their default semantics when a ``pyproject.toml`` file is not present." msgstr "" +"当 ``pyproject.toml`` 文件不存在时,构建工具应将上述示例配置文件作为其默认语" +"义。" #: ../source/specifications/pyproject-toml.rst:54 msgid "" @@ -22158,6 +25550,10 @@ msgid "" "specified but is missing required fields then the tool should consider it an " "error." msgstr "" +"工具不应强制要求 ``[build-system]`` 表存在。``pyproject.toml`` 文件可以用于存" +"储构建相关数据以外的配置细节,因此没有 ``[build-system]`` 表也是合理的。如果" +"文件存在但缺少 ``[build-system]`` 表,则应使用上文规定的默认值。如果指定了该" +"表但缺少必填字段,则工具应将其视为错误。" #: ../source/specifications/pyproject-toml.rst:62 msgid "" @@ -22166,6 +25562,9 @@ msgid "" "the project should be built (e.g., no setup.py/setup.cfg or other build " "configuration files, and no ``[project]`` table)." msgstr "" +"如果文件存在、缺少 ``[build-system]`` 表,并且没有明确的迹象表明该项目应被构" +"建(例如没有 setup.py/setup.cfg 或其他构建配置文件,也没有 ``[project]`` 表)" +",工具可以选择向用户报错。" #: ../source/specifications/pyproject-toml.rst:67 msgid "" @@ -22173,16 +25572,18 @@ msgid "" "TOML file for illustrative purposes only, the following `JSON Schema " "`_ would match the data format:" msgstr "" +"仅为说明目的,以下 `JSON Schema `_ 以类型化的方式表" +"示 TOML 文件所产生的数据,可匹配该数据格式:" #: ../source/specifications/pyproject-toml.rst:105 msgid "Declaring project metadata: the ``[project]`` table" -msgstr "" +msgstr "声明项目元数据:``[project]`` 表" #: ../source/specifications/pyproject-toml.rst:107 msgid "" "The ``[project]`` table specifies the project's :ref:`core metadata `." -msgstr "" +msgstr "``[project]`` 表用于指定项目的 :ref:`核心元数据 `。" #: ../source/specifications/pyproject-toml.rst:109 msgid "" @@ -22193,6 +25594,10 @@ msgid "" "listed via the ``dynamic`` key (defined later in this specification) and " "represents metadata that a tool will later provide." msgstr "" +"元数据有两种:*静态* 元数据和 *动态* 元数据。静态元数据直接在 " +"``pyproject.toml`` 文件中指定,不能由工具指定或更改(这包括元数据所 *引用* 的" +"数据,例如元数据所引用的文件的内容)。动态元数据通过 ``dynamic`` 键列出(在本" +"规范后文定义),表示将由工具稍后提供的元数据。" #: ../source/specifications/pyproject-toml.rst:117 msgid "" @@ -22203,32 +25608,38 @@ msgid "" "any statically-specified entries. See the :ref:`dynamic ` key for details." msgstr "" +"值可以为任意条目组成的列表或表的键,可以静态指定,*同时* 列在 ``dynamic`` 中" +"。在这种情况下,静态给出的条目是固定的,构建后端只可以向其 *追加* 更多条目;" +"后端不得删除、重排或修改任何静态指定的条目。详情参见 :ref:`dynamic " +"` 键。" #: ../source/specifications/pyproject-toml.rst:124 msgid "" "The lack of a ``[project]`` table implicitly means the :term:`build backend " "` will dynamically provide all keys." msgstr "" +"缺少 ``[project]`` 表即隐含地表示 :term:`构建后端 ` 将动态提供" +"所有键。" #: ../source/specifications/pyproject-toml.rst:127 msgid "The only keys required to be statically defined are:" -msgstr "" +msgstr "必须静态定义的键只有:" #: ../source/specifications/pyproject-toml.rst:131 msgid "" "The keys which are required but may be specified *either* statically or " "listed as dynamic are:" -msgstr "" +msgstr "这些键为必填键,但 *既* 可以静态指定,也可以列为动态:" #: ../source/specifications/pyproject-toml.rst:136 msgid "" "All other keys are considered optional and may be specified statically, " "listed as dynamic, or left unspecified." -msgstr "" +msgstr "所有其他键均视为可选,可以静态指定、列为动态,或不作指定。" #: ../source/specifications/pyproject-toml.rst:139 msgid "The complete list of keys allowed in the ``[project]`` table are:" -msgstr "" +msgstr "``[project]`` 表中允许使用的键的完整列表如下:" #: ../source/specifications/pyproject-toml.rst:141 #: ../source/specifications/pyproject-toml.rst:650 @@ -22244,7 +25655,7 @@ msgstr "``dependencies``" #: ../source/specifications/pyproject-toml.rst:145 #: ../source/specifications/pyproject-toml.rst:609 msgid "``dynamic``" -msgstr "" +msgstr "``dynamic``" #: ../source/specifications/pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:653 @@ -22266,7 +25677,7 @@ msgstr "``import-names``" #: ../source/specifications/pyproject-toml.rst:568 #: ../source/specifications/pyproject-toml.rst:656 msgid "``import-namespaces``" -msgstr "" +msgstr "``import-namespaces``" #: ../source/specifications/pyproject-toml.rst:153 #: ../source/specifications/pyproject-toml.rst:659 @@ -22277,7 +25688,7 @@ msgstr "``maintainers``" #: ../source/specifications/pyproject-toml.rst:483 #: ../source/specifications/pyproject-toml.rst:660 msgid "``optional-dependencies``" -msgstr "" +msgstr "``optional-dependencies``" #: ../source/specifications/pyproject-toml.rst:168 #: ../source/specifications/pyproject-toml.rst:183 @@ -22285,55 +25696,63 @@ msgstr "" #: ../source/specifications/pyproject-toml.rst:252 #: ../source/specifications/pyproject-toml.rst:264 msgid "TOML_ type: string" -msgstr "" +msgstr "TOML_ 类型:字符串" #: ../source/specifications/pyproject-toml.rst:169 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`Name `" #: ../source/specifications/pyproject-toml.rst:172 msgid "The name of the project." -msgstr "" +msgstr "项目的名称。" #: ../source/specifications/pyproject-toml.rst:174 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" +"为了保持内部一致性,工具应该在读取该名称后立即对其进行 :ref:`规范化 ` 处理。" #: ../source/specifications/pyproject-toml.rst:184 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`Version `" #: ../source/specifications/pyproject-toml.rst:187 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." -msgstr "" +msgstr "项目的版本,其定义见 :ref:`版本说明符规范 `。" #: ../source/specifications/pyproject-toml.rst:190 msgid "Users SHOULD prefer to specify already-normalized versions." -msgstr "" +msgstr "你应该优先指定已规范化的版本。" #: ../source/specifications/pyproject-toml.rst:199 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`Summary `" #: ../source/specifications/pyproject-toml.rst:202 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." -msgstr "" +msgstr "对项目的单行摘要描述。如果其中包含多行,工具可以报错。" #: ../source/specifications/pyproject-toml.rst:211 msgid "TOML_ type: string or table" -msgstr "" +msgstr "TOML_ 类型:字符串或表" #: ../source/specifications/pyproject-toml.rst:212 msgid "" @@ -22341,10 +25760,13 @@ msgid "" "` and :ref:`Description-Content-Type `" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`Description ` 和 :ref:`Description-Content-Type `" #: ../source/specifications/pyproject-toml.rst:216 msgid "The full description of the project (i.e. the README)." -msgstr "" +msgstr "项目的完整描述(即 README)。" #: ../source/specifications/pyproject-toml.rst:218 msgid "" @@ -22359,6 +25781,13 @@ msgid "" "``dynamic``. For all unrecognized suffixes when a content-type is not " "provided, tools MUST raise an error." msgstr "" +"此键接受字符串或表。如果它是字符串,那么它是一个相对于 ``pyproject.toml`` 的" +"路径,指向包含完整描述的文本文件。工具必须假定该文件的编码为 UTF-8。如果文件" +"路径以不区分大小写的 ``.md`` 后缀结尾,那么工具必须假定内容类型为 ``text/" +"markdown``。如果文件路径以不区分大小写的 ``.rst`` 结尾,那么工具必须假定内容" +"类型为 ``text/x-rst``。如果工具能识别比本规范更多的扩展名,它可以在不将该键指" +"定为 ``dynamic`` 的情况下为用户推断内容类型。对于所有未识别的后缀,如果未提供" +"内容类型,工具必须报错。" #: ../source/specifications/pyproject-toml.rst:229 msgid "" @@ -22368,6 +25797,9 @@ msgid "" "is the full description. These keys are mutually-exclusive, thus tools MUST " "raise an error if the metadata specifies both keys." msgstr "" +"``readme`` 键也可以接受一个表。``file`` 键的值为字符串,表示一个相对于 " +"``pyproject.toml`` 的路径,指向包含完整描述的文件。``text`` 键的值为字符串," +"即完整描述本身。这些键互斥,因此如果元数据同时指定了这两个键,工具必须报错。" #: ../source/specifications/pyproject-toml.rst:236 msgid "" @@ -22380,22 +25812,31 @@ msgid "" "content-type as supported by the :ref:`core metadata `. " "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" +"在 ``readme`` 键中指定的表还可以有一个 ``content-type`` 键,其值为字符串,指" +"定完整描述的内容类型。如果元数据未在表中指定该键,工具必须报错。如果元数据未" +"指定 ``charset`` 参数,则假定其为 UTF-8。工具可以自行选择是否支持其他编码。工" +"具可以支持其他内容类型,并将其转换为 :ref:`核心元数据 ` 所支持" +"的内容类型。否则,对于不支持的内容类型,工具必须报错。" #: ../source/specifications/pyproject-toml.rst:253 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`Requires-Python `" #: ../source/specifications/pyproject-toml.rst:256 msgid "The Python version requirements of the project." -msgstr "" +msgstr "项目对 Python 版本的要求。" #: ../source/specifications/pyproject-toml.rst:265 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`License-Expression " +"`" #: ../source/specifications/pyproject-toml.rst:268 msgid "" @@ -22403,6 +25844,9 @@ msgid "" "Expression>`, as specified in :doc:`/specifications/license-expression`. " "Tools SHOULD validate and perform case normalization of the expression." msgstr "" +"文本字符串,为有效的 SPDX :term:`许可证表达式 `,具体规定" +"见 :doc:`/specifications/license-expression`。工具应该验证该表达式,并对其执" +"行大小写规范化。" #: ../source/specifications/pyproject-toml.rst:273 msgid "" @@ -22412,6 +25856,9 @@ msgid "" "expression will differ then it should either be specified as dynamic or not " "set at all." msgstr "" +"此键应该 **仅** 在以下情况下指定:构建后端使用 :file:`pyproject.toml` 创建的" +"任何及全部分发文件,其许可证表达式都与此处指定的相同。如果许可证表达式会有所" +"不同,则应该将其指定为动态,或者完全不设置。" #: ../source/specifications/pyproject-toml.rst:280 msgid "Legacy specification" @@ -22419,13 +25866,15 @@ msgstr "旧规范" #: ../source/specifications/pyproject-toml.rst:282 msgid "TOML_ type: table" -msgstr "" +msgstr "TOML_ 类型:表" #: ../source/specifications/pyproject-toml.rst:283 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`License `" #: ../source/specifications/pyproject-toml.rst:286 msgid "" @@ -22436,11 +25885,15 @@ msgid "" "These keys are mutually exclusive, so a tool MUST raise an error if the " "metadata specifies both keys." msgstr "" +"该表可以包含两个键之一。``file`` 键的值为字符串,是一个相对于 " +":file:`pyproject.toml` 的文件路径,指向包含项目许可证的文件。工具必须假定该文" +"件的编码为 UTF-8。``text`` 键的值为字符串,即项目的许可证。这两个键互斥,因此" +"如果元数据同时指定了这两个键,工具必须报错。" #: ../source/specifications/pyproject-toml.rst:293 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." -msgstr "" +msgstr "该表的子键已被 :pep:`639` 弃用,改为使用字符串值。" #: ../source/specifications/pyproject-toml.rst:300 #: ../source/specifications/pyproject-toml.rst:383 @@ -22448,13 +25901,15 @@ msgstr "" #: ../source/specifications/pyproject-toml.rst:519 #: ../source/specifications/pyproject-toml.rst:570 msgid "TOML_ type: array of strings" -msgstr "" +msgstr "TOML_ 类型:字符串数组" #: ../source/specifications/pyproject-toml.rst:301 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`License-File `" #: ../source/specifications/pyproject-toml.rst:304 msgid "" @@ -22464,39 +25919,47 @@ msgid "" "to file(s) containing licenses and other legal notices to be distributed " "with the package." msgstr "" +"一个数组,指定项目源码树中的路径(相对于项目根目录,即包含 " +":file:`pyproject.toml` 或 :file:`setup.py`、:file:`setup.cfg` 等传统项目配置" +"文件的目录),这些路径指向的文件包含许可证以及其他将随软件包一起分发的法律声" +"明。" #: ../source/specifications/pyproject-toml.rst:310 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." msgstr "" +"这些字符串必须包含有效的 glob 模式,具体规范见 :doc:`/specifications/glob-" +"patterns`。" #: ../source/specifications/pyproject-toml.rst:313 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," -msgstr "" +msgstr "模式相对于包含 :file:`pyproject.toml` 的目录," #: ../source/specifications/pyproject-toml.rst:315 msgid "" "Tools MUST assume that license file content is valid UTF-8 encoded text, and " "SHOULD validate this and raise an error if it is not." msgstr "" +"工具必须假定许可证文件内容是有效的 UTF-8 编码文本,并且应该对此进行验证,如果" +"不是则报错。" #: ../source/specifications/pyproject-toml.rst:318 msgid "Build tools:" -msgstr "" +msgstr "构建工具:" #: ../source/specifications/pyproject-toml.rst:320 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." -msgstr "" +msgstr "必须在所有分发归档文件中包含与所列模式匹配的所有文件。" #: ../source/specifications/pyproject-toml.rst:322 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." -msgstr "" +msgstr "必须在核心元数据的 License-File 字段下列出每个匹配的文件路径。" #: ../source/specifications/pyproject-toml.rst:325 msgid "" @@ -22506,10 +25969,14 @@ msgid "" "handle license files. For example they can choose not to include any files " "or use their own logic to discover the appropriate files in the distribution." msgstr "" +"如果 ``license-files`` 键存在且其值被设置为空数组,那么工具不得包含任何许可证" +"文件,也不得报错。如果未定义 ``license-files`` 键,工具可以自行决定如何处理许" +"可证文件。例如,它们可以选择不包含任何文件,或者使用自己的逻辑在分发包中查找" +"合适的文件。" #: ../source/specifications/pyproject-toml.rst:339 msgid "TOML_ type: Array of inline tables with string keys and values" -msgstr "" +msgstr "TOML_ 类型:键和值均为字符串的内联表数组" #: ../source/specifications/pyproject-toml.rst:340 msgid "" @@ -22518,6 +25985,10 @@ msgid "" "email>`, :ref:`Maintainer `, and :ref:`Maintainer-" "email `" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`Author `、:ref:`Author-email `、:ref:`Maintainer " +"` 和 :ref:`Maintainer-email `" #: ../source/specifications/pyproject-toml.rst:346 msgid "" @@ -22525,12 +25996,14 @@ msgid "" "The exact meaning is open to interpretation — it may list the original or " "primary authors, current maintainers, or owners of the package." msgstr "" +"被视为项目“作者”的人员或组织。其确切含义并无硬性定义:它列出的可以是最初或主" +"要的作者、当前的维护者,或者软件包的所有者。" #: ../source/specifications/pyproject-toml.rst:351 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." -msgstr "" +msgstr "“maintainers”键与“authors”键类似,其确切含义并无硬性定义。" #: ../source/specifications/pyproject-toml.rst:354 msgid "" @@ -22540,17 +26013,23 @@ msgid "" "contain commas. The ``email`` value MUST be a valid email address. Both keys " "are optional, but at least one of the keys must be specified in the table." msgstr "" +"这些键接受一个由表组成的数组,每个表有 2 个键:``name`` 和 ``email``。两个值" +"都必须是字符串。``name`` 的值必须是有效的电子邮件名称(即 :rfc:`822` 中允许放" +"在电子邮件地址之前的名称),且不得包含逗号。``email`` 的值必须是有效的电子邮" +"件地址。这两个键都是可选的,但表中必须至少指定其中一个键。" #: ../source/specifications/pyproject-toml.rst:361 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" -msgstr "" +msgstr "使用这些数据填写 :ref:`核心元数据 ` 的方式如下:" #: ../source/specifications/pyproject-toml.rst:364 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" +"如果只提供了 ``name``,则该值视情况填入 :ref:`Author ` " +"或 :ref:`Maintainer `。" #: ../source/specifications/pyproject-toml.rst:367 msgid "" @@ -22558,6 +26037,8 @@ msgid "" "metadata-author-email>` or :ref:`Maintainer-email ` as appropriate." msgstr "" +"如果只提供了 ``email``,则该值视情况填入 :ref:`Author-email ` 或 :ref:`Maintainer-email `。" #: ../source/specifications/pyproject-toml.rst:371 msgid "" @@ -22565,30 +26046,37 @@ msgid "" "email ` or :ref:`Maintainer-email ` as appropriate, with the format ``{name} <{email}>``." msgstr "" +"如果同时提供了 ``email`` 和 ``name``,则该值视情况以 ``{name} <{email}>`` 的" +"格式填入 :ref:`Author-email ` 或 " +":ref:`Maintainer-email `。" #: ../source/specifications/pyproject-toml.rst:375 msgid "Multiple values should be separated by commas." -msgstr "" +msgstr "多个值应该用逗号分隔。" #: ../source/specifications/pyproject-toml.rst:384 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`Keywords `" #: ../source/specifications/pyproject-toml.rst:387 msgid "The keywords for the project." -msgstr "" +msgstr "项目的关键词。" #: ../source/specifications/pyproject-toml.rst:396 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`Classifier `" #: ../source/specifications/pyproject-toml.rst:399 msgid "Trove classifiers which apply to the project." -msgstr "" +msgstr "适用于该项目的 Trove 分类器。" #: ../source/specifications/pyproject-toml.rst:401 msgid "" @@ -22597,16 +26085,21 @@ msgid "" "the ``license`` string value (translating to ``License-Expression`` metadata " "field) and the ``License ::`` classifiers are used." msgstr "" +"``License ::`` 分类器的使用已被弃用,工具可以发出警告,将这一情况告知用户。如" +"果同时使用了 ``license`` 字符串值(对应 ``License-Expression`` 元数据字段)" +"和 ``License ::`` 分类器,构建工具可以报错。" #: ../source/specifications/pyproject-toml.rst:413 msgid "TOML_ type: table with keys and values of strings" -msgstr "" +msgstr "TOML_ 类型:键和值均为字符串的表" #: ../source/specifications/pyproject-toml.rst:414 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`Project-URL `" #: ../source/specifications/pyproject-toml.rst:417 msgid "" @@ -22614,20 +26107,25 @@ msgid "" "itself. See :ref:`well-known-project-urls` for normalization rules and well-" "known rules when processing metadata for presentation." msgstr "" +"一个由 URL 构成的表,其中键是 URL 的标签,值是 URL 本身。在处理元数据以供展示" +"时,请参见 :ref:`well-known-project-urls` 了解规范化规则和知名标签的相关规则" +"。" #: ../source/specifications/pyproject-toml.rst:427 msgid "Entry points" -msgstr "" +msgstr "入口点" #: ../source/specifications/pyproject-toml.rst:429 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" +"TOML_ 类型:表(``[project.scripts]``、``[project.gui-scripts]`` 和 " +"``[project.entry-points]``)" #: ../source/specifications/pyproject-toml.rst:431 msgid ":ref:`Entry points specification `" -msgstr "" +msgstr ":ref:`入口点规范 `" #: ../source/specifications/pyproject-toml.rst:433 msgid "" @@ -22636,6 +26134,8 @@ msgid "" "specification `. The key of the table is the name of the entry " "point and the value is the object reference." msgstr "" +"有三个与入口点相关的表。``[project.scripts]`` 表对应 :ref:`入口点规范 ` 中的 ``console_scripts`` 组。该表的键是入口点的名称,值是对象引用。" #: ../source/specifications/pyproject-toml.rst:439 msgid "" @@ -22643,6 +26143,8 @@ msgid "" "in the :ref:`entry points specification `. Its format is the " "same as ``[project.scripts]``." msgstr "" +"``[project.gui-scripts]`` 表对应 :ref:`入口点规范 ` 中的 " +"``gui_scripts`` 组。其格式与 ``[project.scripts]`` 相同。" #: ../source/specifications/pyproject-toml.rst:443 msgid "" @@ -22651,6 +26153,9 @@ msgid "" "same as ``[project.scripts]``. Users MUST NOT create nested sub-tables but " "instead keep the entry point groups to only one level deep." msgstr "" +"``[project.entry-points]`` 表是一个表的集合。每个子表的名称是一个入口点组。其" +"键和值的语义与 ``[project.scripts]`` 相同。用户不得创建嵌套的子表,而应让入口" +"点组只保留一层深度。" #: ../source/specifications/pyproject-toml.rst:449 msgid "" @@ -22659,36 +26164,47 @@ msgid "" "points.gui_scripts]`` table, as they would be ambiguous in the face of " "``[project.scripts]`` and ``[project.gui-scripts]``, respectively." msgstr "" +"如果元数据定义了 ``[project.entry-points.console_scripts]`` 或 " +"``[project.entry-points.gui_scripts]`` 表,构建后端必须报错,因为它们分别会" +"与 ``[project.scripts]`` 和 ``[project.gui-scripts]`` 产生歧义。" #: ../source/specifications/pyproject-toml.rst:461 msgid "" "TOML_ type: Array of :ref:`dependency specifier ` " "strings (``dependencies``)" msgstr "" +"TOML_ 类型:由 :ref:`依赖说明符 ` 字符串组成的数组" +"(``dependencies``)" #: ../source/specifications/pyproject-toml.rst:463 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist `" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`Requires-Dist `" #: ../source/specifications/pyproject-toml.rst:466 msgid "" "``dependencies`` lists the expected dependencies of the project as an array " "of strings." -msgstr "" +msgstr "``dependencies`` 以字符串数组的形式列出项目的预期依赖项。" #: ../source/specifications/pyproject-toml.rst:469 msgid "" "Each string represents a dependency of the project and MUST be formatted as " "a valid :ref:`dependency specifier `." msgstr "" +"每个字符串表示项目的一个依赖项,且必须被格式化为有效的 :ref:`依赖说明符 " +"`。" #: ../source/specifications/pyproject-toml.rst:472 msgid "" "Each string maps directly to a :ref:`Requires-Dist ` entry." msgstr "" +"每个字符串都直接对应一条 :ref:`Requires-Dist ` " +"条目。" #: ../source/specifications/pyproject-toml.rst:475 msgid "" @@ -22696,12 +26212,16 @@ msgid "" "but may still contain environment markers that cause them to be skipped in " "some environments." msgstr "" +"此数组中列出的依赖项总会被纳入安装考虑,但仍可能包含环境标记,导致它们在某些" +"环境中被跳过。" #: ../source/specifications/pyproject-toml.rst:485 msgid "" "TOML_ type: table with string keys mapping to arrays of :ref:`dependency " "specifier ` strings (``optional-dependencies``)" msgstr "" +"TOML_ 类型:字符串键映射到 :ref:`依赖说明符 ` 字符串数" +"组的表(``optional-dependencies``)" #: ../source/specifications/pyproject-toml.rst:487 msgid "" @@ -22709,6 +26229,9 @@ msgid "" "Dist ` and :ref:`Provides-Extra `" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`Requires-Dist ` 和 :ref:`Provides-Extra `" #: ../source/specifications/pyproject-toml.rst:491 msgid "" @@ -22717,6 +26240,9 @@ msgid "" "``dependencies`` array (the strings in the arrays must be " "valid :ref:`dependency specifiers `)." msgstr "" +"``optional-dependencies`` 是一个表,其中每个键指定一个附加功能(extra),其值" +"是一个字符串数组,格式与 ``dependencies`` 数组相同(数组中的字符串必须是有效" +"的 :ref:`依赖说明符 `)。" #: ../source/specifications/pyproject-toml.rst:496 msgid "" @@ -22725,6 +26251,10 @@ msgid "" "corresponding :ref:`Requires-Dist ` entry for " "the matching :ref:`Provides-Extra ` metadata." msgstr "" +"这些键必须是 :ref:`Provides-Extra ` 的有效值。" +"这样,数组中的每个值都会成为匹配的 :ref:`Provides-Extra ` 元数据所对应的一条 :ref:`Requires-Dist ` 条目。" #: ../source/specifications/pyproject-toml.rst:503 msgid "" @@ -22733,6 +26263,9 @@ msgid "" "the extra name. Optional dependencies are thus only considered for " "installation if installation if the associated extra name is requested." msgstr "" +"这些依赖项的可选性是通过修改相关 ``Requires-Dist`` 条目上的环境标记子句来记录" +"的,使其检查附加功能名称。因此,只有当请求了相应的附加功能名称时,可选依赖项" +"才会被纳入安装考虑。" #: ../source/specifications/pyproject-toml.rst:508 msgid "" @@ -22743,12 +26276,19 @@ msgid "" "including :ref:`pip`, :ref:`uv`, :ref:`poetry`, :ref:`hatch`, :ref:`pdm` " "and :ref:`pipenv`." msgstr "" +"附加功能中的依赖说明符可以自引用当前项目的其他附加功能(例如 ``all = [\"your-" +"project-name[gui, cli]\"]``)。示例参见 :ref:`自引用附加功能 `。如今大多数包管理器都支持这种附加功能,包括 " +":ref:`pip`、:ref:`uv`、:ref:`poetry`、:ref:`hatch`、:ref:`pdm` 和 " +":ref:`pipenv`。" #: ../source/specifications/pyproject-toml.rst:520 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Import-Name " "`" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`Import-Name `" #: ../source/specifications/pyproject-toml.rst:523 msgid "" @@ -22758,6 +26298,9 @@ msgid "" "\"private\" (e.g. ``\"; private\"``) with any amount of whitespace " "surrounding the semicolon." msgstr "" +"一个字符串数组,指定项目在安装后独占提供的导入名称。每个字符串必须是有效的 " +"Python 标识符,也可以为空。导入名称后面可以跟一个分号和术语“private”(例如 " +"``\"; private\"``),分号两侧可以有任意数量的空白字符。" #: ../source/specifications/pyproject-toml.rst:528 msgid "" @@ -22773,6 +26316,14 @@ msgid "" "expected. As well, projects SHOULD list all import names, public or private, " "using the ``; private`` modifier as appropriate." msgstr "" +"项目应该列出其独占提供的所有最短导入名称。如果这些最短名称中有带点的名称,那" +"么从该名称到顶层名称之间的所有中间名称也应该适当地列在 ``import-names`` 和/" +"或 ``import-namespaces`` 中。例如,一个名为 spam、包含多个子模块的单一软件包" +"的项目,只需列出 ``project.import-names = [\"spam\"]``。而列出 " +"``spam.bacon.eggs`` 的项目,还需要在 ``import-names`` 和 ``import-" +"namespaces`` 中适当地处理 ``spam`` 和 ``spam.bacon``。列出所有名称可以起到校" +"验作用,确认导入名称的意图符合预期。此外,项目应该视情况使用 ``; private`` 修" +"饰符列出所有导入名称,无论公开还是私有。" #: ../source/specifications/pyproject-toml.rst:540 #: ../source/specifications/pyproject-toml.rst:589 @@ -22780,6 +26331,8 @@ msgid "" "If a project lists the same name in both ``import-names`` and ``import-" "namespaces``, then tools MUST raise an error due to ambiguity." msgstr "" +"如果项目在 ``import-names`` 和 ``import-namespaces`` 中列出了相同的名称,那么" +"工具必须因歧义而报错。" #: ../source/specifications/pyproject-toml.rst:543 msgid "" @@ -22787,13 +26340,15 @@ msgid "" "with no import names (i.e. there are no Python modules of any kind in the " "distribution file)." msgstr "" +"项目可以将 ``import-names`` 设置为空数组,表示该项目没有任何导入名称(即分发" +"文件中不存在任何类型的 Python 模块)。" #: ../source/specifications/pyproject-toml.rst:547 #: ../source/specifications/pyproject-toml.rst:592 msgid "" "Build back-ends MAY support dynamically calculating the value if the user " "declares the key in ``project.dynamic``." -msgstr "" +msgstr "如果用户在 ``project.dynamic`` 中声明了该键,构建后端可以支持动态计算该值。" #: ../source/specifications/pyproject-toml.rst:550 msgid "Examples:" @@ -22804,6 +26359,8 @@ msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Import-" "Namespace `" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`Import-Namespace `" #: ../source/specifications/pyproject-toml.rst:574 msgid "" @@ -22814,6 +26371,10 @@ msgid "" "surrounding the semicolon. Note that unlike ``import-names``, ``import-" "namespaces`` CANNOT be an empty array." msgstr "" +"一个字符串数组,指定项目在安装后提供(但并非独占提供)的导入名称。每个字符串" +"必须是有效的 Python 标识符。导入名称后面可以跟一个分号和术语“private”(例如 " +"``\"; private\"``),分号两侧可以有任意数量的空白字符。请注意,与 ``import-" +"names`` 不同,``import-namespaces`` 不能是空数组。" #: ../source/specifications/pyproject-toml.rst:580 msgid "" @@ -22822,6 +26383,9 @@ msgid "" "intervening names from that name to the top-level name should also be listed " "appropriately in ``import-names`` and/or ``import-namespaces``." msgstr "" +"项目应该列出其独占提供的所有最短导入名称。如果这些最短名称中有带点的名称,那" +"么从该名称到顶层名称之间的所有中间名称也应该适当地列在 ``import-names`` 和/" +"或 ``import-namespaces`` 中。" #: ../source/specifications/pyproject-toml.rst:585 msgid "" @@ -22830,6 +26394,9 @@ msgid "" "import name in ``import-namespaces`` can be installed together without " "shadowing each other." msgstr "" +"此字段用于命名空间包的情形,即多个项目可以共同贡献同一个导入命名空间。在 " +"``import-namespaces`` 中列出相同导入名称的各个项目,可以安装在一起而不会相互" +"遮蔽。" #: ../source/specifications/pyproject-toml.rst:595 msgid "Example:" @@ -22837,13 +26404,15 @@ msgstr "例子:" #: ../source/specifications/pyproject-toml.rst:611 msgid "TOML_ type: array of string" -msgstr "" +msgstr "TOML_ 类型:字符串数组" #: ../source/specifications/pyproject-toml.rst:612 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" +"对应的 :ref:`核心元数据 ` 字段::ref:`Dynamic `" #: ../source/specifications/pyproject-toml.rst:615 msgid "" @@ -22852,18 +26421,21 @@ msgid "" "delineates which metadata is purposefully unspecified and expected to stay " "unspecified compared to being provided via tooling later on." msgstr "" +"指定本 PEP 所列的哪些键是有意不作指定的,以便其他工具能够或将要动态提供此类元" +"数据。这样可以清楚地界定哪些元数据是有意不指定、且预期将继续保持未指定的,而" +"不是留待工具稍后提供的。" #: ../source/specifications/pyproject-toml.rst:621 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." -msgstr "" +msgstr "构建后端必须遵循静态指定的元数据(即元数据没有在 ``dynamic`` 中列出该键)。" #: ../source/specifications/pyproject-toml.rst:623 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." -msgstr "" +msgstr "如果元数据在 ``dynamic`` 中指定了 ``name``,构建后端必须报错。" #: ../source/specifications/pyproject-toml.rst:625 msgid "" @@ -22873,6 +26445,9 @@ msgid "" "should not be possible for a required key to not be listed somehow in the " "``[project]`` table)." msgstr "" +"如果 :ref:`核心元数据 ` 规范将某个字段标记为“Required”,那么元" +"数据必须静态指定该键,或者在 ``dynamic`` 中列出该键(否则构建后端必须报错,也" +"就是说,不应该出现必需的键未以某种方式列在 ``[project]`` 表中的情况)。" #: ../source/specifications/pyproject-toml.rst:630 msgid "" @@ -22880,6 +26455,8 @@ msgid "" "\"Optional\", the metadata MAY list it in ``dynamic`` if the expectation is " "a build back-end will provide the data for the key later." msgstr "" +"如果 :ref:`核心元数据 ` 规范将某个字段标记为“Optional”,且预期" +"构建后端会在稍后提供该键的数据,那么元数据可以在 ``dynamic`` 中列出该键。" #: ../source/specifications/pyproject-toml.rst:634 msgid "" @@ -22887,6 +26464,8 @@ msgid "" "statically as well as being listed in ``dynamic``, *unless* the key " "represents a list or arbitrary table that can be extended, listed below." msgstr "" +"如果元数据既静态指定了某个键,又在 ``dynamic`` 中列出了该键,构建后端必须报错" +",*除非* 该键表示的是可扩展的列表或任意表(如下所列)。" #: ../source/specifications/pyproject-toml.rst:637 msgid "" @@ -22895,6 +26474,9 @@ msgid "" "``dynamic`` is the only way to allow a tool to fill in metadata and the user " "must opt into the filling in)." msgstr "" +"如果元数据没有在 ``dynamic`` 中列出某个键,那么构建后端不能代表用户填写所需的" +"元数据(也就是说,``dynamic`` 是允许工具填写元数据的唯一途径,用户必须自行选" +"择接受这种填写)。" #: ../source/specifications/pyproject-toml.rst:641 msgid "" @@ -22902,6 +26484,8 @@ msgid "" "``dynamic`` but the build back-end was unable to determine the data for it " "(omitting the data, if determined to be the accurate value, is acceptable)." msgstr "" +"如果元数据在 ``dynamic`` 中指定了某个键,但构建后端无法确定该键的数据,那么构" +"建后端必须报错(如果确定省略该数据才是准确的值,那么省略是可以接受的)。" #: ../source/specifications/pyproject-toml.rst:646 msgid "" @@ -22909,10 +26493,12 @@ msgid "" "statically and listed in ``dynamic`` simultaneously. The keys fitting that " "description are:" msgstr "" +"值属于列表或任意条目表的键,可以同时被静态指定并列在 ``dynamic`` 中。符合这一" +"描述的键有:" #: ../source/specifications/pyproject-toml.rst:664 msgid "When such a key is specified both statically and listed in ``dynamic``:" -msgstr "" +msgstr "当这样的键既被静态指定、又列在 ``dynamic`` 中时:" #: ../source/specifications/pyproject-toml.rst:667 msgid "" @@ -22922,16 +26508,22 @@ msgid "" "new keys and MAY append to the values of existing keys (in the case of a " "list), but MUST NOT change or remove the entries given statically." msgstr "" +"构建后端只可以对该值 *追加* 条目;不得删除、重排或修改任何静态指定的条目。对" +"于表(例如 ``optional-dependencies`` 或 ``entry-points``),这意味着后端可以" +"添加新键,也可以向现有键的值追加条目(在值为列表的情况下),但不得更改或删除" +"静态给出的条目。" #: ../source/specifications/pyproject-toml.rst:673 msgid "" "A build back-end SHOULD raise an error if a key is listed in ``dynamic`` and " "it does not support extending that key." msgstr "" +"如果某个键被列在 ``dynamic`` 中,而构建后端不支持扩展该键,那么构建后端应该报" +"错。" #: ../source/specifications/pyproject-toml.rst:680 msgid "Arbitrary tool configuration: the ``[tool]`` table" -msgstr "" +msgstr "任意工具配置:``[tool]`` 表" #: ../source/specifications/pyproject-toml.rst:682 msgid "" @@ -22940,6 +26532,10 @@ msgid "" "use a sub-table within ``[tool]``, e.g. the `flit `_ tool would store its configuration in ``[tool.flit]``." msgstr "" +"``[tool]`` 表是任何与你的 Python 项目相关的工具(而不仅仅是构建工具)让用户指" +"定配置数据的地方,只要它们使用 ``[tool]`` 之内的子表即可。例如,`flit " +"`_ 工具会将其配置存储在 ``[tool.flit]`` 中" +"。" #: ../source/specifications/pyproject-toml.rst:688 msgid "" @@ -22948,6 +26544,9 @@ msgid "" "and collide. Our rule is that a project can use the subtable ``tool.$NAME`` " "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" +"需要一种机制在 ``tool.*`` 命名空间中分配名称,以确保不同项目不会试图使用同一" +"个子表而发生冲突。我们的规则是:当且仅当项目在 Cheeseshop/PyPI 上拥有 " +"``$NAME`` 的条目时,该项目才可以使用子表 ``tool.$NAME``。" #: ../source/specifications/pyproject-toml.rst:699 msgid "" @@ -22955,30 +26554,38 @@ msgid "" "just a ``[build-system]`` containing a ``requires`` key and a ``[tool]`` " "table, was approved through :pep:`518`." msgstr "" +"2016 年 5 月:``pyproject.toml`` 文件的初始规范经 :pep:`518` 获得批准,当时仅" +"包含带 ``requires`` 键的 ``[build-system]`` 表和 ``[tool]`` 表。" #: ../source/specifications/pyproject-toml.rst:703 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." -msgstr "" +msgstr "2020 年 11 月:``[project]`` 表的规范经 :pep:`621` 获得批准。" #: ../source/specifications/pyproject-toml.rst:706 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." msgstr "" +"2024 年 12 月:通过 :pep:`639`,重新定义了 ``license`` 键,新增了 ``license-" +"files`` 键,并弃用了 ``License::`` 分类器。" #: ../source/specifications/pyproject-toml.rst:709 msgid "" "September 2025: Clarity that the ``license`` key applies to all distribution " "files generated from the :file:`pyproject.toml` file." msgstr "" +"2025 年 9 月:澄清 ``license`` 键适用于从 :file:`pyproject.toml` 文件生成的所" +"有分发包文件。" #: ../source/specifications/pyproject-toml.rst:712 msgid "" "October 2025: The ``import-names`` and ``import-namespaces`` keys were added " "through :pep:`794`." msgstr "" +"2025 年 10 月:通过 :pep:`794` 新增了 ``import-names`` 和 ``import-" +"namespaces`` 键。" #: ../source/specifications/pyproject-toml.rst:718 msgid "" @@ -22986,16 +26593,20 @@ msgid "" "listed in ``dynamic``, with build back-ends only able to append entries, " "through :pep:`808`." msgstr "" +"2026 年 5 月:通过 :pep:`808`,允许值为列表或表的键在静态指定的同时也列在 " +"``dynamic`` 中,而构建后端只能向其追加条目。" #: ../source/specifications/pyproject-toml.rst:722 msgid "" "August 2026: Document self-referential extra as a supported feature by many " "modern package managers of Python." msgstr "" +"2026 年 8 月:将自引用附加功能(self-referential extra)记载为众多现代 " +"Python 包管理器支持的特性。" #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" -msgstr "" +msgstr "记录已安装的项目" #: ../source/specifications/recording-installed-packages.rst:9 msgid "" @@ -23004,6 +26615,9 @@ msgid "" "metadata format allows tools to query, manage or uninstall projects, " "regardless of how they were installed." msgstr "" +"本文档规定了一种通用格式,用于记录环境中已安装的 Python :term:`项目 " +"` 的信息。统一的元数据格式让工具能够查询、管理或卸载项目,而无需关心它们是如" +"何安装的。" #: ../source/specifications/recording-installed-packages.rst:14 msgid "" @@ -23013,6 +26627,9 @@ msgid "" "a list of installed files in a format specific to Python tooling, it should " "still record the name and version of the installed project." msgstr "" +"几乎所有信息都是可选的。这使得 Python 生态系统之外的工具(例如 Linux 软件包管" +"理器)能够最大限度地与 Python 工具集成。例如,即使安装工具难以按照 Python 工" +"具专用的格式提供已安装文件的列表,它也应该记录所安装项目的名称和版本。" #: ../source/specifications/recording-installed-packages.rst:25 msgid "" @@ -23020,6 +26637,8 @@ msgid "" "install a \"``.dist-info``\" directory located alongside importable modules " "and packages (commonly, the ``site-packages`` directory)." msgstr "" +"从分发包安装的每个项目,除了文件之外,还必须安装一个\"``.dist-info``\"目录," +"该目录与可导入的模块和包位于同一位置(通常是 ``site-packages`` 目录)。" #: ../source/specifications/recording-installed-packages.rst:29 msgid "" @@ -23032,6 +26651,12 @@ msgid "" "exactly one dash (``-``) character in its stem, separating the ``name`` and " "``version`` fields." msgstr "" +"该目录以 ``{name}-{version}.dist-info`` 的形式命名,其中 ``name`` 和 " +"``version`` 字段对应 :ref:`core-metadata`。这两个字段都必须经过规范化(参见 " +":ref:`名称规范化规范 ` 和 :ref:`版本规范化规范 `),并将其中的连字符(``-``)替换为下划线(``_``)" +",这样,``.dist-info`` 目录的主干名中就始终恰好包含一个连字符(``-``),用于" +"分隔 ``name`` 和 ``version`` 字段。" #: ../source/specifications/recording-installed-packages.rst:37 msgid "" @@ -23043,6 +26668,11 @@ msgid "" "both ``name`` and ``version`` fields using the rules described above, and " "existing tools are encouraged to start normalizing those fields." msgstr "" +"历史上,一些工具未能替换 ``name`` 字段中的点号或对其大小写进行规范化,也可能" +"未对 ``version`` 字段执行规范化。使用 ``.dist-info`` 目录的工具应该预期这些字" +"段可能未经规范化,并将其视为与规范化后的对应形式等价。写入 ``.dist-info`` 目" +"录的新工具必须按照上述规则对 ``name`` 和 ``version`` 两个字段进行规范化,同时" +"鼓励现有工具开始对这些字段进行规范化。" #: ../source/specifications/recording-installed-packages.rst:47 msgid "" @@ -23055,33 +26685,38 @@ msgid "" "API for such tools to consume, so tools can have access to the unnormalized " "name when displaying distribution information." msgstr "" +"``.dist-info`` 目录的名称经过格式化,以便在作为文件系统路径时能无歧义地表示一" +"个分发包。向用户展示分发包名称的工具应该避免使用规范化后的名称,而应展示所指" +"定的名称(在名称被解析为已安装的软件包之前需要使用时),或读取核心元数据中的" +"相应字段,因为其中列出的值未经转义,能准确反映分发包。库应该提供供此类工具使" +"用的 API,以便工具在显示分发包信息时能够访问未规范化的名称。" #: ../source/specifications/recording-installed-packages.rst:56 msgid "" "This ``.dist-info`` directory may contain the following files, described in " "detail below:" -msgstr "" +msgstr "该 ``.dist-info`` 目录可以包含以下文件,下文将详细描述这些文件:" #: ../source/specifications/recording-installed-packages.rst:59 msgid "``METADATA``: contains project metadata" -msgstr "" +msgstr "``METADATA``:包含项目元数据" #: ../source/specifications/recording-installed-packages.rst:60 msgid "``RECORD``: records the list of installed files." -msgstr "" +msgstr "``RECORD``:记录已安装文件的列表。" #: ../source/specifications/recording-installed-packages.rst:61 msgid "" "``INSTALLER``: records the name of the tool used to install the project." -msgstr "" +msgstr "``INSTALLER``:记录安装该项目所用工具的名称。" #: ../source/specifications/recording-installed-packages.rst:62 msgid "``entry_points.txt``: see :ref:`entry-points` for details" -msgstr "" +msgstr "``entry_points.txt``:详情参见 :ref:`entry-points`" #: ../source/specifications/recording-installed-packages.rst:63 msgid "``direct_url.json``: see :ref:`direct-url` for details" -msgstr "" +msgstr "``direct_url.json``:详情参见 :ref:`direct-url`" #: ../source/specifications/recording-installed-packages.rst:65 msgid "" @@ -23089,20 +26724,22 @@ msgid "" "installing tool's discretion. Additional installer-specific files may be " "present." msgstr "" +"``METADATA`` 文件是必需的。所有其他文件均可由安装工具自行决定是否省略。此外," +"还可以存在安装工具特有的其他文件。" #: ../source/specifications/recording-installed-packages.rst:69 msgid "" "This :file:`.dist-info/` directory may contain the following directories, " "described in detail below:" -msgstr "" +msgstr "该 :file:`.dist-info/` 目录可以包含以下目录,下文将详细描述:" #: ../source/specifications/recording-installed-packages.rst:72 msgid ":file:`licenses/`: contains license files." -msgstr "" +msgstr ":file:`licenses/`:包含许可证文件。" #: ../source/specifications/recording-installed-packages.rst:73 msgid ":file:`sboms/`: contains Software Bill-of-Materials files (SBOMs)." -msgstr "" +msgstr ":file:`sboms/`:包含软件物料清单(SBOM)文件。" #: ../source/specifications/recording-installed-packages.rst:77 msgid "" @@ -23111,6 +26748,9 @@ msgid "" "Such files may be copied to the ``.dist-info`` directory of an installed " "project." msgstr "" +":ref:`binary-distribution-format` 规范描述了 :term:`Wheel` 的 ``.dist-info`` " +"目录中可能出现的其他文件。这类文件可以复制到已安装项目的 ``.dist-info`` 目录" +"中。" #: ../source/specifications/recording-installed-packages.rst:82 msgid "" @@ -23119,16 +26759,21 @@ msgid "" "standardized again in the future. See `PEP 376 `_ for its original meaning." msgstr "" +"本规范的早期版本还规定了一个 ``REQUESTED`` 文件。该文件现在被视为工具特有的扩" +"展,但将来可能重新标准化。请参见 `PEP 376 `_ 了解其原始含义。" #: ../source/specifications/recording-installed-packages.rst:89 msgid "The METADATA file" -msgstr "" +msgstr "METADATA 文件" #: ../source/specifications/recording-installed-packages.rst:91 msgid "" "The ``METADATA`` file contains metadata as described in the :ref:`core-" "metadata` specification, version 1.1 or greater." msgstr "" +"``METADATA`` 文件包含 :ref:`core-metadata` 规范(版本 1.1 或更高)中所述的元" +"数据。" #: ../source/specifications/recording-installed-packages.rst:94 msgid "" @@ -23136,40 +26781,44 @@ msgid "" "core metadata is not available, installers must report an error and fail to " "install the project." msgstr "" +"``METADATA`` 文件是必需的。如果无法创建该文件,或者必需的核心元数据不可用,安" +"装工具必须报告错误并停止安装该项目。" #: ../source/specifications/recording-installed-packages.rst:100 msgid "The RECORD file" -msgstr "" +msgstr "RECORD 文件" #: ../source/specifications/recording-installed-packages.rst:102 msgid "" "The ``RECORD`` file holds the list of installed files. It is a CSV file " "containing one record (line) per installed file." msgstr "" +"``RECORD`` 文件保存已安装文件的列表。它是一个 CSV 文件,其中每个已安装文件对" +"应一条记录(一行)。" #: ../source/specifications/recording-installed-packages.rst:105 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" -msgstr "" +msgstr "CSV 方言必须能够用 Python 的 ``csv`` 模块的默认 ``reader`` 读取:" #: ../source/specifications/recording-installed-packages.rst:108 msgid "field delimiter: ``,`` (comma)," -msgstr "" +msgstr "字段分隔符: ``,`` (逗号);" #: ../source/specifications/recording-installed-packages.rst:109 msgid "quoting char: ``\"`` (straight double quote)," -msgstr "" +msgstr "引用字符: ``\"`` (直双引号);" #: ../source/specifications/recording-installed-packages.rst:110 msgid "line terminator: either ``\\r\\n`` or ``\\n``." -msgstr "" +msgstr "行结束符: ``\\r\\n`` 或 ``\\n``。" #: ../source/specifications/recording-installed-packages.rst:112 msgid "" "Each record is composed of three elements: the file's **path**, the **hash** " "of the contents, and its **size**." -msgstr "" +msgstr "每条记录由三个元素组成:文件的 **路径**、内容的 **哈希** 及其 **大小**。" #: ../source/specifications/recording-installed-packages.rst:115 msgid "" @@ -23178,6 +26827,9 @@ msgid "" "Windows, directories may be separated either by forward- or backslashes (``/" "`` or ``\\``)." msgstr "" +"*path* 既可以是绝对路径,也可以是相对于包含 ``.dist-info`` 目录的目录(通常" +"为 ``site-packages`` 目录)的相对路径。在 Windows 上,目录分隔符既可以是正斜" +"杠 ``/``,也可以是反斜杠 ``\\``。" #: ../source/specifications/recording-installed-packages.rst:120 msgid "" @@ -23187,12 +26839,16 @@ msgid "" "urlsafe-base64-nopad encoding (:py:func:`base64.urlsafe_b64encode(digest) " "` with trailing ``=`` removed)." msgstr "" +"*hash* 为空字符串,或为 :py:data:`hashlib.algorithms_guaranteed` 中某个哈希算" +"法的名称,后跟等号字符 ``=`` 以及使用 urlsafe-base64-nopad 编码的文件内容摘要" +"(即 :py:func:`base64.urlsafe_b64encode(digest) " +"` 的输出,并去掉末尾的 ``=``)。" #: ../source/specifications/recording-installed-packages.rst:125 msgid "" "The *size* is either the empty string, or file's size in bytes, as a base 10 " "integer." -msgstr "" +msgstr "*size* 为空字符串,或为文件的字节大小,以十进制整数表示。" #: ../source/specifications/recording-installed-packages.rst:128 msgid "" @@ -23202,6 +26858,9 @@ msgid "" "is discouraged, as it prevents verifying the integrity of the installed " "project." msgstr "" +"任何文件的 *hash* 和 *size* 字段中的一个或两个都可以留空。通常,``.pyc`` 文件" +"和 ``RECORD`` 文件本身的条目中 *hash* 和 *size* 为空。对于其他文件,不建议省" +"略这些信息,因为这将导致无法验证已安装项目的完整性。" #: ../source/specifications/recording-installed-packages.rst:134 msgid "" @@ -23211,6 +26870,10 @@ msgid "" "directory (including the ``RECORD`` file itself) must be listed. Directories " "should not be listed." msgstr "" +"如果存在 ``RECORD`` 文件,则它必须列出该项目的全部已安装文件,但与 " +"``RECORD`` 中所列 ``.py`` 文件对应的 ``.pyc`` 文件除外,它们是可选的。需要注" +"意的是,``.dist-info`` 目录的内容(包括 ``RECORD`` 文件本身在内)必须列出。不" +"应列出目录。" #: ../source/specifications/recording-installed-packages.rst:141 msgid "" @@ -23218,10 +26881,13 @@ msgid "" "in ``RECORD``, all ``.pyc`` files (of all optimization levels) corresponding " "to removed ``.py`` files, and any directories emptied by the uninstallation." msgstr "" +"要完全卸载一个软件包,工具需要删除 ``RECORD`` 中列出的所有文件、与被删除的 " +"``.py`` 文件对应的所有 ``.pyc`` 文件(涵盖所有优化级别),以及因卸载而变空的" +"任何目录。" #: ../source/specifications/recording-installed-packages.rst:146 msgid "Here is an example snippet of a possible ``RECORD`` file::" -msgstr "" +msgstr "下面是一个可能的 ``RECORD`` 文件片段示例::" #: ../source/specifications/recording-installed-packages.rst:165 msgid "" @@ -23230,6 +26896,9 @@ msgid "" "apply to tools that rely on other sources of information, such as system " "package managers in Linux distros.)" msgstr "" +"如果 ``RECORD`` 文件缺失,依赖 ``.dist-info`` 的工具不得尝试卸载或升级该软件" +"包。(这一限制不适用于依赖其他信息来源的工具,例如 Linux 发行版中的系统软件包" +"管理器。)" #: ../source/specifications/recording-installed-packages.rst:172 msgid "" @@ -23240,10 +26909,14 @@ msgid "" "``RECORD`` must be updated, otherwise uninstalling the package will leave " "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" +"*强烈不建议* 已安装的软件包修改自身(例如把缓存文件存放在 ``site-packages`` " +"中自己的命名空间之下)。对 ``site-packages`` 内部的更改应该交由 pip 之类的专" +"用安装工具处理。但如果软件包确实以这种方式被修改,那么 ``RECORD`` 必须更新," +"否则卸载该软件包时会遗留未被列出的文件(可能会产生僵尸命名空间包)。" #: ../source/specifications/recording-installed-packages.rst:181 msgid "The INSTALLER file" -msgstr "" +msgstr "INSTALLER 文件" #: ../source/specifications/recording-installed-packages.rst:183 msgid "" @@ -23252,14 +26925,17 @@ msgid "" "``INSTALLER`` should contain the command name. Otherwise, it should contain " "a printable ASCII string." msgstr "" +"如果存在,则 ``INSTALLER`` 是一个单行文本文件,其中写明了安装该项目所用的工具" +"。如果安装工具可以从命令行执行,那么 ``INSTALLER`` 应该包含该命令的名称;否则" +",它应该包含一个可打印的 ASCII 字符串。" #: ../source/specifications/recording-installed-packages.rst:189 msgid "The file can be terminated by zero or more ASCII whitespace characters." -msgstr "" +msgstr "该文件末尾可以带有零个或多个 ASCII 空白字符。" #: ../source/specifications/recording-installed-packages.rst:191 msgid "Here are examples of two possible ``INSTALLER`` files::" -msgstr "" +msgstr "下面是两个可能的 ``INSTALLER`` 文件示例::" #: ../source/specifications/recording-installed-packages.rst:199 msgid "" @@ -23268,10 +26944,13 @@ msgid "" "suggest that the tool named in ``INSTALLER`` may be able to do the " "uninstallation." msgstr "" +"此值应该仅用于提供参考信息。例如,如果某个工具被要求卸载一个项目,却找不到 " +"``RECORD`` 文件,那么它可以提示用户:``INSTALLER`` 中命名的工具或许能够完成卸" +"载。" #: ../source/specifications/recording-installed-packages.rst:206 msgid "The entry_points.txt file" -msgstr "" +msgstr "entry_points.txt 文件" #: ../source/specifications/recording-installed-packages.rst:208 msgid "" @@ -23280,28 +26959,32 @@ msgid "" "scripts and other applications that the installer has made available for " "execution." msgstr "" +"安装工具可以创建该文件,用于标明软件包中包含供其他代码发现和使用的组件的情况" +",这些组件包括安装工具已提供、可供执行的控制台脚本和其他应用程序。" #: ../source/specifications/recording-installed-packages.rst:213 msgid "Its detailed specification is at :ref:`entry-points`." -msgstr "" +msgstr "其详细规范见 :ref:`entry-points`。" #: ../source/specifications/recording-installed-packages.rst:217 msgid "The direct_url.json file" -msgstr "" +msgstr "direct_url.json 文件" #: ../source/specifications/recording-installed-packages.rst:219 msgid "" "This file MUST be created by installers when installing a distribution from " "a requirement specifying a direct URL reference (including a VCS URL)." msgstr "" +"当根据指定了直接 URL 引用(包括 VCS URL)的需求安装分发包时,安装工具必须创建" +"该文件。" #: ../source/specifications/recording-installed-packages.rst:225 msgid "Its detailed specification is at :ref:`direct-url`." -msgstr "" +msgstr "其详细规范见 :ref:`direct-url`。" #: ../source/specifications/recording-installed-packages.rst:229 msgid "The :file:`licenses/` subdirectory" -msgstr "" +msgstr ":file:`licenses/` 子目录" #: ../source/specifications/recording-installed-packages.rst:231 msgid "" @@ -23312,6 +26995,11 @@ msgid "" "paths relative to the :file:`licenses/` directory. Any files in this " "directory MUST be copied from wheels by the install tools." msgstr "" +"如果元数据版本为 2.4 或更高,并且指定了一个或多个 ``License-File`` 字段,那" +"么 :file:`.dist-info/` 目录必须包含一个 :file:`licenses/` 子目录,该子目录必" +"须按各自的路径(相对于 :file:`licenses/` 目录)包含 :file:`METADATA` 文件中 " +"``License-File`` 字段所列出的文件。此目录中的任何文件都必须由安装工具从 " +"wheel 中复制。" #: ../source/specifications/recording-installed-packages.rst:240 msgid "The :file:`sboms/` subdirectory" @@ -23324,10 +27012,13 @@ msgid "" "within the installed package. Any files in this directory MUST be copied " "from wheels by the install tools." msgstr "" +":file:`.dist-info/sboms/` 目录中包含的所有文件都必须是软件物料清单(SBOM)文" +"件,用于描述已安装软件包中所含的软件。此目录中的任何文件都必须由安装工具从 " +"wheel 中复制。" #: ../source/specifications/recording-installed-packages.rst:249 msgid "Intentionally preventing changes to installed packages" -msgstr "" +msgstr "有意阻止对已安装软件包的更改" #: ../source/specifications/recording-installed-packages.rst:251 msgid "" @@ -23337,10 +27028,13 @@ msgid "" "not used to uninstall or otherwise modify that installed package, as doing " "so may cause compatibility problems with the wider environment." msgstr "" +"在某些情况下(例如除了 Python 生态系统的依赖项之外还需要管理外部依赖项时)," +"将软件包安装到 Python 环境中的工具最好能够确保其他工具不会被用来卸载或以其他" +"方式修改该已安装的软件包,因为这样做可能会给更广泛的环境带来兼容性问题。" #: ../source/specifications/recording-installed-packages.rst:257 msgid "To achieve this, affected tools should take the following steps:" -msgstr "" +msgstr "为此,受影响的工具应该采取以下步骤:" #: ../source/specifications/recording-installed-packages.rst:259 msgid "" @@ -23349,6 +27043,9 @@ msgid "" "the tool itself needs the information, or omitting the file entirely if the " "package contents are tracked and managed via other means)" msgstr "" +"重命名或删除 ``RECORD`` 文件,以防止通过其他工具进行更改(例如,如果工具本身" +"需要这些信息,可以添加后缀来创建非标准的 ``RECORD.tool`` 文件;如果软件包内容" +"已通过其他方式跟踪和管理,则可以完全省略该文件)" #: ../source/specifications/recording-installed-packages.rst:263 msgid "" @@ -23356,6 +27053,8 @@ msgid "" "used to manage the package (this allows ``RECORD``-aware tools to provide " "better error notices when asked to modify affected packages)" msgstr "" +"写入 ``INSTALLER`` 文件,标明应该用来管理该软件包的工具的名称(这样,能识别 " +"``RECORD`` 的工具在被要求修改受影响的软件包时就能提供更好的错误提示)" #: ../source/specifications/recording-installed-packages.rst:267 msgid "" @@ -23365,6 +27064,9 @@ msgid "" "provided packages (while also ensuring both locations appear on the default " "Python import path)." msgstr "" +"Python 运行时提供者也可以修改默认的 Python 软件包安装方案,改用平台所提供软件" +"包所用位置之外的其他位置(同时确保这两个位置都出现在默认的 Python 导入路径上" +"),以防止平台所提供的软件包被无意修改。" #: ../source/specifications/recording-installed-packages.rst:272 msgid "" @@ -23372,6 +27074,8 @@ msgid "" "additional packages via Python-specific tools. For these cases refer " "to :ref:`externally-managed-environments`" msgstr "" +"在某些情况下,甚至可能需要阻止通过 Python 专用工具安装额外的软件包。对于这些" +"情况,请参见 :ref:`externally-managed-environments`" #: ../source/specifications/recording-installed-packages.rst:280 msgid "" @@ -23379,6 +27083,9 @@ msgid "" "through :pep:`376`. At the time, it was known as the *Database of Installed " "Python Distributions*." msgstr "" +"2009 年 6 月:本规范的最初版本通过 :pep:`376` 获得批准。当时它被称为 " +"*Database of Installed Python Distributions*,即“已安装 Python 分发包数据库”" +"。" #: ../source/specifications/recording-installed-packages.rst:283 msgid "" @@ -23386,12 +27093,14 @@ msgid "" "through :pep:`610`. It is only mentioned on this page; see :ref:`direct-url` " "for the full definition." msgstr "" +"2020 年 3 月:``direct_url.json`` 文件的规范通过 :pep:`610` 获得批准。该文件" +"在此页面中仅被提及;完整定义请参见 :ref:`direct-url`。" #: ../source/specifications/recording-installed-packages.rst:286 msgid "" "September 2020: Various amendments and clarifications were approved " "through :pep:`627`." -msgstr "" +msgstr "2020 年 9 月:多项修正和澄清通过 :pep:`627` 获得批准。" #: ../source/specifications/schemas/index.rst:4 msgid "PyPA schemas" @@ -23399,23 +27108,23 @@ msgstr "PyPA 框架" #: ../source/specifications/schemas/index.rst:6 msgid "`direct_url.json `_" -msgstr "" +msgstr "`direct_url.json `_" #: ../source/specifications/schemas/index.rst:7 msgid "`build-details.json `_" -msgstr "" +msgstr "`build-details.json `_" #: ../source/specifications/schemas/index.rst:8 msgid "`pylock.toml `_" -msgstr "" +msgstr "`pylock.toml `_" #: ../source/specifications/section-distribution-formats.rst:3 msgid "Package Distribution File Formats" -msgstr "" +msgstr "分发包文件格式" #: ../source/specifications/section-distribution-metadata.rst:3 msgid "Package Distribution Metadata" -msgstr "" +msgstr "分发包元数据" #: ../source/specifications/section-installation-metadata.rst:3 msgid "Package Installation Metadata" @@ -23423,7 +27132,7 @@ msgstr "软件包安装元数据" #: ../source/specifications/section-package-indices.rst:3 msgid "Package Index Interfaces" -msgstr "" +msgstr "包索引接口" #: ../source/specifications/section-python-description-formats.rst:3 msgid "Python Description Formats" @@ -23435,7 +27144,7 @@ msgstr "可重复的环境" #: ../source/specifications/simple-repository-api.rst:6 msgid "Simple repository API" -msgstr "" +msgstr "简单仓库 API" #: ../source/specifications/simple-repository-api.rst:8 msgid "" @@ -23444,6 +27153,11 @@ msgid "" "\"**RECOMMENDED**\", \"**MAY**\", and \"**OPTIONAL**\"\" in this document " "are to be interpreted as described in :rfc:`2119`." msgstr "" +"本文档中的 \"**必须(MUST)**\"、\"**不得(MUST NOT)**\"、\"**必需(REQUIRED" +")**\"、\"**必须(SHALL)**\"、\"**不得(SHALL NOT)**\"、\"**应该(SHOULD" +")**\"、\"**不应(SHOULD NOT)**\"、\"**推荐(RECOMMENDED)**\"、\"**可以(" +"MAY)**\" 和 \"**可选(OPTIONAL)**\"\" 等关键字,均应按照 :rfc:`2119` 中的描" +"述进行解释。" #: ../source/specifications/simple-repository-api.rst:13 msgid "" @@ -23451,10 +27165,12 @@ msgid "" "packages from an index server comes in two forms: :ref:`HTML ` and :ref:`JSON `." msgstr "" +"用于查询可用软件包版本并从索引服务器获取软件包的接口有两种形式::ref:`HTML " +"` 和 :ref:`JSON `。" #: ../source/specifications/simple-repository-api.rst:21 msgid "Base API" -msgstr "" +msgstr "基础 API" #: ../source/specifications/simple-repository-api.rst:23 msgid "" @@ -23463,6 +27179,9 @@ msgid "" "the \"simple\" repository due to the fact that PyPI's base URL is ``https://" "pypi.org/simple/``." msgstr "" +"实现简单 API 的存储库由其基础 URL 定义。这个基础 URL 是顶层 URL,所有其他 " +"URL 都位于它之下。由于 PyPI 的基础 URL 是 ``https://pypi.org/simple/``,该 " +"API 便被命名为“简单”存储库。" #: ../source/specifications/simple-repository-api.rst:28 msgid "" @@ -23470,6 +27189,8 @@ msgid "" "given PyPI's URL, a URL of ``/foo/`` would be ``https://pypi.org/simple/foo/" "``." msgstr "" +"本文档中后续的所有 URL 都将相对于该基础 URL(因此,以 PyPI 的 URL 为例,``/" +"foo/`` 这样的 URL 就是 ``https://pypi.org/simple/foo/``。" #: ../source/specifications/simple-repository-api.rst:33 msgid "Normalized Names" @@ -23484,10 +27205,14 @@ msgid "" "characters ``.``, ``-``, or ``_`` replaced with a single ``-`` character. " "This can be implemented in Python with the ``re`` module::" msgstr "" +"本规范引用了“规范化的”项目名称这一概念。根据 :ref:`名称规范化规范 `,名称中唯一有效的字符是 ASCII 字母、ASCII 数字、``.``、``-`` " +"和 ``_``。名称应转换为小写,并将所有连续出现的 ``.``、``-`` 或 ``_`` 字符替换" +"为单个 ``-`` 字符。在 Python 中可以使用 ``re`` 模块实现::" #: ../source/specifications/simple-repository-api.rst:50 msgid "Versioning PyPI's Simple API" -msgstr "" +msgstr "PyPI 简单 API 的版本化" #: ../source/specifications/simple-repository-api.rst:52 msgid "" @@ -23499,14 +27224,18 @@ msgid "" "additional features supported by :ref:`the version specifiers specification " "`." msgstr "" +"本规范提议在针对简单 API 页面的每个成功请求的响应中包含一个 meta 标签,其 " +"name 属性为 ``pypi:repository-version``,content 为一个与 :ref:`版本说明符规" +"范 ` 兼容的版本号,并进一步限定为只能是 Major.Minor,且不" +"得使用 :ref:`版本说明符规范 ` 所支持的任何附加特性。" #: ../source/specifications/simple-repository-api.rst:60 msgid "This would end up looking like:" -msgstr "" +msgstr "最终它看起来会像这样:" #: ../source/specifications/simple-repository-api.rst:66 msgid "When interpreting the repository version:" -msgstr "" +msgstr "在解释存储库版本时:" #: ../source/specifications/simple-repository-api.rst:68 msgid "" @@ -23514,6 +27243,8 @@ msgid "" "change such that existing clients would no longer be expected to be able to " "meaningfully use the API." msgstr "" +"递增主版本号用于表示不向后兼容的更改,此时不应再期望现有客户端能够有意义地使" +"用该 API。" #: ../source/specifications/simple-repository-api.rst:71 msgid "" @@ -23521,6 +27252,8 @@ msgid "" "change such that existing clients would still be expected to be able to " "meaningfully use the API." msgstr "" +"递增次版本号用于表示向后兼容的更改,此时仍应期望现有客户端能够有意义地使用该 " +"API。" #: ../source/specifications/simple-repository-api.rst:75 msgid "" @@ -23530,6 +27263,9 @@ msgid "" "to use the API, and can include adding, modifying, or removing existing " "features." msgstr "" +"至于什么具体构成不向后兼容或向后兼容的更改,本规范仅给出一条宽泛的提示,即现" +"有客户端将能够“有意义地”继续使用该 API;具体界定由未来的规范自行裁量,且更改" +"可以包括新增、修改或移除现有特性。" #: ../source/specifications/simple-repository-api.rst:81 msgid "" @@ -23540,10 +27276,14 @@ msgid "" "lived at /v2/, but which would be confusing if the repository-version was " "set to a version >= 2)." msgstr "" +"本规范的预期是主版本号永远不会递增,未来的任何重大 API 演进都将使用不同的演进" +"机制。不过,之所以包含主版本号,是为了避免与未来版本产生歧义(例如,一个假想" +"的位于 /v2/ 的 simple api v2;但如果 repository-version 被设置为 >= 2 的版本" +",就会造成混淆)。" #: ../source/specifications/simple-repository-api.rst:89 msgid "API Version History" -msgstr "" +msgstr "API 版本历史" #: ../source/specifications/simple-repository-api.rst:91 msgid "" @@ -23551,30 +27291,34 @@ msgid "" "the API version number. For a full history of changes including changes made " "before API versioning, see :ref:`History `." msgstr "" +"本节仅包含以 API 版本号标记的简略变更历史。完整的变更历史(包括引入 API 版本" +"化之前的更改),请参见 :ref:`历史 `。" #: ../source/specifications/simple-repository-api.rst:95 msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." -msgstr "" +msgstr "API 版本 1.0:API 的初始版本,由 :pep:`629` 声明。" #: ../source/specifications/simple-repository-api.rst:96 msgid "" "API version 1.1: Added ``versions``, ``files[].size``, and ``files[].upload-" "time`` metadata to the JSON serialization, declared with :pep:`700`." msgstr "" +"API 版本 1.1:向 JSON 序列化添加了 ``versions``、``files[].size`` 和 " +"``files[].upload-time`` 元数据,由 :pep:`700` 声明。" #: ../source/specifications/simple-repository-api.rst:98 msgid "" "API version 1.2: Added repository \"tracks\" metadata, declared " "with :pep:`708`." -msgstr "" +msgstr "API 版本 1.2:添加了存储库的 “tracks” 元数据,由 :pep:`708` 声明。" #: ../source/specifications/simple-repository-api.rst:99 msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." -msgstr "" +msgstr "API 版本 1.3:添加了来源(provenance)元数据,由 :pep:`740` 声明。" #: ../source/specifications/simple-repository-api.rst:100 msgid "API version 1.4: Added status markers, declared with :pep:`792`." -msgstr "" +msgstr "API 版本 1.4:添加了状态标记,由 :pep:`792` 声明。" #: ../source/specifications/simple-repository-api.rst:103 msgid "Clients" @@ -23586,24 +27330,28 @@ msgid "" "for the repository version, and if that data does not exist **MUST** assume " "that it is version 1.0." msgstr "" +"与简单 API 交互的客户端 **应该** 检查每个响应中的存储库版本,如果该数据不存在" +",则 **必须** 假定其为版本 1.0。" #: ../source/specifications/simple-repository-api.rst:109 msgid "" "When encountering a major version greater than expected, clients **MUST** " "hard fail with an appropriate error message for the user." msgstr "" +"当遇到比预期更高的主版本号时,客户端 **必须** 硬性失败,并向用户显示适当的错" +"误消息。" #: ../source/specifications/simple-repository-api.rst:112 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." -msgstr "" +msgstr "当遇到比预期更高的次版本号时,客户端 **应该** 以适当的消息警告用户。" #: ../source/specifications/simple-repository-api.rst:115 msgid "" "Clients **MAY** still continue to use feature detection in order to " "determine what features a repository uses." -msgstr "" +msgstr "客户端仍 **可以** 继续使用特性检测,以确定存储库使用了哪些特性。" #: ../source/specifications/simple-repository-api.rst:121 msgid "HTML Serialization" @@ -23615,28 +27363,32 @@ msgid "" "updated. Producers and consumers of the simple API should prefer " "the :ref:`JSON representation `." msgstr "" +"HTML 表示被视为“已冻结”,预计不会再更新。简单 API 的生产者和消费者应优先使用 " +":ref:`JSON 表示 `。" #: ../source/specifications/simple-repository-api.rst:131 msgid "" "See :pep:`833` for additional information about the HTML representation's " "status." -msgstr "" +msgstr "关于 HTML 表示状态的更多信息,请参见 :pep:`833`。" #: ../source/specifications/simple-repository-api.rst:134 msgid "" "The following constraints apply to all HTML serialized responses described " "in this spec:" -msgstr "" +msgstr "以下约束适用于本规范中描述的所有 HTML 序列化响应:" #: ../source/specifications/simple-repository-api.rst:137 msgid "All HTML responses **MUST** be a valid HTML5 document." -msgstr "" +msgstr "所有 HTML 响应 **必须** 是有效的 HTML5 文档。" #: ../source/specifications/simple-repository-api.rst:138 msgid "" "HTML responses **MAY** contain one or more ``meta`` tags in the ```` " "section. The semantics of these tags are defined below." msgstr "" +"HTML 响应 **可以** 在 ```` 部分包含一个或多个 ``meta`` 标签。这些标签的" +"语义将在下文定义。" #: ../source/specifications/simple-repository-api.rst:142 #: ../source/specifications/simple-repository-api.rst:437 @@ -23649,6 +27401,8 @@ msgid "" "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository." msgstr "" +"在存储库中,根 URL(在本规范中即代表基础 URL 的 ``/``) **必须** 是一个有效" +"的 HTML5 页面,并为存储库中的每个项目各提供一个锚元素。" #: ../source/specifications/simple-repository-api.rst:148 msgid "" @@ -23656,6 +27410,8 @@ msgid "" "``href`` attribute **MUST** link to the URL for that particular project. As " "an example:" msgstr "" +"每个锚标签的文本 **必须** 是项目名称,且 ``href`` 属性 **必须** 链接到该特定" +"项目的 URL。示例如下:" #: ../source/specifications/simple-repository-api.rst:165 #: ../source/specifications/simple-repository-api.rst:482 @@ -23668,12 +27424,14 @@ msgid "" "within a repository. The format of this URL is ``//``, where the " "```` is replaced by the normalized name for that project." msgstr "" +"在根 URL 之下,存储库中包含的每个项目各有一个 URL。这种 URL 的格式为 ``/" +"/``,其中 ```` 会被替换为该项目的规范化名称。" #: ../source/specifications/simple-repository-api.rst:173 msgid "" "For example, a project named \"HolyGrail\" would have a URL like ``/" "holygrail/``." -msgstr "" +msgstr "例如,名为 “HolyGrail” 的项目的 URL 会类似于 ``/holygrail/``。" #: ../source/specifications/simple-repository-api.rst:176 msgid "" @@ -23683,6 +27441,9 @@ msgid "" "the anchor tag **MUST** match the final path component (the filename) of the " "URL." msgstr "" +"项目详情 URL 必须返回一个有效的 HTML5 页面,为该项目的每个文件各提供一个锚元" +"素。其 ``href`` 属性 **必须** 是链接到该文件下载位置的 URL,且锚标签的文本 " +"**必须** 与 URL 的最终路径组成部分(即文件名)相匹配。" #: ../source/specifications/simple-repository-api.rst:181 msgid "" @@ -23691,11 +27452,14 @@ msgid "" "the lowercase name of the hash function (such as ``sha256``) and " "```` is the hex encoded digest." msgstr "" +"每个文件 URL **应该** 以 URL 片段的形式包含一个哈希值,其语法如下" +":``#=``,其中 ```` 是哈希函数的小写名称(例" +"如 ``sha256``),```` 是十六进制编码的摘要。" #: ../source/specifications/simple-repository-api.rst:186 msgid "" "In addition to the above, the following constraints are placed on the API:" -msgstr "" +msgstr "除上述内容外,该 API 还受以下约束:" #: ../source/specifications/simple-repository-api.rst:188 msgid "" @@ -23703,24 +27467,26 @@ msgid "" "repository **SHOULD** redirect the URLs without a ``/`` to add a ``/`` to " "the end." msgstr "" +"所有以 HTML5 页面响应的 URL **必须** 以 ``/`` 结尾,并且存储库 **应该** 将不" +"带 ``/`` 的 URL 重定向,以在其末尾添加 ``/``。" #: ../source/specifications/simple-repository-api.rst:192 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." -msgstr "" +msgstr "只要指向正确的位置,URL 可以是绝对 URL,也可以是相对 URL。" #: ../source/specifications/simple-repository-api.rst:195 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." -msgstr "" +msgstr "对于文件必须托管在相对于存储库的什么位置,没有任何约束。" #: ../source/specifications/simple-repository-api.rst:198 msgid "" "There may be any other HTML elements on the API pages as long as the " "required anchor elements exist." -msgstr "" +msgstr "只要所需的锚元素存在,API 页面上可以有任何其他 HTML 元素。" #: ../source/specifications/simple-repository-api.rst:201 msgid "" @@ -23728,6 +27494,9 @@ msgid "" "URL (e.g. ``/Foobar/`` may redirect to ``/foobar/``), however clients **MUST " "NOT** rely on this redirection and **MUST** request the normalized URL." msgstr "" +"存储库 **可以** 将未规范化的 URL 重定向到对应的规范化 URL(例如 ``/Foobar/`` " +"可以重定向到 ``/foobar/``),但客户端 **不得** 依赖这种重定向,而 **必须** 请" +"求规范化后的 URL。" #: ../source/specifications/simple-repository-api.rst:206 msgid "" @@ -23736,6 +27505,10 @@ msgid "" "standard library (currently ``md5``, ``sha1``, ``sha224``, ``sha256``, " "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" +"存储库 **应该** 从 Python 标准库中 :py:mod:`hashlib` 模块保证可用的哈希函数中" +"选择一种(目前包括 " +"``md5``、``sha1``、``sha224``、``sha256``、``sha384``、``sha512``)。目前的建" +"议是使用 ``sha256``。" #: ../source/specifications/simple-repository-api.rst:211 msgid "" @@ -23745,12 +27518,15 @@ msgid "" "associated signature, the signature would be located at ``/packages/" "HolyGrail-1.0.tar.gz.asc``." msgstr "" +"如果某个分发文件存在 GPG 签名,该签名 **必须** 与该文件位于同一位置,名称为在" +"原文件名后追加 ``.asc``。因此,如果文件 ``/packages/HolyGrail-1.0.tar.gz`` 存" +"在且有关联的签名,则该签名将位于 ``/packages/HolyGrail-1.0.tar.gz.asc``。" #: ../source/specifications/simple-repository-api.rst:217 msgid "" "A repository **MAY** include a ``data-core-metadata`` attribute on a file " "link." -msgstr "" +msgstr "存储库 **可以** 在文件链接上包含 ``data-core-metadata`` 属性。" #: ../source/specifications/simple-repository-api.rst:220 msgid "" @@ -23761,24 +27537,32 @@ msgid "" "repository **MAY** use ``true`` as the attribute's value if a hash is " "unavailable." msgstr "" +"存储库 **应该** 以 ``=`` 语法提供 Core Metadata 文件的哈" +"希值,作为 ``data-core-metadata`` 属性的值,其中 ```` 是所用哈希函" +"数的小写名称,```` 是十六进制编码的摘要。如果哈希值不可用,存储库 " +"**可以** 使用 ``true`` 作为该属性的值。" #: ../source/specifications/simple-repository-api.rst:226 msgid "" "A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " "file link." -msgstr "" +msgstr "存储库 **可以** 在文件链接上包含 ``data-dist-info-metadata`` 属性。" #: ../source/specifications/simple-repository-api.rst:229 msgid "" "Index clients **MAY** consume this key if present, as a legacy fallback for " "``data-core-metadata``." msgstr "" +"索引客户端 **可以** 在该键存在时使用它,作为 ``data-core-metadata`` 的旧式回" +"退。" #: ../source/specifications/simple-repository-api.rst:234 msgid "" "``data-dist-info-metadata`` was standardized with :pep:`658` and renamed to " "``data-core-metadata`` with :pep:`714`." msgstr "" +"``data-dist-info-metadata`` 在 :pep:`658` 中被标准化,并在 :pep:`714` 中更名" +"为 ``data-core-metadata``。" #: ../source/specifications/simple-repository-api.rst:237 msgid "" @@ -23787,6 +27571,9 @@ msgid "" "there is a GPG signature. Repositories that do this **SHOULD** include it on " "every link." msgstr "" +"存储库 **可以** 在文件链接上包含 ``data-gpg-sig`` 属性,其值为 ``true`` 或 " +"``false``,用于指示是否存在 GPG 签名。这样做的存储库 **应该** 在每个链接上都" +"包含该属性。" #: ../source/specifications/simple-repository-api.rst:241 msgid "" @@ -23796,17 +27583,20 @@ msgid "" "**SHOULD** ignore the download when installing to a Python version that " "doesn't satisfy the requirement. For example:" msgstr "" +"存储库 **可以** 在文件链接上包含 ``data-requires-python`` 属性。它会公开相应" +"发布版本的 :ref:`core-metadata-requires-python` 元数据字段。如果存在该属性," +"在安装到不满足该要求的 Python 版本时,安装工具 **应该** 忽略该下载。例如:" #: ../source/specifications/simple-repository-api.rst:251 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." -msgstr "" +msgstr "在属性值中,< 和 > 必须分别进行 HTML 编码,即 ``<`` 和 ``>``。" #: ../source/specifications/simple-repository-api.rst:254 msgid "" "A repository **MAY** include a ``data-yanked`` attribute on a file link." -msgstr "" +msgstr "存储库 **可以** 在文件链接上包含 ``data-yanked`` 属性。" #: ../source/specifications/simple-repository-api.rst:256 msgid "" @@ -23816,19 +27606,24 @@ msgid "" "has been \"Yanked\", and should not generally be selected by an installer, " "except under specific scenarios." msgstr "" +"``data-yanked`` 属性可以没有值,也可以以任意字符串作为值。``data-yanked`` 属" +"性的存在 **应该** 被解释为表示该链接所指向的文件已被“撤回”(Yanked),安装工" +"具通常不应选择该文件,除非在特定场景下。" #: ../source/specifications/simple-repository-api.rst:262 msgid "" "The value of the ``data-yanked`` attribute, if present, is an arbitrary " "string that represents the reason for why the file has been yanked." msgstr "" +"``data-yanked`` 属性的值(如果存在)是一个任意字符串,表示该文件被撤回的原因" +"。" #: ../source/specifications/simple-repository-api.rst:267 #: ../source/specifications/simple-repository-api.rst:612 msgid "" "The semantics of how tools should handle yanked files is described " "in :ref:`file-yanking`." -msgstr "" +msgstr "工具应如何处理被撤回文件的语义在 :ref:`file-yanking` 中描述。" #: ../source/specifications/simple-repository-api.rst:270 msgid "" @@ -23838,22 +27633,28 @@ msgid "" "represent a `secure origin `_." msgstr "" +"存储库 **可以** 在文件链接上包含 ``data-provenance`` 属性。该属性的值 **必" +"须** 是一个完全限定的 URL,表明该文件的来源可以在该 URL 找到。该 URL **必" +"须** 代表一个 `安全来源 `_。" #: ../source/specifications/simple-repository-api.rst:277 msgid "The ``data-provenance`` attribute was added with API version 1.3." -msgstr "" +msgstr "``data-provenance`` 属性是在 API 版本 1.3 中添加的。" #: ../source/specifications/simple-repository-api.rst:281 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." -msgstr "" +msgstr "所链接来源的格式在 :ref:`index-hosted-attestations` 中定义。" #: ../source/specifications/simple-repository-api.rst:283 msgid "" "A repository **MAY** include ``pypi:project-status`` and ``pypi:project-" "status-reason`` meta tags on the response itself." msgstr "" +"存储库 **可以** 在响应本身中包含 ``pypi:project-status`` 和 ``pypi:project-" +"status-reason`` meta 标签。" #: ../source/specifications/simple-repository-api.rst:286 msgid "" @@ -23861,23 +27662,27 @@ msgid "" "marker, while the value of ``pypi:project-status-reason`` **MUST** be an " "arbitrary string if present." msgstr "" +"``pypi:project-status`` 的值 **必须** 是有效的项目状态标记,而 " +"``pypi:project-status-reason`` 的值若存在,则 **必须** 是任意字符串。" #: ../source/specifications/simple-repository-api.rst:292 #: ../source/specifications/simple-repository-api.rst:498 msgid "" "The set of valid project status markers and their semantics is described " "in :ref:`project-status-markers`." -msgstr "" +msgstr "有效项目状态标记的集合及其语义在 :ref:`project-status-markers` 中描述。" #: ../source/specifications/simple-repository-api.rst:297 msgid "" "The ``pypi:project-status`` and ``pypi:project-status-reason`` meta tags " "were added with API version 1.4." msgstr "" +"``pypi:project-status`` 和 ``pypi:project-status-reason`` meta 标签是在 API " +"版本 1.4 中添加的。" #: ../source/specifications/simple-repository-api.rst:303 msgid "Serve Distribution Metadata in the Simple Repository API" -msgstr "" +msgstr "在简单存储库 API 中提供分发元数据" #: ../source/specifications/simple-repository-api.rst:305 msgid "" @@ -23887,6 +27692,9 @@ msgid "" "anchor tag **MUST** contain a Core Metadata file that will not be modified " "when the distribution is processed and/or installed." msgstr "" +"在简单存储库的项目页面中,每个指向分发包的锚标签 **可以** 带有 ``data-dist-" +"info-metadata`` 属性。该属性的存在表明该锚标签所表示的分发包 **必须** 包含一" +"个 Core Metadata 文件,且该文件在分发包被处理和/或安装时不会被修改。" #: ../source/specifications/simple-repository-api.rst:311 msgid "" @@ -23899,6 +27707,12 @@ msgid "" "how :ref:`the base HTML API specification ` " "specifies the GPG signature file's location." msgstr "" +"如果存在 ``data-dist-info-metadata`` 属性,存储库 **必须** 在提供分发包的同时" +"提供该分发包的 Core Metadata 文件,其文件名是在分发包的文件名后追加 " +"``.metadata``。例如,位于 ``/files/distribution-1.0-py3.none.any.whl`` 的分发" +"包,其 Core Metadata 将位于 ``/files/distribution-1.0-" +"py3.none.any.whl.metadata``。这类似于 :ref:`基础 HTML API 规范 ` 指定 GPG 签名文件位置的方式。" #: ../source/specifications/simple-repository-api.rst:320 msgid "" @@ -23909,10 +27723,14 @@ msgid "" "repository **MAY** use ``true`` as the attribute's value if a hash is " "unavailable." msgstr "" +"存储库 **应该** 使用 ``=`` 语法,将 Core Metadata 文件的" +"哈希值作为 ``data-dist-info-metadata`` 属性的值提供,其中 ```` 是所" +"用哈希函数的小写名称,```` 是十六进制编码的摘要。如果哈希值不可用" +",存储库 **可以** 使用 ``true`` 作为该属性的值。" #: ../source/specifications/simple-repository-api.rst:328 msgid "Backwards Compatibility" -msgstr "" +msgstr "向后兼容性" #: ../source/specifications/simple-repository-api.rst:330 msgid "" @@ -23920,6 +27738,8 @@ msgid "" "expected to revert to their current behaviour of downloading the " "distribution to inspect the metadata." msgstr "" +"如果锚标签缺少 ``data-dist-info-metadata`` 属性,工具应回退到其现有行为,即下" +"载分发包以检查元数据。" #: ../source/specifications/simple-repository-api.rst:334 msgid "" @@ -23928,10 +27748,13 @@ msgid "" "downloading the distribution to inspect the metadata. This is similar to how " "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" +"不支持新 ``data-dist-info-metadata`` 属性的旧工具应忽略该属性,并保持其现有行" +"为,即下载分发包以检查元数据。这类似于以往添加 ``data-`` 属性时对现有工具运作" +"方式的预期。" #: ../source/specifications/simple-repository-api.rst:343 msgid "JSON-based Simple API for Python Package Indexes" -msgstr "" +msgstr "用于 Python 包索引的基于 JSON 的简单 API" #: ../source/specifications/simple-repository-api.rst:345 msgid "" @@ -23940,6 +27763,9 @@ msgid "" "responses from :ref:`the base HTML API specification `) should be serialized using `JSON `_." msgstr "" +"为了能够只使用标准库来解析响应,本规范规定,所有响应(文件本身以及来自 " +":ref:`基础 HTML API 规范 ` 的 HTML 响应除外)都应" +"使用 `JSON `_ 进行序列化。" #: ../source/specifications/simple-repository-api.rst:350 msgid "" @@ -23950,6 +27776,10 @@ msgid "" "negotiation to allow client and server to select the correct serialization " "format to serve, i.e. either HTML or JSON." msgstr "" +"为了实现零配置发现并尽量减少额外 HTTP 请求的数量,本规范对 :ref:`基础 HTML " +"API 规范 ` 进行了扩展,使所有 API 端点(文件本身" +"除外)都将利用 HTTP 内容协商,允许客户端和服务器选择要提供的正确序列化格式," +"即 HTML 或 JSON。" #: ../source/specifications/simple-repository-api.rst:360 msgid "" @@ -23960,6 +27790,10 @@ msgid "" "format for the existing features, this spec does not change the existing " "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" +"版本化将遵循 :ref:`API 版本化规范 ` 的格式" +"(``Major.Minor``),该规范已将现有的 HTML 响应定义为 ``1.0``。由于本规范并未" +"向 API 引入新特性,而只是为现有特性描述了一种不同的序列化格式,因此本规范不更" +"改现有的 ``1.0`` 版本,而只是描述如何将其序列化为 JSON。" #: ../source/specifications/simple-repository-api.rst:367 msgid "" @@ -23968,6 +27802,9 @@ msgid "" "changes to the new format would result in no longer being able to expect " "existing clients to meaningfully understand the format." msgstr "" +"与 :ref:`API 版本化规范 ` 类似,如果对新格" +"式的任何更改会导致无法再期望现有客户端有意义地理解该格式,则 **必须** 递增主" +"版本号。" #: ../source/specifications/simple-repository-api.rst:373 msgid "" @@ -23975,6 +27812,8 @@ msgid "" "removed from the format, but existing clients would be expected to continue " "to meaningfully understand the format." msgstr "" +"同样,如果向格式中添加或从中移除了特性,但仍应期望现有客户端能够继续有意义地" +"理解该格式,则 **必须** 递增次版本号。" #: ../source/specifications/simple-repository-api.rst:377 msgid "" @@ -23982,6 +27821,8 @@ msgid "" "meaningfully understand the format and which do not represent features being " "added or removed may occur without changing the version number." msgstr "" +"不会导致现有客户端无法有意义地理解该格式、也不属于添加或移除特性的更改,可以" +"在不更改版本号的情况下进行。" #: ../source/specifications/simple-repository-api.rst:381 msgid "" @@ -23989,6 +27830,8 @@ msgid "" "future specs that make any changes to the API to investigate and decide " "whether or not that change should increment the major or minor version." msgstr "" +"这里有意写得含糊,因为本规范认为,这最好留给未来对 API 做出任何更改的规范去调" +"查研究,并决定该更改是否应递增主版本号或次版本号。" #: ../source/specifications/simple-repository-api.rst:385 msgid "" @@ -23998,6 +27841,9 @@ msgid "" "specifics of how a feature serializes into each format may differ, including " "whether or not that feature is present at all." msgstr "" +"API 的未来版本可能会添加一些只能在该版本可用序列化格式的一个子集中表示的内容" +"。在同一个主版本内,所有序列化格式的版本号 **应该** 保持同步,但特性序列化到" +"每种格式时的具体细节可能有所不同,包括该特性是否真的存在。" #: ../source/specifications/simple-repository-api.rst:391 msgid "" @@ -24005,6 +27851,8 @@ msgid "" "endpoints that return data, whose interpretation is defined by the version " "of that data, and then serialized into the target serialization format." msgstr "" +"本规范的意图是,应当把 API 看作返回数据的 URL 端点,数据的解释由该数据的版本" +"定义,然后再被序列化为目标序列化格式。" #: ../source/specifications/simple-repository-api.rst:399 msgid "JSON Serialization" @@ -24016,18 +27864,20 @@ msgid "" "repository-html-serialization>` still applies, as this spec only adds an " "additional serialization format for the already existing API." msgstr "" +"来自 :ref:`基础 HTML API 规范 ` 的 URL " +"结构仍然适用,因为本规范只是为已有的 API 添加了一种额外的序列化格式。" #: ../source/specifications/simple-repository-api.rst:405 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" -msgstr "" +msgstr "以下约束适用于本规范中描述的所有 JSON 序列化响应:" #: ../source/specifications/simple-repository-api.rst:408 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." -msgstr "" +msgstr "所有 JSON 响应将 *始终* 是一个 JSON 对象,而不是数组或其他类型。" #: ../source/specifications/simple-repository-api.rst:411 msgid "" @@ -24036,18 +27886,25 @@ msgid "" "the correct location. If relative, they are relative to the current URL as " "if it were HTML." msgstr "" +"虽然 JSON 原生并不支持 URL 类型,但本 API 中任何表示 URL 的值都可以是绝对或相" +"对的,只要它们指向正确的位置即可。如果为相对 URL,则它们相对于当前 URL,如同" +"当前 URL 是 HTML 一样。" #: ../source/specifications/simple-repository-api.rst:416 msgid "" "Additional keys may be added to any dictionary objects in the API responses " "and clients **MUST** ignore keys that they don't understand." msgstr "" +"可以向 API 响应中的任何字典对象添加额外的键,客户端 **必须** 忽略其不理解的键" +"。" #: ../source/specifications/simple-repository-api.rst:419 msgid "" "All JSON responses will have a ``meta`` key, which contains information " "related to the response itself, rather than the content of the response." msgstr "" +"所有 JSON 响应都将包含一个 ``meta`` 键,其中包含与响应本身相关的信息,而不是" +"响应的内容。" #: ../source/specifications/simple-repository-api.rst:422 msgid "" @@ -24057,37 +27914,47 @@ msgid "" "fail/warn semantics as defined in :ref:`the API versioning specification " "`." msgstr "" +"所有 JSON 响应都将包含一个 ``meta.api-version`` 键,其值为一个字符串,包含 " +":ref:`API 版本化规范 ` 的 ``Major.Minor`` " +"版本号,并具有与 :ref:`API 版本化规范 ` 中" +"所定义的相同的失败/警告语义。" #: ../source/specifications/simple-repository-api.rst:428 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" +":ref:`基础 HTML API 规范 ` 中所有非 HTML 特定的要" +"求仍然适用。" #: ../source/specifications/simple-repository-api.rst:431 msgid "" "Keys (at any level) with a leading underscore are reserved as private for " "index server use. No future standard will assign a meaning to any such key." msgstr "" +"带有前导下划线的键(无论处于哪个层级)都保留为私有,供索引服务器使用。未来的" +"任何标准都不会为此类键赋予任何含义。" #: ../source/specifications/simple-repository-api.rst:439 msgid "" "The root URL ``/`` for this spec (which represents the base URL) will be a " "JSON encoded dictionary which has a two keys:" -msgstr "" +msgstr "本规范的根 URL ``/`` 即代表基础 URL,它将是一个 JSON 编码的字典,具有两个键:" #: ../source/specifications/simple-repository-api.rst:442 msgid "" "``projects``: An array where each entry is a dictionary with a single key, " "``name``, which represents string of the project name." msgstr "" +"``projects``:一个数组,其中每个条目都是一个仅含单个键 ``name`` 的字典,该键" +"表示项目名称字符串。" #: ../source/specifications/simple-repository-api.rst:443 #: ../source/specifications/simple-repository-api.rst:517 msgid "" "``meta``: The general response metadata as `described earlier `__." -msgstr "" +msgstr "``meta``:常规的响应元数据,如 `前文所述 `__。" #: ../source/specifications/simple-repository-api.rst:445 #: ../source/specifications/simple-repository-api.rst:643 @@ -24103,6 +27970,10 @@ msgid "" "relying on it being either non-normalized or normalized is relying on an " "implementation detail of the repository in question." msgstr "" +"``name`` 字段与 :ref:`基础 HTML API 规范 ` 中的相" +"同,该规范并未指定它是未规范化的显示名称还是规范化名称。在实践中,这些规范的" +"不同实现在这一点上的选择各不相同,因此依赖它是未规范化或规范化的名称,就是在" +"依赖相关存储库的实现细节。" #: ../source/specifications/simple-repository-api.rst:472 msgid "" @@ -24113,6 +27984,10 @@ msgid "" "best thought of as a set, but both JSON and HTML lack the functionality to " "have sets." msgstr "" +"虽然 ``projects`` 键是一个数组,因此必定以某种顺序排列,但 :ref:`基础 HTML " +"API 规范 ` 和本规范都既不要求任何特定顺序,也不要" +"求顺序在不同请求之间保持一致。在概念上,最好将其视为一个集合,但 JSON 和 " +"HTML 都缺乏表示集合的功能。" #: ../source/specifications/simple-repository-api.rst:484 msgid "" @@ -24121,46 +27996,49 @@ msgid "" "base>` normalized name for that project, so a project named \"Silly_Walk\" " "would have a URL like ``/silly-walk/``." msgstr "" +"这种 URL 的格式为 ``//``,其中 ```` 会被替换为该项目的 " +":ref:`基础 HTML API 规范 ` 规范化名称,因此名为 “" +"Silly_Walk” 的项目的 URL 会类似于 ``/silly-walk/``。" #: ../source/specifications/simple-repository-api.rst:489 msgid "" "This URL must respond with a JSON encoded dictionary that has five keys:" -msgstr "" +msgstr "该 URL 必须返回一个 JSON 编码的字典,其中包含五个键:" #: ../source/specifications/simple-repository-api.rst:491 msgid "``name``: The normalized name of the project." -msgstr "" +msgstr "``name``:项目的规范化名称。" #: ../source/specifications/simple-repository-api.rst:492 msgid "``project-status``: An optional dictionary, containing the following:" -msgstr "" +msgstr "``project-status``:一个可选的字典,包含以下内容:" #: ../source/specifications/simple-repository-api.rst:494 msgid "``status``: If present, this **MUST** be a valid project status marker." -msgstr "" +msgstr "``status``:若存在,其值 **必须** 是一个有效的项目状态标记。" #: ../source/specifications/simple-repository-api.rst:503 msgid "The ``status`` key was added with API version 1.4." -msgstr "" +msgstr "``status`` 键是在 API 版本 1.4 中添加的。" #: ../source/specifications/simple-repository-api.rst:505 msgid "" "``reason``: If present, this **MUST** be an arbitrary string description of " "the project status." -msgstr "" +msgstr "``reason``:若存在,其值 **必须** 是对项目状态的任意字符串描述。" #: ../source/specifications/simple-repository-api.rst:510 msgid "The ``reason`` key was added with API version 1.4." -msgstr "" +msgstr "``reason`` 键是在 API 版本 1.4 中添加的。" #: ../source/specifications/simple-repository-api.rst:514 msgid "The ``project-status`` key was added with API version 1.4." -msgstr "" +msgstr "``project-status`` 键是在 API 版本 1.4 中添加的。" #: ../source/specifications/simple-repository-api.rst:516 msgid "" "``files``: A list of dictionaries, each one representing an individual file." -msgstr "" +msgstr "``files``:一个字典列表,每个字典表示一个单独的文件。" #: ../source/specifications/simple-repository-api.rst:518 msgid "" @@ -24169,6 +28047,9 @@ msgid "" "set, and as such may not contain duplicates, and the order of the versions " "is not significant." msgstr "" +"``versions``:一个版本字符串列表,列出了为该项目上传的所有项目版本" +"。``versions`` 的值在逻辑上是一个集合,因此不得包含重复项,且版本的顺序无关紧" +"要。" #: ../source/specifications/simple-repository-api.rst:525 msgid "" @@ -24177,6 +28058,9 @@ msgid "" "versions with no associated files (to represent versions with no files " "uploaded, if the server has such a concept)." msgstr "" +"``files`` 键中列出的所有文件必须与 ``versions`` 键中的某个版本相关联" +"。``versions`` 键可以包含没有任何关联文件的版本(用于表示没有上传文件的版本," +"如果服务器有这种概念的话)。" #: ../source/specifications/simple-repository-api.rst:532 msgid "" @@ -24186,22 +28070,25 @@ msgid "" "therefore cannot be assumed to be orderable using the VSS rules. However, " "servers **SHOULD** use normalized VSS versions where possible." msgstr "" +"由于服务器可能持有采用 :ref:`版本说明符规范(VSS) ` 之前" +"的“遗留”数据,目前无法要求版本字符串必须是有效的 VSS 版本,因此也不能假定可以" +"按照 VSS 规则对它们排序。不过,服务器 **应该** 尽可能使用规范化的 VSS 版本。" #: ../source/specifications/simple-repository-api.rst:540 msgid "The ``versions`` key was added with API version 1.1." -msgstr "" +msgstr "``versions`` 键是在 API 版本 1.1 中添加的。" #: ../source/specifications/simple-repository-api.rst:542 msgid "Each individual file dictionary has the following keys:" -msgstr "" +msgstr "每个单独的文件字典具有以下键:" #: ../source/specifications/simple-repository-api.rst:544 msgid "``filename``: The filename that is being represented." -msgstr "" +msgstr "``filename``:所表示的文件名。" #: ../source/specifications/simple-repository-api.rst:545 msgid "``url``: The URL that the file can be fetched from." -msgstr "" +msgstr "``url``:可从中获取该文件的 URL。" #: ../source/specifications/simple-repository-api.rst:546 msgid "" @@ -24211,6 +28098,9 @@ msgid "" "them, or nothing at all). These hash names **SHOULD** always be normalized " "to be lowercase." msgstr "" +"``hashes``:一个字典,将哈希名称映射到该文件的十六进制编码摘要。可以包含多个" +"哈希值,由客户端决定如何处理多个哈希值(可以校验其中的全部或一部分,也可以完" +"全不校验)。这些哈希名称 **应该** 始终规范化为小写。" #: ../source/specifications/simple-repository-api.rst:551 msgid "" @@ -24218,6 +28108,8 @@ msgid "" "available for the file, however it is **HIGHLY** recommended that at least " "one secure, guaranteed-to-be-available hash is always included." msgstr "" +"``hashes`` 字典 **必须** 存在,即使该文件没有可用的哈希值也是如此;不过,**强" +"烈** 建议始终包含至少一个安全的、保证可用的哈希值。" #: ../source/specifications/simple-repository-api.rst:555 msgid "" @@ -24228,6 +28120,10 @@ msgid "" "**SHOULD** always be included. At the time of this spec, ``sha256`` " "specifically is recommended." msgstr "" +"默认情况下,任何可通过 :py:mod:`hashlib` 获取的哈希算法(特别是可传递给 " +":py:func:`hashlib.new()` 且不需要额外参数的那些算法)都可以用作哈希字典的键。" +"来自 :py:data:`hashlib.algorithms_guaranteed` 的至少一种安全算法 **应该** 始" +"终被包含。在本规范撰写之时,具体推荐使用 ``sha256``。" #: ../source/specifications/simple-repository-api.rst:560 msgid "" @@ -24236,6 +28132,9 @@ msgid "" "tools **SHOULD** ignore the download when installing to a Python version " "that doesn't satisfy the requirement." msgstr "" +"``requires-python``:一个 **可选** 键,公开 :ref:`core-metadata-requires-" +"python` 元数据字段。若存在该键,在安装到不满足该要求的 Python 版本时,安装工" +"具 **应该** 忽略该下载。" #: ../source/specifications/simple-repository-api.rst:566 msgid "" @@ -24243,6 +28142,9 @@ msgid "" "`, the ``requires-python`` key does not require " "any special escaping other than anything JSON does naturally." msgstr "" +"与 :ref:`基础 HTML API 规范 ` 中的 ``data-" +"requires-python`` 不同,``requires-python`` 键不需要任何特殊转义,JSON 本身自" +"然要求的转义除外。" #: ../source/specifications/simple-repository-api.rst:569 msgid "" @@ -24253,6 +28155,11 @@ msgid "" "boolean to indicate if the file has an associated metadata file, or a " "dictionary mapping hash names to a hex encoded digest of the metadata's hash." msgstr "" +"``core-metadata``:一个 **可选** 键,表示该文件的元数据可用,其位置与 " +":ref:`API 元数据文件规范 ` 中指定的相同" +"(``{file_url}.metadata``)。若存在该键,其值 **必须** 是一个布尔值(表示该文" +"件是否有关联的元数据文件),或是一个将哈希名称映射到元数据哈希的十六进制编码" +"摘要的字典。" #: ../source/specifications/simple-repository-api.rst:577 msgid "" @@ -24260,6 +28167,8 @@ msgid "" "requirements and recommendations as the ``hashes`` key hold true for this " "key as well." msgstr "" +"当该值是哈希字典而不是布尔值时,所有与 ``hashes`` 键相同的要求和推荐同样适用" +"于该键。" #: ../source/specifications/simple-repository-api.rst:581 msgid "" @@ -24267,30 +28176,34 @@ msgid "" "key value is truthy, then the metadata file is present, and if it is falsey " "then it is not." msgstr "" +"如果缺少该键,则元数据文件可能存在,也可能不存在。如果该键的值为真值,则元数" +"据文件存在;如果为假值,则不存在。" #: ../source/specifications/simple-repository-api.rst:585 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." -msgstr "" +msgstr "建议服务器在可能的情况下提供元数据文件的哈希值。" #: ../source/specifications/simple-repository-api.rst:588 msgid "" "``dist-info-metadata``: An **optional**, deprecated alias for ``core-" "metadata``." -msgstr "" +msgstr "``dist-info-metadata``:一个 **可选**、已弃用的 ``core-metadata`` 别名。" #: ../source/specifications/simple-repository-api.rst:590 msgid "" "Index clients **MAY** consume this key if present, as a legacy fallback for " "``core-metadata``." -msgstr "" +msgstr "索引客户端 **可以** 在该键存在时使用它,作为 ``core-metadata`` 的旧式回退。" #: ../source/specifications/simple-repository-api.rst:595 msgid "" "``dist-info-metadata`` was standardized with :pep:`658` and renamed to " "``core-metadata`` with :pep:`714`." msgstr "" +"``dist-info-metadata`` 在 :pep:`658` 中被标准化,并在 :pep:`714` 中更名为 " +"``core-metadata``。" #: ../source/specifications/simple-repository-api.rst:598 msgid "" @@ -24300,6 +28213,9 @@ msgid "" "repository-api-base>` (``{file_url}.asc``). If this key does not exist, then " "the signature may or may not exist." msgstr "" +"``gpg-sig``:一个 **可选** 键,充当布尔值,指示该文件是否有关联的 GPG 签名。" +"签名文件的 URL 遵循 :ref:`基础 HTML API 规范 ` 中" +"的规定(``{file_url}.asc``)。如果该键不存在,则签名可能存在,也可能不存在。" #: ../source/specifications/simple-repository-api.rst:604 msgid "" @@ -24310,16 +28226,22 @@ msgid "" "interpreted as indicating that the file pointed to by the ``url`` field has " "been \"Yanked\"." msgstr "" +"``yanked``:一个 **可选** 键,其值可以是布尔值,指示该文件是否已被撤回;也可" +"以是非空但内容任意的字符串,指示该文件已因特定原因被撤回。如果 ``yanked`` 键" +"存在且为真值,则 **应该** 将其解释为表示 ``url`` 字段所指向的文件已被“撤回”(" +"Yanked)。" #: ../source/specifications/simple-repository-api.rst:615 msgid "" "``size``: A **mandatory** key. It **MUST** contain an integer which is the " "file size in bytes." msgstr "" +"``size``:一个 **必需** 键。它 **必须** 包含一个整数,即以字节为单位的文件大" +"小。" #: ../source/specifications/simple-repository-api.rst:619 msgid "The ``size`` key was added with API version 1.1." -msgstr "" +msgstr "``size`` 键是在 API 版本 1.1 中添加的。" #: ../source/specifications/simple-repository-api.rst:621 msgid "" @@ -24328,6 +28250,9 @@ msgid "" "ddThh:mm:ss.ffffffZ`` which represents the time the file was uploaded to the " "index." msgstr "" +"``upload-time``:一个 **可选** 键,若存在,则 **必须** 包含有效的 ISO 8601 日" +"期/时间字符串,格式为 ``yyyy-mm-ddThh:mm:ss.ffffffZ``,表示该文件上传到索引的" +"时间。" #: ../source/specifications/simple-repository-api.rst:625 msgid "" @@ -24337,10 +28262,13 @@ msgid "" "If a server does not record upload time information for a file, it **MAY** " "omit the ``upload-time`` key." msgstr "" +"如 ``Z`` 后缀所示,上传时间 **必须** 使用 UTC 时区。时间戳的小数秒部分" +"(``.ffffff`` 部分)是可选的,如果存在,最多可包含 6 位精度。如果服务器没有记" +"录某个文件的上传时间信息,则 **可以** 省略 ``upload-time`` 键。" #: ../source/specifications/simple-repository-api.rst:632 msgid "The ``upload-time`` key was added with API version 1.1." -msgstr "" +msgstr "``upload-time`` 键是在 API 版本 1.1 中添加的。" #: ../source/specifications/simple-repository-api.rst:634 msgid "" @@ -24349,10 +28277,14 @@ msgid "" "associated provenance, with the same rules as ``data-provenance`` in " "the :ref:`base HTML API specification `." msgstr "" +"``provenance``:一个 **可选** 键,若存在,则 **必须** 是 JSON 字符串或 " +"``null``。如果不为 ``null``,它 **必须** 是指向该文件关联来源(provenance)" +"的 URL,规则与 :ref:`基础 HTML API 规范 ` 中的 " +"``data-provenance`` 相同。" #: ../source/specifications/simple-repository-api.rst:641 msgid "The ``provenance`` field was added with API version 1.3." -msgstr "" +msgstr "``provenance`` 字段是在 API 版本 1.3 中添加的。" #: ../source/specifications/simple-repository-api.rst:679 msgid "" @@ -24363,6 +28295,10 @@ msgid "" "best thought of as a set, but both JSON and HTML lack the functionality to " "have sets." msgstr "" +"虽然 ``files`` 键是一个数组,因此必定以某种顺序排列,但 :ref:`基础 HTML API " +"规范 ` 和本规范都既不要求任何特定顺序,也不要求顺" +"序在不同请求之间保持一致。在概念上,最好将其视为一个集合,但 JSON 和 HTML 都" +"缺乏集合功能。" #: ../source/specifications/simple-repository-api.rst:688 msgid "Content-Types" @@ -24375,10 +28311,12 @@ msgid "" "response), what version of the API it represents, and what serialization " "format has been used." msgstr "" +"本规范提议,来自简单 API 的所有响应都将具有一个标准内容类型,用于描述该响应是" +"什么(一个简单 API 响应)、它代表哪个 API 版本,以及使用了哪种序列化格式。" #: ../source/specifications/simple-repository-api.rst:694 msgid "The structure of this content type will be:" -msgstr "" +msgstr "这种内容类型的结构为:" #: ../source/specifications/simple-repository-api.rst:700 msgid "" @@ -24387,18 +28325,20 @@ msgid "" "included in the content type, and will be prefixed with a ``v`` to clarify " "that it is a version number." msgstr "" +"由于预期只有主版本号才会对试图理解这些 API 响应的客户端造成破坏性影响,因此内" +"容类型中将只包含主版本号,并为其加上 ``v`` 前缀以表明这是一个版本号。" #: ../source/specifications/simple-repository-api.rst:705 msgid "Which means that for the existing 1.0 API, the content types would be:" -msgstr "" +msgstr "这意味着,对于现有的 1.0 API,内容类型将是:" #: ../source/specifications/simple-repository-api.rst:707 msgid "**JSON:** ``application/vnd.pypi.simple.v1+json``" -msgstr "" +msgstr "**JSON:** ``application/vnd.pypi.simple.v1+json``" #: ../source/specifications/simple-repository-api.rst:708 msgid "**HTML:** ``application/vnd.pypi.simple.v1+html``" -msgstr "" +msgstr "**HTML:** ``application/vnd.pypi.simple.v1+html``" #: ../source/specifications/simple-repository-api.rst:710 msgid "" @@ -24408,6 +28348,9 @@ msgid "" "recommended however, that clients be explicit about what versions they " "support." msgstr "" +"除上述内容外,还支持一个名为 ``latest`` 的特殊“meta”版本,其目的是让客户端无" +"需事先知道最新版本是什么,就能请求绝对最新的版本。不过,建议客户端明确表明自" +"己支持哪些版本。" #: ../source/specifications/simple-repository-api.rst:715 msgid "" @@ -24416,6 +28359,9 @@ msgid "" "``text/html`` content type, this spec further defines ``text/html`` as an " "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" +"为了支持那些期望现有 :ref:`基础 HTML API 规范 ` " +"的 API 响应使用 ``text/html`` 内容类型的现有客户端,本规范进一步将 ``text/" +"html`` 定义为 ``application/vnd.pypi.simple.v1+html`` 内容类型的别名。" #: ../source/specifications/simple-repository-api.rst:722 msgid "Version + Format Selection" @@ -24429,6 +28375,9 @@ msgid "" "version to the API can be added without disrupting existing clients " "expecting the previous API version." msgstr "" +"现在有了多种可能的序列化格式,我们需要一种机制来允许客户端指明自己能够理解哪" +"些序列化格式。此外,如果任何新的 API 主版本都能在不干扰期望先前 API 版本的现" +"有客户端的情况下加入,也将是有益的。" #: ../source/specifications/simple-repository-api.rst:729 msgid "" @@ -24436,18 +28385,23 @@ msgid "" "Content Negotiation `_." msgstr "" +"为了实现这一点,本规范将 HTTP 的 `服务器驱动的内容协商 `_ 确立为标准做" +"法。" #: ../source/specifications/simple-repository-api.rst:732 msgid "" "While this spec won't fully describe the entirety of server-driven content " "negotiation, the flow is roughly:" -msgstr "" +msgstr "虽然本规范不会完整描述服务器驱动的内容协商的全部内容,但其流程大致如下:" #: ../source/specifications/simple-repository-api.rst:735 msgid "" "The client makes an HTTP request containing an ``Accept`` header listing all " "of the version+format content types that they are able to understand." msgstr "" +"客户端发出一个 HTTP 请求,其中包含一个 ``Accept`` 头部,列出它能够理解的所有“" +"版本+格式”内容类型。" #: ../source/specifications/simple-repository-api.rst:737 msgid "" @@ -24455,6 +28409,8 @@ msgid "" "then returns a response using that content type (treating the absence of an " "``Accept`` header as ``Accept: */*``)." msgstr "" +"服务器检查该头部,从所列内容类型中选择一种,然后使用该内容类型返回响应(将缺" +"少 ``Accept`` 头部的情况视为 ``Accept: */*``)。" #: ../source/specifications/simple-repository-api.rst:740 msgid "" @@ -24462,12 +28418,14 @@ msgid "" "header then they are able to choose between 3 different options for how to " "respond:" msgstr "" +"如果服务器不支持 ``Accept`` 头部中的任何内容类型,那么它可以在 3 种不同的响应" +"方式中做出选择:" #: ../source/specifications/simple-repository-api.rst:744 msgid "" "Select a default content type other than what the client has requested and " "return a response with that." -msgstr "" +msgstr "选择一个不同于客户端所请求内容的默认内容类型,并用它返回响应。" #: ../source/specifications/simple-repository-api.rst:746 msgid "" @@ -24475,18 +28433,20 @@ msgid "" "requested content types were available, and the server was unable or " "unwilling to select a default content type to respond with." msgstr "" +"返回 HTTP ``406 Not Acceptable`` 响应,以表示所请求的内容类型均不可用,且服务" +"器无法或不愿选择默认内容类型进行响应。" #: ../source/specifications/simple-repository-api.rst:749 msgid "" "Return a HTTP ``300 Multiple Choices`` response that contains a list of all " "of the possible responses that could have been chosen." -msgstr "" +msgstr "返回 HTTP ``300 Multiple Choices`` 响应,其中包含所有可能被选中的响应的列表。" #: ../source/specifications/simple-repository-api.rst:751 msgid "" "The client interprets the response, handling the different types of " "responses that the server may have responded with." -msgstr "" +msgstr "客户端解释该响应,并处理服务器可能返回的各种不同类型的响应。" #: ../source/specifications/simple-repository-api.rst:754 msgid "" @@ -24495,6 +28455,8 @@ msgid "" "be prepared to handle all of the possible responses in whatever way makes " "the most sense for that client." msgstr "" +"本规范没有规定服务器在处理其无法返回的内容类型时会做出哪种选择,客户端 **应" +"该** 做好准备,以对自己而言最合理的方式处理所有可能的响应。" #: ../source/specifications/simple-repository-api.rst:759 msgid "" @@ -24506,6 +28468,10 @@ msgid "" "response would likely just be treated the same as a ``406 Not Acceptable`` " "error." msgstr "" +"然而,由于 ``300 Multiple Choices`` 响应没有标准的解释格式,本规范强烈不建议" +"服务器使用该选项,因为客户端将无法理解并选择请求其他内容类型。此外,客户端原" +"本也 *不太可能* 理解另一种内容类型,因此充其量,该响应很可能只会被当作 ``406 " +"Not Acceptable`` 错误来处理。" #: ../source/specifications/simple-repository-api.rst:766 msgid "" @@ -24515,6 +28481,10 @@ msgid "" "vnd.pypi.simple.latest+json`` request that returns a ``v1.x`` response " "should have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" +"本规范 **确实** 要求,如果使用了 ``latest`` 这个 meta 版本,服务器 **必须** " +"以响应中实际包含的版本所对应的内容类型进行响应(即:如果 ``Accept: " +"application/vnd.pypi.simple.latest+json`` 请求返回了 ``v1.x`` 响应,则其 " +"``Content-Type`` 应该为 ``application/vnd.pypi.simple.v1+json``)。" #: ../source/specifications/simple-repository-api.rst:773 msgid "" @@ -24522,6 +28492,8 @@ msgid "" "client understands and is able to process. It supports three different " "formats for each content type that is being requested:" msgstr "" +"``Accept`` 头部是一个以逗号分隔的内容类型列表,列出客户端理解并能够处理的内容" +"类型。对于所请求的每种内容类型,它支持三种不同的格式:" #: ../source/specifications/simple-repository-api.rst:777 msgid "``$type/$subtype``" @@ -24541,6 +28513,8 @@ msgid "" "``$type/$subtype``, as that is the only way to actually specify the version " "and format you want." msgstr "" +"就选择版本+格式而言,这些格式中最有用的是 ``$type/$subtype``,因为这是唯一能" +"够实际指定你想要的版本和格式的方式。" #: ../source/specifications/simple-repository-api.rst:785 msgid "" @@ -24551,6 +28525,10 @@ msgid "" "header's `quality value `_ syntax." msgstr "" +"``Accept`` 头部中列出的内容类型的顺序没有任何特定含义,服务器 **应该** 认为它" +"们作为响应选项都同样有效。如果客户端希望表明自己更偏好某个内容类型而非另一个" +",可以使用 ``Accept`` 头部的 `质量值 `_ 语法。" #: ../source/specifications/simple-repository-api.rst:792 msgid "" @@ -24561,6 +28539,10 @@ msgid "" "lower quality, and any entry without a quality present will default to a " "quality of ``1``." msgstr "" +"这允许客户端为其 ``Accept`` 头部中的特定条目指定优先级,做法是在其后追加 " +"``;q=`` 以及一个介于 ``0`` 和 ``1`` 之间(含边界)的值,最多保留 3 位小数。在" +"解释该值时,质量较高的条目优先于质量较低的条目,任何未指定质量的条目都默认质" +"量为 ``1``。" #: ../source/specifications/simple-repository-api.rst:798 msgid "" @@ -24569,6 +28551,8 @@ msgid "" "priority, and it may even return a content type that they did **not** ask " "for." msgstr "" +"不过,客户端应记住,服务器可以自由选择它们所请求的 **任何** 内容类型,而不受" +"其所请求优先级的影响,甚至可能返回它们 **并未** 请求的内容类型。" #: ../source/specifications/simple-repository-api.rst:802 msgid "" @@ -24580,10 +28564,15 @@ msgid "" "pip/blob/cf3696a81b341925f82f20cb527e656176987565/src/pip/_internal/index/" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" +"为了帮助客户端确定其从 API 请求收到的响应的内容类型,本规范要求服务器始终包含" +"一个 ``Content-Type`` 头部,用以指明响应的内容类型。从技术上讲,这是一个不向" +"后兼容的更改,但在实践中 `pip 一直在强制执行这一要求 `_,因此实际造成破坏的风险很低。" #: ../source/specifications/simple-repository-api.rst:809 msgid "An example of how a client can operate would look like:" -msgstr "" +msgstr "客户端运作方式的一个示例大致如下:" #: ../source/specifications/simple-repository-api.rst:860 msgid "" @@ -24591,10 +28580,12 @@ msgid "" "would just remove the content types that they do not want from the " "``Accept`` header, and turn receiving them into an error." msgstr "" +"如果客户端希望只支持 HTML 或只支持 JSON,那么只需从 ``Accept`` 头部中移除它不" +"想要的内容类型,并将收到这些类型的情况视为错误。" #: ../source/specifications/simple-repository-api.rst:866 msgid "Alternative Negotiation Mechanisms" -msgstr "" +msgstr "备选协商机制" #: ../source/specifications/simple-repository-api.rst:868 msgid "" @@ -24604,10 +28595,13 @@ msgid "" "mechanism may not be sufficient. For those cases this spec has alternative " "negotiation mechanisms that may *optionally* be used instead." msgstr "" +"虽然使用 HTTP 内容协商被视为客户端与服务器协调一致、以确保客户端获得其能够理" +"解的 HTTP 响应的标准方式,但在某些情况下,该机制可能不够用。对于这些情况,本" +"规范提供了可以 *选择性地* 用来替代的备选协商机制。" #: ../source/specifications/simple-repository-api.rst:876 msgid "URL Parameter" -msgstr "" +msgstr "URL 参数" #: ../source/specifications/simple-repository-api.rst:878 msgid "" @@ -24615,6 +28609,8 @@ msgid "" "named ``format`` to allow the clients to request a specific version of the " "URL." msgstr "" +"实现简单 API 的服务器可以选择支持一个名为 ``format`` 的 URL 参数,允许客户端" +"请求特定版本的 URL。" #: ../source/specifications/simple-repository-api.rst:881 msgid "" @@ -24622,6 +28618,8 @@ msgid "" "types. Passing multiple content types, wild cards, quality values, etc... is " "**not** supported." msgstr "" +"``format`` 参数的值应该是有效内容类型中的 **一个**。传递多个内容类型、通配符" +"、质量值等 **不受** 支持。" #: ../source/specifications/simple-repository-api.rst:885 msgid "" @@ -24630,12 +28628,14 @@ msgid "" "allow for easier human based exploration of the API within a browser, or to " "allow documentation or notes to link to a specific version+format." msgstr "" +"支持该参数是可选的,客户端 **不应** 依赖它与 API 交互。这种协商机制旨在便于人" +"们在浏览器中人工探索该 API,或者允许文档或笔记链接到特定的版本+格式。" #: ../source/specifications/simple-repository-api.rst:890 msgid "" "Servers that do not support this parameter may choose to return an error " "when it is present, or they may simple ignore its presence." -msgstr "" +msgstr "不支持该参数的服务器可以选择在该参数出现时返回错误,也可以直接忽略它的存在。" #: ../source/specifications/simple-repository-api.rst:893 msgid "" @@ -24646,10 +28646,14 @@ msgid "" "server-driven content negotiation typically has (e.g. ``406 Not Available``, " "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" +"当服务器确实实现该参数时,它 **应该** 优先于客户端 ``Accept`` 头部中的任何值" +"生效;如果服务器不支持所请求的格式,它可以选择回退到 ``Accept`` 头部,也可以" +"选择标准服务器驱动的内容协商通常具有的任何错误情形(例如 ``406 Not " +"Available``、``303 Multiple Choices``,或选择返回一个默认类型)。" #: ../source/specifications/simple-repository-api.rst:902 msgid "Endpoint Configuration" -msgstr "" +msgstr "端点配置" #: ../source/specifications/simple-repository-api.rst:904 msgid "" @@ -24657,6 +28661,8 @@ msgid "" "consequence of using content negotiation and allowing servers to select " "which of the available content types is their default." msgstr "" +"严格来说,这个选项根本算不上什么特殊选项,它只是使用内容协商并允许服务器选择" +"将哪种可用内容类型作为其默认类型的自然结果。" #: ../source/specifications/simple-repository-api.rst:908 msgid "" @@ -24665,6 +28671,8 @@ msgid "" "their client to select the version they want, then that is a supported " "configuration." msgstr "" +"如果服务器不愿意或无法实现服务器驱动的内容协商,而更希望要求用户显式配置其客" +"户端来选择所需的版本,那么这也是一种受支持的配置。" #: ../source/specifications/simple-repository-api.rst:912 msgid "" @@ -24675,6 +28683,10 @@ msgid "" "client makes a request using the ``Accept`` header, the server can ignore it " "and return the content type that corresponds to that endpoint." msgstr "" +"为了实现这一点,服务器应针对其希望支持的每种版本+格式设置相应的端点(例如 ``/" +"simple/v1+html/`` 和/或 ``/simple/v1+json/``)。在该端点之下,它们可以托管一" +"份仅支持其中一种(或一个子集)内容类型的存储库副本。当客户端使用 ``Accept`` " +"头部发出请求时,服务器可以忽略该头部,并返回与该端点相对应的内容类型。" #: ../source/specifications/simple-repository-api.rst:919 msgid "" @@ -24683,6 +28695,9 @@ msgid "" "when making a request to that server, emit an ``Accept`` header that *only* " "includes the correct content type." msgstr "" +"对于希望强制要求特定配置的客户端,它们可以记录某个特定存储库 URL 是为哪种版" +"本+格式配置的,并在向该服务器发出请求时,发送一个 *只* 包含正确内容类型的 " +"``Accept`` 头部。" #: ../source/specifications/simple-repository-api.rst:927 msgid "" @@ -24691,6 +28706,8 @@ msgid "" "this spec, but it does **not** represent any sort of requirement to match " "these decisions." msgstr "" +"本节是非规范性的,代表了规范作者认为实现本规范时的最佳默认实现决策,但 **并" +"不** 代表任何必须匹配这些决策的要求。" #: ../source/specifications/simple-repository-api.rst:931 msgid "" @@ -24700,10 +28717,13 @@ msgid "" "API provide guardrails that attempt to push clients into making the best " "choices it can." msgstr "" +"这些决策旨在最大限度地增加可以迁移到最新 API 版本上的请求数量,同时保持最大程" +"度的兼容性。此外,这些决策还试图让 API 的使用自带“护栏”,促使客户端尽可能做出" +"最佳选择。" #: ../source/specifications/simple-repository-api.rst:936 msgid "It is recommended that servers:" -msgstr "" +msgstr "建议服务器:" #: ../source/specifications/simple-repository-api.rst:938 msgid "" @@ -24711,6 +28731,9 @@ msgid "" "content negotiation, for as long as they reasonably can, or at least as long " "as they're receiving non trivial traffic that uses the HTML responses." msgstr "" +"使用服务器驱动的内容协商,在合理可行的范围内尽可能长久地支持本规范中描述的全" +"部 3 种内容类型,或者至少在仍在收到使用 HTML 响应的不可忽略的流量时继续提供支" +"持。" #: ../source/specifications/simple-repository-api.rst:942 msgid "" @@ -24719,12 +28742,17 @@ msgid "" "``300 Multiple Choice`` response, and instead return a ``406 Not " "Acceptable`` response." msgstr "" +"当收到的 ``Accept`` 头部中不包含任何服务器知道如何处理的内容类型时,服务器绝" +"不应返回 ``300 Multiple Choice`` 响应,而应转而返回 ``406 Not Acceptable`` 响" +"应。" #: ../source/specifications/simple-repository-api.rst:947 msgid "" "However, if choosing to use the endpoint configuration, you should prefer to " "return a ``200 OK`` response in the expected content type for that endpoint." msgstr "" +"不过,如果选择使用端点配置,你应该优先以该端点预期的内容类型返回 ``200 OK`` " +"响应。" #: ../source/specifications/simple-repository-api.rst:950 msgid "" @@ -24734,22 +28762,27 @@ msgid "" "requests as well as any quality priority values they have expressed, and it " "should only use the ``text/html`` content type as a last resort." msgstr "" +"在选择可接受的版本时,服务器应选择客户端所支持的版本中最高的一个,并采用表现" +"力最强、功能最丰富的序列化格式,同时考虑客户端请求的具体程度及其表达的任何质" +"量优先级值,而且只应将 ``text/html`` 内容类型作为最后手段来使用。" #: ../source/specifications/simple-repository-api.rst:956 msgid "It is recommended that clients:" -msgstr "" +msgstr "建议客户端:" #: ../source/specifications/simple-repository-api.rst:958 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" +"使用服务器驱动的内容协商,在合理可行的范围内尽可能长久地支持本规范中描述的全" +"部 3 种内容类型。" #: ../source/specifications/simple-repository-api.rst:961 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." -msgstr "" +msgstr "在构造 ``Accept`` 头部时,把你所支持的所有内容类型都包含进去。" #: ../source/specifications/simple-repository-api.rst:964 msgid "" @@ -24759,6 +28792,9 @@ msgid "" "library HTML parser and you're worried that there may be some kinds of HTML " "responses that you're unable to parse in some edge cases)." msgstr "" +"除非你有希望服务器加以考虑的实现层面的特定原因,否则你通常 *不* 应该为自己的" +"内容类型包含质量优先级值(例如,你正在使用标准库的 HTML 解析器,并且担心在某" +"些边缘情况下可能存在你无法解析的某些 HTML 响应)。" #: ../source/specifications/simple-repository-api.rst:970 msgid "" @@ -24766,87 +28802,93 @@ msgid "" "*should* include a ``;q=0.01`` value on the legacy ``text/html`` content " "type, unless it is the only content type that you are requesting." msgstr "" +"这条建议的唯一例外是:建议你 *应该* 在旧式的 ``text/html`` 内容类型上包含 " +"``;q=0.01`` 值,除非它是你所请求的唯一内容类型。" #: ../source/specifications/simple-repository-api.rst:974 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." -msgstr "" +msgstr "在正常运行期间显式选择所需的版本,而不是使用 ``latest`` 这个 meta 版本。" #: ../source/specifications/simple-repository-api.rst:977 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." -msgstr "" +msgstr "检查响应的 ``Content-Type``,并确保它与你所预期的内容相符。" #: ../source/specifications/simple-repository-api.rst:985 msgid "September 2015: initial form of the HTML format, in :pep:`503`" -msgstr "" +msgstr "2015 年 9 月:HTML 格式的初始形式,见 :pep:`503`" #: ../source/specifications/simple-repository-api.rst:986 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" -msgstr "" +msgstr "2016 年 7 月:Requires-Python 元数据,在 :pep:`503` 的更新中" #: ../source/specifications/simple-repository-api.rst:987 msgid "May 2019: \"yank\" support, in :pep:`592`" -msgstr "" +msgstr "2019 年 5 月:“撤回”(yank)支持,见 :pep:`592`" #: ../source/specifications/simple-repository-api.rst:988 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" +"2020 年 7 月:API 版本化约定与元数据,并将 HTML 格式声明为 API v1,见 " +":pep:`629`" #: ../source/specifications/simple-repository-api.rst:990 msgid "" "May 2021: providing package metadata independently from a package, " "in :pep:`658`" -msgstr "" +msgstr "2021 年 5 月:独立于软件包提供软件包元数据,见 :pep:`658`" #: ../source/specifications/simple-repository-api.rst:992 msgid "" "May 2022: initial form of the JSON format, with a mechanism for clients to " "choose between them, and declaring both formats as API v1, in :pep:`691`" msgstr "" +"2022 年 5 月:JSON 格式的初始形式,附带让客户端在两种格式之间进行选择的机制," +"并将两种格式都声明为 API v1,见 :pep:`691`" #: ../source/specifications/simple-repository-api.rst:994 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" -msgstr "" +msgstr "2022 年 10 月:JSON 格式中的项目版本、文件大小和上传时间,见 :pep:`700`" #: ../source/specifications/simple-repository-api.rst:996 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" -msgstr "" +msgstr "2023 年 6 月:重命名用于独立于软件包提供软件包元数据的字段,见 :pep:`714`" #: ../source/specifications/simple-repository-api.rst:998 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, " "in :pep:`740`" -msgstr "" +msgstr "2024 年 11 月:HTML 和 JSON 格式中的来源元数据,见 :pep:`740`" #: ../source/specifications/simple-repository-api.rst:999 msgid "" "July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" -msgstr "" +msgstr "2025 年 7 月:HTML 和 JSON 格式中的项目状态标记,见 :pep:`792`" #: ../source/specifications/simple-repository-api.rst:1000 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" -msgstr "" +msgstr "2025 年 7 月:版面调整(为文件撤回设立专门页面,先引入概念再介绍 API 细节)" #: ../source/specifications/simple-repository-api.rst:1001 msgid "" "June 2026: :pep:`833` formally \"freezes\" the HTML representation of the " "simple API" -msgstr "" +msgstr "2026 年 6 月::pep:`833` 正式“冻结”简单 API 的 HTML 表示" #: ../source/specifications/source-distribution-format.rst:6 msgid "Source distribution format" -msgstr "" +msgstr "源分发格式" #: ../source/specifications/source-distribution-format.rst:8 msgid "" @@ -24855,6 +28897,8 @@ msgid "" "layout of such a distribution was originally specified in :pep:`517` and is " "formally documented here." msgstr "" +"当前的标准源分发格式以分发归档文件中存在 :file:`pyproject.toml` 文件为标识。" +"这种分发的布局最初在 :pep:`517` 中规定,并在此正式记录。" #: ../source/specifications/source-distribution-format.rst:13 msgid "" @@ -24866,14 +28910,18 @@ msgid "" "MUST follow the rules applicable to source distributions defined in the " "metadata specification." msgstr "" +"还存在一种旧式源分发格式,它由标准库 ``distutils`` 模块在执行 " +":command:`setup.py sdist` 时的行为隐式定义。本文档不打算对这种格式进行标准化" +",只是指出:如果旧式源分发包含使用 2.2 或更高元数据版本的 ``PKG-INFO`` 文件," +"则它必须遵循元数据规范中定义的、适用于源分发的规则。" #: ../source/specifications/source-distribution-format.rst:21 msgid "Source distributions are also known as *sdists* for short." -msgstr "" +msgstr "源分发也被简称为 *sdists*。" #: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" -msgstr "" +msgstr "源码树" #: ../source/specifications/source-distribution-format.rst:28 msgid "" @@ -24884,10 +28932,14 @@ msgid "" "definition of what :file:`pyproject.toml` must contain for something to be " "deemed a source tree." msgstr "" +"*源码树* 是一组文件和目录,类似版本控制系统的一次检出,其中包含一个可用于从这" +"些文件和目录构建源分发的 :file:`pyproject.toml` 文件。:pep:`517` 和 " +":pep:`518` 规定了要满足源码树的定义,:file:`pyproject.toml` 必须包含哪些内容" +"。" #: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" -msgstr "" +msgstr "源分发文件名" #: ../source/specifications/source-distribution-format.rst:40 msgid "" @@ -24897,12 +28949,16 @@ msgid "" "distribution-format`), and ``{version}`` is the canonicalized form of the " "project version (see :ref:`version-specifiers`)." msgstr "" +"sdist 的文件名在 :pep:`625` 中被标准化。文件名必须采用 ``{name}-{version}" +".tar.gz`` 的形式,其中 ``{name}`` 按照与二进制分发相同的规则进行规范化(参见 " +":ref:`binary-distribution-format`),``{version}`` 是项目版本的规范化形式(参" +"见 :ref:`version-specifiers`)。" #: ../source/specifications/source-distribution-format.rst:46 msgid "" "The name and version components of the filename MUST match the values stored " "in the metadata contained in the file." -msgstr "" +msgstr "文件名中的名称和版本部分必须与文件所含元数据中存储的值相匹配。" #: ../source/specifications/source-distribution-format.rst:49 msgid "" @@ -24910,6 +28966,8 @@ msgid "" "matches this specification. This includes the ``build_sdist`` hook of " "a :term:`build backend `." msgstr "" +"生成源分发文件的代码必须为文件赋予符合本规范的名称。这包括 :term:`构建后端 " +"` 的 ``build_sdist`` 钩子。" #: ../source/specifications/source-distribution-format.rst:53 msgid "" @@ -24918,10 +28976,13 @@ msgid "" "*one* hyphen in the filename. Code that does this may then use the " "distribution name and version from the filename without further verification." msgstr "" +"处理源分发文件的代码可以依据 ``.tar.gz`` 后缀以及文件名中恰好包含 *一个* 连字" +"符这一特征来识别源分发文件。这样做的代码随后可以直接使用文件名中的分发名称和" +"版本,而无需进一步验证。" #: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" -msgstr "" +msgstr "源分发文件格式" #: ../source/specifications/source-distribution-format.rst:61 msgid "" @@ -24934,6 +28995,11 @@ msgid "" "described in the :ref:`core-metadata` specification. The metadata MUST " "conform to at least version 2.2 of the metadata specification." msgstr "" +"``.tar.gz`` 源分发(sdist)只包含一个名为 ``{name}-{version}`` 的顶层目录(例" +"如 ``foo-1.0``),其中含有软件包的源文件。名称和版本必须与文件中存储的元数据" +"相匹配。该目录还必须包含一个符合 :ref:`pyproject-toml-spec` 所定义格式的 " +":file:`pyproject.toml`,以及一个 :file:`PKG-INFO` 文件,其中包含 :ref:`core-" +"metadata` 规范所述格式的元数据。元数据必须至少符合 2.2 版的元数据规范。" #: ../source/specifications/source-distribution-format.rst:69 msgid "" @@ -24943,12 +29009,17 @@ msgid "" "directory of the sdist (containing the :file:`pyproject.toml` and " "the :file:`PKG-INFO` metadata)." msgstr "" +"如果元数据版本为 2.4 或更高,源分发必须包含 :file:`PKG-INFO` 中 ``License-" +"File`` 字段所指定的所有许可证文件,且这些文件须位于相对于 sdist 根目录(即包" +"含 :file:`pyproject.toml` 和 :file:`PKG-INFO` 元数据的目录)的各自路径上。" #: ../source/specifications/source-distribution-format.rst:74 msgid "" "No other content of a sdist is required or defined. Build systems can store " "whatever information they need in the sdist to build the project." msgstr "" +"本规范不要求也不定义 sdist 的其他任何内容。构建系统可以在 sdist 中存储构建项" +"目所需的任何信息。" #: ../source/specifications/source-distribution-format.rst:77 msgid "" @@ -24956,6 +29027,9 @@ msgid "" "UTF-8 based file names. In particular, source distribution files must be " "readable using the standard library tarfile module with the open flag 'r:gz'." msgstr "" +"tar 归档文件必须使用现代的 POSIX.1-2001 pax tar 格式,该格式规定使用基于 UTF-" +"8 的文件名。特别地,源分发文件必须能够使用标准库 tarfile 模块以打开标志 " +"'r:gz' 读取。" #: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" @@ -24966,10 +29040,12 @@ msgid "" "Because extracting tar files as-is is dangerous, and the results are " "platform-specific, archive features of source distributions are limited." msgstr "" +"由于原样提取 tar 文件十分危险,且提取结果因平台而异,源分发的归档特性受到了限" +"制。" #: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" -msgstr "" +msgstr "使用 data 过滤器解包" #: ../source/specifications/source-distribution-format.rst:93 msgid "" @@ -24978,6 +29054,9 @@ msgid "" "filter='data') `), OR follow the *Unpacking " "without the data filter* section below." msgstr "" +"提取源分发时,工具必须要么使用 :py:func:`tarfile.data_filter` (例如 " +":py:meth:`TarFile.extractall(..., filter='data') " +"`),要么遵循下文的 *不使用 data 过滤器解包* 一节。" #: ../source/specifications/source-distribution-format.rst:97 msgid "" @@ -24988,10 +29067,14 @@ msgid "" "archive) and security (e.g. refusing to unpack) is left up to the tool in " "this case." msgstr "" +"作为例外,在不具备 :py:func:`hasattr(tarfile, 'data_filter') " +"` 的 Python 解释器上(参见 :pep:`706`),通常使用该过滤" +"器的工具(无论直接还是间接)可以警告用户并忽略本规范。在这种情况下,可用性(" +"例如完全信任归档文件)与安全性(例如拒绝解包)之间的权衡由工具自行决定。" #: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" -msgstr "" +msgstr "不使用 data 过滤器解包" #: ../source/specifications/source-distribution-format.rst:107 msgid "" @@ -25000,6 +29083,9 @@ msgid "" "follow this section. (At the time of this writing, the ``data`` filter also " "follows this section, but it may get out of sync in the future.)" msgstr "" +"不直接使用 ``data`` 过滤器的工具(例如为了向后兼容、允许额外特性或并非使用 " +"Python)必须遵循本节。(在撰写本文时,``data`` 过滤器同样遵循本节,但将来可能" +"会与之不一致。)" #: ../source/specifications/source-distribution-format.rst:113 msgid "" @@ -25007,123 +29093,131 @@ msgid "" "such an entry, tools SHOULD notify the user, MUST NOT unpack the entry, and " "MAY abort with a failure:" msgstr "" +"以下文件在 *sdist* 归档中无效。遇到此类条目时,工具应该通知用户,不得解包该条" +"目,并可以因失败而中止:" #: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." -msgstr "" +msgstr "会被放置到目标目录之外的文件。" #: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." -msgstr "" +msgstr "指向目标目录之外的链接(符号链接或硬链接)。" #: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." -msgstr "" +msgstr "设备文件(包括管道)。" #: ../source/specifications/source-distribution-format.rst:121 msgid "" "The following are also invalid. Tools MAY treat them as above, but are NOT " "REQUIRED to do so:" -msgstr "" +msgstr "以下情形同样无效。工具可以按上述方式处理它们,但并非必须如此:" #: ../source/specifications/source-distribution-format.rst:124 msgid "Files with a ``..`` component in the filename or link target." -msgstr "" +msgstr "文件名或链接目标中包含 ``..`` 组件的文件。" #: ../source/specifications/source-distribution-format.rst:125 msgid "Links pointing to a file that is not part of the archive." -msgstr "" +msgstr "指向未包含在该归档中的文件的链接。" #: ../source/specifications/source-distribution-format.rst:127 msgid "" "Tools MAY unpack links (symbolic or hard) as regular files, using content " "from the archive." -msgstr "" +msgstr "工具可以使用归档中的内容,将链接(符号链接或硬链接)作为常规文件解包。" #: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" -msgstr "" +msgstr "提取 *sdist* 归档时:" #: ../source/specifications/source-distribution-format.rst:132 msgid "" "Leading slashes in file names MUST be dropped. (This is nowadays standard " "behaviour for ``tar`` unpacking.)" -msgstr "" +msgstr "文件名中的前导斜杠必须去掉。(如今这是 ``tar`` 解包的标准行为。)" #: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" -msgstr "" +msgstr "对于每一个 ``mode`` 位(即 Unix 权限位),工具必须满足以下条件之一:" #: ../source/specifications/source-distribution-format.rst:136 msgid "use the platform's default for a new file/directory (respectively)," -msgstr "" +msgstr "对新建的文件/目录分别使用平台的默认值," #: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" -msgstr "" +msgstr "按照归档文件设置该位,或" #: ../source/specifications/source-distribution-format.rst:138 msgid "" "use the bit from ``rw-r--r--`` (``0o644``) for non-executable files or " "``rwxr-xr-x`` (``0o755``) for executable files and directories." msgstr "" +"对非可执行文件使用 ``rw-r--r--`` (``0o644``)中的位,或对可执行文件和目录使" +"用 ``rwxr-xr-x`` (``0o755``)中的位。" #: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." -msgstr "" +msgstr "``mode`` 中的高位(setuid、setgid、sticky)必须清除。" #: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." -msgstr "" +msgstr "建议保留用户的 *可执行* 位。" #: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" -msgstr "" +msgstr "更多提示" #: ../source/specifications/source-distribution-format.rst:148 msgid "" "Tool authors are encouraged to consider how *hints for further verification* " "in ``tarfile`` documentation apply to their tool." msgstr "" +"鼓励工具作者思考 ``tarfile`` 文档中的 *进一步验证的提示* 如何适用于他们的工具" +"。" #: ../source/specifications/source-distribution-format.rst:155 msgid "" "November 2020: The original version of this specification was approved " "through :pep:`643`." -msgstr "" +msgstr "2020 年 11 月:本规范的初始版本通过 :pep:`643` 获得批准。" #: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." -msgstr "" +msgstr "2021 年 7 月:定义了什么是源码树。" #: ../source/specifications/source-distribution-format.rst:158 msgid "" "September 2022: The filename of a source distribution was standardized " "through :pep:`625`." -msgstr "" +msgstr "2022 年 9 月:源分发的文件名通过 :pep:`625` 实现标准化。" #: ../source/specifications/source-distribution-format.rst:160 msgid "" "August 2023: Source distribution archive features were standardized " "through :pep:`721`." -msgstr "" +msgstr "2023 年 8 月:源分发的归档特性通过 :pep:`721` 实现标准化。" #: ../source/specifications/source-distribution-format.rst:162 msgid "" "December 2024: License files inclusion into source distribution was " "standardized through :pep:`639`." -msgstr "" +msgstr "2024 年 12 月:许可证文件纳入源分发通过 :pep:`639` 实现标准化。" #: ../source/specifications/version-specifiers.rst:7 #: ../source/specifications/version-specifiers.rst:797 msgid "Version specifiers" -msgstr "" +msgstr "版本说明符" #: ../source/specifications/version-specifiers.rst:10 msgid "" "This specification describes a scheme for identifying versions of Python " "software distributions, and declaring dependencies on particular versions." msgstr "" +"本规范描述了一套方案,用于标识 Python 软件分发包的版本,并声明对特定版本的依" +"赖关系。" #: ../source/specifications/version-specifiers.rst:15 msgid "Definitions" @@ -25136,6 +29230,9 @@ msgid "" "\"OPTIONAL\" in this document are to be interpreted as described " "in :rfc:`2119`." msgstr "" +"本文档中的关键词 \"MUST\"、\"MUST NOT\"、\"REQUIRED\"、\"SHALL\"、\"SHALL " +"NOT\"、\"SHOULD\"、\"SHOULD NOT\"、\"RECOMMENDED\"、\"MAY\" 和 \"OPTIONAL\" " +"含义按 :rfc:`2119` 中所述理解。" #: ../source/specifications/version-specifiers.rst:21 msgid "" @@ -25144,18 +29241,25 @@ msgid "" "invoked by integration tools in order to build software distributed as " "sdists rather than prebuilt binary archives." msgstr "" +"\"构建工具\"是一类旨在开发系统上运行的自动化工具,用于生成源分发和二进制分发" +"归档文件。集成工具也可以调用构建工具,来构建以 sdist 而非预构建二进制归档形式" +"分发的软件。" #: ../source/specifications/version-specifiers.rst:26 msgid "" "\"Index servers\" are active distribution registries which publish version " "and dependency metadata and place constraints on the permitted metadata." msgstr "" +"\"索引服务器\"是活跃的分发包注册机构,它们发布版本及依赖项元数据,并对所允许" +"的元数据施加约束。" #: ../source/specifications/version-specifiers.rst:29 msgid "" "\"Publication tools\" are automated tools intended to run on development " "systems and upload source and binary distribution archives to index servers." msgstr "" +"\"发布工具\"是一类旨在开发系统上运行的自动化工具,负责将源分发和二进制分发归" +"档文件上传到索引服务器。" #: ../source/specifications/version-specifiers.rst:32 msgid "" @@ -25164,6 +29268,8 @@ msgid "" "an index server or other designated location and deploying them to the " "target system." msgstr "" +"\"安装工具\"是一类专门用于在部署目标上运行的集成工具,它们从索引服务器或其他" +"指定位置获取源分发和二进制分发归档文件,并将其部署到目标系统。" #: ../source/specifications/version-specifiers.rst:37 msgid "" @@ -25171,6 +29277,8 @@ msgid "" "servers, publication tools, integration tools and any other software that " "produces or consumes distribution version and dependency metadata." msgstr "" +"\"自动化工具\"是一个统称,涵盖构建工具、索引服务器、发布工具、集成工具,以及" +"任何生成或使用分发包版本及依赖项元数据的其他软件。" #: ../source/specifications/version-specifiers.rst:43 msgid "Version scheme" @@ -25180,7 +29288,7 @@ msgstr "版本格式" msgid "" "Distributions are identified by a public version identifier which supports " "all defined version comparison operations" -msgstr "" +msgstr "分发包由一个公共版本标识符标识,该标识符支持全部已定义的版本比较操作" #: ../source/specifications/version-specifiers.rst:48 msgid "" @@ -25189,6 +29297,8 @@ msgid "" "constraints on the version of dependencies needed in order to build or run " "the software." msgstr "" +"版本格式既用于描述特定分发归档文件所提供的分发包版本,也用于对构建或运行软件" +"所需的依赖项版本施加约束。" #: ../source/specifications/version-specifiers.rst:57 msgid "Public version identifiers" @@ -25198,16 +29308,16 @@ msgstr "公开版本识别符" msgid "" "The canonical public version identifiers MUST comply with the following " "scheme::" -msgstr "" +msgstr "公共版本标识符的规范形式必须符合以下格式::" #: ../source/specifications/version-specifiers.rst:64 msgid "" "Public version identifiers MUST NOT include leading or trailing whitespace." -msgstr "" +msgstr "公共版本标识符不得包含前导或尾随空白字符。" #: ../source/specifications/version-specifiers.rst:66 msgid "Public version identifiers MUST be unique within a given distribution." -msgstr "" +msgstr "公共版本标识符在给定分发包内必须唯一。" #: ../source/specifications/version-specifiers.rst:68 msgid "" @@ -25216,6 +29326,8 @@ msgid "" "Installation tools MAY warn the user when non-compliant or ambiguous " "versions are detected." msgstr "" +"安装工具应该忽略任何不符合此格式的公共版本,但必须同时应用下文规定的规范化规" +"则。当检测到不合规或有歧义的版本时,安装工具可以警告用户。" #: ../source/specifications/version-specifiers.rst:73 msgid "" @@ -25224,48 +29336,53 @@ msgid "" "permissive regular expression accepting inputs that may require subsequent " "normalization." msgstr "" +"另请参见 :ref:`version-specifiers-regex`,其中提供了一个用于严格检查是否符合" +"规范格式的正则表达式,以及一个更宽松的正则表达式,用于接受可能需要后续规范化" +"的输入。" #: ../source/specifications/version-specifiers.rst:78 msgid "Public version identifiers are separated into up to five segments:" -msgstr "" +msgstr "公共版本标识符最多可分为五个段:" #: ../source/specifications/version-specifiers.rst:80 msgid "Epoch segment: ``N!``" -msgstr "" +msgstr "Epoch 段:``N!``" #: ../source/specifications/version-specifiers.rst:81 msgid "Release segment: ``N(.N)*``" -msgstr "" +msgstr "发布段:``N(.N)*``" #: ../source/specifications/version-specifiers.rst:82 msgid "Pre-release segment: ``{a|b|rc}N``" -msgstr "" +msgstr "预发布段:``{a|b|rc}N``" #: ../source/specifications/version-specifiers.rst:83 msgid "Post-release segment: ``.postN``" -msgstr "" +msgstr "后发布段:``.postN``" #: ../source/specifications/version-specifiers.rst:84 msgid "Development release segment: ``.devN``" -msgstr "" +msgstr "开发发布段:``.devN``" #: ../source/specifications/version-specifiers.rst:86 msgid "" "Any given release will be a \"final release\", \"pre-release\", \"post-" "release\" or \"developmental release\" as defined in the following sections." msgstr "" +"任何给定的发布都属于以下各节所定义的 \"最终发布版本\"、\"预发布版本\"、\"后发" +"布版本\" 或 \"开发发布版本\" 之一。" #: ../source/specifications/version-specifiers.rst:89 msgid "" "All numeric components MUST be non-negative integers represented as " "sequences of ASCII digits." -msgstr "" +msgstr "所有数字组件必须是以 ASCII 数字序列表示的非负整数。" #: ../source/specifications/version-specifiers.rst:92 msgid "" "All numeric components MUST be interpreted and ordered according to their " "numeric value, not as text strings." -msgstr "" +msgstr "所有数字组件必须根据其数值而非文本字符串来解释和排序。" #: ../source/specifications/version-specifiers.rst:95 msgid "" @@ -25273,6 +29390,8 @@ msgid "" "release segment, a numeric component of zero has no special significance " "aside from always being the lowest possible value in the version ordering." msgstr "" +"所有数字组件均可以为零。除非下文对发布段另有描述,否则零值的数字组件除了在版" +"本排序中始终是可能的最小值之外,没有任何特殊含义。" #: ../source/specifications/version-specifiers.rst:101 msgid "" @@ -25280,6 +29399,8 @@ msgid "" "to better accommodate the wide range of versioning practices across existing " "public and private Python projects." msgstr "" +"为了更好地兼容现有公开和私有 Python 项目中种类繁多的版本控制实践,本格式允许" +"一些难以阅读的版本标识符。" #: ../source/specifications/version-specifiers.rst:105 msgid "" @@ -25288,10 +29409,12 @@ msgid "" "Where this is the case, the relevant details are noted in the following " "sections." msgstr "" +"因此,规范在技术上允许的部分版本控制实践,强烈不建议用于新项目。凡属此类情况" +",相关细节均会在以下各节中注明。" #: ../source/specifications/version-specifiers.rst:116 msgid "Local version identifiers MUST comply with the following scheme::" -msgstr "" +msgstr "本地版本标识符必须符合以下格式::" #: ../source/specifications/version-specifiers.rst:120 msgid "" @@ -25301,6 +29424,9 @@ msgid "" "have no specific semantics assigned, but some syntactic restrictions are " "imposed." msgstr "" +"本地版本标识符由一个普通的公共版本标识符(如上一节所定义)和一个任意的 \"本地" +"版本标签\" 组成,两者以加号分隔。本地版本标签没有被赋予特定的语义,但存在一些" +"语法上的限制。" #: ../source/specifications/version-specifiers.rst:125 msgid "" @@ -25311,6 +29437,10 @@ msgid "" "be too disruptive to the application or other integrated system (such as a " "Linux distribution)." msgstr "" +"本地版本标识符用于表示与上游项目完全 API(如适用,还包括 ABI)兼容的补丁版本" +"。例如,当升级到新的上游发布会给应用程序或其他集成系统(如 Linux 发行版)带来" +"过大的干扰时,应用程序开发者和系统集成者可以通过应用特定的向后移植错误修复来" +"创建此类版本。" #: ../source/specifications/version-specifiers.rst:132 msgid "" @@ -25320,6 +29450,9 @@ msgid "" "of a release but, when applied to a source distribution, does indicate that " "it may not contain the exact same code as the corresponding upstream release." msgstr "" +"通过包含本地版本标签,可以区分上游发布版本与下游集成者可能修改过的重新构建版" +"本。使用本地版本标识符不会影响发布的种类,但将其应用于源分发时,的确表明该源" +"分发包含的代码可能与相应的上游发布版本不完全相同。" #: ../source/specifications/version-specifiers.rst:138 msgid "" @@ -25328,18 +29461,20 @@ msgid "" "hash representations, local version labels MUST be limited to the following " "set of permitted characters:" msgstr "" +"为了确保本地版本标识符可以方便地作为文件名和 URL 的一部分,并避免十六进制哈希" +"表示形式中的格式不一致,本地版本标签必须仅限于以下允许的字符集:" #: ../source/specifications/version-specifiers.rst:143 msgid "ASCII letters (``[a-zA-Z]``)" -msgstr "" +msgstr "ASCII 字母(``[a-zA-Z]``)" #: ../source/specifications/version-specifiers.rst:144 msgid "ASCII digits (``[0-9]``)" -msgstr "" +msgstr "ASCII 数字(``[0-9]``)" #: ../source/specifications/version-specifiers.rst:145 msgid "periods (``.``)" -msgstr "" +msgstr "句点(``.``)" #: ../source/specifications/version-specifiers.rst:147 msgid "Local version labels MUST start and end with an ASCII letter or digit." @@ -25358,6 +29493,11 @@ msgid "" "a local version with fewer segments, as long as the shorter local version's " "segments match the beginning of the longer local version's segments exactly." msgstr "" +"本地版本的比较和排序会单独考虑本地版本的每个段(以 ``.`` 分隔)。如果某个段完" +"全由 ASCII 数字组成,则出于比较目的,该段应被视为整数;如果某个段包含任何 " +"ASCII 字母,则该段将按不区分大小写的字典序进行比较。在比较数字段与字典序段时" +",数字段始终大于字典序段。此外,只要较短的本地版本的各段与较长的本地版本各段" +"的开头完全一致,段数更多的本地版本始终大于段数较少的本地版本。" #: ../source/specifications/version-specifiers.rst:160 msgid "" @@ -25366,6 +29506,8 @@ msgid "" "project, potentially backporting security and bug fixes from later versions " "of the upstream project." msgstr "" +"\"上游项目\" 是自行定义其公共版本的项目。\"下游项目\" 则是会跟踪并重新分发上" +"游项目的项目,且可能从上游项目的后续版本向后移植安全和错误修复。" #: ../source/specifications/version-specifiers.rst:165 msgid "" @@ -25378,22 +29520,27 @@ msgid "" "the Python Package Index is intended solely for indexing and hosting " "upstream projects, it MUST NOT allow the use of local version identifiers." msgstr "" +"将上游项目发布到公共索引服务器时不应该使用本地版本标识符,但可以将其用于标识" +"直接从项目源码创建的私有构建。当下游项目发布的版本与公共版本标识符所标识的上" +"游项目版本保持 API 兼容、但包含额外更改(如错误修复)时,应该使用本地版本标识" +"符。由于 Python Package Index 仅用于索引和托管上游项目,因此它不得允许使用本" +"地版本标识符。" #: ../source/specifications/version-specifiers.rst:177 msgid "Final releases" -msgstr "" +msgstr "最终发布" #: ../source/specifications/version-specifiers.rst:179 msgid "" "A version identifier that consists solely of a release segment and " "optionally an epoch identifier is termed a \"final release\"." -msgstr "" +msgstr "仅由发布段和可选的 epoch 标识符组成的版本标识符称为 \"最终发布版本\"。" #: ../source/specifications/version-specifiers.rst:182 msgid "" "The release segment consists of one or more non-negative integer values, " "separated by dots::" -msgstr "" +msgstr "发布段由一个或多个非负的整数值组成,由点号隔开::" #: ../source/specifications/version-specifiers.rst:187 msgid "" @@ -25401,6 +29548,8 @@ msgid "" "increasing fashion, otherwise automated tools will not be able to upgrade " "them correctly." msgstr "" +"项目内的最终发布版本必须以持续递增的方式编号,否则自动化工具将无法正确升级它" +"们。" #: ../source/specifications/version-specifiers.rst:191 msgid "" @@ -25409,6 +29558,8 @@ msgid "" "segments with different numbers of components, the shorter segment is padded " "out with additional zeros as necessary." msgstr "" +"发布段的比较和排序会依次考虑发布段中每个组件的数值。在比较组件数量不同的发布" +"段时,会根据需要用额外的零填充较短的段。" #: ../source/specifications/version-specifiers.rst:196 msgid "" @@ -25416,6 +29567,8 @@ msgid "" "under this scheme, the most common variants are to use two components " "(\"major.minor\") or three components (\"major.minor.micro\")." msgstr "" +"虽然本格式允许在第一个组件之后使用任意数量的额外组件,但最常见的变体是使用两" +"个组件(\"major.minor\")或三个组件(\"major.minor.micro\")。" #: ../source/specifications/version-specifiers.rst:215 msgid "" @@ -25423,6 +29576,8 @@ msgid "" "common prefix. For example, ``3.3.1``, ``3.3.5`` and ``3.3.9.45`` are all " "part of the ``3.3`` release series." msgstr "" +"发布系列是指任何一组以相同前缀开头的最终发布版本号。例如" +",``3.3.1``、``3.3.5`` 和 ``3.3.9.45`` 都属于 ``3.3`` 发布系列。" #: ../source/specifications/version-specifiers.rst:221 msgid "" @@ -25431,12 +29586,14 @@ msgid "" "``X.Y.0`` when comparing it to any release segment that includes three " "components." msgstr "" +"``X.Y`` 和 ``X.Y.0`` 不被视为不同的发布版本号,因为发布段比较规则在将双组件形" +"式与任何包含三个组件的发布段进行比较时,会隐式地将其扩展为 ``X.Y.0``。" #: ../source/specifications/version-specifiers.rst:226 msgid "" "Date-based release segments are also permitted. An example of a date-based " "release scheme using the year and month of the release::" -msgstr "" +msgstr "也允许使用基于日期的发布段。以下是使用版本年月的基于日期的发布方案的示例::" #: ../source/specifications/version-specifiers.rst:240 msgid "Pre-releases" @@ -25447,18 +29604,22 @@ msgid "" "Some projects use an \"alpha, beta, release candidate\" pre-release cycle to " "support testing by their users prior to a final release." msgstr "" +"一些项目采用 \"alpha、beta、候选发布\" 的预发布周期,以便在最终发布之前支持用" +"户进行测试。" #: ../source/specifications/version-specifiers.rst:245 msgid "" "If used as part of a project's development cycle, these pre-releases are " "indicated by including a pre-release segment in the version identifier::" msgstr "" +"如果在项目开发周期中使用预发布版本,则通过在版本标识符中包含预发布段来标示这" +"些预发行版本::" #: ../source/specifications/version-specifiers.rst:253 msgid "" "A version identifier that consists solely of a release segment and a pre-" "release segment is termed a \"pre-release\"." -msgstr "" +msgstr "仅由发布段和预发布段组成的版本标识符称为 \"预发布版本\"。" #: ../source/specifications/version-specifiers.rst:256 msgid "" @@ -25467,24 +29628,33 @@ msgid "" "given release are ordered first by phase (alpha, beta, release candidate) " "and then by the numerical component within that phase." msgstr "" +"预发布段由一个表示预发布阶段的字母标识符和一个非负整数值组成。给定发布的各预" +"发布版本首先按阶段(alpha、beta、候选发布)排序,然后按该阶段内的数字组件排序" +"。" #: ../source/specifications/version-specifiers.rst:261 msgid "" "Installation tools MAY accept both ``c`` and ``rc`` releases for a common " "release segment in order to handle some existing legacy distributions." msgstr "" +"为了处理一些既有的旧式分发包,安装工具可以接受同一发布段下的 ``c`` 和 ``rc`` " +"两种发布。" #: ../source/specifications/version-specifiers.rst:264 msgid "" "Installation tools SHOULD interpret ``c`` versions as being equivalent to " "``rc`` versions (that is, ``c1`` indicates the same version as ``rc1``)." msgstr "" +"安装工具应该将 ``c`` 版本解释为等价于 ``rc`` 版本(即 ``c1`` 表示与 ``rc1`` " +"相同的版本)。" #: ../source/specifications/version-specifiers.rst:267 msgid "" "Build tools, publication tools and index servers SHOULD disallow the " "creation of both ``rc`` and ``c`` releases for a common release segment." msgstr "" +"构建工具、发布工具和索引服务器应该禁止针对同一发布段同时创建 ``rc`` 和 ``c`` " +"发布。" #: ../source/specifications/version-specifiers.rst:272 msgid "Post-releases" @@ -25496,18 +29666,22 @@ msgid "" "that do not affect the distributed software (for example, correcting an " "error in the release notes)." msgstr "" +"一些项目使用后发布版本来处理最终发布版本中不影响所分发软件的轻微错误(例如," +"更正发布说明中的错误)。" #: ../source/specifications/version-specifiers.rst:278 msgid "" "If used as part of a project's development cycle, these post-releases are " "indicated by including a post-release segment in the version identifier::" msgstr "" +"如果在项目开发周期中使用后发布版本,则通过在版本标识符中包含后发布段来标示这" +"些后发布版本::" #: ../source/specifications/version-specifiers.rst:283 msgid "" "A version identifier that includes a post-release segment without a " "developmental release segment is termed a \"post-release\"." -msgstr "" +msgstr "包含后发布段但不包含开发发布段的版本标识符称为 \"后发布版本\"。" #: ../source/specifications/version-specifiers.rst:286 msgid "" @@ -25516,6 +29690,8 @@ msgid "" "component, immediately following the corresponding release, and ahead of any " "subsequent release." msgstr "" +"后发布段由字符串 ``.post`` 后跟一个非负整数值组成。后发布版本按其数字组件排序" +",紧跟在相应的发布之后,且位于任何后续发布之前。" #: ../source/specifications/version-specifiers.rst:293 msgid "" @@ -25524,10 +29700,12 @@ msgid "" "release number and increment the final component for each maintenance " "release." msgstr "" +"强烈不建议使用后发布版本来发布包含实际错误修复的维护版本。一般来说,更好的做" +"法是使用更长的发布版本号,并为每个维护版本递增最后一个组件。" #: ../source/specifications/version-specifiers.rst:298 msgid "Post-releases are also permitted for pre-releases::" -msgstr "" +msgstr "预发布版本也允许后发布版本::" #: ../source/specifications/version-specifiers.rst:306 msgid "" @@ -25536,10 +29714,12 @@ msgid "" "is substantially clearer to simply create a new pre-release by incrementing " "the numeric component." msgstr "" +"强烈不建议创建预发布版本的后续发布,因为这会使版本标识符难以被人读懂。一般来" +"说,直接递增数字组件来创建新的预发布版本会清晰得多。" #: ../source/specifications/version-specifiers.rst:313 msgid "Developmental releases" -msgstr "" +msgstr "开发版本" #: ../source/specifications/version-specifiers.rst:315 msgid "" @@ -25548,6 +29728,8 @@ msgid "" "directly from source control which do not conflict with later project " "releases." msgstr "" +"有些项目会定期发布开发版本,而系统打包者(尤其是 Linux 发行版的打包者)可能希" +"望直接从源代码版本控制系统创建不会与项目日后的发布版本相冲突的早期发布版本。" #: ../source/specifications/version-specifiers.rst:320 msgid "" @@ -25555,12 +29737,14 @@ msgid "" "releases are indicated by including a developmental release segment in the " "version identifier::" msgstr "" +"如果作为项目开发周期的一部分使用,会通过在版本标识符中包含开发版本段来标示这" +"些开发版本::" #: ../source/specifications/version-specifiers.rst:326 msgid "" "A version identifier that includes a developmental release segment is termed " "a \"developmental release\"." -msgstr "" +msgstr "包含开发版本段的版本标识符称为“开发版本”。" #: ../source/specifications/version-specifiers.rst:329 msgid "" @@ -25570,18 +29754,21 @@ msgid "" "before any pre-releases with the same release segment), and following any " "previous release (including any post-releases)." msgstr "" +"开发版本段由字符串 ``.dev`` 后跟一个非负整数值组成。开发版本按其数字组件排序" +",紧排在相应的发布版本之前(且在具有相同发布段的任何预发布版本之前),并位于" +"任何先前的发布版本(包括任何后续发布)之后。" #: ../source/specifications/version-specifiers.rst:335 msgid "" "Developmental releases are also permitted for pre-releases and post-" "releases::" -msgstr "" +msgstr "预发布版本和后发布版本也允许开发版本::" #: ../source/specifications/version-specifiers.rst:343 msgid "" "Do note that development releases are considered a type of pre-release when " "handling them." -msgstr "" +msgstr "请注意,在处理时,开发版本会被视为预发布版本的一种。" #: ../source/specifications/version-specifiers.rst:348 msgid "" @@ -25592,6 +29779,9 @@ msgid "" "published, it is substantially clearer to instead create a new pre-release " "by incrementing the numeric component." msgstr "" +"虽然开发版本对持续集成可能有用,但强烈不建议将预发布版本的开发版本发布到通用" +"公共索引服务器,因为这会使版本标识符难以被人读懂。如果确实需要发布这样的版本" +",改为通过递增数字组件来创建新的预发布版本会清晰得多。" #: ../source/specifications/version-specifiers.rst:355 msgid "" @@ -25599,6 +29789,8 @@ msgid "" "they may be appropriate for projects which use the post-release notation for " "full maintenance releases which may include code changes." msgstr "" +"同样强烈不建议创建后续发布的开发版本,但对于使用后续发布表示法来标注可能包含" +"代码变更的完整维护版本的项目而言,这种做法可能是合适的。" #: ../source/specifications/version-specifiers.rst:361 msgid "Version epochs" @@ -25609,10 +29801,12 @@ msgid "" "If included in a version identifier, the epoch appears before all other " "components, separated from the release segment by an exclamation mark::" msgstr "" +"如果版本标识符中包含 epoch,epoch 会出现在所有其他组件之前,并通过感叹号与发" +"布段分隔::" #: ../source/specifications/version-specifiers.rst:368 msgid "If no explicit epoch is given, the implicit epoch is ``0``." -msgstr "" +msgstr "如果未显式给出 epoch,则隐式 epoch 为 ``0``。" #: ../source/specifications/version-specifiers.rst:370 msgid "" @@ -25624,6 +29818,11 @@ msgid "" "releases would be identified as *older* than the date based releases when " "using the normal sorting scheme::" msgstr "" +"大多数版本标识符不会包含 epoch,因为只有当项目 *更改* 其版本编号的处理方式," +"并且这种更改会使常规版本排序规则给出错误答案时,才需要显式 epoch。例如,如果" +"项目正在使用 ``2014.04`` 这样基于日期的版本,并希望切换到 ``1.0`` 这样的语义" +"化版本,那么在使用常规排序方案时,新的发布版本会被识别为比基于日期的发布版本 " +"*更旧* ::" #: ../source/specifications/version-specifiers.rst:384 msgid "" @@ -25631,6 +29830,8 @@ msgid "" "appropriately, as all versions from a later epoch are sorted after versions " "from an earlier epoch::" msgstr "" +"不过,通过指定显式 epoch,可以恰当地改变排序顺序,因为较高 epoch 中的所有版本" +"都排在较低 epoch 的版本之后::" #: ../source/specifications/version-specifiers.rst:396 msgid "" @@ -25639,6 +29840,9 @@ msgid "" "consumed, and due to their scarce use they may also not be well supported by " "Python packaging tools." msgstr "" +"不鼓励使用非零 epoch。在可能需要使用 Python 软件包的下游打包体系中,它们往往" +"不受支持或不被鼓励;而且由于很少被使用,Python 打包工具对它们的支持也可能不够" +"完善。" #: ../source/specifications/version-specifiers.rst:401 msgid "" @@ -25646,6 +29850,8 @@ msgid "" "monotonically increasing numbers in epoch zero. For example, the version " "2026.x could be unambiguously followed by 3000.x." msgstr "" +"当需要更改版本方案时,更好的做法是在 epoch 0 中继续使用单调递增的编号。例如," +"版本 2026.x 之后可以毫无歧义地接续 3000.x。" #: ../source/specifications/version-specifiers.rst:405 msgid "" @@ -25653,6 +29859,8 @@ msgid "" "discuss.python.org/t/discouraging-use-of-epoch-segments-in-versions/" "105811>`__ for the relevant discussion." msgstr "" +"相关讨论请参见 `不鼓励在版本中使用 epoch 段 `__ 。" #: ../source/specifications/version-specifiers.rst:413 msgid "Normalization" @@ -25665,10 +29873,12 @@ msgid "" "parsing versions. These syntaxes MUST be considered when parsing a version, " "however they should be \"normalized\" to the standard syntax defined above." msgstr "" +"为了与现有版本保持更好的兼容性,在解析版本时有许多必须加以考虑的“替代”语法。" +"在解析版本时必须考虑这些语法,不过应该将它们“规范化”为上文定义的标准语法。" #: ../source/specifications/version-specifiers.rst:422 msgid "Case sensitivity" -msgstr "" +msgstr "大小写敏感性" #: ../source/specifications/version-specifiers.rst:424 msgid "" @@ -25676,6 +29886,8 @@ msgid "" "and the normal form is lowercase. This allows versions such as ``1.1RC1`` " "which would be normalized to ``1.1rc1``." msgstr "" +"版本中的所有 ASCII 字母都应该以不区分大小写的方式解释,规范形式为小写。这使" +"得 ``1.1RC1`` 这样的版本成为可能,它会被规范化为 ``1.1rc1``。" #: ../source/specifications/version-specifiers.rst:430 msgid "Integer Normalization" @@ -25689,10 +29901,14 @@ msgid "" "does not hold true for integers inside of an alphanumeric segment of a local " "version such as ``1.0+foo0100`` which is already in its normalized form." msgstr "" +"所有整数都通过内置函数 ``int()`` 解释,并规范化为输出的字符串形式。这意味着 " +"``00`` 这样的整数版本会规范化为 ``0``,而 ``09000`` 会规范化为 ``9000``。这一" +"规则不适用于本地版本中由字母数字构成的段内的整数,例如 ``1.0+foo0100``,这样" +"的版本已处于规范化形式。" #: ../source/specifications/version-specifiers.rst:440 msgid "Pre-release separators" -msgstr "" +msgstr "预发布分隔符" #: ../source/specifications/version-specifiers.rst:442 msgid "" @@ -25703,10 +29919,14 @@ msgid "" "be used between the pre-release signifier and the numeral. This allows " "versions such as ``1.0a.1`` which would be normalized to ``1.0a1``." msgstr "" +"预发布版本应该允许在发布段和预发布段之间使用 ``.``、``-`` 或 ``_`` 分隔符。这" +"种情况的标准形式是不使用分隔符。这使得 ``1.1.a1`` 或 ``1.1-a1`` 这样的版本会" +"被规范化为 ``1.1a1``。此外,还应该允许在预发布标记和编号之间使用分隔符。这使" +"得 ``1.0a.1`` 这样的版本会被规范化为 ``1.0a1``。" #: ../source/specifications/version-specifiers.rst:451 msgid "Pre-release spelling" -msgstr "" +msgstr "预发布拼写" #: ../source/specifications/version-specifiers.rst:453 msgid "" @@ -25717,10 +29937,15 @@ msgid "" "case the additional spelling should be considered equivalent to their normal " "forms." msgstr "" +"预发布版本允许为 ``a``、``b``、``rc``、``rc``、``rc`` 分别使用 " +"``alpha``、``beta``、``c``、``pre``、``preview`` 这些附加拼写。这使得 " +"``1.1alpha1``、``1.1beta2`` 或 ``1.1c3`` 这样的版本会分别规范化为 " +"``1.1a1``、``1.1b2`` 和 ``1.1rc3``。在所有情况下,这些附加拼写都应该被视为与" +"其标准形式等价。" #: ../source/specifications/version-specifiers.rst:462 msgid "Implicit pre-release number" -msgstr "" +msgstr "隐式预发布编号" #: ../source/specifications/version-specifiers.rst:464 msgid "" @@ -25729,10 +29954,12 @@ msgid "" "explicitly. This allows versions such as ``1.2a`` which is normalized to " "``1.2a0``." msgstr "" +"预发布版本允许省略编号,此时该编号被隐式地假定为 ``0``。这种情况的标准形式是" +"显式地包含 ``0``。这使得 ``1.2a`` 这样的版本会被规范化为 ``1.2a0``。" #: ../source/specifications/version-specifiers.rst:470 msgid "Post release separators" -msgstr "" +msgstr "后发布分隔符" #: ../source/specifications/version-specifiers.rst:472 msgid "" @@ -25744,10 +29971,15 @@ msgid "" "This allows versions like ``1.2.post-2`` which would normalize to " "``1.2.post2``." msgstr "" +"后发布版本允许使用 ``.``、``-`` 或 ``_`` 分隔符,也允许完全省略分隔符。这种情" +"况的标准形式是使用 ``.`` 分隔符。这使得 ``1.2-post2`` 或 ``1.2post2`` 这样的" +"版本会规范化为 ``1.2.post2``。与预发布分隔符类似,这也允许在后发布标记和编号" +"之间使用可选的分隔符。这使得 ``1.2.post-2`` 这样的版本会被规范化为 " +"``1.2.post2``。" #: ../source/specifications/version-specifiers.rst:481 msgid "Post release spelling" -msgstr "" +msgstr "后发布拼写" #: ../source/specifications/version-specifiers.rst:483 msgid "" @@ -25756,10 +29988,13 @@ msgid "" "with the pre-releases the additional spellings should be considered " "equivalent to their normal forms." msgstr "" +"后发布版本允许使用 ``rev`` 和 ``r`` 这些替代拼写。这使得 ``1.0-r4`` 这样的版" +"本会规范化为 ``1.0.post4``。与预发布版本一样,这些替代拼写也应该被视为与其标" +"准形式等价。" #: ../source/specifications/version-specifiers.rst:490 msgid "Implicit post release number" -msgstr "" +msgstr "隐式后发布编号" #: ../source/specifications/version-specifiers.rst:492 msgid "" @@ -25768,10 +30003,12 @@ msgid "" "explicitly. This allows versions such as ``1.2.post`` which is normalized to " "``1.2.post0``." msgstr "" +"后发布版本允许省略编号,此时该编号被隐式地假定为 ``0``。这种情况的标准形式是" +"显式地包含 ``0``。这使得 ``1.2.post`` 这样的版本会被规范化为 ``1.2.post0``。" #: ../source/specifications/version-specifiers.rst:498 msgid "Implicit post releases" -msgstr "" +msgstr "隐式后发布版本" #: ../source/specifications/version-specifiers.rst:500 msgid "" @@ -25782,10 +30019,14 @@ msgid "" "post release number rule. In other words, ``1.0-`` is *not* a valid version " "and it does *not* normalize to ``1.0.post0``." msgstr "" +"后发布版本允许完全省略 ``post`` 标记。使用这种形式时,分隔符必须是 ``-``,不" +"允许使用其他任何形式。这使得 ``1.0-1`` 这样的版本会被规范化为 ``1.0.post1``。" +"这一特定的规范化不得与隐式后发布编号规则结合使用。换句话说,``1.0-`` *不是* " +"一个有效的版本,并且 *不会* 规范化为 ``1.0.post0``。" #: ../source/specifications/version-specifiers.rst:509 msgid "Development release separators" -msgstr "" +msgstr "开发发布分隔符" #: ../source/specifications/version-specifiers.rst:511 msgid "" @@ -25794,10 +30035,13 @@ msgid "" "``.`` separator. This allows versions such as ``1.2-dev2`` or ``1.2dev2`` " "which normalize to ``1.2.dev2``." msgstr "" +"开发发布版本允许使用 ``.``、``-`` 或 ``_`` 分隔符,也允许完全省略分隔符。这种" +"情况的标准形式是使用 ``.`` 分隔符。这使得 ``1.2-dev2`` 或 ``1.2dev2`` 这样的" +"版本会规范化为 ``1.2.dev2``。" #: ../source/specifications/version-specifiers.rst:518 msgid "Implicit development release number" -msgstr "" +msgstr "隐式开发发布编号" #: ../source/specifications/version-specifiers.rst:520 msgid "" @@ -25806,6 +30050,8 @@ msgid "" "``0`` explicitly. This allows versions such as ``1.2.dev`` which is " "normalized to ``1.2.dev0``." msgstr "" +"开发发布版本允许省略编号,此时该编号被隐式地假定为 ``0``。这种情况的标准形式" +"是显式地包含 ``0``。这使得 ``1.2.dev`` 这样的版本会被规范化为 ``1.2.dev0``。" #: ../source/specifications/version-specifiers.rst:527 msgid "Local version segments" @@ -25818,10 +30064,13 @@ msgid "" "using the ``.`` character. This allows versions such as ``1.0+ubuntu-1`` to " "be normalized to ``1.0+ubuntu.1``." msgstr "" +"对于本地版本,除了使用 ``.`` 作为段之间的分隔符之外,还接受使用 ``-`` 和 " +"``_``。标准形式是使用 ``.`` 字符。这使得 ``1.0+ubuntu-1`` 这样的版本会被规范" +"化为 ``1.0+ubuntu.1``。" #: ../source/specifications/version-specifiers.rst:536 msgid "Preceding v character" -msgstr "" +msgstr "前导 v 字符" #: ../source/specifications/version-specifiers.rst:538 msgid "" @@ -25831,10 +30080,13 @@ msgid "" "version. The same version with and without the ``v`` is considered " "equivalent." msgstr "" +"为了支持 ``v1.0`` 这种常见的版本写法,版本号前面可以带一个单独的字面 ``v`` 字" +"符。在任何用途中都必须忽略该字符,并且应当从版本的所有规范化形式中省略它。同" +"一版本带不带 ``v`` 均被视为等价。" #: ../source/specifications/version-specifiers.rst:545 msgid "Leading and Trailing Whitespace" -msgstr "" +msgstr "前导和尾随空白字符" #: ../source/specifications/version-specifiers.rst:547 msgid "" @@ -25844,10 +30096,13 @@ msgid "" "be handled sensibly, such as a version like ``1.0\\n`` which normalizes to " "``1.0``." msgstr "" +"版本的前导和尾随空白字符必须被静默忽略,并从版本的所有规范化形式中移除。这包" +"括 ``\" \"``、``\\t``、``\\n``、``\\r``、``\\f`` 和 ``\\v``。这样就可以妥善处" +"理意外混入的空白字符,例如 ``1.0\\n`` 这样的版本会被规范化为 ``1.0``。" #: ../source/specifications/version-specifiers.rst:554 msgid "Examples of compliant version schemes" -msgstr "" +msgstr "符合规范的版本格式示例" #: ../source/specifications/version-specifiers.rst:556 msgid "" @@ -25858,6 +30113,9 @@ msgid "" "figuring out the relative order of versions, even though the rules above " "ensure all compliant tools will order them consistently." msgstr "" +"标准版本格式旨在涵盖公共和私有 Python 项目中各种各样的版本标识实践。在实践中" +",如果单个项目试图利用该格式所提供的全部灵活性,就会让人类用户难以判断各版本" +"之间的相对顺序,尽管上述规则确保所有合规的工具都会对它们进行一致的排序。" #: ../source/specifications/version-specifiers.rst:563 msgid "" @@ -25866,35 +30124,37 @@ msgid "" "ensuring that the \"latest release\" and the \"latest stable release\" can " "be easily determined, both by human users and automated tools." msgstr "" +"以下示例展示了项目可用来标识其发布版本的多种做法中的一小部分,同时仍确保人类" +"用户和自动化工具都能轻松确定 \"最新发布\" 和 \"最新稳定发布\"。" #: ../source/specifications/version-specifiers.rst:568 msgid "Simple \"major.minor\" versioning::" -msgstr "" +msgstr "简易 \"major.minor\" 版本编号::" #: ../source/specifications/version-specifiers.rst:577 msgid "Simple \"major.minor.micro\" versioning::" -msgstr "" +msgstr "简易 \"major.minor.micro\" 版本编号::" #: ../source/specifications/version-specifiers.rst:585 msgid "" "\"major.minor\" versioning with alpha, beta and candidate pre-releases::" -msgstr "" +msgstr "带 alpha、beta 和候选发布等预发布版本的 \"major.minor\" 版本编号::" #: ../source/specifications/version-specifiers.rst:597 msgid "" "\"major.minor\" versioning with developmental releases, release candidates " "and post-releases for minor corrections::" -msgstr "" +msgstr "带开发版、候选发布版和用于轻微更正的后发布版的 \"major.minor\" 版本编号::" #: ../source/specifications/version-specifiers.rst:612 msgid "" "Date based releases, using an incrementing serial within each year, skipping " "zero::" -msgstr "" +msgstr "基于日期的发布,在每年内使用递增的序号,并跳过零::" #: ../source/specifications/version-specifiers.rst:626 msgid "Summary of permitted suffixes and relative ordering" -msgstr "" +msgstr "允许的后缀及相对排序总结" #: ../source/specifications/version-specifiers.rst:630 msgid "" @@ -25902,6 +30162,8 @@ msgid "" "process distribution metadata, rather than developers of Python " "distributions deciding on a versioning scheme." msgstr "" +"本节主要面向自动处理分发包元数据的工具作者,而非需要决定版本编号方案的 " +"Python 分发包开发者。" #: ../source/specifications/version-specifiers.rst:634 msgid "" @@ -25909,6 +30171,8 @@ msgid "" "numeric value of the given epoch. If no epoch segment is present, the " "implicit numeric value is ``0``." msgstr "" +"版本标识符的 epoch 段必须按照给定 epoch 的数值排序。如果不存在 epoch 段,则隐" +"含的数值为 ``0``。" #: ../source/specifications/version-specifiers.rst:638 msgid "" @@ -25916,18 +30180,22 @@ msgid "" "as Python's tuple sorting when the normalized release segment is parsed as " "follows::" msgstr "" +"当规范化的发布段按如下方式解析时,版本标识符的发布段必须按照与 Python 元组排" +"序相同的顺序进行排序::" #: ../source/specifications/version-specifiers.rst:644 msgid "" "All release segments involved in the comparison MUST be converted to a " "consistent length by padding shorter segments with zeros as needed." -msgstr "" +msgstr "参与比较的所有发布段都必须根据需要用零填充较短的段,以转换为一致的长度。" #: ../source/specifications/version-specifiers.rst:647 msgid "" "Within a numeric release (``1.0``, ``2.7.3``), the following suffixes are " "permitted and MUST be ordered as shown::" msgstr "" +"在数字发布版本(``1.0``、``2.7.3``)中,允许使用以下后缀,并且必须按显示的顺" +"序排序::" #: ../source/specifications/version-specifiers.rst:652 msgid "" @@ -25936,6 +30204,9 @@ msgid "" "same ``N`` for both a ``c`` and a ``rc`` in the same release segment as " "ambiguous and remain in compliance with the specification." msgstr "" +"请注意,``c`` 在语义上被视为等价于 ``rc``,并且必须像 ``rc`` 那样排序。对于在" +"同一发布段中 ``c`` 和 ``rc`` 使用了相同 ``N`` 的情况,工具可以将其视为有歧义" +"而拒绝,并且仍然符合本规范。" #: ../source/specifications/version-specifiers.rst:657 msgid "" @@ -25943,12 +30214,14 @@ msgid "" "(``1.0rc1``, ``1.0c1``), the following suffixes are permitted and MUST be " "ordered as shown::" msgstr "" +"在 alpha(``1.0a1``)、beta(``1.0b1``)或候选发布(``1.0rc1``、``1.0c1``)中" +",允许使用以下后缀,并且必须按显示的如下顺序排序::" #: ../source/specifications/version-specifiers.rst:663 msgid "" "Within a post-release (``1.0.post1``), the following suffixes are permitted " "and MUST be ordered as shown::" -msgstr "" +msgstr "在后发布版本(``1.0.post1``)中,允许使用以下后缀,并且必须按显示的顺序排序::" #: ../source/specifications/version-specifiers.rst:668 msgid "" @@ -25956,20 +30229,24 @@ msgid "" "used immediately following a numeric version (e.g. ``1.0.dev456``, " "``1.0.post1``)." msgstr "" +"请注意,``devN`` 和 ``postN`` 之前必须始终带有一个点号,即使紧跟在数字版本号" +"之后使用也是如此(例如 ``1.0.dev456``、``1.0.post1``)。" #: ../source/specifications/version-specifiers.rst:672 msgid "" "Within a pre-release, post-release or development release segment with a " "shared prefix, ordering MUST be by the value of the numeric component." msgstr "" +"对于具有相同前缀的预发布段、后发布段或开发发布段,必须按数字组件的值进行排序" +"。" #: ../source/specifications/version-specifiers.rst:675 msgid "The following example covers many of the possible combinations::" -msgstr "" +msgstr "以下示例涵盖了许多可能的组合::" #: ../source/specifications/version-specifiers.rst:700 msgid "Version ordering across different metadata versions" -msgstr "" +msgstr "不同元数据版本之间的版本排序" #: ../source/specifications/version-specifiers.rst:702 msgid "" @@ -25977,6 +30254,9 @@ msgid "" "standard version identification or ordering scheme. However metadata v1.2 " "(:pep:`345`) does specify a scheme which is defined in :pep:`386`." msgstr "" +"元数据 v1.0(:pep:`241`)和元数据 v1.1(:pep:`314`)没有定义标准的版本标识或" +"排序方案。不过,元数据 v1.2(:pep:`345`)确实定义了一种方案,该方案在 " +":pep:`386` 中定义。" #: ../source/specifications/version-specifiers.rst:706 msgid "" @@ -25988,6 +30268,10 @@ msgid "" "requirements necessitate a standardization across one parsing mechanism to " "be used for all versions of a project." msgstr "" +"由于简单安装器 API 的固有特性,安装器无法得知某个分发包使用的是哪个版本的元数" +"据。此外,安装器还需要能够构建一个排定了合理优先级的列表,其中包含某个项目的" +"全部版本(或尽可能多的版本),以便确定应安装哪些版本。这些需求要求将单一解析" +"机制标准化,用于一个项目的所有版本。" #: ../source/specifications/version-specifiers.rst:714 msgid "" @@ -25998,16 +30282,19 @@ msgid "" "and ordering schemes if no versions complying with this specification are " "available." msgstr "" +"基于上述原因,本规范必须用于所有版本的元数据,并且即使对于元数据 v1.2,也取代" +"了 :pep:`386`。工具应该忽略任何无法按本规范规则解析的版本,但如果没有任何符合" +"本规范的版本可用,则可以回退到由实现定义的版本解析和排序方案。" #: ../source/specifications/version-specifiers.rst:720 msgid "" "Distribution users may wish to explicitly remove non-compliant versions from " "any private package indexes they control." -msgstr "" +msgstr "分发包用户可能希望从他们控制的任何私有包索引中显式移除不合规的版本。" #: ../source/specifications/version-specifiers.rst:725 msgid "Compatibility with other version schemes" -msgstr "" +msgstr "与其他版本格式的兼容性" #: ../source/specifications/version-specifiers.rst:727 msgid "" @@ -26017,6 +30304,9 @@ msgid "" "the metadata while the translated public version is published in the version " "field." msgstr "" +"一些项目可能选择使用的版本格式需要经过转换,才能符合本规范定义的公共版本格式" +"。在这种情况下,项目专属版本可以存储在元数据中,而转换后的公共版本则发布在版" +"本字段中。" #: ../source/specifications/version-specifiers.rst:732 msgid "" @@ -26024,6 +30314,8 @@ msgid "" "ordering of published releases, while still allowing developers to use the " "internal versioning scheme they prefer for their projects." msgstr "" +"这使得自动化的分发包工具能够为已发布的版本提供始终正确的排序,同时仍允许开发" +"者为自己的项目使用其偏好的内部版本控制方案。" #: ../source/specifications/version-specifiers.rst:740 msgid "" @@ -26035,6 +30327,10 @@ msgid "" "on other distributions, and when publishing a distribution that others rely " "on." msgstr "" +"`语义版本控制`_ 是一种流行的版本标识方案。对于版本号中不同元素的重要性,它比" +"本规范具有更强的规定性。即使项目选择不遵循语义版本控制的细节,这一方案也值得" +"了解,因为它涵盖了依赖其他分发包时以及发布被他人所依赖的分发包时可能出现的许" +"多问题。" #: ../source/specifications/version-specifiers.rst:747 msgid "" @@ -26043,6 +30339,9 @@ msgid "" "2.0.0 specification) are fully compatible with the version scheme defined in " "this specification, and abiding by these aspects is encouraged." msgstr "" +"语义版本控制的 \"Major.Minor.Patch\"(在本规范中描述为 " +"\"major.minor.micro\")方面(2.0.0 规范中的第 1 至 8 条)与本规范定义的版本格" +"式完全兼容,并且鼓励遵循这些方面。" #: ../source/specifications/version-specifiers.rst:752 msgid "" @@ -26050,6 +30349,8 @@ msgid "" "sign (builds - clause 11) are *not* compatible with this specification and " "are not permitted in the public version field." msgstr "" +"包含连字符(预发布版本,第 10 条)或加号(构建,第 11 条)的语义版本与本规范 " +"*不* 兼容,并且不允许出现在公共版本字段中。" #: ../source/specifications/version-specifiers.rst:756 msgid "" @@ -26057,15 +30358,17 @@ msgid "" "labels to compatible public versions is to use the ``.devN`` suffix to " "specify the appropriate version order." msgstr "" +"将这类基于语义版本控制的源码标签转换为兼容公共版本的一种可行机制,是使用 " +"``.devN`` 后缀来指定相应的版本顺序。" #: ../source/specifications/version-specifiers.rst:760 msgid "" "Specific build information may also be included in local version labels." -msgstr "" +msgstr "具体的构建信息也可以包含在本地版本标签中。" #: ../source/specifications/version-specifiers.rst:766 msgid "DVCS based version labels" -msgstr "" +msgstr "基于 DVCS 的版本标签" #: ../source/specifications/version-specifiers.rst:768 msgid "" @@ -26074,6 +30377,9 @@ msgid "" "As hashes cannot be ordered reliably such versions are not permitted in the " "public version field." msgstr "" +"许多构建工具会与 Git 和 Mercurial 等分布式版本控制系统集成,以便在版本标识符" +"中加入用于标识的哈希值。由于哈希值无法被可靠地排序,此类版本不允许出现在公共" +"版本字段中。" #: ../source/specifications/version-specifiers.rst:773 msgid "" @@ -26081,15 +30387,17 @@ msgid "" "uniquely identify such releases for publication, while the original DVCS " "based label can be stored in the project metadata." msgstr "" +"与语义版本控制一样,可以使用公共的 ``.devN`` 后缀来唯一标识此类待发布的版本," +"而原始的基于 DVCS 的标签则可以存储在项目元数据中。" #: ../source/specifications/version-specifiers.rst:777 msgid "" "Identifying hash information may also be included in local version labels." -msgstr "" +msgstr "用于标识的哈希信息也可以包含在本地版本标签中。" #: ../source/specifications/version-specifiers.rst:781 msgid "Olson database versioning" -msgstr "" +msgstr "Olson 数据库版本编号" #: ../source/specifications/version-specifiers.rst:783 msgid "" @@ -26097,6 +30405,8 @@ msgid "" "Olson timezone database versioning scheme: the year followed by a lowercase " "character indicating the version of the database within that year." msgstr "" +"``pytz`` 项目的版本编号方案继承自相应的 Olson 时区数据库版本编号方案:年份后" +"跟一个小写字母,表示该年内数据库的版本。" #: ../source/specifications/version-specifiers.rst:787 msgid "" @@ -26105,46 +30415,50 @@ msgid "" "release) and is incremented with each subsequent database update within the " "year." msgstr "" +"这可以转换为符合规范的公共版本标识符 ``.``,其中序号从零或一开" +"始(对应 'a' 发布),并在该年内随每次后续数据库更新而递增。" #: ../source/specifications/version-specifiers.rst:792 msgid "" "As with other translated version identifiers, the corresponding Olson " "database version could be recorded in the project metadata." msgstr "" +"与其他转换而来的版本标识符一样,相应的 Olson 数据库版本可以记录在项目元数据中" +"。" #: ../source/specifications/version-specifiers.rst:799 msgid "" "A version specifier consists of a series of version clauses, separated by " "commas. For example::" -msgstr "" +msgstr "版本说明符由一系列版本子句组成,子句之间以逗号分隔。例如::" #: ../source/specifications/version-specifiers.rst:804 msgid "The comparison operator determines the kind of version clause:" -msgstr "" +msgstr "比较操作符决定了版本子句的类型:" #: ../source/specifications/version-specifiers.rst:806 msgid "``~=``: `Compatible release`_ clause" -msgstr "" +msgstr "``~=``:`兼容发布`_ 子句" #: ../source/specifications/version-specifiers.rst:807 msgid "``==``: `Version matching`_ clause" -msgstr "" +msgstr "``==``:`版本匹配`_ 子句" #: ../source/specifications/version-specifiers.rst:808 msgid "``!=``: `Version exclusion`_ clause" -msgstr "" +msgstr "``!=``:`版本排除`_ 子句" #: ../source/specifications/version-specifiers.rst:809 msgid "``<=``, ``>=``: `Inclusive ordered comparison`_ clause" -msgstr "" +msgstr "``<=``、``>=``:`包含性有序比较`_ 子句" #: ../source/specifications/version-specifiers.rst:810 msgid "``<``, ``>``: `Exclusive ordered comparison`_ clause" -msgstr "" +msgstr "``<``、``>``:`排他性有序比较`_ 子句" #: ../source/specifications/version-specifiers.rst:811 msgid "``===``: `Arbitrary equality`_ clause." -msgstr "" +msgstr "``===``:`任意相等`_ 子句。" #: ../source/specifications/version-specifiers.rst:813 msgid "" @@ -26152,12 +30466,14 @@ msgid "" "version must match all given version clauses in order to match the specifier " "as a whole." msgstr "" +"逗号(\",\")等价于逻辑 **与** 操作符:候选版本必须匹配所有给定的版本子句,才" +"能匹配整个版本说明符。" #: ../source/specifications/version-specifiers.rst:817 msgid "" "Whitespace between a conditional operator and the following version " "identifier is optional, as is the whitespace around the commas." -msgstr "" +msgstr "条件操作符与其后版本标识符之间的空白是可选的,逗号周围的空白亦然。" #: ../source/specifications/version-specifiers.rst:820 msgid "" @@ -26167,6 +30483,9 @@ msgid "" "releases are considered as candidate versions SHOULD be handled as described " "in `Handling of pre-releases`_." msgstr "" +"当多个候选版本匹配某个版本说明符时,首选版本应该是根据标准 `版本格式`_ 定义的" +"一致排序所确定的最新版本。预发布版本是否应被视为候选版本,应该按照 `预发布版" +"本的处理`_ 中的描述进行处理。" #: ../source/specifications/version-specifiers.rst:826 msgid "" @@ -26174,10 +30493,12 @@ msgid "" "permitted in version specifiers, and local version labels MUST be ignored " "entirely when checking if candidate versions match a given version specifier." msgstr "" +"除下文特别注明的情况外,版本说明符中不得允许本地版本标识符,并且在检查候选版" +"本是否匹配给定版本说明符时,必须完全忽略本地版本标签。" #: ../source/specifications/version-specifiers.rst:835 msgid "Compatible release" -msgstr "" +msgstr "兼容发布" #: ../source/specifications/version-specifiers.rst:837 msgid "" @@ -26185,6 +30506,8 @@ msgid "" "``~=`` and a version identifier. It matches any candidate version that is " "expected to be compatible with the specified version." msgstr "" +"兼容发布子句由兼容发布操作符 ``~=`` 和一个版本标识符组成。它会匹配预期与指定" +"版本相兼容的任何候选版本。" #: ../source/specifications/version-specifiers.rst:841 msgid "" @@ -26192,22 +30515,24 @@ msgid "" "`Version scheme`_. Local version identifiers are NOT permitted in this " "version specifier." msgstr "" +"指定的版本标识符必须符合 `版本格式`_ 中所述的标准格式。此版本说明符中不得使用" +"本地版本标识符。" #: ../source/specifications/version-specifiers.rst:845 msgid "" "For a given release identifier ``V.N``, the compatible release clause is " "approximately equivalent to the pair of comparison clauses::" -msgstr "" +msgstr "对于给定的发布标识符 ``V.N``,兼容的发布子句近似等价于如下这对比较子句::" #: ../source/specifications/version-specifiers.rst:850 msgid "" "This operator MUST NOT be used with a single segment version number such as " "``~=1``." -msgstr "" +msgstr "此操作符不得与 ``~=1`` 这样的单段版本号一起使用。" #: ../source/specifications/version-specifiers.rst:853 msgid "For example, the following groups of version clauses are equivalent::" -msgstr "" +msgstr "例如,以下各组版本子句是等价的::" #: ../source/specifications/version-specifiers.rst:861 msgid "" @@ -26215,6 +30540,8 @@ msgid "" "compatible release clause as ``V.N.suffix``, then the suffix is ignored when " "determining the required prefix match::" msgstr "" +"如果在兼容发布子句中以 ``V.N.suffix`` 的形式指定了预发布版本、后发布版本或开" +"发版本,则在确定所需的前缀匹配时会忽略该后缀::" #: ../source/specifications/version-specifiers.rst:871 msgid "" @@ -26222,6 +30549,8 @@ msgid "" "degree of forward compatibility in a compatible release clause can be " "controlled by appending additional zeros to the version specifier::" msgstr "" +"发布段比较的填充规则意味着,可以通过在版本说明符末尾附加额外的零来控制兼容的" +"发布子句中假定的前向兼容程度::" #: ../source/specifications/version-specifiers.rst:883 msgid "Version matching" @@ -26231,7 +30560,7 @@ msgstr "版本匹配" msgid "" "A version matching clause includes the version matching operator ``==`` and " "a version identifier." -msgstr "" +msgstr "版本匹配子句包括版本匹配操作符 ``==`` 和一个版本标识符。" #: ../source/specifications/version-specifiers.rst:888 msgid "" @@ -26239,6 +30568,8 @@ msgid "" "`Version scheme`_, but a trailing ``.*`` is permitted on public version " "identifiers as described below." msgstr "" +"指定的版本标识符必须符合 `版本格式`_ 中所述的标准格式,但如下文所述,公共版本" +"标识符允许带有尾部 ``.*``。" #: ../source/specifications/version-specifiers.rst:892 msgid "" @@ -26248,6 +30579,9 @@ msgid "" "release segment to ensure the release segments are compared with the same " "length." msgstr "" +"默认情况下,版本匹配操作符基于严格的相等比较:指定的版本必须与所请求的版本完" +"全相同。所执行的 *唯一* 替换是对发布段进行零填充,以确保各发布段以相同的长度" +"进行比较。" #: ../source/specifications/version-specifiers.rst:898 msgid "" @@ -26256,6 +30590,8 @@ msgid "" "issue warnings and MAY reject them entirely when strict version matches are " "used inappropriately." msgstr "" +"当严格版本匹配被不恰当地使用时,自动化工具至少应该发出警告,并且可以完全拒绝" +"此类匹配。严格版本匹配是否合适,取决于版本说明符的具体使用场景。" #: ../source/specifications/version-specifiers.rst:903 msgid "" @@ -26266,13 +30602,17 @@ msgid "" "specified version includes only a release segment, then trailing components " "(or the lack thereof) in the release segment are also ignored." msgstr "" +"通过在版本匹配子句中的版本标识符末尾附加 ``.*``,可以请求使用前缀匹配来代替严" +"格比较。这意味着在判定版本标识符是否匹配该子句时,额外的尾部段将被忽略。如果" +"指定的版本仅包含发布段,那么发布段中的尾部组件(或尾部组件的缺失)也会被忽略" +"。" #: ../source/specifications/version-specifiers.rst:910 #: ../source/specifications/version-specifiers.rst:971 msgid "" "For example, given the version ``1.1.post1``, the following clauses would " "match or not as shown::" -msgstr "" +msgstr "例如,给定版本 ``1.1.post1``,以下子句的匹配情况如下所示::" #: ../source/specifications/version-specifiers.rst:917 msgid "" @@ -26280,6 +30620,8 @@ msgid "" "have an implied preceding ``.``, so given the version ``1.1a1``, the " "following clauses would match or not as shown::" msgstr "" +"就前缀匹配而言,预发布段被视为隐含了一个前置的 ``.``,因此给定版本 " +"``1.1a1``,以下子句的匹配情况如下所示::" #: ../source/specifications/version-specifiers.rst:925 msgid "" @@ -26288,6 +30630,8 @@ msgid "" "identifiers). Given the version ``1.1``, the following clauses would match " "or not as shown::" msgstr "" +"精确匹配也被视为一种前缀匹配(这一解释由版本标识符发布段通常的零填充规则所隐" +"含)。给定版本 ``1.1``,以下子句的匹配情况如下所示::" #: ../source/specifications/version-specifiers.rst:937 msgid "" @@ -26297,6 +30641,9 @@ msgid "" "version, and the local version is ignored for comparison purposes, so using " "either in a prefix match wouldn't make any sense." msgstr "" +"前缀匹配中包含开发版本或本地版本(例如 ``1.0.dev1.*`` 或 ``1.0+foo1.*``)是无" +"效的。如果存在,开发发布段始终是公共版本的最后一个段,而本地版本在比较时会被" +"忽略,因此在前缀匹配中使用二者之一毫无意义。" #: ../source/specifications/version-specifiers.rst:943 msgid "" @@ -26307,6 +30654,9 @@ msgid "" "for repeatable *deployments of applications* while using a shared " "distribution index." msgstr "" +"在为已发布的分发包定义依赖项时,强烈不建议使用 ``==`` (除非至少带有通配符后" +"缀),因为这会大大增加安全修复部署的复杂性。严格版本比较操作符主要用于在使用" +"共享的分发包索引时,为可重复的 *应用程序部署* 定义依赖项。" #: ../source/specifications/version-specifiers.rst:950 msgid "" @@ -26314,6 +30664,8 @@ msgid "" "version label), then the local version label of any candidate versions MUST " "be ignored when matching versions." msgstr "" +"如果指定的版本标识符是公共版本标识符(没有本地版本标签),那么在匹配版本时," +"必须忽略任何候选版本的本地版本标签。" #: ../source/specifications/version-specifiers.rst:954 msgid "" @@ -26323,6 +30675,9 @@ msgid "" "above, and the local version label being checked for equivalence using a " "strict string equality comparison." msgstr "" +"如果指定的版本标识符是本地版本标识符,那么在匹配版本时必须考虑候选版本的本地" +"版本标签:公共版本标识符按上述方式匹配,本地版本标签则通过严格的字符串相等比" +"较来检查其等价性。" #: ../source/specifications/version-specifiers.rst:962 msgid "Version exclusion" @@ -26332,7 +30687,7 @@ msgstr "版本排除" msgid "" "A version exclusion clause includes the version exclusion operator ``!=`` " "and a version identifier." -msgstr "" +msgstr "版本排除子句包括版本排除操作符 ``!=`` 和一个版本标识符。" #: ../source/specifications/version-specifiers.rst:967 msgid "" @@ -26340,10 +30695,12 @@ msgid "" "those of the `Version matching`_ operator, except that the sense of any " "match is inverted." msgstr "" +"允许的版本标识符和比较语义与 `版本匹配`_ 操作符相同,只是任何匹配的判定结果都" +"取反。" #: ../source/specifications/version-specifiers.rst:980 msgid "Inclusive ordered comparison" -msgstr "" +msgstr "包含性有序比较" #: ../source/specifications/version-specifiers.rst:982 msgid "" @@ -26353,26 +30710,29 @@ msgid "" "specified version given the consistent ordering defined by the standard " "`Version scheme`_." msgstr "" +"包含性有序比较子句由一个比较运算符和一个版本标识符组成;在标准 `版本格式`_ 所" +"定义的一致排序规则下,只要候选版本与指定版本的相对位置使比较成立,该子句就会" +"匹配该候选版本。" #: ../source/specifications/version-specifiers.rst:988 msgid "The inclusive ordered comparison operators are ``<=`` and ``>=``." -msgstr "" +msgstr "包含性有序比较运算符为 ``<=`` 和 ``>=``。" #: ../source/specifications/version-specifiers.rst:990 #: ../source/specifications/version-specifiers.rst:1020 msgid "" "As with version matching, the release segment is zero padded as necessary to " "ensure the release segments are compared with the same length." -msgstr "" +msgstr "与版本匹配一样,发布段会根据需要补零,以确保各发布段在比较时长度相同。" #: ../source/specifications/version-specifiers.rst:993 #: ../source/specifications/version-specifiers.rst:1023 msgid "Local version identifiers are NOT permitted in this version specifier." -msgstr "" +msgstr "本版本说明符中不允许使用本地版本标识符。" #: ../source/specifications/version-specifiers.rst:997 msgid "Exclusive ordered comparison" -msgstr "" +msgstr "排他性有序比较" #: ../source/specifications/version-specifiers.rst:999 msgid "" @@ -26383,6 +30743,9 @@ msgid "" "specifically exclude pre-releases, post-releases, and local versions of the " "specified version." msgstr "" +"排他性有序比较 ``>`` 和 ``<`` 与包含性有序比较类似,都是依据标准 `版本格式`_ " +"所定义的一致排序规则,基于候选版本与指定版本的相对位置进行判断。不同的是,它" +"们会明确排除指定版本的预发布版本、后发布版本和本地版本。" #: ../source/specifications/version-specifiers.rst:1005 msgid "" @@ -26393,12 +30756,17 @@ msgid "" "``1.7.1`` but not ``1.7.0.post1`` and ``>1.7.post2`` will allow ``1.7.1`` " "and ``1.7.0.post3`` but not ``1.7.0``." msgstr "" +"排他性有序比较 ``>V`` **不得** 允许给定版本的后发布版本,除非 ``V`` 本身就是" +"一个后发布版本。你可以使用 ``>V.postN`` 来要求版本晚于某个特定的后发布版本(" +"包括之后的其他后发布版本)。例如,``>1.7`` 会允许 ``1.7.1``,但不允许 " +"``1.7.0.post1``;``>1.7.post2`` 会允许 ``1.7.1`` 和 ``1.7.0.post3``,但不允" +"许 ``1.7.0``。" #: ../source/specifications/version-specifiers.rst:1012 msgid "" "The exclusive ordered comparison ``>V`` **MUST NOT** match a local version " "of the specified version." -msgstr "" +msgstr "排他性有序比较 ``>V`` **不得** 匹配指定版本的本地版本。" #: ../source/specifications/version-specifiers.rst:1015 msgid "" @@ -26407,10 +30775,13 @@ msgid "" "Allowing pre-releases that are earlier than, but not equal to a specific pre-" "release may be accomplished by using ``=`` entry as part " "of the URL fragment." msgstr "" +"对于源归档文件引用和 wheel 引用,可以在 URL 片段中包含 ``" +"=`` 条目来指定预期哈希值。" #: ../source/specifications/version-specifiers.rst:1145 msgid "" @@ -26623,6 +31030,9 @@ msgid "" "Automated tools MAY omit warnings about missing hashes for version control " "systems that do not provide hash based commit identifiers." msgstr "" +"对于版本控制引用,应该使用 ``VCS+protocol`` 方案来同时标识版本控制系统和安全" +"传输方式,并且应该使用带基于哈希的提交标识符的版本控制系统。对于不提供基于哈" +"希的提交标识符的版本控制系统,自动化工具可以省略关于缺少哈希值的警告。" #: ../source/specifications/version-specifiers.rst:1151 msgid "" @@ -26631,6 +31041,9 @@ msgid "" "end of the URL using the ``@`` or the ``@#`` " "notation." msgstr "" +"为了处理不支持在 URL 中直接包含提交或标签引用的版本控制系统,可以使用 " +"``@`` 或 ``@#`` 表示法将相应信息附加到 URL 末" +"尾。" #: ../source/specifications/version-specifiers.rst:1158 msgid "" @@ -26642,6 +31055,11 @@ msgid "" "a malicious repo with a particular tag is easy, creating one with a specific " "*hash*, less so)." msgstr "" +"这与 pip 目前支持的 VCS 引用表示法并不 *完全* 相同。首先,分发包名称被移到了" +"前面,而不是作为 URL 的一部分嵌入其中。其次,即使基于标签进行检索,也会包含提" +"交哈希,以满足上文 *每条* 链接都应包含哈希值、从而加大伪造难度的要求(创建带" +"有特定标签的恶意仓库很容易,而创建带有特定 *哈希* 的恶意仓库就没那么容易了)" +"。" #: ../source/specifications/version-specifiers.rst:1166 msgid "Remote URL examples::" @@ -26649,7 +31067,7 @@ msgstr "远程 URL 示例::" #: ../source/specifications/version-specifiers.rst:1174 msgid "File URLs" -msgstr "" +msgstr "文件 URL" #: ../source/specifications/version-specifiers.rst:1176 msgid "" @@ -26658,6 +31076,9 @@ msgid "" "omitted the third slash MUST still exist. The ```` defines what the " "file path on the filesystem that is to be accessed." msgstr "" +"文件 URL 的形式为 ``file:///``。如果省略 ````,则假定其为 " +"``localhost``;而且即使省略了 ````,第三个斜杠也必须仍然存在。``" +"`` 定义了要访问的文件在文件系统中的路径。" #: ../source/specifications/version-specifiers.rst:1181 msgid "" @@ -26666,6 +31087,9 @@ msgid "" "current machine believes matches its own host. In other words, on \\*nix the " "``file://`` scheme can only be used to access paths on the local machine." msgstr "" +"在各类 \\*nix 操作系统上,```` 只允许被省略、取值为 ``localhost``,或者" +"取值为当前机器认为与其自身主机相匹配的其他 FQDN。换句话说,在 \\*nix 上" +",``file://`` 方案只能用于访问本地机器上的路径。" #: ../source/specifications/version-specifiers.rst:1186 msgid "" @@ -26678,10 +31102,17 @@ msgid "" "see `MSDN `_." msgstr "" +"在 Windows 上,文件格式应在适用时把盘符作为 ```` 的一部分(例如 " +"``file:///c:/path/to/a/file``)。与 \\*nix 不同,在 Windows 上 ```` 参" +"数可用于指定位于网络共享上的文件。换句话说,若要把 ``\\\\machine\\volume\\f" +"ile`` 转换为 ``file://`` URL,最终会得到 ``file://machine/volume/file``。有" +"关 Windows 上 ``file://`` URL 的更多信息,请参见 `MSDN `_。" #: ../source/specifications/version-specifiers.rst:1197 msgid "Summary of differences from pkg_resources.parse_version" -msgstr "" +msgstr "与 pkg_resources.parse_version 的差异总结" #: ../source/specifications/version-specifiers.rst:1199 msgid "" @@ -26689,6 +31120,9 @@ msgid "" "the time :pep:`440` was written. After the PEP was accepted, setuptools 6.0 " "and later versions adopted the behaviour described here." msgstr "" +"注意:这里的比较针对的是编写 :pep:`440` 时的 " +"``pkg_resources.parse_version``。在该 PEP 被接受之后,setuptools 6.0 及后续版" +"本采用了此处描述的行为。" #: ../source/specifications/version-specifiers.rst:1203 msgid "" @@ -26696,6 +31130,8 @@ msgid "" "as greater than the same version without a local version, whereas " "``pkg_resources.parse_version`` considers it a pre-release marker." msgstr "" +"本地版本的排序方式不同:本规范要求它们排在同一版本的不带本地版本的形式之后," +"而 ``pkg_resources.parse_version`` 则将其视为预发布版本的标记。" #: ../source/specifications/version-specifiers.rst:1207 msgid "" @@ -26703,6 +31139,8 @@ msgid "" "version while ``pkg_resources.parse_version`` attempts to provide some " "meaning from *any* arbitrary string." msgstr "" +"本规范有意限制了构成有效版本的语法,而 ``pkg_resources.parse_version`` 则试图" +"从 *任何* 任意字符串中解读出某种含义。" #: ../source/specifications/version-specifiers.rst:1211 msgid "" @@ -26710,10 +31148,13 @@ msgid "" "signifiers like ``1.0.dev1.post1.dev5``. This specification however allows " "only a single use of each type and they must exist in a certain order." msgstr "" +"``pkg_resources.parse_version`` 允许任意深度的嵌套版本标记,例如 " +"``1.0.dev1.post1.dev5``。而本规范只允许每种标记使用一次,并且它们必须按特定顺" +"序出现。" #: ../source/specifications/version-specifiers.rst:1220 msgid "Appendix: Parsing version strings with regular expressions" -msgstr "" +msgstr "附录:使用正则表达式解析版本字符串" #: ../source/specifications/version-specifiers.rst:1222 msgid "" @@ -26723,12 +31164,15 @@ msgid "" "that form, and if it's not, extract the various components for subsequent " "normalization." msgstr "" +"如前文 :ref:`public-version-identifiers` 一节所述,已发布的版本标识符应该使用" +"规范格式。本节提供的正则表达式可用于测试某个版本是否已经符合该格式;如果不符" +"合,则可提取各个组成部分以进行后续的规范化。" #: ../source/specifications/version-specifiers.rst:1228 msgid "" "To test whether a version identifier is in the canonical format, you can use " "the following function:" -msgstr "" +msgstr "要测试某个版本标识符是否为规范格式,你可以使用以下函数:" #: ../source/specifications/version-specifiers.rst:1237 msgid "" @@ -26736,24 +31180,26 @@ msgid "" "expression (as defined by the `packaging `_ project):" msgstr "" +"要提取版本标识符的各个组成部分,请使用以下正则表达式(由 `packaging `_ 项目定义):" #: ../source/specifications/version-specifiers.rst:1284 msgid "August 2014: This specification was approved through :pep:`440`." -msgstr "" +msgstr "2014 年 8 月:本规范通过 :pep:`440` 获得批准。" #: ../source/specifications/version-specifiers.rst:1285 msgid "" "May 2025: Clarify that development releases are a form of pre-release when " "they are handled." -msgstr "" +msgstr "2025 年 5 月:澄清在处理时,开发版本是预发布版本的一种形式。" #: ../source/specifications/version-specifiers.rst:1287 msgid "Nov 2025: Make arbitrary equality case insensitivity explicit." -msgstr "" +msgstr "2025 年 11 月:明确任意相等比较不区分大小写。" #: ../source/specifications/version-specifiers.rst:1288 msgid "Jan 2026: The use of epochs was discouraged." -msgstr "" +msgstr "2026 年 1 月:不鼓励使用 epoch。" #: ../source/specifications/virtual-environments.rst:6 msgid "Python Virtual Environments" @@ -26770,6 +31216,11 @@ msgid "" "environments existed prior to this update, there was no previously " "standardised mechanism for declaring or discovering them." msgstr "" +"对于 Python 3.3 及更高版本,:pep:`405` 为“Python 虚拟环境”这一概念引入了解释" +"器层面的支持。每个虚拟环境都拥有自己的 Python 二进制文件(因而允许创建使用各" +"种 Python 版本的环境),并可以在其站点目录中拥有独立的一组已安装 Python 软件" +"包,但与基础安装的 Python 共享标准库。尽管在此次更新之前虚拟环境的概念就已存" +"在,但此前并没有用于声明或发现虚拟环境的标准化机制。" #: ../source/specifications/virtual-environments.rst:18 msgid "Runtime detection of virtual environments" @@ -26782,6 +31233,9 @@ msgid "" "interpreter) having a different value from :py:data:`sys.base_prefix` (the " "default filesystem location of the standard library directories)." msgstr "" +"在运行时,可以通过 :py:data:`sys.prefix` (正在运行的解释器所在的文件系统位置" +")与 :py:data:`sys.base_prefix` (标准库目录的默认文件系统位置)取值不同来识" +"别虚拟环境。" #: ../source/specifications/virtual-environments.rst:25 msgid "" @@ -26792,6 +31246,10 @@ msgid "" "be reliably used to detect whether a Python program is running in a virtual " "environment or not)." msgstr "" +"Python 标准库文档中 :py:mod:`venv` 模块的 :ref:`venv-explanation` 部分对此有" +"所介绍,同时还介绍了在交互式操作系统 shell 中“激活”虚拟环境的概念(这一激活步" +"骤是可选的,因此它所做的更改无法被可靠地用于检测某个 Python 程序是否运行在虚" +"拟环境中)。" #: ../source/specifications/virtual-environments.rst:33 msgid "Declaring installation environments as Python virtual environments" @@ -26805,6 +31263,9 @@ msgid "" "a ``home`` key that indicates where to find the Python standard library " "modules." msgstr "" +"如 :pep:`405` 所述,最简单形式的 Python 虚拟环境无非是 Python 二进制文件的一" +"份副本或符号链接,再辅以一个 ``site-packages`` 目录和一个 ``pyvenv.cfg`` 文件" +",该文件中的 ``home`` 键指明了在哪里可以找到 Python 标准库模块。" #: ../source/specifications/virtual-environments.rst:40 msgid "" @@ -26814,6 +31275,10 @@ msgid "" "that they are already operating in a virtual environment and no further " "environment nesting is required or desired." msgstr "" +"虽然这种分离式安装加上 ``pyvenv.cfg`` 文件的做法是为满足标准 :py:mod:`venv` " +"模块的需求而设计的,但 *任何* Python 安装提供方,只要希望 Python 专用工具能感" +"知到它们已经运行在虚拟环境中、且既不需要也不希望进一步嵌套环境,就都可以采用" +"这种做法。" #: ../source/specifications/virtual-environments.rst:46 msgid "" @@ -26824,10 +31289,14 @@ msgid "" "in :py:mod:`sysconfig`, will be detected and behave as a Python virtual " "environment." msgstr "" +"即使没有 ``pyvenv.cfg`` 文件,任何能使 :py:data:`sys.prefix` 与 " +":py:data:`sys.base_prefix` 取不同值、同时在 :py:mod:`sysconfig` 中仍提供相匹" +"配的默认软件包安装方案的做法(例如 ``sitecustomize.py``、修补已安装的 Python " +"运行时),都会被检测到并表现为 Python 虚拟环境。" #: ../source/specifications/virtual-environments.rst:56 msgid "May 2012: This specification was approved through :pep:`405`." -msgstr "" +msgstr "2012 年 5 月:本规范通过 :pep:`405` 获得批准。" #: ../source/specifications/well-known-project-urls.rst:5 msgid "Well-known Project URLs in Metadata" @@ -26839,6 +31308,8 @@ msgid "" "use the normalization rules and well-known list below to make their " "presentation of project URLs consistent across the Python ecosystem." msgstr "" +"本文档主要面向元数据 *消费方*,他们应该使用下文的规范化规则和知名标签列表,使" +"其对项目 URL 的呈现方式在整个 Python 生态系统中保持一致。" #: ../source/specifications/well-known-project-urls.rst:14 msgid "" @@ -26847,6 +31318,9 @@ msgid "" "``Project-URL`` length restrictions. However, when possible, users are " "*encouraged* to pick meaningful labels that normalize to well-known labels." msgstr "" +"构建工具和个别软件包维护者等元数据 *生产方*,可以继续使用他们喜欢的任何标签," +"只要遵守 ``Project-URL`` 的总体长度限制。不过在可能的情况下,仍 *鼓励* 用户选" +"择经规范化后能得到知名标签的有意义的标签。" #: ../source/specifications/well-known-project-urls.rst:22 msgid "" @@ -26854,10 +31328,12 @@ msgid "" "for user-oriented guidance on choosing project URL labels in your package's " "metadata." msgstr "" +"关于如何在你的软件包元数据中选择项目 URL 标签,如需面向用户的指导,请参见 " +":ref:`写入你的 pyproject.toml 的 urls 部分 `。" #: ../source/specifications/well-known-project-urls.rst:26 msgid "This specification was originally defined in :pep:`753`." -msgstr "" +msgstr "本规范最初在 :pep:`753` 中定义。" #: ../source/specifications/well-known-project-urls.rst:28 msgid "" @@ -26868,12 +31344,18 @@ msgid "" "semantics assigned to ``Home-page``, ``Download-URL``, or other common " "project URLs." msgstr "" +":pep:`753` 弃用了 :ref:`core-metadata-home-page` 和 :ref:`core-metadata-" +"download-url` 元数据字段,转而采用 :ref:`core-metadata-project-url`,并定义了" +"一套规范化与查找流程,用于判定某个 ``Project-URL`` 是否“知名”,即是否具有赋" +"给 ``Home-page``、``Download-URL`` 或其他常见项目 URL 的语义。" #: ../source/specifications/well-known-project-urls.rst:35 msgid "" "This allows indices (such as the Python Package Index) and other downstream " "metadata consumers to present project URLs in a consistent manner." msgstr "" +"这样,索引(如 Python 包索引)以及其他下游的元数据消费方就能以一致的方式呈现" +"项目 URL。" #: ../source/specifications/well-known-project-urls.rst:42 msgid "Label normalization" @@ -26883,7 +31365,7 @@ msgstr "标签规范化" msgid "" "Label normalization is performed by metadata *consumers*, not metadata " "producers." -msgstr "" +msgstr "标签规范化由元数据 *消费方* 执行,而不是由元数据生产方执行。" #: ../source/specifications/well-known-project-urls.rst:49 msgid "" @@ -26891,28 +31373,32 @@ msgid "" "consumers should normalize the label before comparing it to the :ref:`list " "of well-known labels `." msgstr "" +"要判定某个 ``Project-URL`` 标签是否“知名”,元数据消费方应该先对该标签进行规范" +"化,再将其与 :ref:`知名标签列表 ` 进行比较。" #: ../source/specifications/well-known-project-urls.rst:53 msgid "" "The normalization procedure for ``Project-URL`` labels is defined by the " "following Python function:" -msgstr "" +msgstr "``Project-URL`` 标签的规范化流程由以下 Python 函数定义:" #: ../source/specifications/well-known-project-urls.rst:65 msgid "" "In plain language: a label is *normalized* by deleting all ASCII punctuation " "and whitespace, and then converting the result to lowercase." msgstr "" +"用通俗的话说:标签的 *规范化* 是指删除其中所有 ASCII 标点和空白字符,然后将结" +"果转换为小写。" #: ../source/specifications/well-known-project-urls.rst:68 msgid "" "The following table shows examples of labels before (raw) and after " "normalization:" -msgstr "" +msgstr "下表展示了标签在规范化前(原始形式)与规范化后的示例:" #: ../source/specifications/well-known-project-urls.rst:74 msgid "Raw" -msgstr "" +msgstr "原始" #: ../source/specifications/well-known-project-urls.rst:75 msgid "Normalized" @@ -26920,121 +31406,121 @@ msgstr "已规范化" #: ../source/specifications/well-known-project-urls.rst:76 msgid "``Homepage``" -msgstr "" +msgstr "``Homepage``" #: ../source/specifications/well-known-project-urls.rst:77 #: ../source/specifications/well-known-project-urls.rst:79 #: ../source/specifications/well-known-project-urls.rst:81 msgid "``homepage``" -msgstr "" +msgstr "``homepage``" #: ../source/specifications/well-known-project-urls.rst:78 msgid "``Home-page``" -msgstr "" +msgstr "``Home-page``" #: ../source/specifications/well-known-project-urls.rst:80 msgid "``Home page``" -msgstr "" +msgstr "``Home page``" #: ../source/specifications/well-known-project-urls.rst:82 msgid "``Change_Log``" -msgstr "" +msgstr "``Change_Log``" #: ../source/specifications/well-known-project-urls.rst:83 msgid "``changelog``" -msgstr "" +msgstr "``changelog``" #: ../source/specifications/well-known-project-urls.rst:84 msgid "``What's New?``" -msgstr "" +msgstr "``What's New?``" #: ../source/specifications/well-known-project-urls.rst:85 msgid "``whatsnew``" -msgstr "" +msgstr "``whatsnew``" #: ../source/specifications/well-known-project-urls.rst:86 #: ../source/specifications/well-known-project-urls.rst:87 msgid "``github``" -msgstr "" +msgstr "``github``" #: ../source/specifications/well-known-project-urls.rst:92 msgid "Well-known labels" -msgstr "" +msgstr "知名标签" #: ../source/specifications/well-known-project-urls.rst:96 msgid "" "The list of well-known labels is a living standard, maintained as part of " "this document." -msgstr "" +msgstr "知名标签列表是一项持续演进的标准,作为本文档的一部分加以维护。" #: ../source/specifications/well-known-project-urls.rst:99 msgid "" "The following table lists labels that are well-known for the purpose of " "specializing the presentation of ``Project-URL`` metadata:" -msgstr "" +msgstr "下表列出了便于对 ``Project-URL`` 元数据的呈现做专门处理的知名标签:" #: ../source/specifications/well-known-project-urls.rst:105 msgid "Label (Human-readable equivalent)" -msgstr "" +msgstr "标签(人类可读的等价名称)" #: ../source/specifications/well-known-project-urls.rst:107 msgid "Aliases" -msgstr "" +msgstr "别名" #: ../source/specifications/well-known-project-urls.rst:108 msgid "``homepage`` (Homepage)" -msgstr "" +msgstr "``homepage`` (Homepage)" #: ../source/specifications/well-known-project-urls.rst:109 msgid "The project's home page" -msgstr "" +msgstr "项目的主页" #: ../source/specifications/well-known-project-urls.rst:110 #: ../source/specifications/well-known-project-urls.rst:116 #: ../source/specifications/well-known-project-urls.rst:122 msgid "*(none)*" -msgstr "" +msgstr "*(无)*" #: ../source/specifications/well-known-project-urls.rst:111 msgid "``source`` (Source Code)" -msgstr "" +msgstr "``source`` (Source Code)" #: ../source/specifications/well-known-project-urls.rst:112 msgid "The project's hosted source code or repository" -msgstr "" +msgstr "项目托管的源代码或仓库" #: ../source/specifications/well-known-project-urls.rst:113 msgid "``repository``, ``sourcecode``, ``github``" -msgstr "" +msgstr "``repository``, ``sourcecode``, ``github``" #: ../source/specifications/well-known-project-urls.rst:114 msgid "``download`` (Download)" -msgstr "" +msgstr "``download`` (Download)" #: ../source/specifications/well-known-project-urls.rst:115 msgid "" "A download URL for the current distribution, equivalent to ``Download-URL``" -msgstr "" +msgstr "当前分发包的下载 URL,等价于 ``Download-URL``" #: ../source/specifications/well-known-project-urls.rst:117 msgid "``changelog`` (Changelog)" -msgstr "" +msgstr "``changelog`` (Changelog)" #: ../source/specifications/well-known-project-urls.rst:118 msgid "The project's comprehensive changelog" -msgstr "" +msgstr "项目的完整变更日志" #: ../source/specifications/well-known-project-urls.rst:119 msgid "``changes``, ``whatsnew``, ``history``" -msgstr "" +msgstr "``changes``, ``whatsnew``, ``history``" #: ../source/specifications/well-known-project-urls.rst:120 msgid "``releasenotes`` (Release Notes)" -msgstr "" +msgstr "``releasenotes`` (Release Notes)" #: ../source/specifications/well-known-project-urls.rst:121 msgid "The project's curated release notes" -msgstr "" +msgstr "项目经过精心整理的发布说明" #: ../source/specifications/well-known-project-urls.rst:123 msgid "``documentation`` (Documentation)" @@ -27050,19 +31536,19 @@ msgstr "``docs``" #: ../source/specifications/well-known-project-urls.rst:126 msgid "``issues`` (Issue Tracker)" -msgstr "" +msgstr "``issues`` (Issue Tracker)" #: ../source/specifications/well-known-project-urls.rst:127 msgid "The project's bug tracker" -msgstr "" +msgstr "项目的 bug 跟踪器" #: ../source/specifications/well-known-project-urls.rst:128 msgid "``bugs``, ``issue``, ``tracker``, ``issuetracker``, ``bugtracker``" -msgstr "" +msgstr "``bugs``, ``issue``, ``tracker``, ``issuetracker``, ``bugtracker``" #: ../source/specifications/well-known-project-urls.rst:129 msgid "``funding`` (Funding)" -msgstr "" +msgstr "``funding`` (Funding)" #: ../source/specifications/well-known-project-urls.rst:130 msgid "Funding Information" @@ -27070,64 +31556,85 @@ msgstr "资金信息" #: ../source/specifications/well-known-project-urls.rst:131 msgid "``sponsor``, ``donate``, ``donation``" -msgstr "" +msgstr "``sponsor``, ``donate``, ``donation``" + +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "``security`` (Security Policy)" #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "项目的安全策略或漏洞报告页面" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "``securitypolicy``" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" +"软件包元数据消费方可以选择将别名标签与其“父”知名标签渲染为相同的形式,也可以" +"对别名标签做进一步的专门处理。" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "示例行为" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" +"下面展示了项目 URL 元数据从 ``pyproject.toml`` 到核心元数据、再到索引上一种可" +"能呈现形式的流转过程:" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" -msgstr "" +msgstr "标准配置下的项目 URL 示例" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" -msgstr "" +msgstr "核心元数据表示形式" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" -msgstr "" +msgstr "可能的呈现效果" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " "*consumer* normalizes and identifies appropriate human-readable equivalents " "based on the normalized form:" msgstr "" +"可以看到,核心元数据按用户提供的原样出现(因为元数据 *生产方* 不执行规范化)" +",而元数据 *消费方* 会进行规范化,并根据规范化后的形式识别出合适的人类可读等" +"价名称:" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" -msgstr "" +msgstr "``Home page`` 规范化为 ``homepage``,并渲染为 ``Homepage``" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" -msgstr "" +msgstr "``DOCUMENTATION`` 规范化为 ``documentation``,并渲染为 ``Documentation``" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" -msgstr "" +msgstr "``Repository`` 规范化为 ``repository``,并渲染为 ``Source Code``" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)" msgstr "" +"``GitHub`` 规范化为 ``github``,并渲染为 ``Source Code (GitHub)``,这是 " +"``Source Code`` 的一种特化形式" #: ../source/support.rst:3 msgid "How to Get Support" @@ -27137,7 +31644,7 @@ msgstr "如何获得支持" msgid "" "For support related to a specific project, see the links on " "the :doc:`Projects ` page." -msgstr "" +msgstr "如需与特定项目相关的支持,请参阅 :doc:`项目 ` 页面上的链接。" #: ../source/support.rst:8 msgid "" @@ -27161,6 +31668,8 @@ msgid "" "unmaintained. Please see the `Sphinx tutorial `_ instead." msgstr "" +"本教程已被移除,因为它与打包无关且已无人维护。请改为参阅 `Sphinx 教程 " +"`_。" #: ../source/tutorials/index.rst:4 msgid "" @@ -27168,16 +31677,18 @@ msgid "" "with packaging concepts. For more detailed information on specific packaging " "topics, see :doc:`/guides/index`." msgstr "" +"**教程** 是主观的分步指南,旨在帮助你熟悉打包概念。要了解特定打包主题的更多详" +"细信息,请参阅 :doc:`/guides/index`。" #: ../source/tutorials/installing-packages.rst:5 msgid "Installing Packages" -msgstr "" +msgstr "安装软件包" #: ../source/tutorials/installing-packages.rst:7 msgid "" "This section covers the basics of how to install Python :term:`packages " "`." -msgstr "" +msgstr "本节介绍如何安装 Python :term:`分发包 ` 的基础知识。" #: ../source/tutorials/installing-packages.rst:10 msgid "" @@ -27191,26 +31702,35 @@ msgid "" "preferred, because it can easily be confused with a Linux distribution, or " "another larger software distribution like Python itself." msgstr "" +"需要注意的是,此上下文中的“package”一词用于描述待安装的软件集合(即 :term:`分" +"发包(distribution)` 的同义词)。它并不指你在 Python " +"源代码中导入的那种 :term:`软件包(package)`,即模块的容器。" +"在 Python 社区中,人们通常用“package”一词指代 :term:`分发包(distribution" +")`。“distribution”一词通常不受青睐,因为它很容易与 " +"Linux 发行版(Linux distribution)或像 Python 本身这样更大的软件发行体系混淆" +"。" #: ../source/tutorials/installing-packages.rst:24 msgid "Requirements for Installing Packages" -msgstr "" +msgstr "安装软件包的前提条件" #: ../source/tutorials/installing-packages.rst:26 msgid "" "This section describes the steps to follow before installing other Python " "packages." -msgstr "" +msgstr "本节介绍在安装其他 Python 软件包之前应遵循的步骤。" #: ../source/tutorials/installing-packages.rst:31 msgid "Ensure you can run Python from the command line" -msgstr "" +msgstr "请确保可以在命令行中运行 Python" #: ../source/tutorials/installing-packages.rst:33 msgid "" "Before you go any further, make sure you have Python and that the expected " "version is available from your command line. You can check this by running:" msgstr "" +"在继续之前,请确保你已安装 Python,并且可以在命令行中使用预期的版本。你可以运" +"行以下命令来检查:" #: ../source/tutorials/installing-packages.rst:49 msgid "" @@ -27219,10 +31739,13 @@ msgid "" "the :ref:`Installing Python ` section of the " "Hitchhiker's Guide to Python." msgstr "" +"你应该会得到类似 ``Python 3.6.3`` 的输出。如果你没有安装 Python,请从 " +"`python.org`_ 安装最新的 3.x 版本,或参阅 Hitchhiker's Guide to Python 的 " +":ref:`安装 Python ` 一节。" #: ../source/tutorials/installing-packages.rst:53 msgid "If you're a newcomer and you get an error like this:" -msgstr "" +msgstr "如果你是新手,并且遇到了类似这样的错误:" #: ../source/tutorials/installing-packages.rst:62 msgid "" @@ -27231,6 +31754,9 @@ msgid "" "the Python for Beginners `getting started tutorial`_ for an introduction to " "using your operating system's shell and interacting with Python." msgstr "" +"这是因为本教程中的这条命令以及其他建议的命令都需要在 *shell* 中运行(也称 *终" +"端* 或 *控制台*)。有关使用操作系统的 shell 以及与 Python 交互的入门介绍,请" +"参阅 Python for Beginners 的 `入门教程`_。" #: ../source/tutorials/installing-packages.rst:68 msgid "" @@ -27238,6 +31764,8 @@ msgid "" "can run system commands like those in this tutorial by prefacing them with a " "``!`` character:" msgstr "" +"如果你使用的是 IPython 或 Jupyter notebook 这类增强型 shell,可以在系统命令前" +"加上 ``!`` 字符来运行本教程中的命令:" #: ../source/tutorials/installing-packages.rst:78 msgid "" @@ -27246,6 +31774,9 @@ msgid "" "the currently running notebook (which may not be the same Python " "installation that the ``python`` command refers to)." msgstr "" +"建议写 ``{sys.executable}`` 而不是简单的 ``python``,以确保命令在与当前正在运" +"行的 notebook 相匹配的 Python 安装环境中执行(``python`` 命令所指向的可能并不" +"是同一个 Python 安装环境)。" #: ../source/tutorials/installing-packages.rst:83 msgid "" @@ -27257,16 +31788,21 @@ msgid "" "you get a permissions error, come back to the section on creating virtual " "environments, set one up, and then continue with the tutorial as written." msgstr "" +"由于大多数 Linux 发行版处理 Python 3 迁移的方式,在未先创建虚拟环境的情况下使" +"用系统 Python 的 Linux 用户,应将本教程中的 ``python`` 命令替换为 " +"``python3``,并将 ``python -m pip`` 命令替换为 ``python3 -m pip --user``。*切" +"勿* 使用 ``sudo`` 运行本教程中的任何命令:如果遇到权限错误,请回到创建虚拟环" +"境一节,先创建虚拟环境,然后按教程原文继续操作。" #: ../source/tutorials/installing-packages.rst:95 msgid "Ensure you can run pip from the command line" -msgstr "" +msgstr "请确保可以在命令行中运行 pip" #: ../source/tutorials/installing-packages.rst:97 msgid "" "Additionally, you'll need to make sure you have :ref:`pip` available. You " "can check this by running:" -msgstr "" +msgstr "此外,你还需要确保 :ref:`pip` 可用。你可以运行以下命令来检查:" #: ../source/tutorials/installing-packages.rst:112 msgid "" @@ -27275,21 +31811,25 @@ msgid "" "installed using your OS package manager, you may have to install pip " "separately, see :doc:`/guides/installing-using-linux-tools`." msgstr "" +"如果你是从源代码安装 Python、使用来自 `python.org`_ 的安装程序安装,或是通过 " +"`Homebrew`_ 安装的,那么你应该已经有了 pip。如果你在 Linux 上使用操作系统的软" +"件包管理器安装,则可能需要单独安装 pip,参见 :doc:`/guides/installing-using-" +"linux-tools`。" #: ../source/tutorials/installing-packages.rst:119 msgid "" "If ``pip`` isn't already installed, then first try to bootstrap it from the " "standard library:" -msgstr "" +msgstr "如果尚未安装 ``pip``,请先尝试从标准库引导安装:" #: ../source/tutorials/installing-packages.rst:134 msgid "If that still doesn't allow you to run ``python -m pip``:" -msgstr "" +msgstr "如果这样仍然无法运行 ``python -m pip``:" #: ../source/tutorials/installing-packages.rst:136 msgid "" "Securely Download `get-pip.py `_ [1]_" -msgstr "" +msgstr "安全地下载 `get-pip.py `_ [1]_" #: ../source/tutorials/installing-packages.rst:139 msgid "" @@ -27297,6 +31837,8 @@ msgid "" "Additionally, it may install :ref:`setuptools` and :ref:`wheel` if they're " "not installed already." msgstr "" +"运行 ``python get-pip.py``。[2]_ 这将安装或升级 pip。此外,如果 " +":ref:`setuptools` 和 :ref:`wheel` 尚未安装,它还可能安装这两个软件包。" #: ../source/tutorials/installing-packages.rst:145 msgid "" @@ -27306,20 +31848,24 @@ msgid "" "can use ``python get-pip.py --prefix=/usr/local/`` to install in ``/usr/" "local`` which is designed for locally-installed software." msgstr "" +"如果你使用的 Python 安装由操作系统或其他软件包管理器管理,请谨慎操作。get-" +"pip.py 不会与这些工具协调,可能会使你的系统处于不一致的状态。你可以使用 " +"``python get-pip.py --prefix=/usr/local/`` 安装到 ``/usr/local``,该目录是专" +"为本地安装的软件设计的。" #: ../source/tutorials/installing-packages.rst:154 msgid "Ensure pip is up to date" -msgstr "" +msgstr "请确保 pip 为最新版本" #: ../source/tutorials/installing-packages.rst:156 msgid "" "Make sure you have the latest features and fixes, and support for the latest " "Python packaging specifications." -msgstr "" +msgstr "确保你获得最新的功能和修复,以及对最新 Python 打包规范的支持。" #: ../source/tutorials/installing-packages.rst:172 msgid "Optionally, create a virtual environment" -msgstr "" +msgstr "(可选)创建虚拟环境" #: ../source/tutorials/installing-packages.rst:174 msgid "" @@ -27327,6 +31873,8 @@ msgid "" "details, but here's the basic :doc:`venv ` [3]_ command " "to use on a typical Linux system:" msgstr "" +"详细信息请参见 :ref:`下文 `,以下是" +"在典型 Linux 系统上使用的基本 :doc:`venv ` [3]_ 命令:" #: ../source/tutorials/installing-packages.rst:191 msgid "" @@ -27334,10 +31882,12 @@ msgid "" "subdirectory, and configure the current shell to use it as the default " "``python`` environment." msgstr "" +"这将在 ``tutorial_env`` 子目录中创建一个新的虚拟环境,并配置当前 shell 将其作" +"为默认的 ``python`` 环境。" #: ../source/tutorials/installing-packages.rst:198 msgid "Creating Virtual Environments" -msgstr "" +msgstr "创建虚拟环境" #: ../source/tutorials/installing-packages.rst:200 msgid "" @@ -27347,6 +31897,10 @@ msgid "" "safely install global command line tools, see :doc:`/guides/installing-stand-" "alone-command-line-tools`." msgstr "" +"Python 的“虚拟环境”(Virtual Environments)允许将 Python :term:`分发包 " +"` 安装在针对特定应用的隔离位置,而不是全局安装。如果你" +"想安全地安装全局命令行工具,请参见 :doc:`/guides/installing-stand-alone-" +"command-line-tools`。" #: ../source/tutorials/installing-packages.rst:206 msgid "" @@ -27356,6 +31910,9 @@ msgid "" "your platform’s standard location is), it’s easy to end up in a situation " "where you unintentionally upgrade an application that shouldn’t be upgraded." msgstr "" +"假设你有一个应用需要 LibFoo 的版本 1,而另一个应用需要版本 2。如何同时使用这" +"两个应用?如果将所有内容都安装到 /usr/lib/python3.6/site-packages(或你所使用" +"平台的标准位置)中,就很容易在无意中升级了本不应该升级的应用。" #: ../source/tutorials/installing-packages.rst:212 msgid "" @@ -27363,12 +31920,16 @@ msgid "" "be? If an application works, any change in its libraries or the versions of " "those libraries can break the application." msgstr "" +"或者更一般地说,如果你想安装一个应用后就不再去动它呢?如果一个应用能正常工作" +",其依赖库或这些库版本的任何变化都可能破坏该应用。" #: ../source/tutorials/installing-packages.rst:216 msgid "" "Also, what if you can’t install :term:`packages ` into " "the global site-packages directory? For instance, on a shared host." msgstr "" +"另外,如果你无法将 :term:`分发包 ` 安装到全局 site-" +"packages 目录中怎么办?例如在共享主机上。" #: ../source/tutorials/installing-packages.rst:219 msgid "" @@ -27376,12 +31937,14 @@ msgid "" "installation directories and they don’t share libraries with other virtual " "environments." msgstr "" +"在所有这些情况下,虚拟环境都能帮到你。它们有自己的安装目录,并且不与其他虚拟" +"环境共享库。" #: ../source/tutorials/installing-packages.rst:223 msgid "" "Currently, there are two common tools for creating Python virtual " "environments:" -msgstr "" +msgstr "目前,创建 Python 虚拟环境有两种常用工具:" #: ../source/tutorials/installing-packages.rst:225 msgid "" @@ -27390,6 +31953,9 @@ msgid "" "3.4 and later (Python versions prior to 3.12 also " "installed :ref:`setuptools`)." msgstr "" +":doc:`venv ` 在 Python 3.3 及更高版本中默认可用,并且在 " +"Python 3.4 及更高版本中会将 :ref:`pip` 安装到所创建的虚拟环境中(3.12 之前的 " +"Python 版本还会安装 :ref:`setuptools`)。" #: ../source/tutorials/installing-packages.rst:228 msgid "" @@ -27399,24 +31965,30 @@ msgid "" "``setuptools`` is no longer included by default starting with Python 3.12 " "(and ``virtualenv`` follows this behavior)." msgstr "" +":ref:`virtualenv` 需要单独安装,但支持 Python 2.7+ 和 Python 3.3+,并且默认会" +"将 :ref:`pip`、:ref:`setuptools` 和 :ref:`wheel` 安装到所创建的虚拟环境中。请" +"注意,从 Python 3.12 开始默认不再包含 ``setuptools``,``virtualenv`` 也遵循此" +"行为。" #: ../source/tutorials/installing-packages.rst:233 msgid "The basic usage is like so:" -msgstr "" +msgstr "基本用法如下:" #: ../source/tutorials/installing-packages.rst:235 msgid "Using :doc:`venv `:" -msgstr "" +msgstr "使用 :doc:`venv `:" #: ../source/tutorials/installing-packages.rst:251 msgid "Using :ref:`virtualenv`:" -msgstr "" +msgstr "使用 :ref:`virtualenv`:" #: ../source/tutorials/installing-packages.rst:267 msgid "" "For more information, see the :doc:`venv ` docs or " "the :doc:`virtualenv ` docs." msgstr "" +"更多信息,请参见 :doc:`venv ` 文档或 :doc:`virtualenv " +"` 文档。" #: ../source/tutorials/installing-packages.rst:270 msgid "" @@ -27424,6 +31996,8 @@ msgid "" "environment's variables are set within the current shell, and not in a " "subprocess (which then disappears, having no useful effect)." msgstr "" +"在 Unix shell 下使用 :command:`source` 可以确保虚拟环境的变量在当前 shell 中" +"设置,而不是在子进程中设置(子进程随后就会消失,不会产生任何实际效果)。" #: ../source/tutorials/installing-packages.rst:275 msgid "" @@ -27431,6 +32005,8 @@ msgid "" "the :command:`source` command, but should rather run the :command:`activate` " "script directly from the command shell like so:" msgstr "" +"在上述两种情况下,Windows 用户 *切勿* 使用 :command:`source` 命令,而应直接在" +"命令 shell 中运行 :command:`activate` 脚本,如下所示:" #: ../source/tutorials/installing-packages.rst:285 msgid "" @@ -27439,10 +32015,13 @@ msgid "" "a higher level tool, :ref:`Pipenv`, that automatically manages a separate " "virtual environment for each project and application that you work on." msgstr "" +"直接管理多个虚拟环境可能会变得繁琐,因此 :ref:`依赖管理教程 ` 引入了一个更高级的工具 :ref:`Pipenv`,它会为你参与的每个项目和" +"应用自动管理独立的虚拟环境。" #: ../source/tutorials/installing-packages.rst:292 msgid "Use pip for Installing" -msgstr "" +msgstr "使用 pip 安装" #: ../source/tutorials/installing-packages.rst:294 msgid "" @@ -27450,10 +32029,13 @@ msgid "" "usage scenarios. For more detail, see the :doc:`pip docs `, which " "includes a complete :doc:`Reference Guide `." msgstr "" +":ref:`pip` 是推荐的安装工具。下面我们将介绍最常见的使用场景。更多详细信息,请" +"参见 :doc:`pip 文档 `,其中包含完整的 :doc:`参考指南 `。" #: ../source/tutorials/installing-packages.rst:300 msgid "Installing from PyPI" -msgstr "" +msgstr "从 PyPI 安装" #: ../source/tutorials/installing-packages.rst:302 msgid "" @@ -27465,34 +32047,41 @@ msgid "" "of the supported specifiers can be found in the :ref:`Version specifier " "specification `. Below are some examples." msgstr "" +":ref:`pip` 最常见的用法是使用 :term:`需求说明符 ` 从 " +":term:`Python 包索引 ` 安装。一般来说,需求说明" +"符由项目名称加上可选的 :term:`版本说明符 ` 组成。有关受支" +"持说明符的完整描述,请参见 :ref:`版本说明符规范 `。下面是" +"一些示例。" #: ../source/tutorials/installing-packages.rst:310 msgid "To install the latest version of \"SomeProject\":" -msgstr "" +msgstr "安装“SomeProject”的最新版本:" #: ../source/tutorials/installing-packages.rst:324 msgid "To install a specific version:" -msgstr "" +msgstr "安装特定版本:" #: ../source/tutorials/installing-packages.rst:338 msgid "To install greater than or equal to one version and less than another:" -msgstr "" +msgstr "安装大于等于某一版本且小于另一版本的版本:" #: ../source/tutorials/installing-packages.rst:353 msgid "" "To install a version that's :ref:`compatible ` with a certain version: [4]_" msgstr "" +"安装与某一版本 :ref:`兼容 ` 的版本" +":[4]_" #: ../source/tutorials/installing-packages.rst:368 msgid "" "In this case, this means to install any version \"==1.4.*\" version that's " "also \">=1.4.2\"." -msgstr "" +msgstr "在本例中,这意味着安装任意同时满足“==1.4.*”和“>=1.4.2”的版本。" #: ../source/tutorials/installing-packages.rst:373 msgid "Source Distributions vs Wheels" -msgstr "" +msgstr "源分发与 wheel 包" #: ../source/tutorials/installing-packages.rst:375 msgid "" @@ -27502,6 +32091,10 @@ msgid "" "can override pip`s default behavior by e.g. using its :ref:`--no-binary " "` option." msgstr "" +":ref:`pip` 既可以从 :term:`源分发(sdist)` 安装,也可以从 :term:`wheel 包 ` 安装;但如果 PyPI 上两者" +"同时存在,pip 将优先选择兼容的 :term:`wheel `。你可以通过例如使用 pip " +"的 :ref:`--no-binary ` 选项来覆盖其默认行为。" #: ../source/tutorials/installing-packages.rst:381 msgid "" @@ -27510,6 +32103,9 @@ msgid "" "Distributions (sdist) `, especially when " "a project contains compiled extensions." msgstr "" +":term:`wheel 包 ` 是一种预构建的 :term:`分发包 " +"` 格式,与 :term:`源分发(sdist)` 相比可" +"提供更快的安装速度,尤其是当项目包含已编译的扩展时。" #: ../source/tutorials/installing-packages.rst:386 msgid "" @@ -27517,32 +32113,40 @@ msgid "" "wheel and cache it for future installs, instead of rebuilding the source " "distribution in the future." msgstr "" +"如果 :ref:`pip` 没有找到可安装的 wheel,它会在本地构建一个 wheel 并将其缓存以" +"供将来安装使用,而不是在将来重新构建源分发。" #: ../source/tutorials/installing-packages.rst:394 msgid "Upgrade an already installed ``SomeProject`` to the latest from PyPI." -msgstr "" +msgstr "将已安装的 ``SomeProject`` 升级到 PyPI 上的最新版本。" #: ../source/tutorials/installing-packages.rst:411 msgid "Installing to the User Site" -msgstr "" +msgstr "安装到用户站点" #: ../source/tutorials/installing-packages.rst:413 msgid "" "To install :term:`packages ` that are isolated to the " "current user, use the ``--user`` flag:" msgstr "" +"要安装仅对当前用户生效的 :term:`分发包 `,请使用 ``--" +"user`` 标志:" #: ../source/tutorials/installing-packages.rst:428 msgid "" "For more information see the `User Installs `_ section from the pip docs." msgstr "" +"更多信息,请参见 pip 文档中的 `User Installs `_ 一节。" #: ../source/tutorials/installing-packages.rst:432 msgid "" "Note that the ``--user`` flag has no effect when inside a virtual " "environment - all installation commands will affect the virtual environment." msgstr "" +"请注意,在虚拟环境中时 ``--user`` 标志无效——所有安装命令都将作用于该虚拟环境" +"。" #: ../source/tutorials/installing-packages.rst:435 msgid "" @@ -27554,6 +32158,11 @@ msgid "" "scripts are not available in your shell after installation, you'll need to " "add the directory to your :envvar:`PATH`:" msgstr "" +"如果 ``SomeProject`` 定义了命令行脚本或控制台入口点,``--user`` 会使它们被安" +"装到 `user base`_ 的二进制目录中,而该目录可能已经在你 shell 的 " +":envvar:`PATH` 中,也可能不在。(从版本 10 开始,pip 在将脚本安装到 " +":envvar:`PATH` 之外的目录时会显示警告。)如果安装后这些脚本在你的 shell 中不" +"可用,你需要将该目录添加到 :envvar:`PATH` 中:" #: ../source/tutorials/installing-packages.rst:443 msgid "" @@ -27563,6 +32172,10 @@ msgid "" "path to your home directory) so you'll need to add ``~/.local/bin`` to your " "``PATH``. You can set your ``PATH`` permanently by `modifying ~/.profile`_." msgstr "" +"在 Linux 和 macOS 上,你可以运行 ``python -m site --user-base`` 并在末尾加上 " +"``bin`` 来找到 user base 二进制目录。例如,它通常会输出 ``~/.local``,其中 " +"``~`` 会展开为你的主目录的绝对路径,因此你需要将 ``~/.local/bin`` 添加到 " +"``PATH`` 中。你可以通过 `修改 ~/.profile`_ 来永久设置 ``PATH``。" #: ../source/tutorials/installing-packages.rst:449 msgid "" @@ -27575,40 +32188,48 @@ msgid "" "user ``PATH`` permanently in the `Control Panel`_. You may need to log out " "for the ``PATH`` changes to take effect." msgstr "" +"在 Windows 上,你可以运行 ``py -m site --user-site`` 并将 ``site-packages`` " +"替换为 ``Scripts`` 来找到 user base 二进制目录。例如,它可能返回 ``C:\\U" +"sers\\Username\\AppData\\Roaming\\Python36\\site-packages``,那么你需要将 " +"``C:\\Users\\Username\\AppData\\Roaming\\Python36\\Scripts`` 包含到 ``PATH`` " +"中。你可以在 `控制面板`_ 中永久设置用户 ``PATH``。可能需要注销后 ``PATH`` 的" +"更改才会生效。" #: ../source/tutorials/installing-packages.rst:465 msgid "" "Install a list of requirements specified in a :ref:`Requirements File " "`." -msgstr "" +msgstr "安装 :ref:`需求文件 ` 中指定的需求列表。" #: ../source/tutorials/installing-packages.rst:481 msgid "Installing from VCS" -msgstr "" +msgstr "从 VCS 安装" #: ../source/tutorials/installing-packages.rst:483 msgid "" "Install a project from VCS in \"editable\" mode. For a full breakdown of " "the syntax, see pip's section on :ref:`VCS Support `." msgstr "" +"以“可编辑”模式从 VCS 安装项目。有关语法的完整说明,请参见 pip 文档的 " +":ref:`VCS 支持 ` 一节。" #: ../source/tutorials/installing-packages.rst:505 msgid "Installing from other Indexes" -msgstr "" +msgstr "从其他索引安装" #: ../source/tutorials/installing-packages.rst:507 msgid "Install from an alternate index" -msgstr "" +msgstr "从备用索引安装" #: ../source/tutorials/installing-packages.rst:521 msgid "" "Search an additional index during install, in addition to :term:`PyPI " "`" -msgstr "" +msgstr "安装时除 :term:`PyPI ` 外,还搜索一个额外的索引" #: ../source/tutorials/installing-packages.rst:537 msgid "Installing from a local src tree" -msgstr "" +msgstr "从本地 src 树安装" #: ../source/tutorials/installing-packages.rst:540 msgid "" @@ -27616,24 +32237,28 @@ msgid "" "development_mode>`, i.e. in such a way that the project appears to be " "installed, but yet is still editable from the src tree." msgstr "" +"以 :doc:`开发模式 ` 从本地 src 安装," +"即项目看起来已被安装,但仍可以直接在 src 树中编辑。" #: ../source/tutorials/installing-packages.rst:557 msgid "You can also install normally from src" -msgstr "" +msgstr "你也可以从 src 进行常规安装" #: ../source/tutorials/installing-packages.rst:572 msgid "Installing from local archives" -msgstr "" +msgstr "从本地归档文件安装" #: ../source/tutorials/installing-packages.rst:574 msgid "Install a particular source archive file." -msgstr "" +msgstr "安装特定的源码归档文件。" #: ../source/tutorials/installing-packages.rst:588 msgid "" "Install from a local directory containing archives (and don't " "check :term:`PyPI `)" msgstr "" +"从包含归档文件的本地目录安装(并且不查询 :term:`PyPI `)" #: ../source/tutorials/installing-packages.rst:608 msgid "Installing from other sources" @@ -27646,16 +32271,19 @@ msgid "" "with the :ref:`simple repository API `:, and use the " "``--extra-index-url`` flag to direct pip to use that index." msgstr "" +"要从其他数据源(例如 Amazon S3 存储)安装,你可以创建一个辅助应用,以符合 " +":ref:`简单仓库 API ` 的格式呈现数据,并使用 ``--extra-" +"index-url`` 标志让 pip 使用该索引。" #: ../source/tutorials/installing-packages.rst:622 msgid "Installing Prereleases" -msgstr "" +msgstr "安装预发布版本" #: ../source/tutorials/installing-packages.rst:624 msgid "" "Find pre-release and development versions, in addition to stable versions. " "By default, pip only finds stable versions." -msgstr "" +msgstr "除稳定版本外,还查找预发布版本和开发版本。默认情况下,pip 只查找稳定版本。" #: ../source/tutorials/installing-packages.rst:640 msgid "Installing \"Extras\"" @@ -27668,6 +32296,9 @@ msgid "" "If you wish to install an extra for a package which you know publishes one, " "you can include it in the pip installation command:" msgstr "" +"附加功能(extras)是软件包的可选“变体”,可以包含额外的依赖,从而启用软件包的" +"额外功能。如果你知道某个软件包发布了附加功能并希望安装,可以将其包含在 pip 安" +"装命令中:" #: ../source/tutorials/installing-packages.rst:665 msgid "" @@ -27675,6 +32306,8 @@ msgid "" "like :command:`curl` that verifies SSL certificates when downloading from " "https URLs." msgstr "" +"此上下文中的“安全”是指使用现代浏览器,或像 :command:`curl` 这样在从 https " +"URL 下载时会验证 SSL 证书的工具。" #: ../source/tutorials/installing-packages.rst:674 msgid "" @@ -27682,12 +32315,16 @@ msgid "" "to :ref:`virtualenv`) will create virtualenv environments with ``pip`` pre-" "installed, thereby making it an equal alternative to :ref:`virtualenv`." msgstr "" +"从 Python 3.4 开始,``venv`` 模块(标准库中 :ref:`virtualenv` 的替代方案)创" +"建的 virtualenv 环境将预装 ``pip``,这与 :ref:`virtualenv` 保持一致。" #: ../source/tutorials/installing-packages.rst:679 msgid "" "The compatible release specifier was accepted in :pep:`440` and support was " "released in :ref:`setuptools` v8.0 and :ref:`pip` v6.0" msgstr "" +"兼容性发布(compatible release)说明符已在 :pep:`440` 中被采纳,相关支持已随 " +":ref:`setuptools` v8.0 和 :ref:`pip` v6.0 发布" #: ../source/tutorials/managing-dependencies.rst:4 msgid "Managing Application Dependencies" @@ -27698,6 +32335,8 @@ msgid "" "The :ref:`package installation tutorial ` covered the " "basics of getting set up to install and update Python packages." msgstr "" +":ref:`软件包安装教程 ` 介绍了安装和更新 Python 软件包所" +"需的基础设置。" #: ../source/tutorials/managing-dependencies.rst:9 msgid "" @@ -27706,6 +32345,8 @@ msgid "" "up development environments automatically for projects with multiple " "contributors." msgstr "" +"然而,即便对于你自己的个人项目,以交互方式运行这些命令也会变得繁琐;而当你试" +"图为拥有多名贡献者的项目自动搭建开发环境时,事情还会变得更加困难。" #: ../source/tutorials/managing-dependencies.rst:13 msgid "" @@ -27713,6 +32354,8 @@ msgid "" "dependencies for an application. It will show you how to install and use the " "necessary tools and make strong recommendations on best practices." msgstr "" +"本教程将带你使用 :ref:`Pipenv` 来管理应用程序的依赖项。它会向你展示如何安装和" +"使用必要的工具,并就最佳实践给出强有力的建议。" #: ../source/tutorials/managing-dependencies.rst:17 msgid "" @@ -27723,15 +32366,20 @@ msgid "" "(including web applications), but is also very well suited to managing " "development and testing environments for any kind of project." msgstr "" +"请记住,Python 有着许许多多不同的用途,而你具体希望如何管理依赖项,可能会因你" +"决定发布软件的方式而改变。这里给出的指导最直接适用于网络服务(包括 Web 应用程" +"序)的开发和部署,但同样非常适合管理任何类型项目的开发与测试环境。" #: ../source/tutorials/managing-dependencies.rst:24 msgid "" "For alternatives, see `Other Tools for Application Dependency Management`_." msgstr "" +"如需替代方案,请参见 `Other Tools for Application Dependency Management`_ 一" +"节。" #: ../source/tutorials/managing-dependencies.rst:27 msgid "Installing Pipenv" -msgstr "" +msgstr "安装 Pipenv" #: ../source/tutorials/managing-dependencies.rst:29 msgid "" @@ -27741,10 +32389,14 @@ msgid "" "Pipenv is recommended for collaborative projects as it's a higher-level tool " "that simplifies dependency management for common use cases." msgstr "" +":ref:`Pipenv` 是一个面向 Python 项目的依赖项管理器。如果你熟悉 Node.js 的 " +"`npm`_ 或 Ruby 的 `bundler`_,就会发现它的理念与这些工具类似。虽然对个人使用" +"而言,仅靠 :ref:`pip` 往往就足够了,但是对于多人协作的项目,我们推荐使用 " +"Pipenv,因为它是一款更高层次的工具,简化了常见用例下的依赖项管理。" #: ../source/tutorials/managing-dependencies.rst:35 msgid "Use ``pip`` to install Pipenv:" -msgstr "" +msgstr "使用 ``pip`` 安装 Pipenv:" #: ../source/tutorials/managing-dependencies.rst:51 msgid "" @@ -27754,10 +32406,14 @@ msgid "" "directory to your ``PATH``. See :ref:`Installing to the User Site` for more " "information." msgstr "" +"这会执行 `user installation`_ (用户安装),以免破坏任何系统级软件包。安装之" +"后,如果你的 shell 中无法使用 ``pipenv``,就需要把 :py:data:`用户基目录 " +"` 的二进制目录添加到你的 ``PATH`` 中。更多信息请参见 " +":ref:`安装到用户站点 `。" #: ../source/tutorials/managing-dependencies.rst:62 msgid "Installing packages for your project" -msgstr "" +msgstr "为你的项目安装软件包" #: ../source/tutorials/managing-dependencies.rst:64 msgid "" @@ -27765,6 +32421,8 @@ msgid "" "change into your project's directory (or just an empty directory for this " "tutorial) and run:" msgstr "" +"Pipenv 以项目为单位管理依赖项。要安装软件包,请切换到你的项目目录(本教程中用" +"一个空目录即可),然后运行:" #: ../source/tutorials/managing-dependencies.rst:73 msgid "" @@ -27774,24 +32432,30 @@ msgid "" "when you share your project with others. You should get output similar to " "this (although the exact paths shown will vary):" msgstr "" +"Pipenv 会安装 `Requests`_ 库,并在你的项目目录中为你创建一个 ``Pipfile``。这" +"个 :ref:`Pipfile` 用于跟踪你的项目需要哪些依赖项,这样当你需要重新安装它们(" +"例如与他人共享你的项目)时就有据可查。你应该会看到类似这样的输出(不过其中显" +"示的确切路径会有所不同):" #: ../source/tutorials/managing-dependencies.rst:109 msgid "Using installed packages" -msgstr "" +msgstr "使用已安装的软件包" #: ../source/tutorials/managing-dependencies.rst:111 msgid "" "Now that Requests is installed you can create a simple :file:`main.py` file " "to use it:" msgstr "" +"现在 Requests 已经安装完毕,你可以创建一个简单的 :file:`main.py` 文件来使用它" +":" #: ../source/tutorials/managing-dependencies.rst:122 msgid "Then you can run this script using ``pipenv run``:" -msgstr "" +msgstr "然后你可以使用 ``pipenv run`` 来运行这个脚本:" #: ../source/tutorials/managing-dependencies.rst:128 msgid "You should get output similar to this:" -msgstr "" +msgstr "你应该会看到类似这样的输出:" #: ../source/tutorials/managing-dependencies.rst:134 msgid "" @@ -27799,17 +32463,21 @@ msgid "" "your script. It's also possible to spawn a new shell that ensures all " "commands have access to your installed packages with ``pipenv shell``." msgstr "" +"使用 ``pipenv run`` 可以确保你的脚本能够使用已安装的软件包。你也可以使用 " +"``pipenv shell`` 启动一个新的 shell,确保所有命令都能访问你已安装的软件包。" #: ../source/tutorials/managing-dependencies.rst:140 #: ../source/tutorials/packaging-projects.rst:484 msgid "Next steps" -msgstr "" +msgstr "后续步骤" #: ../source/tutorials/managing-dependencies.rst:142 msgid "" "Congratulations, you now know how to effectively manage dependencies and " "development environments on a collaborative Python project! ✨ 🍰 ✨" msgstr "" +"恭喜你!你现在已经知道如何在多人协作的 Python 项目中高效地管理依赖项和开发环" +"境了!✨ 🍰 ✨" #: ../source/tutorials/managing-dependencies.rst:145 msgid "" @@ -27817,6 +32485,8 @@ msgid "" "see the :ref:`tutorial on packaging and distributing packages `." msgstr "" +"如果你有兴趣创建并分发自己的 Python 软件包,请参阅 :ref:`关于打包和分发软件包" +"的教程 `。" #: ../source/tutorials/managing-dependencies.rst:148 msgid "" @@ -27825,10 +32495,13 @@ msgid "" "environment with ``pipenv install -e `` " "(e.g. ``pipenv install -e .`` or ``pipenv install -e src``)." msgstr "" +"请注意,当你的应用程序包含 Python 源码包的定义时,可以使用 ``pipenv install -" +"e `` (例如 ``pipenv install -e .`` 或 " +"``pipenv install -e src``)把这些包及其依赖项添加到你的 ``pipenv`` 环境中。" #: ../source/tutorials/managing-dependencies.rst:157 msgid "Other Tools for Application Dependency Management" -msgstr "" +msgstr "管理应用程序依赖项的其他工具" #: ../source/tutorials/managing-dependencies.rst:159 msgid "" @@ -27837,6 +32510,8 @@ msgid "" "other tools and techniques, listed in alphabetical order, to see if one of " "them is a better fit:" msgstr "" +"如果你发现这种管理应用程序依赖项的方式并不适合你或你的使用场景,不妨探索一下" +"下面这些按字母顺序列出的其他工具和技术,看看是否有更合适的选择:" #: ../source/tutorials/managing-dependencies.rst:163 msgid "" @@ -27844,6 +32519,8 @@ msgid "" "more steps in the project management workflow, such as incrementing versions " "and creating new skeleton projects from project templates." msgstr "" +"`hatch `_ 以自成一体的风格覆盖了项目管理工作流" +"程中更多的步骤,例如递增版本号以及从项目模板创建新的骨架项目。" #: ../source/tutorials/managing-dependencies.rst:166 msgid "" @@ -27852,12 +32529,18 @@ msgid "" "and Poetry lock files, or converting them to pip-tools compatible output. " "Designed for containerized Python applications, but not limited to them." msgstr "" +"`micropipenv `_ 是 pip 的一个轻" +"量级封装,支持 ``requirements.txt``、Pipenv 和 Poetry 锁文件,也可将它们转换" +"为与 pip-tools 兼容的输出。它专为容器化的 Python 应用程序而设计,但并不限于此" +"。" #: ../source/tutorials/managing-dependencies.rst:170 msgid "" "`PDM `_ for a modern Python package " "management relying on standards such as :pep:`517` and :pep:`621`." msgstr "" +"`PDM `_ 是一种现代的 Python 软件包管理工" +"具,依赖于 :pep:`517` 和 :pep:`621` 等标准。" #: ../source/tutorials/managing-dependencies.rst:172 msgid "" @@ -27865,6 +32548,8 @@ msgid "" "file of all dependencies from a list of packages directly used in a project, " "and ensuring that only those dependencies are installed." msgstr "" +"`pip-tools `_ 用于根据项目中直接使用的" +"软件包列表生成包含所有依赖项的锁文件,并确保只安装这些依赖项。" #: ../source/tutorials/managing-dependencies.rst:175 msgid "" @@ -27875,6 +32560,11 @@ msgid "" "assumption that the application being worked on will support distribution as " "a ``pip``-installable Python package." msgstr "" +"`Poetry `__ 是一款功能范围与 Pipenv " +"相当的工具,更直接地聚焦于这样的用例:所管理的项目本身被组织为一个带有有效 " +"``pyproject.toml`` 文件的可分发 Python 软件包。相比之下,Pipenv 则明确避免这" +"样的假设,即你正在开发的应用程序会支持作为一个可用 ``pip`` 安装的 Python 软件" +"包进行分发。" #: ../source/tutorials/managing-dependencies.rst:180 msgid "" @@ -27882,10 +32572,12 @@ msgid "" "project management workflow, including dependency management, packaging, and " "publishing." msgstr "" +"`uv `__ 是一款覆盖整个项目管理工作流程的单一工具" +",包括依赖项管理、打包和发布。" #: ../source/tutorials/packaging-projects.rst:2 msgid "Packaging Python Projects" -msgstr "" +msgstr "打包 Python 项目" #: ../source/tutorials/packaging-projects.rst:4 msgid "" @@ -27894,6 +32586,9 @@ msgid "" "package, how to build the package, and how to upload it to the Python " "Package Index (PyPI)." msgstr "" +"本教程将引导你完成打包一个简单 Python 项目的过程。它会向你展示如何添加创建软" +"件包所需的文件和结构、如何构建软件包,以及如何将软件包上传到 Python Package " +"Index(PyPI)。" #: ../source/tutorials/packaging-projects.rst:10 msgid "" @@ -27901,16 +32596,18 @@ msgid "" "command and its output, then `open an issue`_ on the `packaging-problems`_ " "repository on GitHub. We'll do our best to help you!" msgstr "" +"如果你在运行本教程中的命令时遇到问题,请复制该命令及其输出,然后在 GitHub 上" +"的 `packaging-problems`_ 存储库中 `提交一个 issue`_。我们会尽力帮助你!" #: ../source/tutorials/packaging-projects.rst:18 msgid "" "Some of the commands require a newer version of :ref:`pip`, so start by " "making sure you have the latest version installed:" -msgstr "" +msgstr "其中一些命令需要较新版本的 :ref:`pip`,因此请先确保你已安装最新版本:" #: ../source/tutorials/packaging-projects.rst:35 msgid "A simple project" -msgstr "" +msgstr "一个简单的项目" #: ../source/tutorials/packaging-projects.rst:37 msgid "" @@ -27921,10 +32618,14 @@ msgid "" "following this tutorial. We recommend following this tutorial as-is using " "this project, before packaging your own project." msgstr "" +"本教程使用一个名为 ``example_package_YOUR_USERNAME_HERE`` 的简单项目。如果你" +"的用户名是 ``me``,那么软件包就是 ``example_package_me``;这可以确保你拥有唯" +"一的软件包名称,不会与按本教程操作的其他人上传的软件包相冲突。我们建议你先按" +"原样使用这个项目完成本教程,然后再打包你自己的项目。" #: ../source/tutorials/packaging-projects.rst:44 msgid "Create the following file structure locally:" -msgstr "" +msgstr "在本地创建以下文件结构:" #: ../source/tutorials/packaging-projects.rst:54 msgid "" @@ -27932,6 +32633,8 @@ msgid "" "This simplifies the configuration and is more obvious to users who install " "the package." msgstr "" +"包含 Python 文件的目录应当与项目名称一致。这样可以简化配置,对安装该软件包的" +"用户来说也更加直观。" #: ../source/tutorials/packaging-projects.rst:57 msgid "" @@ -27940,6 +32643,9 @@ msgid "" "regular package, even if (as is the case in this " "tutorial) :file:`__init__.py` is empty. [#namespace-packages]_" msgstr "" +"建议创建 :file:`__init__.py` 文件,因为存在 :file:`__init__.py` 文件时,用户" +"就可以把这个目录当作常规软件包来导入,即使(如本教程中的情况) " +":file:`__init__.py` 是空的。 [#namespace-packages]_" #: ../source/tutorials/packaging-projects.rst:62 msgid "" @@ -27947,6 +32653,8 @@ msgid "" "contain the logic (functions, classes, constants, etc.) of your package. " "Open that file and enter the following content:" msgstr "" +":file:`example.py` 是软件包中一个模块的示例,其中可以包含你的软件包的逻辑(函" +"数、类、常量等)。打开该文件并输入以下内容:" #: ../source/tutorials/packaging-projects.rst:71 msgid "" @@ -27954,34 +32662,38 @@ msgid "" "and :term:`import packages `, take a few minutes to read " "over the `Python documentation for packages and modules`_." msgstr "" +"如果你不熟悉 Python 的 :term:`模块 ` 和 :term:`导入包 `,请花几分钟阅读 `Python 软件包和模块文档`_。" #: ../source/tutorials/packaging-projects.rst:75 msgid "" "Once you create this structure, you'll want to run all of the commands in " "this tutorial within the ``packaging_tutorial`` directory." msgstr "" +"创建好这个结构后,你要在 ``packaging_tutorial`` 目录中运行本教程中的所有命令" +"。" #: ../source/tutorials/packaging-projects.rst:83 msgid "Creating the package files" -msgstr "" +msgstr "创建软件包文件" #: ../source/tutorials/packaging-projects.rst:85 msgid "" "You will now add files that are used to prepare the project for " "distribution. When you're done, the project structure will look like this:" -msgstr "" +msgstr "现在,你要添加一些用于准备项目分发的文件。完成之后,项目结构将如下所示:" #: ../source/tutorials/packaging-projects.rst:103 msgid "Creating a test directory" -msgstr "" +msgstr "创建测试目录" #: ../source/tutorials/packaging-projects.rst:105 msgid ":file:`tests/` is a placeholder for test files. Leave it empty for now." -msgstr "" +msgstr ":file:`tests/` 是用于存放测试文件的占位符,暂时将其留空即可。" #: ../source/tutorials/packaging-projects.rst:111 msgid "Choosing a build backend" -msgstr "" +msgstr "选择构建后端" #: ../source/tutorials/packaging-projects.rst:113 msgid "" @@ -27995,6 +32707,12 @@ msgid "" "building :term:`extension modules `, and you should choose " "one that suits your needs and preferences." msgstr "" +"诸如 :ref:`pip` 和 :ref:`build` 之类的工具实际上并不会把你的源码转换为 " +":term:`分发包 `,例如 wheel 包;这项工作由 :term:`构建" +"后端 ` 来完成。构建后端决定了你的项目以何种方式指定其配置,包" +"括元数据(关于项目的信息,例如在 PyPI 上显示的名称和标签)和输入文件。不同的" +"构建后端在功能层次上有所差异,例如是否支持构建 :term:`扩展模块 `;你应当选择一个符合自己需求和偏好的构建后端。" #: ../source/tutorials/packaging-projects.rst:122 msgid "" @@ -28004,6 +32722,9 @@ msgid "" "that support the ``[project]`` table for :ref:`metadata `." msgstr "" +"你可以从多种后端中进行选择;本教程默认使用 :ref:`Hatchling `,但换用 " +":ref:`setuptools`、:ref:`Flit `、:ref:`PDM ` 或其他支持为 :ref:`元" +"数据 ` 使用 ``[project]`` 表的后端,操作也完全相同。" #: ../source/tutorials/packaging-projects.rst:129 msgid "" @@ -28012,6 +32733,9 @@ msgid "" "management, as well as building, uploading, and installing packages. This " "tutorial uses single-purpose tools that work independently." msgstr "" +"有些构建后端是更大型工具的一部分,这些工具提供命令行界面,其附加功能包括项目" +"初始化和版本管理,以及软件包的构建、上传和安装。本教程使用的是独立运行的单用" +"途工具。" #: ../source/tutorials/packaging-projects.rst:134 msgid "" @@ -28020,6 +32744,9 @@ msgid "" "project. Below are some examples for common build backends, but check your " "backend's own documentation for more details." msgstr "" +":file:`pyproject.toml` 会告诉 :ref:`pip` 和 :ref:`build` 这类 :term:`构建前" +"端 ` 工具应为你的项目使用哪个构建后端。下面是一些常见构建后端" +"的示例,更多细节请查阅你所选后端自己的文档。" #: ../source/tutorials/packaging-projects.rst:141 msgid "" @@ -28032,12 +32759,17 @@ msgid "" "code block is the one that introduced support for :ref:`the new license " "metadata `." msgstr "" +"``requires`` 键是构建你的软件包所需的软件包列表。:term:`前端 " +"` 在构建你的软件包时应当自动安装它们。前端通常在隔离的环境中运行构建,因此在" +"这里省略依赖项可能导致构建时错误。该列表应当始终包含你的后端所用的软件包,也" +"可能包含其他构建时依赖项。上面代码块中指定的最低版本是引入 :ref:`新许可证元数" +"据 ` 支持的版本。" #: ../source/tutorials/packaging-projects.rst:150 msgid "" "The ``build-backend`` key is the name of the Python object that frontends " "will use to perform the build." -msgstr "" +msgstr "``build-backend`` 键是前端将用来执行构建的 Python 对象的名称。" #: ../source/tutorials/packaging-projects.rst:153 msgid "" @@ -28045,6 +32777,8 @@ msgid "" "backend, or generated by its command line interface. There should be no need " "for you to customize these settings." msgstr "" +"这两个值都会由你所选构建后端的文档提供,或由其命令行界面生成。你应该不需要自" +"定义这些设置。" #: ../source/tutorials/packaging-projects.rst:157 msgid "" @@ -28055,10 +32789,14 @@ msgid "" "file, and specifying ``setuptools.build_meta`` in your build allows the " "tools to locate and use these automatically." msgstr "" +"构建工具的额外配置要么位于 ``pyproject.toml`` 的 ``tool`` 节中,要么位于由构" +"建工具定义的专用文件中。例如,当你使用 ``setuptools`` 作为构建后端时,可以把" +"额外配置添加到 ``setup.py`` 或 ``setup.cfg`` 文件中;在构建中指定 " +"``setuptools.build_meta`` 后,相关工具就能自动定位并使用这些配置。" #: ../source/tutorials/packaging-projects.rst:167 msgid "Configuring metadata" -msgstr "" +msgstr "配置元数据" #: ../source/tutorials/packaging-projects.rst:169 msgid "" @@ -28067,6 +32805,9 @@ msgid "" "package name that doesn't conflict with packages uploaded by other people " "following this tutorial." msgstr "" +"打开 :file:`pyproject.toml` 并输入以下内容。将 ``name`` 修改为包含你的用户名" +";这可以确保你拥有唯一的软件包名称,不会与按本教程操作的其他人上传的软件包相" +"冲突。" #: ../source/tutorials/packaging-projects.rst:196 msgid "" @@ -28076,12 +32817,18 @@ msgid "" "username** for this tutorial, as this ensures you won't try to upload a " "package with the same name as one which already exists." msgstr "" +"``name`` 是你的软件包的 *分发名称*。名称可以是任意的,只要它只包含字母、数字" +"以及 ``.`` 、 ``_`` 和 ``-`` 即可。它还不能是 PyPI 上已被占用的名称。在本教程" +"中,**请务必将其更新为包含你的用户名**,以确保你不会尝试上传与现有软件包同名" +"的软件包。" #: ../source/tutorials/packaging-projects.rst:201 msgid "" "``version`` is the package version. (Some build backends allow it to be " "specified another way, such as from a file or Git tag.)" msgstr "" +"``version`` 是软件包的版本号。(有些构建后端允许以其他方式指定版本,例如从文" +"件或 Git 标签中读取。)" #: ../source/tutorials/packaging-projects.rst:203 msgid "" @@ -28089,10 +32836,12 @@ msgid "" "name and an email for each author. You can also list ``maintainers`` in the " "same format." msgstr "" +"``authors`` 用于标识软件包的作者;你需要为每位作者指定姓名和电子邮箱。你也可" +"以按相同的格式列出 ``maintainers``。" #: ../source/tutorials/packaging-projects.rst:206 msgid "``description`` is a short, one-sentence summary of the package." -msgstr "" +msgstr "``description`` 是对软件包的一句话简短摘要。" #: ../source/tutorials/packaging-projects.rst:207 msgid "" @@ -28102,6 +32851,10 @@ msgid "" "There also is a more advanced table form described in " "the :ref:`pyproject.toml guide `." msgstr "" +"``readme`` 是指向某个文件的路径,该文件包含软件包的详细描述。此描述会显示在 " +"PyPI 的软件包详情页面上。在本例中,描述从 :file:`README.md` 加载(这是一种常" +"见做法)。还有一种更高级的表格形式,详见 :ref:`pyproject.toml 指南 `。" #: ../source/tutorials/packaging-projects.rst:212 msgid "" @@ -28109,6 +32862,8 @@ msgid "" "An installer like :ref:`pip` will look back through older versions of " "packages until it finds one that has a matching Python version." msgstr "" +"``requires-python`` 给出了你的项目所支持的 Python 版本。像 :ref:`pip` 这样的" +"安装器会回溯查询较旧的软件包版本,直到找到与该 Python 版本相匹配的那一个。" #: ../source/tutorials/packaging-projects.rst:215 msgid "" @@ -28119,24 +32874,34 @@ msgid "" "will work on. For a complete list of classifiers, see https://pypi.org/" "classifiers/." msgstr "" +"``classifiers`` 为包索引和 :ref:`pip` 提供一些关于你的软件包的额外元数据。在" +"本例中,该软件包只兼容 Python 3,且与操作系统无关。你应当始终至少注明你的软件" +"包支持哪些 Python 版本,以及它可以在哪些操作系统上运行。完整的分类器列表请参" +"见 https://pypi.org/classifiers/。" #: ../source/tutorials/packaging-projects.rst:222 msgid "" "``license`` is the :term:`SPDX license expression ` of " "your :term:`Distribution Archive` files." msgstr "" +"``license`` 是你的 :term:`Distribution Archive` 文件所使用的 :term:`SPDX 许可" +"证表达式 `。" #: ../source/tutorials/packaging-projects.rst:224 msgid "" "``license-files`` is the list of glob paths to the license files, relative " "to the directory where :file:`pyproject.toml` is located." msgstr "" +"``license-files`` 是指向各许可证文件的 glob 路径列表,这些路径相对于 " +":file:`pyproject.toml` 所在的目录。" #: ../source/tutorials/packaging-projects.rst:226 msgid "" "``urls`` lets you list any number of extra links to show on PyPI. Generally " "this could be to the source, documentation, issue trackers, etc." msgstr "" +"``urls`` 允许你列出任意数量的额外链接,这些链接会显示在 PyPI 上。通常可以用来" +"链接到源代码、文档、issue 跟踪器等。" #: ../source/tutorials/packaging-projects.rst:229 msgid "" @@ -28145,20 +32910,23 @@ msgid "" "common fields are ``keywords`` to improve discoverability and the " "``dependencies`` that are required to install your package." msgstr "" +"关于这些字段以及可在 ``[project]`` 表中定义的其他字段,详情请参阅 " +":ref:`pyproject.toml 指南 `。其他常见字段还有用于提高" +"可检索性的 ``keywords``,以及安装你的软件包所必需的 ``dependencies``。" #: ../source/tutorials/packaging-projects.rst:236 msgid "Creating README.md" -msgstr "" +msgstr "创建 README.md" #: ../source/tutorials/packaging-projects.rst:238 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." -msgstr "" +msgstr "打开 :file:`README.md` 并输入以下内容。你可以按自己的喜好进行定制。" #: ../source/tutorials/packaging-projects.rst:251 msgid "Creating a LICENSE" -msgstr "" +msgstr "创建 LICENSE" #: ../source/tutorials/packaging-projects.rst:253 msgid "" @@ -28169,6 +32937,11 @@ msgid "" "chosen a license, open :file:`LICENSE` and enter the license text. For " "example, if you had chosen the MIT license:" msgstr "" +"每一个上传到 Python Package Index 的 :term:`Distribution Archive` 都应当包含" +"一个许可证,这一点很重要。它会告诉安装你 :term:`Distribution Archive` 的用户" +"可以在什么条款下使用它。如果需要挑选许可证方面的帮助,请参见 https://" +"choosealicense.com/。选定许可证后,打开 :file:`LICENSE` 并输入许可证文本。例" +"如,假设你选择了 MIT 许可证:" #: ../source/tutorials/packaging-projects.rst:282 msgid "" @@ -28178,10 +32951,13 @@ msgid "" "build backend supports :pep:`639`, the file will be automatically included " "in the package." msgstr "" +"大多数构建后端会自动将许可证文件包含进软件包中。更多细节请参阅你所选后端的文" +"档。如果你在 :file:`pyproject.toml` 的 ``license-files`` 键中给出了许可证文件" +"的路径,并且你的构建后端支持 :pep:`639`,那么该文件会被自动包含进软件包中。" #: ../source/tutorials/packaging-projects.rst:290 msgid "Including other files" -msgstr "" +msgstr "包含其他文件" #: ../source/tutorials/packaging-projects.rst:292 msgid "" @@ -28189,10 +32965,12 @@ msgid "" "distribution `. If you want to include " "additional files, see the documentation for your build backend." msgstr "" +"上面列出的文件会被自动包含进你的 :term:`源分发 ` 中。如果你想包含更多文件,请参阅你所选构建后端的文档。" #: ../source/tutorials/packaging-projects.rst:299 msgid "Generating distribution archives" -msgstr "" +msgstr "生成分发归档文件" #: ../source/tutorials/packaging-projects.rst:301 msgid "" @@ -28200,6 +32978,8 @@ msgid "" "Package>` for the package. These are archives that are uploaded to the " "Python Package Index and can be installed by :ref:`pip`." msgstr "" +"下一步是为软件包生成 :term:`分发包 `。这些归档文件会被" +"上传到 Python Package Index,并且可以由 :ref:`pip` 安装。" #: ../source/tutorials/packaging-projects.rst:305 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" @@ -28216,13 +32996,13 @@ msgstr "" msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" -msgstr "" +msgstr "现在,在 :file:`pyproject.toml` 所在的目录中运行这条命令:" #: ../source/tutorials/packaging-projects.rst:336 msgid "" "This command should output a lot of text and once completed should generate " "two files in the :file:`dist` directory:" -msgstr "" +msgstr "这条命令会输出大量文本,完成之后会在 :file:`dist` 目录中生成两个文件:" #: ../source/tutorials/packaging-projects.rst:346 msgid "" @@ -28235,10 +33015,15 @@ msgid "" "package is compatible with Python on any platform so only one built " "distribution is needed." msgstr "" +"``tar.gz`` 文件是 :term:`源分发 `,而 " +"``.whl`` 文件是 :term:`构建分发 `。较新版本的 :ref:`pip` " +"会优先安装构建分发,但在必要时会回退到源分发。你应当始终上传源分发,并为你的" +"项目兼容的每个平台提供构建分发。在本例中,我们的示例软件包与任何平台上的 " +"Python 都兼容,因此只需要一个构建分发。" #: ../source/tutorials/packaging-projects.rst:355 msgid "Uploading the distribution archives" -msgstr "" +msgstr "上传分发归档文件" #: ../source/tutorials/packaging-projects.rst:357 msgid "Finally, it's time to upload your package to the Python Package Index!" @@ -28254,6 +33039,11 @@ msgid "" "You will also need to verify your email address before you're able to upload " "any packages. For more details, see :doc:`/guides/using-testpypi`." msgstr "" +"你要做的第一件事是在 TestPyPI 上注册一个账户。TestPyPI 是包索引的一个独立实例" +",专为测试和实验而设。对于本教程这种不一定要上传到正式索引的场景,它非常合适" +"。要注册账户,请访问 https://test.pypi.org/account/register/ 并完成页面上的步" +"骤。在上传任何软件包之前,你还需要验证你的电子邮箱地址。更多细节请参见 " +":doc:`/guides/using-testpypi`。" #: ../source/tutorials/packaging-projects.rst:367 msgid "" @@ -28262,18 +33052,21 @@ msgid "" "to \"Entire account\". **Don't close the page until you have copied and " "saved the token — you won't see that token again.**" msgstr "" +"为了安全地上传你的项目,你需要一个 PyPI `API 令牌`_。请在 https://" +"test.pypi.org/manage/account/#api-tokens 创建一个令牌,并将 “Scope” 设为 “" +"Entire account”。**在复制并保存该令牌之前,请不要关闭此页面,因为你将无法再次" +"看到它。**" #: ../source/tutorials/packaging-projects.rst:374 msgid "" "Now that you are registered, you can use :ref:`twine` to upload the " "distribution packages. You'll need to install Twine:" -msgstr "" -"现在你已经注册了,你可以使用 :ref:`twine` 来上传发行包。你需要安装 Twine:" +msgstr "现在你已经注册了,你可以使用 :ref:`twine` 来上传分发包。你需要安装 Twine:" #: ../source/tutorials/packaging-projects.rst:389 msgid "" "Once installed, run Twine to upload all of the archives under :file:`dist`:" -msgstr "安装后,运行 Twine 上传 :file:`dist`下的所有档案:" +msgstr "安装后,运行 Twine 上传 :file:`dist` 下的所有档案:" #: ../source/tutorials/packaging-projects.rst:403 msgid "" @@ -28281,6 +33074,8 @@ msgid "" "``pypi-`` prefix. Note that the input will be hidden, so be sure to paste " "correctly." msgstr "" +"系统会提示你输入 API 令牌。请使用令牌的值,包括 ``pypi-`` 前缀。注意,输入内" +"容会被隐藏,因此请确保粘贴正确。" #: ../source/tutorials/packaging-projects.rst:406 msgid "After the command completes, you should see output similar to this:" @@ -28304,6 +33099,9 @@ msgid "" "Create a :ref:`virtual environment ` and install your package from TestPyPI:" msgstr "" +"你可以使用 :ref:`pip` 安装你的软件包并验证它能否正常工作。创建一个 :ref:`虚拟" +"环境 `,然后从 TestPyPI 安装你的软件" +"包:" #: ../source/tutorials/packaging-projects.rst:440 msgid "Make sure to specify your username in the package name!" @@ -28313,7 +33111,7 @@ msgstr "请确保在软件包名称中指定你的用户名!" msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" -msgstr "pip应该会安装 TestPyPI 的软件包,输出结果应该是这样的:" +msgstr "pip 应该会安装 TestPyPI 的软件包,输出结果应该是这样的:" #: ../source/tutorials/packaging-projects.rst:452 msgid "" @@ -28324,12 +33122,18 @@ msgid "" "package doesn't have any dependencies, it's a good practice to avoid " "installing dependencies when using TestPyPI." msgstr "" +"本例使用 ``--index-url`` 标志来指定 TestPyPI 而非正式的 PyPI。此外,它还指定" +"了 ``--no-deps``。由于 TestPyPI 上的软件包与正式 PyPI 并不相同,尝试安装依赖" +"项可能会失败,也可能会安装到意料之外的内容。虽然我们的示例软件包没有任何依赖" +"项,但在使用 TestPyPI 时避免安装依赖项是一种好的做法。" #: ../source/tutorials/packaging-projects.rst:459 msgid "" "You can test that it was installed correctly by importing the package. Make " "sure you're still in your virtual environment, then run Python:" msgstr "" +"你可以通过导入软件包来测试它是否被正确安装。请确保你仍处于虚拟环境中,然后运" +"行 Python:" #: ../source/tutorials/packaging-projects.rst:474 msgid "and import the package:" @@ -28339,7 +33143,7 @@ msgstr "并导入该软件包:" msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" -msgstr "" +msgstr "**恭喜,你已经打包并分发了一个 Python 项目!** ✨ 🍰 ✨" #: ../source/tutorials/packaging-projects.rst:489 msgid "" @@ -28348,6 +33152,8 @@ msgid "" "deletes packages and accounts. It is best to use TestPyPI for testing and " "experiments like this tutorial." msgstr "" +"请记住,本教程向你展示的是如何把软件包上传到 Test PyPI,它并不是永久存储。测" +"试系统偶尔会删除软件包和账户。最好将 TestPyPI 用于本教程这样的测试和实验。" #: ../source/tutorials/packaging-projects.rst:494 msgid "" @@ -28355,6 +33161,8 @@ msgid "" "can do much the same as you did in this tutorial, but with these important " "differences:" msgstr "" +"当你准备好将真正的软件包上传到 Python Package Index 时,你的操作与本教程大体" +"相同即可,但要注意以下重要区别:" #: ../source/tutorials/packaging-projects.rst:498 msgid "" @@ -28362,6 +33170,8 @@ msgid "" "append your username as you did in the tutorial, but you can't use an " "existing name." msgstr "" +"为你的软件包选择一个好记且独特的名称。你不必像教程中那样附加你的用户名,但不" +"能使用已有的名称。" #: ../source/tutorials/packaging-projects.rst:500 msgid "" @@ -28369,6 +33179,8 @@ msgid "" "servers and the login details from the test server are not shared with the " "main server." msgstr "" +"在 https://pypi.org 上注册一个账户。请注意,这是两个相互独立的服务器,测试服" +"务器的登录信息不会与主服务器共享。" #: ../source/tutorials/packaging-projects.rst:503 msgid "" @@ -28377,18 +33189,21 @@ msgid "" "you're uploading the package in production, you don't need to specify ``--" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" +"使用 ``twine upload dist/*`` 上传你的软件包,并输入你在正式 PyPI 上注册的账户" +"的凭据。既然你是在生产环境中上传软件包,就不需要再指定 ``--repository``;软件" +"包默认会上传到 https://pypi.org/。" #: ../source/tutorials/packaging-projects.rst:507 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." -msgstr "" +msgstr "使用 ``python3 -m pip install [your-package]`` 从正式的 PyPI 安装你的软件包。" #: ../source/tutorials/packaging-projects.rst:509 msgid "" "At this point if you want to read more on packaging Python libraries here " "are some things you can do:" -msgstr "" +msgstr "至此,如果你想进一步阅读关于打包 Python 库的内容,可以参考以下资源:" #: ../source/tutorials/packaging-projects.rst:512 msgid "" @@ -28396,6 +33211,9 @@ msgid "" "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" +"阅读所选构建后端的高级配置的信息:`Hatchling 配置 " +"`_、:doc:`setuptools `、:doc:`Flit " +"`、`PDM 配置 `_。" #: ../source/tutorials/packaging-projects.rst:516 msgid "" @@ -28403,6 +33221,8 @@ msgid "" "practical information, or the :doc:`discussions ` for " "explanations and background on specific topics." msgstr "" +"查阅本站中的 :doc:`指南 ` 以获取更高级的实用信息,或查阅 " +":doc:`讨论 ` 以了解对特定主题的解释和背景。" #: ../source/tutorials/packaging-projects.rst:519 msgid "" @@ -28410,10 +33230,12 @@ msgid "" "project management and packaging, such " "as :ref:`hatch`, :ref:`flit`, :ref:`pdm`, and :ref:`poetry`." msgstr "" +"可以考虑使用那些为项目管理和打包提供单一命令行界面的打包工具,例如 " +":ref:`hatch`、:ref:`flit`、:ref:`pdm` 和 :ref:`poetry`。" #: ../source/tutorials/packaging-projects.rst:527 msgid "Notes" -msgstr "" +msgstr "备注" #: ../source/tutorials/packaging-projects.rst:529 msgid "" @@ -28424,6 +33246,10 @@ msgid "" "recommended to stick with *regular packages* and ``__init__.py`` (even if " "the file is empty)." msgstr "" +"从技术上讲,你也可以创建不带 ``__init__.py`` 文件的 Python 软件包,但这类软件" +"包称为 :doc:`命名空间包 `,并被视为 " +"**高级主题** (本教程未作介绍)。如果你刚刚开始接触 Python 打包,建议坚持使" +"用 *常规软件包* 和 ``__init__.py``,即使该文件为空。" #~ msgid "``toml``" #~ msgstr "``toml``" diff --git a/locales/zh_Hant/LC_MESSAGES/messages.po b/locales/zh_Hant/LC_MESSAGES/messages.po index 30d776a18..48b77d975 100644 --- a/locales/zh_Hant/LC_MESSAGES/messages.po +++ b/locales/zh_Hant/LC_MESSAGES/messages.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-11 10:39+0000\n" +"POT-Creation-Date: 2026-09-22 14:24+0000\n" "PO-Revision-Date: 2025-02-24 15:37+0000\n" "Last-Translator: toto6038 \n" "Language-Team: Chinese (Traditional Han script) `_" +msgid "`setuptools_scm `_" msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 @@ -4380,7 +4380,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:345 -#: ../source/specifications/dependency-specifiers.rst:713 +#: ../source/specifications/dependency-specifiers.rst:716 msgid "References" msgstr "參考" @@ -4547,8 +4547,8 @@ msgstr "" #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" "Since this specification is part of the :doc:`standard library " -"`, most packaging tools other than " -"setuptools provide support for defining entry points." +"`, packaging tools including setuptools " +"provide support for defining entry points." msgstr "" #: ../source/guides/creating-command-line-tools.rst:5 @@ -8662,13 +8662,20 @@ msgid "" "respectively, and an additional job to build the distribution packages." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:109 +msgid "" +"Keep the build job separate from the publishing jobs. Building distributions " +"in a publishing job is unsupported; publishing jobs should only download the " +"already-built artifacts and upload them." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:113 msgid "" "First, we'll define the job for building the dist packages of your project " "and storing them for later use:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:112 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 msgid "" "If you adapt this workflow to build multiple platform-specific wheels, use " "uniquely named artifacts for each build job and adjust the download step " @@ -8676,23 +8683,23 @@ msgid "" "matrix layout." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:122 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "" "This will download your repository into the CI runner and then install and " "activate the newest available Python 3 release." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:125 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 msgid "" "And now we can build the dists from source and store them. In this example, " "we'll use the ``build`` package. So add this to the steps list:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:135 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:141 msgid "Defining a workflow job environment" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:137 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:143 msgid "" "Now, let's add initial setup for our job that will publish to PyPI. It's a " "process that will execute commands that we'll define later. In this guide, " @@ -8703,21 +8710,21 @@ msgid "" "implement secretless Trusted Publishing to PyPI." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:151 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" "This will also ensure that the PyPI publishing workflow is only triggered if " "the current commit is tagged." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:155 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:161 msgid "Publishing the distribution to PyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Finally, add the following steps at the end:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:170 msgid "" "This step uses the `pypa/gh-action-pypi-publish`_ GitHub Action: after the " "stored distribution package has been downloaded by the `download-artifact`_ " @@ -8725,7 +8732,7 @@ msgid "" "unconditionally." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:171 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:177 msgid "" "Starting with version `v1.11.0 `_, `pypa/gh-action-pypi-publish`_ generates " @@ -8733,37 +8740,37 @@ msgid "" "default. No additional manual signing steps are required." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:179 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:185 msgid "Separate workflow for publishing to TestPyPI" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:181 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:187 msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:191 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 msgid "" "Requiring manual approvals in the ``testpypi`` GitHub Environment is " "typically unnecessary as it's designed to run on each commit to the main " "branch and is often used to indicate a healthy release publishing pipeline." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:195 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:201 msgid "The whole CI/CD workflow" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:197 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:203 msgid "" "This paragraph showcases the whole workflow after following the above guide." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:205 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:211 msgid "That's all, folks!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:207 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:213 msgid "" "Now, whenever you push a tagged commit to your Git repository remote on " "GitHub, this workflow will publish it to PyPI. And it'll publish any push to " @@ -8771,7 +8778,7 @@ msgid "" "well as making sure that your release pipeline remains healthy!" msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:215 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:221 msgid "" "If your repository has frequent commit activity and every push is uploaded " "to TestPyPI as described, the project might exceed the `PyPI project size " @@ -8780,7 +8787,7 @@ msgid "" "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" -#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:223 +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:229 msgid "" "It is recommended to keep the integrated GitHub Actions at their latest " "versions, updating them frequently." @@ -13624,7 +13631,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:382 #: ../source/specifications/core-metadata.rst:1043 #: ../source/specifications/dependency-groups.rst:250 -#: ../source/specifications/dependency-specifiers.rst:680 +#: ../source/specifications/dependency-specifiers.rst:681 #: ../source/specifications/direct-url-data-structure.rst:292 #: ../source/specifications/direct-url.rst:67 #: ../source/specifications/entry-points.rst:163 @@ -16553,19 +16560,19 @@ msgstr "" msgid "" "The ``extra`` field is also special, as it expects set-like behaviour, but " "predates the addition of ``Set of strings`` as a defined marker field type. " -"Accordingly, ``extra == \"name\"`` in a dependency declaration is similar to " -"``\"name\" in extras``, while ``extra != \"name\"`` is similar to ``\"name\" " -"not in extras``. For dependency marker evaluations, the set of extra names " -"used for these comparisons is the full set of requested extras for *that " -"particular package*, whether requested directly in a top level dependency " -"declaration, or indirectly in a transitive dependency declaration. Other " -"comparison operations on ``extra`` are not defined and publishing tools " -"SHOULD emit an error, index servers MAY disallow uploads containing such " -"environment markers, while locking and installation tools SHOULD evaluate " -"them as False." +"It only supports one operation, ``extra == \"name\"``, which is similar to " +"``\"name\" in extras``. ``extra != \"name\"`` SHOULD NOT be used anymore and " +"MAY be rejected or evaluated to false. For dependency marker evaluations, " +"the set of extra names used for these comparisons is the full set of " +"requested extras for *that particular package*, whether requested directly " +"in a top level dependency declaration, or indirectly in a transitive " +"dependency declaration. Other comparison operations on ``extra`` are not " +"defined and publishing tools SHOULD emit an error, index servers MAY " +"disallow uploads containing such environment markers, while locking and " +"installation tools SHOULD evaluate them as False." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:470 +#: ../source/specifications/dependency-specifiers.rst:471 msgid "" "Unlike the newer ``extras`` field, environment markers using this field " "SHOULD be accepted by both publishing tools and index servers. Marker " @@ -16577,29 +16584,29 @@ msgid "" "containing such comparisons as invalid." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:480 msgid "" "The ``implementation_version`` marker variable is derived " "from :py:data:`sys.implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:500 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:501 +#: ../source/specifications/dependency-specifiers.rst:502 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:608 +#: ../source/specifications/dependency-specifiers.rst:609 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:682 +#: ../source/specifications/dependency-specifiers.rst:683 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:683 +#: ../source/specifications/dependency-specifiers.rst:684 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to " @@ -16608,26 +16615,26 @@ msgid "" "[#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:688 +#: ../source/specifications/dependency-specifiers.rst:689 msgid "" "March 2022: Standardised the normalization of extra names at publication " "time (for core metadata 2.3 and later) through :pep:`685`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:690 +#: ../source/specifications/dependency-specifiers.rst:691 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:693 +#: ../source/specifications/dependency-specifiers.rst:694 msgid "" "April 2025: Added ``extras`` and ``dependency_groups`` marker field " "for :ref:`lock-file-spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:695 +#: ../source/specifications/dependency-specifiers.rst:696 #: ../source/specifications/name-normalization.rst:56 msgid "" "August 2025: The suggested name validation regex was fixed to match the " @@ -16635,13 +16642,13 @@ msgid "" "incorrectly permitting trailing newlines)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:698 +#: ../source/specifications/dependency-specifiers.rst:699 msgid "" "December 2025: Ensure ``===`` is before ``==`` in grammar, to allow " "arbitrary equality comparisons to be parsed." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:700 +#: ../source/specifications/dependency-specifiers.rst:701 msgid "" "January 2026: Amend the definition of environment marker comparison " "operations to restrict version comparison semantics to fields where they " @@ -16654,30 +16661,37 @@ msgid "" "[#marker_comparison_logic]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:708 +#: ../source/specifications/dependency-specifiers.rst:709 msgid "" "January 2026: fix outdated references to other documents that were " "inadvertently retained from :pep:`508`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:715 +#: ../source/specifications/dependency-specifiers.rst:711 +msgid "" +"July 2026: Explain that ``extra != \"name\"`` is not (properly) supported " +"(https://discuss.python.org/t/ban-negative-extras-for-extras-marker/" +"108022/24)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:718 msgid "" "pip, the recommended installer for Python packages (http://" "pip.readthedocs.org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:718 +#: ../source/specifications/dependency-specifiers.rst:721 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:721 +#: ../source/specifications/dependency-specifiers.rst:724 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:725 +#: ../source/specifications/dependency-specifiers.rst:728 msgid "" "Resolving inconsistencies between actual tool behavior and the nominal " "definitions of environment marker field comparisons (https://" @@ -26256,35 +26270,47 @@ msgstr "" msgid "``sponsor``, ``donate``, ``donation``" msgstr "" +#: ../source/specifications/well-known-project-urls.rst:132 +msgid "``security`` (Security Policy)" +msgstr "" + #: ../source/specifications/well-known-project-urls.rst:133 +msgid "The project's security policy or vulnerability reporting page" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:134 +msgid "``securitypolicy``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:136 msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" -#: ../source/specifications/well-known-project-urls.rst:137 +#: ../source/specifications/well-known-project-urls.rst:140 msgid "Example behavior" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:139 +#: ../source/specifications/well-known-project-urls.rst:142 msgid "" "The following shows the flow of project URL metadata from ``pyproject.toml`` " "to core metadata to a potential index presentation:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:142 +#: ../source/specifications/well-known-project-urls.rst:145 msgid "Example project URLs in standard configuration" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:151 +#: ../source/specifications/well-known-project-urls.rst:154 msgid "Core metadata representation" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:159 +#: ../source/specifications/well-known-project-urls.rst:162 msgid "Potential rendering" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:167 +#: ../source/specifications/well-known-project-urls.rst:170 msgid "" "Observe that the core metadata appears in the form provided by the user " "(since metadata *producers* do not perform normalization), but the metadata " @@ -26292,22 +26318,22 @@ msgid "" "based on the normalized form:" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:172 +#: ../source/specifications/well-known-project-urls.rst:175 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:173 +#: ../source/specifications/well-known-project-urls.rst:176 msgid "" "``DOCUMENTATION`` becomes ``documentation``, which is rendered as " "``Documentation``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:174 +#: ../source/specifications/well-known-project-urls.rst:177 msgid "" "``Repository`` becomes ``repository``, which is rendered as ``Source Code``" msgstr "" -#: ../source/specifications/well-known-project-urls.rst:175 +#: ../source/specifications/well-known-project-urls.rst:178 msgid "" "``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " "(as a specialization of ``Source Code``)"